name: skill-evolve description: "既存スキル(SKILL.md / プロンプト / マニュアル)を SkillOpt 方式で進化させる汎用メタスキル。pilot で feedback function を実証 → 並列ミニバッチで試走・リフレクション → 提案統合 → minibatch ゲート → held-out validation → 改善のみ採用、というループを subagent で回す。学習率(edit_budget)と2層棄却バッファ(per-run + permanent)で暴走と長期失敗反復を防ぐ。Use when user says 'スキル最適化', 'skill optimize', 'プロンプト最適化', 'skill-evolve'." context: fork model: sonnet allowed-tools: Read, Write, Edit, Glob, Grep, Bash, Agent
Instructions
任意の SKILL.md(あるいはプロンプト/マニュアル)を対象に最適化ループを回す 汎用メタスキル。
本ファイルがワークフロー仕様の単一情報源。関連文書の分担:
| 文書 | 内容 | |---|---| | README.md | 背景・キーアイデア・いつ使うか・位置づけ(概念のみ) | | USAGE.md | 人間が担う実務手順(Phase A〜D)と運用ノウハウ | | references/contracts.md | 選手 / リフレクタ / コーチの subagent 起動契約(実行時に Read する) | | references/formats.md | 全データフォーマット(編集案・棄却バッファ・test_cases・config) | | references/red-flags.md | 実行中に出てくる「合理化」の全パターン表 |
役割分離の原則:選手(対象スキルで試走)・リフレクタ(診断)・コーチ(編集案)を 3 subagent に分ける。同一 subagent に役割を兼ねさせない(自己評価バイアスの構造的回避)。
いつ使うか
- 頻繁に使われる対象スキルを堅牢化したいとき
- 偽陽性 / 偽陰性が増えてきて再チューニングしたいとき
- モデル切替(例: sonnet → opus 等)で挙動が変わったとき
使わない場面:
- 1 回限りのアドホックなプロンプト改善(評価コストが割に合わない)
- rubric が立てられないタスク(採点不能のため自動最適化は機能しない)
- orchestrator スキル(単体 SKILL 最適化とは別問題)
詳細な位置づけや適用範囲は README.md を参照。
パス規約(全ステップ共通)
全状態は対象プロジェクト直下の .claude/skill-evolve/ に集約する。対象スキルのディレクトリには一切ファイルを置かない(SKILL.md 1 枚のままクリーンに保つ)。
<project>/.claude/skill-evolve/
├── config.yaml ← プロジェクト共通デフォルト
├── shared/ ← スキル横断で共有する permanent buffer(symlink 不使用)
│ └── <domain>.yaml
└── targets/<skill-name>/
├── config.yaml ← この対象の設定(共通デフォルトを上書き)
├── assets/ ← 恒久資産(git 管理、削除厳禁)
│ ├── baseline.md ← 起点バックアップ
│ ├── changelog.md ← 全 run 累積の採用編集 + メトリクス推移
│ ├── rejection-buffer-permanent.yaml ← 恒久的失敗パターン + structural_defects
│ ├── feedback_spec.md ← Step -1 で確定した μ_f 仕様
│ ├── coach_meta_prompt.md ← ドメイン前提のみ(下記「二重管理の禁止」参照)
│ └── pilot_report.md ← Step -1 の人間判断との一致度
├── tests/
│ ├── test_cases.md ← テストケース(形式は references/formats.md)
│ └── fixtures/case-XX/ ← ケースごとの入力データ
└── runs/<YYYY-MM-DD-N>/ ← run ごとの使い捨てデータ(gitignore 対象)
├── rejection-buffer-run.yaml ← この run の却下案
└── iter-<N>/ ← per-iteration 作業ディレクトリ
└── structural_themes_for_promotion.yaml
- このレイアウトは
scripts/skill-evolve init <skill-name>が生成する(人間の手順は USAGE.md Phase A) runs/配下だけが gitignore 対象。assets/とtests/は git 管理し「育つ知識ベース」として残す- 以降、
<target>=.claude/skill-evolve/targets/<skill-name>と表記する
二重管理の禁止: coach_instruction(コーチへの恒久禁止ルール)の単一情報源は
rejection-buffer-permanent.yaml である。コーチ起動契約で毎回全文を渡すため、
coach_meta_prompt.md への転記は 行わない。coach_meta_prompt.md には
ドメイン前提とプロジェクト固有の禁止事項だけを書く。
入力契約
呼び出し時、ユーザー(または上位 skill)は以下を指定:
target: <対象スキル名> # .claude/skill-evolve/targets/<name>/ が存在すること
# 以下は config.yaml の値を上書きしたい場合のみ指定
pilot_mode: full | minimal
max_iterations: 3
edit_budget: 4 # 学習率。アブレーションでの最適値
acceptance_margin: 5 # validation 改善がこのポイント以上で採用
n_minibatches: 4
パラメータの解決順: 呼び出し時指定 > <target>/config.yaml > .claude/skill-evolve/config.yaml。
改善対象のパスは <target>/config.yaml の skill_path から読む(config 形式は references/formats.md)。
pilot_mode のプリセット
| pilot_mode | test_cases | max_iter | n_minibatches | 立ち上げ目安 | 想定用途 |
|---|---|---|---|---|---|
| full | 12 (train 8 / val 4) | 3 | 4 | 3〜5 時間 | 本格運用 |
| minimal | 6 (train 4 / val 2) | 2 | 2 | 1〜2 時間 | 触ってみる / 効きそうか確認 |
minimal モードでも permanent buffer は通常通り更新する(後で full モードに移行した ときに学びが引き継げる)。minimal で見えた手応えを根拠に full への投資判断ができる。
test_cases は <target>/tests/test_cases.md に置く。[critical] を最低 1 つ含めること。
形式・ケース数の詳細は references/formats.md の「test_cases.md」節を参照。
ワークフロー
Step -1: pilot run + feedback function 設計(必須、最重要)
自動最適化の品質は採点ロジック(feedback function μ_f)の精度で決まる。pilot を飛ばして本ループに入ると、誤った勾配でスキルが歪んでいく。
実施手順:
- test_cases から 5〜10 ケース をピックアップ
- 対象 SKILL を手動で適用(
/<対象skill名>で実行 or Agent tool で dispatch) - rubric で採点
- 採点結果が人間の直感と一致するか確認
- 直感的に正解と思ったケースが × → 採点ロジックが間違い、rubric を修正
- 直感的に明らかな失敗が ○ → 採点が甘い、
[critical]を厳しくする
- コーチへの初期メタプロンプトを下書き(
coach_meta_prompt.md) - 1〜2 イテレーションだけ手動でループを回し、提案された編集案を人間が読んで妥当性確認
- コスト試算: 1イテレーション当たりの LLM 呼び出し数 × 単価 × 想定イテレーション
成果物(いずれも <target>/assets/ に保存):
feedback_spec.md— μ_f の仕様(入力、出力、評価基準、[critical]の判定根拠)coach_meta_prompt.md— コーチへの初期指示(ドメイン前提のみ)pilot_report.md— 数値結果 + 人間判断との一致度評価
Step 0: 静的整合チェックと準備
0a. description ↔ body 整合チェック
frontmatter description が謳う trigger / 用途と、body がカバーする範囲に乖離がないか確認。乖離があれば本ループに入る前に人間が修正(コーチが description に合わせて body を「再解釈」する false positive を防ぐ)。
0b. 準備
- パラメータを解決し(入力契約の解決順)、
<target>/config.yamlのskill_pathを Read してcurrent_skillに保持 <target>/assets/baseline.mdが存在することを確認(無ければinit未実施。中断して USAGE.md Phase A へ誘導)- run ディレクトリを作成:
<target>/runs/<YYYY-MM-DD-N>/(N は同日内の連番)。 その直下に空のrejection-buffer-run.yamlを作成(per-run buffer は run ごとに新規) <target>/config.yamlのshared_permanent_buffersに列挙された.claude/skill-evolve/shared/*.yamlを確認。コーチに渡す permanent buffer は target 自身のassets/rejection-buffer-permanent.yamlと shared 分を連結 したもの- 改善対象スキルのディレクトリには何も書き込まない
Step 1: 並列ミニバッチ rollout
train ケースを n_minibatches 個に均等分割し、各ミニバッチを 独立した選手 subagent で並列 dispatch(単一メッセージ内で複数 Agent 呼び出し)。同 subagent は再利用しない。
回収する情報(完全トレース):
| 種類 | 取り方 |
|---|---|
| 最終成果物 | subagent レポート |
| tool_uses (execution trace) | Agent tool 戻り値 usage.tool_uses |
| tool_outputs (evaluation trace) | subagent レポート内の「ツール戻り値要約」節 |
| reasoning(自己申告) | レポート「推論メモ」節 |
| 不明瞭点・裁量補完 | レポート末尾 |
選手 subagent のプロンプトは references/contracts.md の「選手 subagent 起動契約」を使う。
「成功 / 失敗の ○×」ではなく 自然言語の所見 を残すのが本手法の核心。情報量が桁違いに多い。
Step 2: ミニバッチ単位リフレクション(並列)
各ミニバッチごとに 新規のリフレクタ subagent を独立 dispatch(起動契約は references/contracts.md)。コーチとは役割を分離する。
リフレクタが出力するもの(全項目必須、YAML 形式は起動契約に定義):
- 失敗パターン仮説(case ごとに 1〜2 行)
- rubric 判定文言マッピング: 落ちた rubric 項目について
feedback_spec.mdの判定文言を 引用付き で明示 - 失敗テーマ ID 割り振り: 複数 case に共通する失敗を 1 テーマとしてラベリング
- 構造欠陥ラベル: 各テーマに
structure_defect_label: local | structuralを付与local: 局所修正(add/delete/replace)で対処可能structural: 構造再編成が必要。コーチは手を出さず、Step 9 で permanent buffer へ即時昇格
- 共通原因 / 未充足な前提 / 削除候補 /
tool_uses偏り観察
精度のみで判断するとスキルの構造的欠陥が隠れる。質的シグナルを常に主、メトリクスは補助。
Step 3: 提案統合 → 学習率まで圧縮
新規のコーチ subagent を references/contracts.md の「コーチ subagent 起動契約」で dispatch。渡すもの:
current_skill全文 /feedback_spec.md全文 /coach_meta_prompt.md全文- 全ミニバッチのリフレクション(themes と structure_defect_label 込み)
- per-run buffer(
runs/<run-id>/rejection-buffer-run.yaml) - permanent buffer(target 分 + shared 分を連結。
coach_instruction絶対遵守) edit_budget上限
コーチの統合手順(詳細は起動契約に記載):
structuralテーマはコーチが触らずruns/<run-id>/iter-<N>/structural_themes_for_promotion.yamlに分離localテーマについてのみ編集案を生成(op はadd/delete/replaceの 3 種のみ)- 重複マージ → theme 単位バンドル → 優先順位付け →
edit_budget件まで truncate - 提出前に自己診断チェック(起動契約に列挙)を全件通す
編集案フォーマット(rubric_mapping 文字列一致・waves_pattern・delete_considered・bloat_check の
必須ルール込み)は references/formats.md の「編集案」節に定義。
rubric_mapping が空、または引用が feedback_spec.md の判定文言と文字列一致しない編集案は提出禁止。
Step 4: minibatch ゲート(改善検証)
サンプル効率の核心。各編集案ごとに:
current_skillをベースに編集を仮適用したパッチ案を作る(runs/<run-id>/iter-<N>/配下、対象スキル本体は触らない)- 同じミニバッチ群 で σ(編集前)と σ'(編集後)を測定
σ' > σ→ Step 5 へσ' ≤ σ→ 即却下、rejection-buffer-run.yaml追記
validation を消費する前にここで篩い落とす。
Step 5: held-out validation 評価
Step 4 通過案だけ:
- validation ケース全てに対して新規の検証 subagent で試走
val_score_after_<i>を記録- 同じく
current_skill(編集前)で validation 試走、val_score_beforeを記録(毎イテレーション取り直す)
Step 6: 採否判定 と 適用
各通過案について:
delta_i = val_score_after_<i> - val_score_beforedelta_i >= acceptance_marginなら採用候補- 採用候補が複数なら
delta_i最大の 1 件のみ採用(1 イテレーション 1 編集) - 採用 →
skill_pathに書き戻し、<target>/assets/changelog.mdに run-id 付きで追記 - 不採用 →
rejection-buffer-run.yamlに追記(フォーマットは references/formats.md)
Step 7: 終了判定
次のいずれかで停止:
max_iterations到達- 連続 2 イテレーションで採用ゼロ(頭打ち)
- 連続 2 ロールバック(構造的に自動改善が機能していない → スキル設計を疑う)
停止時にサマリー出力:
- baseline からの累積 train / validation スコア差分
- 採用 / 試行編集の総数
- ミニバッチ別の提案採用率
- 主要却下パターン(rejection-buffer-run から 3 つ)
Step 8: 安全装置(各イテレーション開始時に横断作動)
- 各イテレーション開始時、
assets/baseline.mdとの validation スコア差をチェック。baseline を下回ったら直前の編集をロールバック edit_budgetを超える編集案はrationaleの強さで truncateskill_pathの上書きは Step 6 の採用確定時のみ。仮適用はruns/配下の別ファイル
Step 9: 棄却バッファの 2 層運用と昇格(ループ停止後に 1 回)
run 終了時、rejection-buffer-run.yaml から assets/rejection-buffer-permanent.yaml への昇格判定:
| 昇格条件 | 内容 |
|---|---|
| 頻度 | 過去の run を通じて、類似編集案が 3 回以上却下された(scripts/skill-evolve promote が候補を横断抽出する) |
| 失敗モードの明確さ | failure_mode_hypothesis が一般化可能(名前付きパターン) |
昇格時、類似案を クラスタリングして代表案 1 件 で記録(肥大化防止)。 昇格の最終判断は人間が行う(USAGE.md Phase D-3)。自動昇格はしない。
昇格先の選択: そのパターンが対象スキル固有なら assets/rejection-buffer-permanent.yaml、
同ドメインの複数スキルに共通なら .claude/skill-evolve/shared/<domain>.yaml に記録し、
各 target の config.yaml の shared_permanent_buffers に登録する。
構造欠陥テーマの即時昇格(per-run buffer を経由しない)
リフレクタが Step 2 で structure_defect_label: structural と診断したテーマは、
通常の昇格条件を満たさなくても 即時に permanent buffer へ昇格 する。
理由: structural と診断されたテーマは局所修正では対処不能。コーチが何度試しても 採用されないため、最初から「コーチは触らない」と固定するのが安全。
処理:
- コーチが Step 3 で
runs/<run-id>/iter-<N>/structural_themes_for_promotion.yamlに分離した theme を読む assets/rejection-buffer-permanent.yamlのstructural_defectsセクションに追記- 次イテレーション以降、コーチはこのテーマを無視する(buffer 経由で自動的に伝わる。
coach_meta_prompt.mdへの転記は不要 — パス規約の「二重管理の禁止」参照)
これは 手動チューニングに戻るシグナル。structural_defects が 3 件以上溜まったら、
本ループを継続する前に手動で構造再編成を行うのが筋。
buffer の YAML フォーマット(promoted_patterns / structural_defects)は references/formats.md に定義。
coach_instruction フィールドはコーチが毎回読んで 絶対遵守 する恒久ルール。
実行後に更新されるファイル
| ファイル | 更新タイミング | 寿命 |
|---|---|---|
| <skill_path>(対象スキル本体) | Step 6 採用確定時のみ | — |
| <target>/assets/changelog.md | Step 6(採用ごと) | 恒久(git 管理) |
| <target>/assets/rejection-buffer-permanent.yaml | Step 9(人間承認後) | 恒久(削除厳禁) |
| <target>/runs/<run-id>/rejection-buffer-run.yaml | Step 4 / 6(却下ごと) | run 限り(gitignore) |
| <target>/runs/<run-id>/iter-<N>/ | Step 3 / 4(作業ファイル) | run 限り(gitignore) |
assets/rejection-buffer-permanent.yaml と assets/coach_meta_prompt.md は 長期資産。削除や軽率なリセットは禁止。
Red flags(本ループ実行中の自戒)
主要 3 件のみ(全パターン表は references/red-flags.md):
- pilot を飛ばそう → μ_f が壊れていると後段は全部無駄。飛ばし禁止
- 役割兼任で速くしよう → 自己評価バイアスが入る。選手 / リフレクタ / コーチは必ず別 subagent
- validation も train と同じケースで → 過学習一直線。完全分離必須
関連
- subagent 起動契約(選手 / リフレクタ / コーチ): references/contracts.md
- データフォーマット(編集案 / バッファ / test_cases / config): references/formats.md
- Red flags 全パターン表: references/red-flags.md
- 実行例テンプレート: examples/pilot-template.md
- コーチへのメタプロンプト雛形: examples/coach_meta_prompt_template.md
- 人間の実務手順とトラブルシューティング: USAGE.md
Next.js App Router Expert
Development
A skill that turns Claude into a Next.js App Router expert.
README Generator
Development
Creates professional and comprehensive README.md files for your projects.
API Documentation Writer
Development
Generates comprehensive API documentation in OpenAPI/Swagger format.