#2054
Is there a way to audit which installed skills were actually triggered in past sessions?
As the number of installed skills grows, there's no way to answer a basic maintenance question: which of my skills are actually being triggered, and which have never fired?
This matters for two reasons:
- Pruning. Every skill's name and description is a permanent per-request cost. Skills that never trigger are pure overhead, but without usage data there's no safe way to identify them — removing one might remove a capability you only needed occasionally.
- Tuning. A skill that fires when it shouldn't (or fails to fire when it should) can only be debugged if trigger events are observable. Right now the only signal is the model's visible behavior, which is indirect.
Questions:
- Do clients record skill invocations anywhere queryable (per session or aggregated)?
- Is there, or could there be, a debug view showing which skills were candidates for a given query — i.e., whose descriptions matched but weren't selected? That would distinguish "never matched" from "matched but lost resolution" (a related but different failure).
- Would an audit command or periodic usage summary fit the product direction? Even a simple "this skill has not been invoked in N sessions" indicator would make pruning decisions tractable.
If any of this already exists and I missed it, a pointer would be appreciated.
In Claude Code this exists now:
/skill-doctor(v2.1.252+). For every skill loaded in the session it shows its listing cost, tokens over the last 7 days, number of uses and last use, and it flags the ones never invoked with where to turn them off.claude -p "/skill-doctor"prints it as plain text, so you can script it. Docs: https://code.claude.com/docs/en/skills#find-unused-skillsOn your second question I don't know of a candidates view. As far as I can tell from the docs, the model reads the whole name and description listing and picks, so there's no separate matching step that could log a "matched but lost".