入れたきり一度も呼んでいないスキルは、毎ターン何トークン食っているのか。Claude Code v2.1.261 で入った /skill-doctor がその数字を出します。手元で回したら、24本中15本が「一度も呼ばれていない」と出ました。
/skill-doctor が出す表の読み方
出力の実物から。v2.1.263 で claude -p "/skill-doctor" を叩き、figma の行を12本と pd-pr-* の2本を省いたものです。
$ claude -p "/skill-doctor"
Skills loaded this session
skill source context 7d tokens uses last used
find-skills userSettings ~110 - 0× never
figma:figma-generate-design figma ~290 - 0× never
figma:figma-use figma ~190 - 0× never
grill-me userSettings - 381.7k 1× 6 days
grilling userSettings ~60 1.5m 1× 6 days
pd-test userSettings ~30 14.7m 3× 5 days
pd-start userSettings ~30 18.1m 6× 4 days
frontend-design:frontend-design frontend-design ~80 64m 5× 3 days
defuddle userSettings ~120 23.1m 8× 2 days
pd-review userSettings ~60 35.6m 53× today
context = this skill's one-line listing in the system prompt, included every turn
(dash = not in the current listing, costs nothing; full SKILL.md loads only when it runs)
7d tokens = tokens attributed to the skill over the last 7 days of sessions on this machine
1 skill loaded but never invoked. Each one adds to the system prompt every turn. Disable in /skills, or remove from .claude/skills.
14 plugin skills loaded but never invoked, from figma. Each one adds to the system prompt every turn. Plugin skills can't be turned off individually — disable the plugin in /plugin.
Plugins not used recently
figma last used 27 days ago
全40行で 2,862バイト。--output-format json で取ると num_turns: 0、duration_api_ms: 0、total_cost_usd: 0。モデルを呼ばずにローカルの履歴から組み立てるので、レポート生成は 859ミリ秒。CLI の起動込みでも約4.2秒で返ります。対象は bundled と enterprise 以外のスキルで、公式ドキュメントの “Find unused skills” セクションにも “The report covers the skills in your session other than bundled skills and enterprise skills” とあります。同じ環境で /context を見ると Skills 行は 4.8k でした。レポート側の合計は約2,750。差の約2,050トークンは、dataviz(~480)や claude-api(~360)など Built-in 13本の分です。
context 列は一覧1行分のトークン
Claude Code は起動時、スキルの名前と description を1行ずつ並べた一覧をシステムプロンプトに入れます。context 列はその1行分で、SKILL.md 本体の大きさではありません。同じセクションの一文がそのまま答えです。
Every skill in the skill listing adds to your context on every turn, whether or not Claude ever uses it.
手元の5本を description の文字数と並べると、おおむね文字数÷3。
| skill | description の文字数 | context 列 |
|---|---|---|
| pd-test | 71 | ~30 |
| grilling | 152 | ~60 |
| find-skills | 303 | ~110 |
| defuddle | 347 | ~120 |
| figma:figma-generate-design | 851 | ~290 |
description を削れば、その分だけ毎ターンの固定費が減ります。
7d tokens は本体の大きさではない
frontend-design は SKILL.md が71行しかないのに、7d tokens は 64m と出ます。5回の呼び出しで割ると1回 12.8m。脚注は “tokens attributed to the skill over the last 7 days of sessions on this machine” で、スキルを呼んだ後のセッション消費を按分した値です。/usage の内訳と同じローカル履歴ベースです。上位に来るのは、呼んだ後の作業が長かったスキル。一覧の固定費を減らす判断は context 列だけで足ります。
ダッシュは一覧に載っていない印
grill-me の context がダッシュなのは、frontmatter に disable-model-invocation: true があるからです。”Restrict Claude’s skill access” セクションにある “This removes the skill from Claude’s context entirely” がそのまま効いた状態。一覧に載らないので、毎ターンのコストはゼロです。ただし uses は 1×、last used は 6 days と履歴は残ります。/grill-me と手で打てば動くスキルなので、「載っていない = 消えている」ではありません。
未使用15本で毎ターン約2,300トークン
15本の内訳は、個人スキル1本(find-skills、~110)と figma プラグインの14本(合計 ~2,190)。足して約2,300トークンを、使わない機能のために Claude Code が毎ターン送っています。1日200ターン回せば46万トークンになります。システムプロンプト側なのでプロンプトキャッシュには乗りますが、cache read もゼロ円ではありません。TTL と料金の関係はプロンプトキャッシュの記事に書きました。スキル周りでトークン節約を狙うなら、順番はこの固定費が先、呼んだ後の本体が後です。
個人スキル1本は /skills で消せる
レポートの指示は “Disable in /skills, or remove from .claude/skills”。/skills メニューでスキルを選んで Space を押すと状態が切り替わります。Esc を押すと、Claude Code が .claude/settings.local.json に書き込みます。書かれるのは次で試す skillOverrides。ディレクトリごと消すなら ~/.claude/skills/find-skills/ を削除です。
プラグインの14本は個別に消せない
figma プラグイン(v2.2.107)はスキル14本を同梱しています。レポートは “Plugin skills can’t be turned off individually” と言い切り、選べるのは /plugin でプラグインごと無効化することだけ。”Plugins not used recently” に “figma last used 27 days ago” と出るので、1か月触っていないプラグインを切る判断材料はこの行です。対話セッションで /skill-doctor を打つと、同じ内容が /plugin の Stats タブに開きます。
skillOverrides の効き方を /context で測る
一時プロジェクト /tmp/skilltest の .claude/settings.local.json に、find-skills の状態を1つずつ書きました。そのたびに /context の Skills 行と /skill-doctor の表示を取って並べたのが次の表です。
| skillOverrides の値 | Claude に見える範囲 | /context の Skills | context 列 | 未使用の警告 |
|---|---|---|---|---|
| 未設定(“on”) | 名前と description | 4.8k | ~110 | 出る |
| “name-only” | 名前だけ | 4.7k | < 20 | 出る |
| “user-invocable-only” | 見えない(/name は打てる) | 4.7k | – | 消える |
| “off” | 見えない(/name も補完から消える) | 4.7k | – | 消える |
各値の定義は “Override skill visibility from settings” セクションの表のままです。
name-only と off は /context では見分けがつかない
Skills 行は 0.1k 丸めなので、~110 の差は 4.8k から 4.7k に落ちるところまでしか見えません。差が出るのはレポート側で、name-only は < 20、off はダッシュ。name-only は名前分の十数トークンを払って「Claude が名前だけは知っている」状態を残す設定です。
name-only でも「未使用」の警告は残る
“1 skill loaded but never invoked” の行は name-only では消えず、user-invocable-only と off で消えました。警告は「一覧に載っていて呼ばれていない」を見ているので、名前だけでも載っていれば対象になります。
プラグインスキルに書いても効かない
"figma:figma-use": "off" と書いても Skills 行は 4.8k のまま、context 列も ~190 のままです。ドキュメントの “Plugin skills are not affected by skillOverrides. Manage those through /plugin instead” を実測で確認した形。
一覧の予算は context window の1%
スキルを増やしすぎたときに何が起きるかは、”Skill descriptions are cut short” セクションに書いてあります。
The listing always contains every skill name, but if you have many skills, Claude Code shortens descriptions to fit the listing’s character budget, which can strip the keywords Claude needs to match your request. The budget scales at 1% of the model’s context window.
呼んでいないスキルの description から消える
予算を超えると “Claude Code drops descriptions starting with the skills you invoke least”。使っていないスキルは予算超過時に真っ先に description を失って name-only 相当になり、さらに呼ばれにくくなります。Qiita でも、37本足したら使用0回のスキル2本の説明が消えたという報告が出ています。手元は一覧が約2,750トークンで予算の内側なので、まだ何も消えていません。
1本あたりの上限は1,536文字
description と when_to_use を合わせた長さは、予算に関係なく Claude Code が 1,536文字で切ります。CHANGELOG を遡ると、上限は v2.1.86 で250文字として入り、v2.1.105 で1,536に上がりました。起動時の警告も v2.1.105 からです。上限は skillListingMaxDescChars(既定 1536)で変えられます。ドキュメントの指示は “put the key use case first”。前置きから始まる description は、切られたときに用途語が残りません。
# figma:figma-use の description(546文字)。用途語 create/edit/delete nodes は359文字目
**MANDATORY prerequisite** — you MUST invoke this skill BEFORE every `use_figma` tool call. NEVER call `use_figma` directly without loading this skill first. Skipping it causes common, hard-to-debug failures. Trigger whenever the user wants to perfor
(v2.1.86 当時の250文字上限なら、ここで切れていた)
# defuddle の description(347文字)。1文目に用途
Extract clean markdown content from web pages using Defuddle CLI, removing clutter and navigation to save tokens. Use instead of WebFetch when the user provides a URL to read or analyze, ...
figma-use は今の上限 1,536 の内側なので実害はありませんが、skillListingMaxDescChars を下げるときは、この形の description から用途語が消えます。
予算を広げる設定と縮める設定
割合を変えるなら skillListingBudgetFraction で、既定は 0.01 です。固定の文字数で指定するなら、環境変数 SLASH_COMMAND_TOOL_CHAR_BUDGET。フォールバックは8,000文字です。/context の Skills 行は v2.1.196 以降、予算を適用した後の値を出します。それより前は全 description の合計を出していたので、数倍大きい値が見えることもありました。超過時は --debug のログに警告が残ります。
-p では $0 で返るが、/doctor はモデルが回る
claude -p “/skill-doctor” は $0
Remote Control でスマホやブラウザから打つと、Claude Code は “Skill usage reports are not available on this connection.” を返すだけです。errors ページの案内は、セッションが動いているマシンの端末で claude -p "/skill-doctor" を打つこと。同じ表がテキストで出るので、cron から回して差分を取る使い方もできます。
/doctor を -p に渡すと –max-turns 1 でも $0.61
一覧コストの見積もりは /doctor にもあると書いてあるので、--max-turns 1 を付けて同じ形で試したら error_max_turns。/context と /skill-doctor が0ターンで返るのに対し、/doctor はモデルが回ります。2ターン、15.9秒、cache_creation 27,419トークンで $0.61 かかりました。上限を外せば完走して見積もりが出るのかは、追加で払ってまで確かめていません。見積もりは対話セッションで取ってください。
feature-flag を切る環境変数では出ない
“Features that need feature-flag fetching” セクションに /skill-doctor が並んでいます。CHANGELOG に載ったのは v2.1.261 ですが、ドキュメント上の要件は v2.1.252 以降。feature flag で有効化される機能なので、この差が出ています。次のセッションでは使えません。
DISABLE_GROWTHBOOKかDISABLE_TELEMETRYを立てたセッションDO_NOT_TRACKかCLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFICを立てたセッション- Bedrock など third-party provider のセッション
- Claude apps gateway のセッション
呼んだ後のコストは別の話
context 列に出るのは一覧の1行だけで、呼んだ後の SKILL.md 本体は含みません。”Skill content lifecycle” セクションの “the rendered SKILL.md content enters the conversation as a single message and stays there across later turns” のとおり、一度呼べばセッション中ずっと残ります。常時103トークンのスキルが、呼ぶと約90,000トークンという事例は、この2段目の話です。
同じ内容なら2回目は積まれない
同じスキルをもう一度呼んでも、描画結果が前回と同一なら Claude Code は本体を複製しません。入るのは “a short note that the skill is already loaded” だけです。引数や dynamic context の出力が変わったときだけ、全文がもう一度入ります。
compaction 後は先頭5,000トークンだけ戻る
auto-compact で要約が走ったあと、Claude Code が再添付するのは各スキルの最新の1回分だけ。”keeping the first 5,000 tokens of each. Re-attached skills share a combined budget of 25,000 tokens” なので、5,000トークンを超える SKILL.md は後半が落ちます。大きいスキルは context: fork でサブエージェント側に隔離するほうが、親のコンテキストを汚しません。
まとめ
- context 列は一覧1行分。手元では description の文字数÷3。7d tokens は呼んだ後のセッション按分で、本体の大きさではない
- 未使用15本で毎ターン約2,300トークン。個人スキルは
/skillsかskillOverrides、プラグインスキルは/pluginでプラグインごと - name-only と off は
/contextではどちらも 4.7k。差はレポートの< 20とダッシュ、警告の有無 -pで動いて $0。/doctorは-pだとモデルが回り、--max-turns 1でも $0.61。Remote Control と feature-flag オフの環境では出ない