Agent skill

Tax Loss Harvesting

by agiprolabs in agiprolabs/claude-trading-skills

Tax-loss harvesting opportunity identification, scoring, and planning with wash sale compliance and annual carryforward tracking

MITAuto-check passedBusiness, Finance & HR

Install Tax Loss Harvesting

skills CLI
$ npx skills add agiprolabs/claude-trading-skills --skill tax-loss-harvesting -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install agiprolabs/claude-trading-skills tax-loss-harvesting --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/agiprolabs/claude-trading-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/tax-loss-harvesting .claude/skills/tax-loss-harvesting && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
tax-loss-harvesting
GitHub stars
410
Token cost
~3k tokens
SKILL.md length
1,021 words
Files
3 (incl. scripts, references)
Skills in repo
68
Repo updated
First seen
Licence
MIT

At a glance

Tax-loss harvesting opportunity identification, scoring, and planning with wash sale compliance and annual carryforward tracking

  • Works in 4 steps: Loss Magnitude → Days Until Long-Term Threshold → Wash Sale Risk (Correlation Score) → …
  • Business, Finance & HR work in your project
  • SKILL.md covers How Tax-Loss Harvesting Works, Ranking Unrealized Losses, Net Benefit Calculation and Year-End "Use It or Lose It", plus 7 more sections
  • Runs Python scripts from its folder

What it does

Tax Loss Harvesting is an agent skill from agiprolabs/claude-trading-skills. Tax-loss harvesting opportunity identification, scoring, and planning with wash sale compliance and annual carryforward tracking

Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including scripts and reference files (for example `references/planned_features.md` and `scripts/harvest_scanner.py`).

It sits in Business, Finance & HR. The repository describes itself as: 68 trading, DeFi, and quantitative finance Agent Skills. Works with Claude Code, Cursor, Codex, Gemini CLI, and 30+ other tools. The licence is MIT.

When your agent uses it

  • Business, Finance & HR work in your project

Example prompts

  • “/tax-loss-harvesting”

Requirements

  • Python 3

Workflow steps

4 steps, taken from the step headings in SKILL.md.

  1. Loss Magnitude
  2. Days Until Long-Term Threshold
  3. Wash Sale Risk (Correlation Score)
  4. Available Gains to Offset

What it can do on your machine

Read from SKILL.md and the folder at commit 981e1d7. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/ (Python), which the agent can run.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Tax Loss Harvesting loads about 3k tokens when it runs, and up to ~4.9k if it reads all its reference files. Until then it costs about 37 tokens; SKILL.md has 1,021 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~37
When it runs · the whole SKILL.md, loaded when a task matches
~3k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~4.9k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from agiprolabs/claude-trading-skills at commit 981e1d7, republished under its MIT licence (© agiprolabs). 1,021 words, ~2,965 tokens.

Download SKILL.mdSave it as .claude/skills/tax-loss-harvesting/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
tax-loss-harvesting
description
Tax-loss harvesting opportunity identification, scoring, and planning with wash sale compliance and annual carryforward tracking
license
MIT
metadata.author
agipro
metadata.version
0.1.0
metadata.category
trading

Tax-Loss Harvesting

Identify, score, and plan tax-loss harvesting (TLH) opportunities across a crypto portfolio. This skill covers unrealized-loss ranking, net-benefit calculation, wash sale compliance, annual loss carryforward tracking, and year-end "use it or lose it" strategies.

Disclaimer: This skill provides informational analysis only. It is NOT tax advice. Tax rules vary by jurisdiction and change frequently. Consult a qualified tax professional before making any tax-related trading decisions.

How Tax-Loss Harvesting Works

Tax-loss harvesting is the practice of intentionally realizing investment losses to offset realized capital gains, thereby reducing your current-year tax liability.

Core Mechanism
  1. Identify positions with unrealized losses in your portfolio.
  2. Sell those positions to realize the loss.
  3. Offset realized gains with the harvested loss, reducing taxable income.
  4. Optionally re-enter a similar (but not "substantially identical") position to maintain market exposure.
Short-Term vs Long-Term
Holding PeriodClassificationTypical Tax Rate
< 1 yearShort-term capital gain/lossOrdinary income rate
>= 1 yearLong-term capital gain/lossPreferential rate (0-20%)

