TL;DR A skill in
<folder>/.claude/skills/stays out of the listing until Claude touches a file in that folder, and then it loads on its own without restarting the session. Keep only the ones you use everywhere in your global folder.
Every installed skill holds a line in your system prompt. Not the whole SKILL.md, just its name and its description (truncated at 1,536 characters), but that line ships on every turn whether the skill runs or not.
With two or three skills it does not matter. With fifty-seven it does. This is my machine, running /skill-doctor from the shell:
$ claude -p "/skill-doctor"
Skills loaded this session
skill source context uses last used
carousel userSettings ~130 0× never
tip-board userSettings ~50 0× never
figma:figma-generate-design figma ~290 0× never
anthropic-skills:computer-use claude.ai sync ~320 0× never
claude-code-tip userSettings ~30 220× today
...
context = this skill's one-line listing in the system prompt, included every turn
Fifty-seven rows, 7,590 tokens on every turn, and 5,950 of them belong to skills I have never once invoked. It is a flat toll: you pay it on a two-word prompt exactly as you pay it on a three-hour refactor.
The folder decides who loads
A skill does not have to live in ~/.claude/skills/. It can live inside the folder where it makes sense:
my-repo/
├── .claude/skills/deploy/SKILL.md ← every session in the repo
└── apps/web/
└── .claude/skills/storybook/SKILL.md ← only when you work in there
The one under apps/web/ does not show up in a session started at the root. It is not that it fails to run: it is not in the listing at all, so it costs you nothing. It appears the first time Claude reads or edits a file in that folder, mid-session, with no restart, and stays for the rest of the session.
I tried it with a throwaway skill inside deep/:
| Session started at | In the listing? |
|---|---|
| the repo root | No |
deep/ |
Yes, from startup |
the root, then asked to read deep/nota.txt |
Yes, it turns up right after that read |
That third row is the whole deal: zero cost while you don't need it, there the moment you do.
Moving one
1. See what you are paying
claude -p "/skill-doctor"
The context column is what each row costs you per turn. Start with the ones at 0× that cost the most. The full breakdown, and where each source gets switched off, has its own tip.
2. Put it in its folder
mkdir -p apps/web/.claude/skills/storybook
mv ~/.claude/skills/storybook/SKILL.md apps/web/.claude/skills/storybook/
3. Check it is gone from where it does not belong
cd my-repo && claude -p "/skill-doctor" | grep storybook # nothing
cd apps/web && claude -p "/skill-doctor" | grep storybook # there it is
If the nested one ends up sharing a name with one at the root, they do not shadow each other: the listing shows one as probe-widget and the other as deep:probe-widget, path first, colons as separators, so you call whichever you want by name. That is a different case from your personal folder clashing with the project's, where one really does shadow the other, and not in the direction you would guess: the precedence table settles that one.
What this does not fix
The lever only works on skills you own and can move. On my own machine it barely helps: of those 5,950 dead tokens, 370 are mine and 5,120 come from plugins and from skills synced off claude.ai. A plugin cannot be trimmed skill by skill, you disable the whole thing in /plugin, and a synced skill is downloaded again if you delete it locally, so that one is switched off on claude.ai.
Which is why the order matters: diagnose first, then reach for the lever that fits. And if what you want is the whole picture of your window rather than the skills alone, that is /context.
Reference
Where the SKILL.md lives |
Who loads it |
|---|---|
~/.claude/skills/<name>/ |
Every session you start, in any repo |
.claude/skills/<name>/ (project root) |
Every session in that project |
<folder>/.claude/skills/<name>/ |
Sessions started there or below, plus sessions above it as soon as Claude touches a file in that folder |
.claude/skills/<name>/ inside an --add-dir |
Sessions that add that directory |
<plugin>/skills/<name>/ |
While the plugin is enabled |
| Synced from claude.ai | All of them, until you turn it off on claude.ai |
Official docs: Extend Claude with skills
Requirements
- Nothing external.
/skill-doctorneeds v2.1.252 or later; everything above was run on v2.1.276.