Your Claude Code skills are being silently demoted, and nothing tells you.

Every skill you install injects its name and description into the model's context on every turn — used or not. Claude Code budgets that listing at 1% of your context window (skillListingBudgetFraction, default 0.01). When the listing overflows, it drops descriptions starting with your least-used skills. No warning in the UI. Just a --debug log line.

A skill without a description has nothing left for the model to match your request against. So it quietly stops being chosen. One measured setup found a full plugin install pushing the listing to ~10.8x the default budget — meaning most of the catalog was effectively invisible, and nobody was told.

I built a CLI that finds these skills before it happens.

skill-tax-cli

skill-tax-cli audits the context tax of your Claude Code skills: it scans every skill source, measures each skill's always-on listing cost and full-load cost in tokens, replays the listing-budget overflow rule deterministically, and tells you exactly which skills would lose their descriptions.

Zero dependencies. Python standard library only.

pip install skill-tax-cli 

List every skill Claude Code can see — user skills, project skills, and marketplace plugin skills:

$ skill-tax-cli list huge plugin:acme 236 listing / 1482 load tokens proj project 6 listing / 16 load tokens tiny user 6 listing / 16 load tokens 3 skill(s) 

Audit the tax — ranked by full-load cost, with share of your context window, plus the other always-on sources (rules, memory, MCP configs) in one table:

$ skill-tax-cli audit --window 200000 skill source listing load load%window huge plugin:acme 236 1482 0.74% tiny user 6 16 0.01% 

Detect the silent drops — this is the part nothing else does. gate replays the documented overflow rule (least-used skills lose their descriptions first) and fails with a non-zero exit code when a skill would be silently stripped:

$ skill-tax-cli gate --window 200000 SILENT-DROP RISK: 2 of 34 skill(s) exceed the 2000-token listing budget: - huge [plugin:acme] desc ~230 tokens, usage=1 -> description would be silently stripped - helper [user] desc ~88 tokens, usage=0 -> description would be silently stripped $ echo $? 1 

Exit codes are 0 clean / 1 silent drops / 2 config error, and every command has --json — so it drops straight into pre-commit hooks and CI. Pass --usage usage.json ({"skill-name": invocation_count}) to replay your real usage instead of the deterministic fallback.

Why another skill auditor?

  • It's the only CI-friendly, deterministic one. The official /skill-doctor and every community skill-doctor I found are interactive — they show a report inside a session. This is a plain CLI with stable exit codes, built for pipelines.
  • Silent-exclusion detection is the point. The docs describe the 1% budget and the least-used-first drop order, but no tool replays the rule to tell you which skills are about to go dark. Now one does.
  • One CLI for all always-on sources. Skills, CLAUDE.md rules, MEMORY.md, and MCP configs measured together — the full per-turn tax, not four tools.

Token math is the honest kind: round(chars / 4), the same gauge my mcp-tax tool uses for MCP server schemas. Order-of-magnitude, not a billing meter — good enough to answer "which skill is eating my window?"

Links: GitHub · PyPI

10 smoke tests pass, including the budget simulation and gate exit codes. If your skill fleet has grown past "I remember installing that," run skill-tax-cli gate — you might find half your catalog is already invisible.