Short-term losses first offset short-term gains; long-term losses first offset long-term gains. Remaining net losses cross over to offset the other category.

Annual Loss Deduction Limit

If total net losses exceed total gains, the excess is deductible against ordinary income up to $3,000 per year ($1,500 if married filing separately). Any remaining loss carries forward indefinitely to future tax years.

Ranking Unrealized Losses

Not all unrealized losses are equally valuable to harvest. This skill scores each opportunity on four dimensions:

1. Loss Magnitude

Larger dollar losses provide more tax savings. The raw loss is the difference between current market value and cost basis.

unrealized_loss = current_value - cost_basis  # negative when loss
tax_savings = abs(unrealized_loss) * marginal_tax_rate
2. Days Until Long-Term Threshold

A position approaching the 1-year holding mark deserves special consideration:

  • If close to crossing into long-term territory, harvesting now locks in a short-term loss (offsets higher-taxed short-term gains).
  • If already long-term, the loss offsets long-term gains (lower tax rate benefit).
days_held = (today - acquisition_date).days
days_to_long_term = max(0, 365 - days_held)

Positions with fewer days remaining until long-term are more urgent to evaluate because once they cross 365 days, a short-term loss becomes a less-valuable long-term loss.

3. Wash Sale Risk (Correlation Score)

The IRS wash sale rule prohibits claiming a loss if you buy a "substantially identical" security within 30 days before or after the sale. In crypto, the exact application is evolving, but prudent planning avoids re-entering the same token within the 61-day wash sale window (30 days before + sale day + 30 days after).

Correlation scoring: If you hold (or plan to re-enter) a position that is highly correlated with the harvested asset, wash sale risk increases. Score this as:

wash_sale_risk = 1.0  # if same token re-entry planned within 30 days
wash_sale_risk = correlation_coefficient  # if correlated substitute held
wash_sale_risk = 0.0  # if no re-entry or uncorrelated substitute

Higher wash sale risk reduces the effective score of the opportunity.

4. Available Gains to Offset

A harvested loss is only immediately useful if there are realized gains to offset. Score opportunities higher when:

  • There are matching-type gains (short-term loss vs short-term gain).
  • The loss amount does not greatly exceed available gains (diminishing marginal benefit beyond the $3K deduction cap).
offset_efficiency = min(1.0, available_matching_gains / abs(unrealized_loss))
Composite Score
python
def tlh_score(
    unrealized_loss: float,
    days_to_long_term: int,
    wash_sale_risk: float,
    offset_efficiency: float,
    weights: dict | None = None,
) -> float:
    w = weights or {
        "magnitude": 0.35,
        "urgency": 0.25,
        "wash_safety": 0.20,
        "offset_match": 0.20,
    }
    magnitude_score = min(abs(unrealized_loss) / 10_000, 1.0)
    urgency_score = max(0, 1.0 - days_to_long_term / 365)
    wash_safety_score = 1.0 - wash_sale_risk
    return (
        w["magnitude"] * magnitude_score
        + w["urgency"] * urgency_score
        + w["wash_safety"] * wash_safety_score
        + w["offset_match"] * offset_efficiency
    )

Net Benefit Calculation

Harvesting a loss is not free. Transaction costs (swap fees, slippage, gas) reduce the benefit.

python
def net_benefit(
    unrealized_loss: float,
    marginal_tax_rate: float,
    transaction_cost: float,
    re_entry_cost: float = 0.0,
) -> float:
    """Compute net dollar benefit of harvesting a loss.

    Args:
        unrealized_loss: Negative number representing the loss.
        marginal_tax_rate: Applicable tax rate (0.0 to 1.0).
        transaction_cost: Cost to execute the sell (fees + slippage).
        re_entry_cost: Cost to re-enter a substitute position.

    Returns:
        Net benefit in dollars. Positive means harvesting is worthwhile.
    """
    tax_savings = abs(unrealized_loss) * marginal_tax_rate
    total_costs = transaction_cost + re_entry_cost
    return tax_savings - total_costs

Rule of thumb: Only harvest when net_benefit > 0 by a meaningful margin. Very small losses are not worth the transaction costs and operational complexity.

Year-End "Use It or Lose It"

