DEV Community

Sergei Frangulov
Sergei Frangulov

Posted on

I installed 116 Claude Code skills. After 30 days I'd used 35

I kept installing Claude Code skills because it's one command and it's free. Every time I saw a skill that looked useful, I added it. No cost, no friction, so why not. After 30 days I parsed my own session logs, just out of curiosity. I had 116 skills installed. I had actually used 35. I never noticed the other 81.

The problem

Skill marketplaces grow fast and installing is easy. One command, no review, nothing to pay. So people keep installing and nobody checks later which skills they actually use. Nothing forces you to check.

This is not free. Every installed skill loads its metadata into the prompt at the start of every session. So dead skills cost tokens for nothing, every session. With a normal dependency you eventually hit a version conflict or a security warning and you have to look at it. An installed skill never makes you look. It just sits in the prompt until you go and count.

How I measured it

I parsed my local ~/.claude session logs. No network, just the JSONL files the client already writes. I put every skill into one of four buckets:

  • active — installed and used
  • dead — installed, used zero times in the window
  • missing — used, but no SKILL.md found for it
  • hallucinated — used, but the runtime errored, because Claude confused a tool or command name with a skill name

The tool that does the parsing is skill-graveyard (github.com/sfrangulov/skill-graveyard). Here is the summary it printed for my 30-day window:

────────────────────────────────────────────────────────────
 skill-graveyard — 30d audit
 116 installed   35 active · 81 dead · 9 missing
              ██████████                        30% used
 274 sessions, 847 calls, 499 errored
 +65 hallucinated names (telemetry)
────────────────────────────────────────────────────────────
Enter fullscreen mode Exit fullscreen mode

116 installed, 35 active. That is 30% used. 81 dead, 9 missing. Across 274 sessions there were 847 skill calls and 499 of them errored. That error rate is high, so I looked closer.

The unexpected part

The most interesting bucket was not the dead one. It was the hallucinated one. Claude tried to call 65 names that are not skills at all: bash, read, agent, and 62 more. That is 493 failed calls, because the model used a tool or command name as if it were a skill name.

Here is the thing. bash, read, agent are real. They are real things the Claude Code runtime can do. But they are not skills. The runtime runs them through a different path: built-in tools and slash-style commands, not the skill loader. So the model wants a real capability, but it asks for it the wrong way. The skill loader fails, because that name is not a skill, even though bash works fine somewhere else.

So this bucket is not just junk. It is a signal. It shows how often the model mixes up the runtime's different paths. Dead skills tell you what to uninstall. This tells you where the model's idea of its own tools is wrong. I expected a cleanup report and instead found a debugging lead.

Try it on your own logs

If you use Claude Code, you can get the same four-bucket breakdown for your own setup. Run npx skill-graveyard. It runs locally, makes no network calls, and only reads your ~/.claude logs.

Run it and reply with your installed→active ratio. I want to know if 30% is normal or if I just install too much.

I did not decide to use only 35 of 116. It happened one easy install at a time, and I only saw it because I read the logs.

(The same four-bucket idea also exists for MCP servers via npx mcp-graveyard and project memory via npx memory-graveyard.)

Top comments (0)