skill-stocktake — スキル品質監査
インストール済みスキルを全体的に、一つのコンテキスト内で評価し、それぞれに判定を下します:Keep / Improve / Update / Retire / Merge。このスキルは改善を行いません — 判定が出たら、skill-creator(改善エンジン)に引き継ぎます。この境界がポイントです:stocktake は品質ゲート、skill-creator は修正役です。
設計ノート:以前のバージョンはシェルスクリプトでスキャンし、評価を約20スキルずつのサブエージェントバッチに分割していました。1Mコンテキストではそれは不要なだけでなく有害です — バッチ処理により各サブエージェントは他のバッチのスキルを見えなくなり、スキル間の重複を見逃します。現在は Glob で列挙し、すべてのスキルを一つのコンテキストで読み込みます。重複検出はこの単一コンテキストのビューに依存します。
モード($ARGUMENTS)
| 引数 | 動作 |
|---|---|
なし / full | すべてのスキルを読み込んで評価(デフォルト) |
changed | SKILL.md の mtime が results.json の evaluated_at よりも新しいスキルのみを再評価し、残りは台帳から引き継ぎ |
changed はインラインで変更を検出します(スクリプト不要):
find ~/.claude/skills -name SKILL.md -newermt "$(jq -r .evaluated_at ~/.claude/skills/skill-stocktake/results.json)"
フェーズ 1 — インベントリ
Glob でスキル定義ファイルを列挙(スクリプト不要):
~/.claude/skills/*/SKILL.md~/.claude/skills/learned/*.md- cwd に
.claude/skills/がある場合、{cwd}/.claude/skills/*/SKILL.md(プロジェクトスキル)
Glob が
SKILL.md/learned/*.mdのみを対象とするため、.venvや.pytest_cache配下の依存関係マークダウンは構造的に除外されます(プルーニング不要)。以前のfind -name "*.md"で取り込まれていたノイズは発生しません。
使用回数:~/.claude/metrics/skill-usage.jsonl をインラインで読み込み(PostToolUse フック log-skill-usage.sh が追記 — 独立した計測レイヤー)、スキルごとに 7 / 30 / 90 日間のイベントをカウントします。各行は JSON {ts,event,skill,path,project} で、invoke と read の両イベントをカウントします。手動カウントではなく、使い捨ての python3 / jq ワンライナーで集計します — ログは時間とともに成長し、手動カウントは呼び出しごとにツールターンを無駄にします。
- ログが存在しない、または最初のイベントが 90 日未満の場合、使用回数を
—(未測定)と表示します。決して 0 と表示しないでください — 未測定と未使用は異なる事実です。
スキャン結果を最初に示します:どのパスをスキャンしたか、見つかったスキル数、使用回数が測定可能かどうか。
フェーズ 2 — 評価(完全インライン、全体的)
すべての対象スキルの本文を読み込み、全体を確認しながらスキルを一つずつ評価します。チェックリスト:
- 他のスキルとのコンテンツ重複(文書化されたオーケストレーター/サブスキル分割は重複ではありません — 例:paper-ecosystem → そのレビュアー、citation-sync → release-doi/wikidata。意図的な階層化と真の重複を区別)
- MEMORY.md / CLAUDE.md / ルールとの重複
- 技術リファレンスの鮮度(CLI フラグ / API / ツール名が古そうであれば、WebSearch で確認)
- 使用頻度(未測定の場合はシグナルとして無視)
評価は数値的なルーブリックではなく、総合的な判断です。ガイドとなる軸:アクション可能性(実行可能な具体的な例/手順)、スコープ適合性(名前、トリガー、本文が整合 — 広すぎたり狭すぎたりしない)、独自性(MEMORY / 他のスキルで代替できない)、最新性(リファレンスが現在の環境で動作する)。
集約コスト(スキル単位ではなくセット単位): スキルを保持することは、個々のスキルが問題なくても無料ではありません。スキルのメリットは脆弱です — 大規模で未キュレーションのライブラリは、エージェントが適切なスキルを選択する能力を低下させ、動作をスキルなしベースラインに引き戻します。したがって、Keep の基準はライブラリサイズに応じて上昇します:セットが大きい場合、単に「まあまあ」のスキル(使用頻度が低い、独自性が低い、他のスキルとの隣接性が高い)は、スキル自体に欠陥がなくても、集約希釈を理由に Retire/Merge の候補となります。これは判断の入力であり、クォータではありません;数を達成するためにリタイアしないでください。
| 判定 | 意味 |
|---|---|
| Keep | 有用、最新、独自の価値 |
| Improve | 維持する価値はあるが、特定の改善が必要 |
| Update | 参照されている技術が古い(WebSearch で確認) |
| Retire | 低品質、陳腐化、またはコスト非対称 |
| Merge into [X] | 他のスキルと実質的に重複;ターゲットを指定 |
ゼロ使用ルール:使用ログの最初のイベントが少なくとも 90 日前かつスキルの use_90d == 0 である場合、Retire 候補として提示する必要があります(最終判断はユーザーに委ねます)。ログが 90 日未満の間はこのルールは発動せず、判定は総合的な判断のみに基づきます。
評価は出所に依存しません:ECC / 自作 / 自動抽出で分岐しません。同じチェックリストがすべてのスキルに適用されます。
フェーズ 3 — サマリー
テーブルを表示:スキル | 7日 | 90日 | 判定 | 理由。
フェーズ 4 — 統合
- Retire / Merge:ファイルごとに、(1) 見つかった具体的な欠陥、(2) 代わりに同じニーズをカバーするもの(Retire:どの既存スキル/ルール;Merge:ターゲットと統合する内容)、(3) 削除の影響(依存スキル、MEMORY 参照)を提示します。ユーザーが確認した後にのみ実行します。
- Improve / Update:引き継ぎを提案します — 「
<スキル>を skill-creator に渡して改善しますか?」 — 承認されると、対象スキルを指定してskill-creatorを呼び出します。Stocktake は改善作業を自ら行うことはありません。 - 台帳の更新:
results.jsonを読み込む → 今回の実行の判定をマージする → 書き戻す(evaluated_at=date -u +%Y-%m-%dT%H:%M:%SZからの実際の UTC)。changedモードでは、再評価しなかったスキルの以前の判定を保持します。 - MEMORY.md が 100 行を超える場合、圧縮を提案します。
理由の品質(必須)
すべての reason は自己完結型でなければなりません — それだけで判断を可能にします。「unchanged」だけは禁止;常に証拠を再記述します。
- Retire:欠陥 + 代替手段を述べます。悪い例:
"Superseded"/ 良い例:"disable-model-invocation: true が既に設定されています;continuous-learning-v2 は同じパターンに加えて信頼度スコアリングをカバーしています。独自のコンテンツは残っていません。" - Merge:ターゲット名 + 統合する内容を述べます。悪い例:
"X と重複"/ 良い例:"42行の薄いコンテンツ;chatlog-to-article のステップ4がこのワークフローを既にカバーしています。'記事の角度'に関するヒントをそこにメモとして統合します。" - Improve:どのセクション、どの変更か(該当する場合は目標サイズ)。悪い例:
"長すぎる"/ 良い例:"276行;'フレームワーク比較'(L80–140)は ai-era-architecture-principles と重複しています。それを削除して約150行にします。" - Keep(
changedモードでの mtime のみの変更):元の根拠を再記述します。悪い例:"Unchanged"/ 良い例:"コンテンツに変更なし。rules/python/ で明示的にインポートされている独自の Python リファレンス。重複なし。"
results.json(最小限の台帳)
{
"evaluated_at": "2026-06-24T11:09:00Z",
"skills": {
"<skill-name>": {
"path": "~/.claude/skills/<name>/SKILL.md",
"verdict": "Keep",
"reason": "...",
"mtime": "2026-01-15T08:30:00Z"
}
}
}
判定履歴と最終監査タイムスタンプのみを保持する台帳。Read/Write でインライン更新し、スクリプトは使いません。グローバルスキルのみ(プロジェクトスキルは cwd から毎回新たに読み込まれ、ここにはキャッシュされません)。
関連
skill-creator— 改善エンジン;Improve/Update 作業を引き継ぎます。config-gc— スキルの存在と ~/.claude 全体(フック/パーミッション/MCP/キャッシュ)に対する GC;stocktake はスキルの品質を判断します。harness-sync— このスキルを公開リポジトリに同期するために使用します。- 使用状況計測:
~/.claude/hooks/log-skill-usage.sh→~/.claude/metrics/skill-usage.jsonl(stocktake から独立した計測レイヤー)。