Near December 31, evaluate whether to accelerate harvesting:

  1. Tally year-to-date realized gains (both short-term and long-term).
  2. Identify unrealized losses that can offset those gains.
  3. Prioritize losses that offset same-type gains (short-term loss vs short-term gain yields the highest tax rate differential).
  4. Check the $3K excess limit: If net losses already exceed gains by $3K, additional harvesting this year has no immediate tax benefit (though the carryforward still has value).
  5. Consider settlement timing: Ensure trades settle before year-end.
Show full SKILL.md (409 more words)Show less

Wash Sale Compliance

The 61-Day Window

The wash sale rule applies to purchases of substantially identical securities within:

  • 30 days before the sale (retroactive wash sale)
  • The day of the sale
  • 30 days after the sale

If triggered, the disallowed loss is added to the cost basis of the replacement shares, deferring (not eliminating) the tax benefit.

Compliance Strategies
StrategyDescriptionTrade-off
Wait 31 daysSell, wait 31 days, re-buyMarket exposure gap
Substitute assetSell, immediately buy a non-identical but correlated assetTracking error
No re-entrySell and stay outLost upside
Double-upBuy additional shares, wait 31 days, sell original lotCapital intensive
Crypto-Specific Considerations
  • The IRS has not explicitly ruled that the wash sale rule applies to cryptocurrency (as of 2025). However, proposed legislation may extend it.
  • Prudent practitioners treat crypto as subject to wash sale rules for conservative planning.
  • Different tokens (e.g., SOL vs ETH) are generally considered non-identical.
  • Wrapped versions of the same token (e.g., SOL vs wSOL) may be considered substantially identical.

Annual Loss Carryforward Tracking

python
def compute_carryforward(
    realized_gains_st: float,
    realized_gains_lt: float,
    realized_losses_st: float,
    realized_losses_lt: float,
    prior_carryforward: float = 0.0,
    annual_deduction_limit: float = 3_000.0,
) -> dict:
    """Compute net tax position and carryforward.

    Returns dict with keys:
        net_st, net_lt, total_net,
        deduction_used, carryforward
    """
    net_st = realized_gains_st + realized_losses_st  # losses are negative
    net_lt = realized_gains_lt + realized_losses_lt
    total_net = net_st + net_lt - prior_carryforward

    if total_net >= 0:
        return {
            "net_st": net_st, "net_lt": net_lt,
            "total_net": total_net, "deduction_used": 0.0,
            "carryforward": 0.0,
        }

    excess_loss = abs(total_net)
    deduction_used = min(excess_loss, annual_deduction_limit)
    carryforward = max(0, excess_loss - annual_deduction_limit)
    return {
        "net_st": net_st, "net_lt": net_lt,
        "total_net": total_net,
        "deduction_used": deduction_used,
        "carryforward": carryforward,
    }

Prerequisites

  • Python 3.10+
  • No external dependencies for core calculations
  • Portfolio data: cost basis, acquisition date, current market value per lot
  • Tax parameters: marginal tax rate, filing status, prior carryforward

Capabilities

CapabilityDescription
Opportunity scanningIdentify all positions with unrealized losses
Multi-factor scoringRank by magnitude, urgency, wash safety, offset match
Net benefit analysisCompare tax savings against transaction costs
Wash sale trackingFlag positions within the 61-day window
Carryforward calculatorTrack annual $3K limit and loss carryforward
Year-end planningPrioritize harvesting before December 31
Harvesting plan outputGenerate actionable plan with sell orders and re-entry dates

Quick Start

python
from datetime import date

# Define a portfolio position
position = {
    "symbol": "TOKEN-A",
    "cost_basis": 10_000.0,
    "current_value": 6_500.0,
    "acquisition_date": date(2025, 8, 15),
    "quantity": 500.0,
}

unrealized_loss = position["current_value"] - position["cost_basis"]  # -3500
days_held = (date.today() - position["acquisition_date"]).days
days_to_lt = max(0, 365 - days_held)

# Score the opportunity
score = tlh_score(
    unrealized_loss=unrealized_loss,
    days_to_long_term=days_to_lt,
    wash_sale_risk=0.0,
    offset_efficiency=0.8,
)
print(f"TLH score: {score:.3f}")

