MCPInstall

trader-tax

Tax Optimizer. Tracks cost-basis lots for every position (FIFO, highest cost first, or specific lots), shows unrealized gains and losses by lot with short or long term, works out what a sale would realize before you sell, finds tax-loss harvesting candidates over a loss threshold, checks the wash sale rule (30 days before and after, GOOG and GOOGL as one family), and writes harvest sells only as proposals. Not tax advice. Use when the user says "what are my gains", "cost basis", "tax lots", "tax-loss harvest", "what would selling cost me in tax", "short or long term", "wash sale", or before selling anything.

Installs
41
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/jakeschincariol/trader-skill --skill trader-tax
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads trader-tax automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

trader-tax

The Tax Optimizer does the arithmetic on the user's lots so nobody sells blind. It never decides what is right for the user's taxes. This is not tax advice: a tax professional decides what applies to them. Say that once, early, in every answer that uses this skill.

${CLAUDE_SKILL_DIR} below is this skill's folder (where this SKILL.md lives).

python3 "${CLAUDE_SKILL_DIR}/lots.py" report --lots              # every lot, gain or loss, term
python3 "${CLAUDE_SKILL_DIR}/lots.py" sell KO 2 --price 90.11    # what a sale would realize (FIFO)
python3 "${CLAUDE_SKILL_DIR}/lots.py" sell KO 2 --method specific --lots KO-2
python3 "${CLAUDE_SKILL_DIR}/lots.py" harvest --min-loss 100     # candidates, with wash-sale checks
python3 "${CLAUDE_SKILL_DIR}/lots.py" harvest --min-loss 100 --write
python3 "${CLAUDE_SKILL_DIR}/lots.py" wash KO                    # is buying KO today a wash sale?

What it reads and writes

filewhat
trader/portfolio.jsonpositions with lots: {"id", "date", "shares", "cost"} (cost = total basis); shape: portfolio.example.json here
trader/prices.jsoncurrent prices (trader-alerts: alerts.py quote --holdings --write)
trader/orders.jsonplanned buys count for wash sales; harvest --write replaces it with sell proposals
trader/state/tax.jsonthe realized sales it logs with sell --record

Lots come from the fills trader-broker records (ticket.py fill), or from the user's broker statement. If a position has shares but no lots, ask for the purchase dates and costs. Never invent a cost basis.

The rules it applies (US federal, arithmetic only)

  • Term: long term if sold more than one year after the purchase date, otherwise short term. report --lots shows the date each lot turns long term.
  • Lot methods: fifo (oldest first, what most brokers do by default), hifo (highest cost first) and specific (named lots). The order sent to the broker does not carry lot ids: to sell specific lots the user must choose them in the broker's own tax-lot setting, or the broker uses its default method.
  • Wash sale: a loss is disallowed to the extent the same or a substantially identical stock is bought within 30 days before or after the sale. The tool checks the other lots still held, planned buys in trader/orders.json and the loss sales it has logged. It cannot see an IRA, a spouse's account or another broker, and those count too. Say so.

Steps

  1. Refresh prices, then lots.py report --lots. Show gains and losses by stock, and which lots are short or long term.
  2. Before any sell (rebalance, a stop, a change of mind), run lots.py sell with the planned shares and method and show what it would realize.
  3. For harvesting: lots.py harvest --min-loss 100 (and --min-pct if the user wants a percent threshold). For each candidate show the estimated loss, short and long term split, any wash-sale conflict, and the first day they could buy it back. Candidates with a conflict are not proposed.
  4. Only if the user wants proposals: harvest --write, then /trader-risk, then /trader-broker, one yes per order.
  5. After a sale fills, lots.py sell ... --record updates the lots and logs the realized result for the year.

Example: the reel's portfolio

The copy portfolio bought on 2026-10-13 (AAPL $1,250, AXP $1,119, GOOGL $823, KO $708, BAC $600) has one lot per stock, all short term until 2027-10-14. If BAC later trades below its $600 basis, harvest --min-loss 25 lists the BAC-1 lot with its loss and "do not buy BAC again before" a date 31 days after the sale. If the user also has a BAC buy planned in trader/orders.json, it flags a wash sale instead of proposing the sell.

What it never does

It never files anything, never gives a tax rate or a tax bill, never tells the user what they owe, never places an order, and never proposes a harvest that it can see would be a wash sale.

Safety

  • Not tax advice, and education and tooling, not financial advice. Check with a tax professional.
  • Paper trading by default ("paper": true). Going live is the user's own decision, in their own config.
  • Nothing in this pack places an order except trader-broker, and only when all three hold: trader-risk passed that exact order today, the user typed an explicit yes for that one order in the chat, and the user clicked Allow once on Claude's own card because the order tool is set to "Needs approval" (Customize > Connectors > tool permissions). Never set an order tool to "Always allow".
  • No options, margin, short selling or leverage unless the config allows it and the user confirms.
  • Broker keys live in environment variables or the Claude Desktop config, never in the chat.

