昨日まで使えていたClaude Codeの自作スキルが、急に呼べなくなることがあります。ファイルが壊れていなくても起きる現象で、原因の多くはセッション側——長い会話の要約(コンパクション)後はスキル一覧がコンテキストに復元されない仕様のためです。この記事では、原因をファイル側とセッション側に切り分ける確認の順序をまとめます。
最初に「新しいセッションで見えるか」を確認する
切り分けの最短ルートはここです。ヘッドレスモードなら1コマンドで確認できます。
claude -p --model haiku "利用可能なスキル一覧に my-skill はありますか?一覧にある全スキル名を列挙してください。ツールは使わないで。"
my-skill は自分のスキル名に置き換えてください。確認だけなので --model haiku の安いモデルで十分です。ここで一覧に載っていればファイルは正常で、原因はセッション側と確定します。載っていなければファイル側を疑います。
セッション側の原因——コンパクション後は一覧が復元されない
Claude Codeはスキルの説明一覧をコンテキストに入れてモデルに渡しています。コンテキストが一杯になって要約(/compact や自動コンパクション)が走ると、この一覧は再読み込みされず、そのセッションで実行済みのスキルだけが残ります。公式ドキュメントのコンテキストウィンドウの項に明記されている仕様です。
つまり長いセッションの後半では、一度も使っていないスキルはClaudeから「存在しないもの」に見えます。頼んでも「そのスキルはありません」と返ってくるのに、ファイルをいくら調べても異常が出ないのはこのためです。実際にこの症状に当たったとき、frontmatterの構文やファイルの置き場所を一通り疑いましたが全て正常で、新しいセッションでは何事もなく一覧に載っていました。
ファイル側を疑う場合に見る3箇所
新しいセッションでも見えない場合は、次の順で確認します。
1つ目は置き場所。個人スキルは ~/.claude/skills/<スキル名>/SKILL.md です。~/.claude/commands/ 直下の .md(スラッシュコマンド)とは別物なので混同しないでください。
2つ目はfrontmatter。YAML構文が壊れていると、スキル自体は読み込まれてもメタデータが空になり、一覧に正しく出ません。name と description の2つがあれば十分です。
3つ目は設定による無効化。settings.jsonの skillOverrides で該当スキルが "off" になっていると表示されません。
なお claude plugin validate は plugin.json の存在が前提のため、プラグイン化していない単体スキルに使うと「No manifest found」エラーになります。これはスキルの異常ではありません。
対処は新しいセッションを開くのが確実
コンパクション由来なら、新しいセッションを開けば一覧が再構築されて解消します。
同じセッションで使い続けたい場合は、スキル名を明示して呼び出します。コンパクションで消えるのはコンテキスト上の「説明一覧」であって、スキル本文はファイルから読み込まれるため、/スキル名 と直接打てば実行できます(v2.1.234で確認)。逆に「あの作業をやって」のような曖昧な頼み方だと、Claudeには一覧が見えていないのでスキルを使ってもらえません。