skillrot
Audit a skill library: what it costs per message, what can never fire, what is broken.
Run it
python ${CLAUDE_SKILL_DIR}/skillrot.py --json
Add a path to audit somewhere specific:
python ${CLAUDE_SKILL_DIR}/skillrot.py ./skills --json
Useful flags: --portable (check a skill will survive a claude.ai upload), --no-usage
(skip the transcript scan), --fail-on error (CI), --full (every finding).
Reading the output
budget.always_on_tokens is paid on every request. budget.body_tokens is what loads
when skills fire and then squats in context for the rest of the session. Findings carry a
rule id, a severity and a fix.
Reporting back
- Lead with the always-on number and what share of the context window it takes.
- Name the worst offenders by listing cost, marking any with
invocations: 0. - List errors before warnings. Errors mean a skill is broken, not merely expensive.
- For a prune recommendation, rank by listing cost among skills that have never fired. Say plainly that "never fired" is evidence from local history, not proof a skill is useless — a recently installed skill has not fired yet either.
Do not delete or edit any skill without the user asking for that specific change.
Rules
docs/RULES.md in this directory documents every rule and cites the behaviour it catches.
Read it before explaining a finding you are unsure about.