FAQ

What does the trader-tax skill do?

Tax Optimizer. Tracks cost-basis lots for every position (FIFO, highest cost first, or specific lots), shows unrealized gains and losses by lot with short or long term, works out what a sale would realize before you sell, finds tax-loss harvesting candidates over a loss threshold, checks the wash sale rule (30 days before and after, GOOG and GOOGL as one family), and writes harvest sells only as proposals. Not tax advice. Use when the user says "what are my gains", "cost basis", "tax lots", "tax-loss harvest", "what would selling cost me in tax", "short or long term", "wash sale", or before selling anything.

How do I install trader-tax?

Run npx skills add https://github.com/jakeschincariol/trader-skill --skill trader-tax in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/trader-tax/ (personal) or .claude/skills/trader-tax/ (project).

Which AI agents can use trader-tax?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is trader-tax safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains trader-tax?

It is published by jakeschincariol in jakeschincariol/trader-skill. It has 41 recorded installs.

More from jakeschincariol/trader-skill

View all →

trader-analyst

jakeschincariol/trader-skill

Open the skill to read its SKILL.md instructions.

42 installs

trader-screener

jakeschincariol/trader-skill

The Stock Screener. Checks a list of companies against the user's own rules (revenue growth, margins, EPS, P/E, earnings yield, sector, anything in the metrics file), says exactly which rule each company passes or fails and by how much, and ranks the ones that pass into a shortlist. Reads the metrics /trader-analyst writes from SEC filings, or any CSV. Use when the user says "screen for stocks", "find me companies that", "filter my watchlist", "which of these pass my rules", "shortlist candidates", "rank these stocks", or "growing companies under 30 times earnings".

Data & Databases42 installs

trader-pelosi

jakeschincariol/trader-skill

Open the skill to read its SKILL.md instructions.

41 installs

trader-rebalance

jakeschincariol/trader-skill

Rebalancer. Brings the portfolio back to its target weights when it drifts: values every holding at current prices, works out each stock's drift from its target in percentage points, trades only the stocks outside a band (default 5 points), keeps the cash buffer and the per-stock cap, skips tiny trades, lists sells before buys, and writes the trades to trader/orders.json as proposals. Use when the user says "rebalance", "my portfolio drifted", "bring it back to the targets", "I added money", "the new 13F changed the weights", "am I overweight", or on a schedule (monthly or quarterly) after /trader-copycat updates the targets.

trader-copycat

jakeschincariol/trader-skill

The Reverse Engineer. Reads a famous investor's public SEC filings (the quarterly 13F-HR, plus Form 4 if you want the insider trades) and rebuilds their portfolio as weights you can copy: every position, its share of the fund, what they bought, added, trimmed and sold since the last quarter, with tickers matched to every CUSIP. Then it writes trader/targets.json so the budget skill can size it to your money. Use when the user says "copy Buffett", "copy Berkshire", "what does Ackman own", "reverse engineer this investor", "show me their 13F", "what did they buy last quarter", "copy the top 5", or names any fund or famous investor.

trader-risk

jakeschincariol/trader-skill

Risk Manager. Checks every proposed order against your limits before it can reach the broker and blocks anything over them: blocked tickers, max order size, minimum order, max position percent after the fill, the cash buffer, margin, short sales, options and crypto (off unless allowed), malformed orders, duplicates and a daily order limit. Prints PASS or BLOCK with the reason for each order and records the verdicts so trader-broker only shows an order that passed. Use when the user says "check my orders", "is this safe", "risk check", "does this break my rules", "can I place this", or before /trader-broker, always.

Popular other skills

View category →

hyperframes-cli

heygen-com/hyperframes

The HyperFrames CLI by job - scaffold, check, look at frames, edit the timeline, preview, render locally or in the cloud, publish, project history - plus reading its JSON and recovering from build or render failures.

1.3M installs

triage

mattpocock/skills

Move issues and external PRs through a state machine of triage roles, categorise, verify, grill if needed, and write agent-ready briefs.

1M installs

ask-matt

mattpocock/skills

Ask which skill or flow fits your situation. A router over the skills in this repo.

778.4K installs

to-questionnaire

mattpocock/skills

Turn a decision you can't fully answer into a questionnaire for someone else to fill in.

508.9K installs

wait-what

mattpocock/skills

Stop. That last message did not land: re-pitch it.

459.7K installs

loop-me

mattpocock/skills

Grill me about specs for the workflows I want to build, within this workspace.

447.9K installs