Communitygithub.com

shimo4228/skill-stocktake

Claude Code スキル:インストール済みスキルの陳腐化、競合、重複を監査します

skill-stocktake とは?

skill-stocktake は、Claude Code のインストール済みスキルを「全体的に、一つのコンテキスト内で」評価し、`Keep / Improve / Update / Retire / Merge` の判定を下す品質監査スキルです。このスキル自体は改善を行わず、判定結果を skill-creator(改善エンジン)に引き継ぎます。これにより、品質ゲートと修正役が明確に分離されます。従来のバージョンではスクリプトを使用してスキルをバッチ処理していましたが、このバージョンでは Glob ですべてのスキルを一度に列挙し、評価のための全体的なビューを提供します。これは、スキル間の重複検出に不可欠です。また、`changed` モードでは、SKILL.md の更新日時を元に再評価が必要なスキルのみを処理し、結果を results.json に保存します。判定は数値的なルーブリックではなく総合的な判断に基づき、ライブラリ全体のサイズに応じて「Keep」の基準が変動します。使用頻度が 90 日以上測定可能でゼロの場合は、Retire 候補として自動的に提示されます。このスキルは Claude Code 専用に設計されており、skill-creator、config-gc、harness-sync などの関連スキルと連携して動作します。

対応✓Claude Code~Codex CLI~Cursor
npx skills add shimo4228/skill-stocktake

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

skill-stocktake — スキル品質監査

インストール済みスキルを全体的に、一つのコンテキスト内で評価し、それぞれに判定を下します:Keep / Improve / Update / Retire / Merge。このスキルは改善を行いません — 判定が出たら、skill-creator(改善エンジン)に引き継ぎます。この境界がポイントです:stocktake は品質ゲート、skill-creator は修正役です。

設計ノート:以前のバージョンはシェルスクリプトでスキャンし、評価を約20スキルずつのサブエージェントバッチに分割していました。1Mコンテキストではそれは不要なだけでなく有害です — バッチ処理により各サブエージェントは他のバッチのスキルを見えなくなり、スキル間の重複を見逃します。現在は Glob で列挙し、すべてのスキルを一つのコンテキストで読み込みます。重複検出はこの単一コンテキストのビューに依存します。

モード($ARGUMENTS)

引数動作
なし / fullすべてのスキルを読み込んで評価(デフォルト)
changedSKILL.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 から独立した計測レイヤー)。

関連スキル