# Calculate net benefit
benefit = net_benefit(
    unrealized_loss=unrealized_loss,
    marginal_tax_rate=0.35,
    transaction_cost=15.0,
    re_entry_cost=15.0,
)
print(f"Net benefit: ${benefit:.2f}")

Use Cases

  1. Quarterly portfolio review: Scan all positions for harvesting opportunities ranked by composite score.
  2. Year-end tax planning: Identify optimal set of positions to harvest before December 31 given year-to-date gain/loss totals.
  3. Ongoing monitoring: Flag positions that are approaching the long-term threshold where harvesting a short-term loss becomes urgent.
  4. Carryforward management: Track multi-year loss carryforward balances and project when they will be fully utilized.
  5. Transaction cost analysis: Determine minimum loss threshold worth harvesting given current fee environment.

Files

FileDescription
references/planned_features.mdTLH mechanics, scoring formula, wash sale interaction, carryforward rules, year-end strategies
scripts/harvest_scanner.pyDemo scanner: score opportunities, generate harvesting plan, compute net benefit

Important: This skill provides analytical tools for informational purposes only. All tax-related decisions should be reviewed by a qualified tax professional. Tax laws vary by jurisdiction and are subject to change.

© agiprolabs, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 2 other files (scripts, references) in skills/tax-loss-harvesting of agiprolabs/claude-trading-skills.

  • SKILL.md
  • references/planned_features.md
  • scripts/harvest_scanner.py

Open the folder on GitHubat commit 981e1d7

Compare with similar skills

Tax Loss Harvesting next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Tax Loss Harvesting compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Tax Loss Harvesting this skillagiprolabs/claude-trading-skills410—~3kAutomated safety check: PassMIT
Technical Analysttradermonty/claude-trading-skills3k4 repos~4.6kAutomated safety check: PassMIT
Theme Detectortradermonty/claude-trading-skills3k2 repos~4.9kAutomated safety check: PassMIT
Creating Financial ModelsChen-zexi/open-ptc-agent7293 repos~1.3kAutomated safety check: PassMIT
Stock APIzhangxiangliang/stock-api2k—~507Automated safety check: PassMIT
Itr Walakaranb192/itr-wala871—~3.6kAutomated safety check: PassMIT

Similar skills

  • Technical Analyst

    tradermonty/claude-trading-skills

    This skill should be used when analyzing weekly price charts for stocks, stock indices, cryptocurrencies, or forex pairs.

    3k GitHub starsUsed in 4 repos~4.6k tokens
    Business, Finance & HRAuto-check passed
  • Theme Detector

    tradermonty/claude-trading-skills

    Detect and analyze trending market themes across sectors. An agent skill from tradermonty/claude-trading-skills.

    3k GitHub starsUsed in 2 repos~4.9k tokens
    Business, Finance & HRAuto-check passed
  • Creating Financial Models

    Chen-zexi/open-ptc-agent

    This skill provides an advanced financial modeling suite with DCF analysis, sensitivity testing, Monte Carlo simulations, and scenario planning for investment decisions

    729 GitHub starsUsed in 3 repos~1.3k tokens
    Business, Finance & HRAuto-check passed
  • Stock API

    zhangxiangliang/stock-api

    Fetch real-time stock quotes, K-line (candlestick) history, and search symbols for China A-shares, Hong Kong, and US markets.

    2k GitHub stars~507 tokensUpdated yesterday
    Business, Finance & HRAuto-check passed
  • Itr Wala

    karanb192/itr-wala

    File Indian income tax returns (ITR) for FY 2025-26 / AY 2026-27.

    871 GitHub stars~3.6k tokensUpdated 7 days ago
    Business, Finance & HRAuto-check passed
  • Tushare Data

    zillionare/zillionare

    面向中文自然语言的 Tushare 数据研究技能。用于把“看看这只股票最近怎么样”“帮我查财报趋势”“最近哪个板块最强”“北向资金在买什么”“给我导出一份行情数据”这类请求,转成可执行的数据获取、清洗、对比、筛选、导出与简要分析流程。适用于 A 股、指数、ETF/基金、财务、估值、资金流、公告新闻、板块概念与宏观数据等研究场景。

    322 GitHub starsUsed in 2 repos~2.3k tokens
    Business, Finance & HRAuto-check passed

