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-doctorand 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.mdrules,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?"
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.
Top comments (0)