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
Expert Next.js App Router
Developpement
Un skill qui transforme Claude en expert Next.js App Router.
Générateur de README
Developpement
Crée des README.md professionnels et complets pour vos projets.
Rédacteur de Documentation API
Developpement
Génère de la documentation API complète au format OpenAPI/Swagger.