More from agiprolabs/claude-trading-skills

All 68 skills in this repo
  • Backtrader

    agiprolabs/claude-trading-skills

    Event-driven backtesting with bar-by-bar execution, complex order types, multiple analyzers, and custom indicators

    410 GitHub stars~2.4k tokensUpdated 1 mo ago
    Auto-check passed
  • Birdeye API

    agiprolabs/claude-trading-skills

    Solana token market data via Birdeye — prices, OHLCV, trades, token metadata, security checks, and trader activity

    410 GitHub stars~1.8k tokensUpdated 1 mo ago
    Auto-check passed
  • Coingecko API

    agiprolabs/claude-trading-skills

    Broad crypto market data from CoinGecko covering 13,000+ tokens.

    410 GitHub stars~1.6k tokensUpdated 1 mo ago
    Auto-check passed
  • Cointegration Analysis

    agiprolabs/claude-trading-skills

    Cointegration testing for pairs trading using Engle-Granger, Johansen, and rolling stability analysis

    410 GitHub stars~2.1k tokensUpdated 1 mo ago
    Auto-check passed
  • Copy Trading

    agiprolabs/claude-trading-skills

    Wallet evaluation, monitoring, and copy-trade strategy design for Solana DEX trading

    410 GitHub stars~2.4k tokensUpdated 1 mo ago
    Auto-check passed
  • Correlation Analysis

    agiprolabs/claude-trading-skills

    Cross-asset correlation analysis including rolling correlation, hierarchical clustering, tail dependence, and regime-dependent correlation

    410 GitHub stars~2.4k tokensUpdated 1 mo ago
    Auto-check passed

Questions about Tax Loss Harvesting

What does Tax Loss Harvesting do?

Tax-loss harvesting opportunity identification, scoring, and planning with wash sale compliance and annual carryforward tracking. Tax Loss Harvesting is an agent skill from agiprolabs/claude-trading-skills.

When should I use Tax Loss Harvesting?

Tax Loss Harvesting fits situations like: business, Finance & HR work in your project.

How do I install Tax Loss Harvesting in Claude Code?

Run `npx skills add agiprolabs/claude-trading-skills --skill tax-loss-harvesting -a claude-code`. Or copy the skill folder (skills/tax-loss-harvesting in agiprolabs/claude-trading-skills) into .claude/skills/tax-loss-harvesting in your project. Claude Code loads it when a task matches its description.

How do I install Tax Loss Harvesting in Codex?

Run `npx skills add agiprolabs/claude-trading-skills --skill tax-loss-harvesting -a codex`. Or copy the skill folder (skills/tax-loss-harvesting in agiprolabs/claude-trading-skills) into .agents/skills/tax-loss-harvesting in your project. Codex loads it when a task matches its description.

Can I use Tax Loss Harvesting in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add agiprolabs/claude-trading-skills --skill tax-loss-harvesting -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/tax-loss-harvesting, .gemini/skills/tax-loss-harvesting, .github/skills/tax-loss-harvesting and .opencode/skills/tax-loss-harvesting in your project.

What does Tax Loss Harvesting need to run?

Going by SKILL.md and its folder, Tax Loss Harvesting needs Python for the scripts in its folder. Our summary lists: Python 3.

Does Tax Loss Harvesting access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Tax Loss Harvesting safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Tax Loss Harvesting use?

Tax Loss Harvesting is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Tax Loss Harvesting use?

About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2k tokens, read only when the agent opens those files.

What are the alternatives to Tax Loss Harvesting?

Skills that share tags, products or a category with Tax Loss Harvesting: Technical Analyst (tradermonty/claude-trading-skills, 3k stars), Theme Detector (tradermonty/claude-trading-skills, 3k stars), Creating Financial Models (Chen-zexi/open-ptc-agent, 729 stars) and Stock API (zhangxiangliang/stock-api, 2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Tax Loss Harvesting?

agiprolabs (a GitHub user) maintains it in agiprolabs/claude-trading-skills, which has 410 GitHub stars. The repository holds 68 skills in this directory. The repository was last updated on September 3, 2026.

Source: agiprolabs/claude-trading-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.