improve-skill

star 0

スキルファイルを静的解析・実行シミュレーションで改善する。実プロジェクトを動かさずにトークン効率・明瞭性・完全性を評価し、具体的な改善案を提示する。スキルを新規作成・修正したとき、または品質改善を求められたときに使う。

agaemo By agaemo schedule Updated 6/8/2026

name: improve-skill description: スキルファイルを静的解析・実行シミュレーションで改善する。実プロジェクトを動かさずにトークン効率・明瞭性・完全性を評価し、具体的な改善案を提示する。スキルを新規作成・修正したとき、または品質改善を求められたときに使う。

/improve-skill

対象スキルを「コールドスタートのサブエージェントが実行する」視点でレビューし、改善案を提示する。 実プロジェクトを動かさないため、低トークンで反復改善が可能。

使い方

  • /improve-skill <ファイルパス> — 指定スキルを改善する
  • /improve-skill — 引数なしの場合はファイルパスをユーザーに確認する
  • /improve-skill <ファイルパス> --cross — 親スキルと、そこから呼び出される子スキルをまとめて改善する

手順

ステップ 1: 対象ファイルの特定と読み込み

SKILL_DIR: このSKILL.mdが存在するディレクトリのパス(ステップ全体で参照する変数として保持)

DETECT AUTO_MODE(ステップ全体で参照する変数として保持):
  以下のいずれかを満たす場合 AUTO_MODE = true:
  - 会話コンテキストに "/loop" コマンドの実行履歴がある
  - 会話コンテキストに "適用後スコア: 平均" で始まるスコア報告が存在する(2回目以降のループ反復)
  - 引数またはスキル起動直前のユーザーメッセージにスコア閾値("点", "score", "以上", "超える", "まで" 等)が含まれる
  それ以外: AUTO_MODE = false

REJECT_BUFFER = []
IF AUTO_MODE = true:
  会話コンテキストから以下を抽出し REJECT_BUFFER に追加する:
  - 過去イテレーションでユーザーが選択しなかった提案の「場所: L<行番号>」+「分類: [A〜F]」
ENDIF

FILE_ARGS: 引数からスコア閾値テキスト("点"・"以上"・"超える"・"score"・"まで"・"目標" 等を含むトークン)および "--cross" を除いた部分
           以降の引数解析("all" 判定・複数パス判定・単一パス読み込み)はすべて FILE_ARGS を参照する

DETECT CROSS_MODE:
  "--cross" が引数に含まれる かつ FILE_ARGS が単一ファイルパス("all" および複数パスは除く)の場合: CROSS_MODE = true
  それ以外: CROSS_MODE = false

IF FILE_ARGS が空(引数なし、またはスコア閾値テキストのみ):
  ASK USER: 対象スキルのパスを教えてください("all" で .claude/skills/ 全件)
  WAIT_FOR: ユーザーの回答
  FILE_ARGS = ユーザーの回答
  IF "--cross" が元の引数に含まれる かつ FILE_ARGS が単一ファイルパス("all" および複数パスは除く):
    CROSS_MODE = true
  ENDIF
ENDIF

IF FILE_ARGS が "all":
  LIST: .claude/skills/ 内の全 .md ファイルを対象にする
  → MULTI_FILE_PROCESS を実行する
ELIF FILE_ARGS が複数パス(スペース区切りで2つ以上のファイルパス):
  LIST: FILE_ARGS で指定されたパスを対象ファイル一覧とする
  → MULTI_FILE_PROCESS を実行する
ELSE:
  READ: <対象スキルファイル>  ← FILE_ARGS のパス
  IF ファイルが存在しない:
    REPORT: "ファイルが見つかりません: <パス>"
    STOP
  ENDIF
  IF CROSS_MODE = true:
    EXTRACT(親スキル): 通常の EXTRACT に加え、子スキルのパスを抽出する
      - Skill ツール呼び出しに含まれるスキル名(例: `skill: "craft"` → `.claude/skills/craft/SKILL.md`)
      - Agent ツールに渡されるプロンプト内のスキルパス参照
    FOR EACH 子スキルパス:
      READ: 子スキルファイル
      IF ファイルが存在しない: WARN "子スキルが見つかりません: <パス>" → スキップ
    対象ファイル一覧 = [親スキル] + [存在した子スキル]
    IF 子スキルが0件:
      WARN: "子スキルが見つからないためクロスチェックをスキップします"
      CROSS_MODE = false
      単一ファイルとして処理を続行する → ステップ2へ
    ELSE:
      → MULTI_FILE_PROCESS を実行する(ステップ2.5完了後にステップ4.5も実行)
    ENDIF
  ELSE:
    — CROSS_MODEなし: 通常の単一ファイル処理としてステップ2へ進む
  ENDIF
ENDIF

MULTI_FILE_PROCESS:
  各ファイルについて READ → EXTRACT → ステップ2・3・4 の順に実行する
  全ファイル完了後、ステップ2.5を一度だけ実行する
  CROSS_MODE = true の場合はステップ4.5を実行する
  その後ステップ5に進む
  ステップ5では全提案を "#<ファイルindex>-<提案番号>" 形式で表示し
  "1-1 2-3 / all / skip" 形式で選択させる

EXTRACT(コンテキスト内に保持し、ステップ2〜4で参照する):
  - スキルの目的(frontmatter の description)
  - ステップの数・構造・順序
  - ゲート(GATE / WAIT_FOR / PROHIBITED)の位置
  - サブエージェント呼び出し(Agent ツール)の有無と渡すプロンプト
  - ファイル操作(Read / Write / Edit / Glob)
  - 変数(<cwd> など)の定義と使用箇所

DETECT スキルの種別([E] の評価方法が変わる):
  プログラム型: Agent ツール(サブエージェント)呼び出しを含む → [E] はプログラム型チェックを適用
               ※ WAIT_FOR はユーザーインタラクションであり [E] の評価対象とは無関係
  指示文型: Claude への自然言語指示のみ(サブエージェント呼び出しなし) → [E] は指示文型チェックを適用
  判断に迷う場合(Agent 呼び出しが 1 箇所のみなど): プログラム型として扱う

DETECT 書き込み・不可逆操作の有無([D] の評価方法が変わる):
  あり: Write / Edit / Bash(副作用あり)/ 外部API書き込みを含む → [D] はゲート設計チェックを適用
  なし: Read / Glob / Grep / WebSearch のみ → [D] はスコープ純粋性チェックを適用

ステップ 2: 6次元の静的評価

各次元を 1〜5 で採点し、問題箇所を行番号付きで列挙する。

EVALUATE:

SCORING INTEGRITY(全採点に適用):
  PROHIBITED: ループを終わらせるためにスコアを意図的に高くすること
  PROHIBITED: ループを継続させるためにスコアを意図的に低くすること
  PROHIBITED: 前回スコアとの連続性を保とうとすること(毎回独立して採点する)
  PROHIBITED: 改善の件数・努力量をスコアに反映させること
  RULE: スコアを確定する前に、各次元で「通過したCHECK / 失敗したCHECK」を列挙する
  RULE: スコアの根拠はチェックリストの充足状況のみとする

NOTE: EXTRACT 結果(ステップ1)を各次元の採点根拠として使うこと。ファイルの再読みは最小限にする。
  [A] → 「ステップの数・構造」「ファイル操作」(重複・冗長・肥大化の確認)
  [B] → 「description」「GATE 位置」「変数の定義と使用箇所」
  [C] → 「ファイル操作」「条件分岐パス」「GATE / WAIT_FOR の位置」
  [D] → 「ファイル操作(Write / Edit の有無)」「GATE / WAIT_FOR の位置」「PROHIBITED」
  [E] → 「Agent ツール呼び出しの有無と渡すプロンプト」「WAIT_FOR の数と位置」
  [F] → 「description」「ファイル操作の READ タイミング」

[A] トークン効率
  CHECK: 同じ情報が複数箇所に重複していないか
  CHECK: 削除しても意味が変わらない説明・前置き・まとめがないか
  CHECK: テーブルや疑似コードに冗長な列・行がないか
  CHECK: 同じ構造の繰り返しをループで書けるのに展開されていないか
  CHECK: SKILL.md が肥大化していて、相互排他的なコンテキストを
    別ファイルに分離してトークン使用量を削減できないか
    (大きな SKILL.md は必要なときだけ参照するサブファイルに分割できる)
  CHECK: 参照ファイルが実行開始時に一括ロードされる設計になっていないか
    (just-in-time 読み込みを優先する。必要になった段階で READ すること)

[B] 明瞭性
  CHECK: 命令が1通りにしか解釈できないか(2通り以上ある = 問題)
  CHECK: 変数名・ファイルパス・条件が文脈なしで特定できるか
  CHECK: REQUIRE / ASSERT / GATE / PROHIBITED が一貫して使われているか
  CHECK: サブエージェントへのプロンプトに「何をするか」が明確に書かれているか
  CHECK: frontmatter の description が「Claudeがこのスキルを呼ぶべき状況」を
    一文で判断できるほど具体的か
    (descriptionの質が自動呼び出し精度を直接決める。曖昧な description は誤呼び出し・未呼び出しの原因)
  CHECK: 重要なルールに「IMPORTANT」「YOU MUST」等の強調が付いているか
    (スキルが肥大化するほどルールが埋もれる。強調で埋没を防ぐ)

[C] 完全性
  CHECK: 各ステップに失敗したときの処理が書かれているか
  CHECK: 暗黙の前提(OS・権限・依存ツール)が明示されているか
  CHECK: ファイルパスが相対と絶対で混在していないか
  CHECK: 条件分岐の全パス(IF/ELSE/ELIF)が網羅されているか
  CHECK: スキル実行後にエージェントが成功を自己検証できる手段が記述されているか
    (コマンド実行・ファイル存在確認・ビルド成功確認 等)
    ※ 検証手段がないと「見た目は動いているが実は壊れている」状態を見逃す
  CHECK: ステップ間のデータ受け渡し(変数・ファイル・EXTRACT結果等)の依存関係が明示されているか
    (暗黙の受け渡しは、ループや分岐があると実行順により未初期化になることがある)
  CHECK: ループ・繰り返し処理がある場合、イテレーションごとに行うことと一度だけ行うことが区別されているか

[D] ゲート設計・スコープ純粋性
  書き込み・不可逆操作を含む場合(ゲート設計):
    CHECK: ユーザー確認(WAIT_FOR)が不可逆な操作の前にあるか
    CHECK: PROHIBITED でゲートをスキップする抜け道が塞がれているか
    CHECK: ゲート後の処理がゲート前に漏れていないか
  書き込み・不可逆操作を含まない場合(スコープ純粋性):
    CHECK: スキルが description で宣言した目的以外の操作をしていないか
    CHECK: 副作用(ファイル作成・外部サービス呼び出し)が予告なく発生しないか
    CHECK: ユーザーが期待しない出力・操作が含まれていないか

[E] エージェント・対話効率
  プログラム型の場合:
    CHECK: サブエージェントのプロンプトに不要なコンテキストが含まれていないか
    CHECK: 直列になっているが並列化できるステップがないか
    CHECK: サブエージェントの完了待ちが明示されているか
    CHECK: 親エージェントとサブエージェントで同じ作業を二重にしていないか
  指示文型の場合:
    CHECK: WAIT_FOR(ユーザー確認)の回数が最小限か(不要な往復がないか)
    CHECK: ユーザーへの複数の質問を 1 メッセージにまとめているか
    CHECK: スキップ条件・早期終了条件が定義されていて無駄なステップを踏まないか
    CHECK: 確認なしで進めるステップを WAIT_FOR でブロックしていないか

[F] Progressive Disclosure(段階的開示)
  ※ Anthropic 公式の推奨設計原則
  CHECK: description がスキルを呼ぶべき状況をClaude単独で判断できる具体性を持っているか
    (第1段階: descriptionだけでトリガー判断 → 曖昧だと呼ばれない・誤呼ばれする)
  CHECK: SKILL.md 本体を読めば実行に必要な情報が揃うか、あるいは
    参照先ファイルへの READ 指示が明示されているか
    (第2段階: SKILL.md全体をコンテキストに読む)
  CHECK: 参照ファイルが「必要になった段階で初めて READ する」設計になっているか
    (第3段階以降: 参照ファイルは on-demand ロード。事前一括ロードはトークン浪費)
  CHECK: 肥大化した SKILL.md を複数サブファイルに分割できる余地がないか
    (相互排他的なコンテキストの分離でトークン消費を削減できる)

ステップ 2.5: 全書き直し判定

単一ファイルモード: ステップ2直後に実行する。 all / 複数パスモード: 全ファイルのステップ2〜4完了後に一度だけ実行する。

IF 対象ファイルのうち「2/5 以下の次元が 3つ以上」のものが1つ以上ある:
  WARN: 該当ファイルを列挙し、差分修正より全書き直しが適切な可能性を伝える
  IF AUTO_MODE = false:
    ASK USER:
      「続行しますか? 続行 → 差分修正を進める / 中止 → 書き直しはユーザーが行う」
    WAIT_FOR: ユーザーの選択
    IF 中止: STOP
  ELSE:
    REPORT: "AUTO_MODE のため差分修正を続行します"
  ENDIF
ENDIF

ステップ 3: Adversarial Trace(実行シミュレーション)

PERSONA: コールドスタートのサブエージェント(このスキルを初めて見る)

GOAL: 各ステップを「意図的に誤解しやすい解釈」で読み、混乱・スキップ・誤動作が起きる箇所を探す

TRACE TARGETS:
  - 「この命令、2通りに読める」と感じた箇所
  - 「これは省略してもいいかな」と思えた箇所
  - 「どのディレクトリで実行すればいい?」と迷った箇所
  - 「この変数、どこで定義されてたっけ?」と戻りたくなった箇所
  - 「エラーが出たらどうすればいい?」と詰まった箇所
  - 「ゲートの条件を満たしているか判断できない」箇所
  - 「このスキルが今のタスクに関係するか分からない」(description が曖昧)
  - 「作業が完了したか自分で確認する方法がない」(検証手段の欠如)
  - 「このルール、重要なのか流し読みしていいのか分からない」(強調不足)
  - 「参照ファイルをいつ読めばいいか分からない」(just-in-time ロードが不明確)
  - 「ステップAで作ったデータ、ステップBで本当に使えるのか?」(データ受け渡しの暗黙性)
  - 「このステップはファイルごとに実行?それとも全体で一度だけ?」(ループの粒度の不明確さ)

OUTPUT: 混乱・誤解・スキップが起きやすい箇所のリスト(行番号付き)
  各発見に含める:
    箇所: L<行番号>
    観察: <何が起きるか>
    Root Cause: <なぜ起きるか(設計の欠陥・曖昧な境界・欠落した前提など)>
  ※ Root Cause はステップ4の提案生成の根拠として引き継ぐ

ステップ 4: 改善案の生成

FOR EACH 問題箇所(ステップ2・3の結果を統合):
  IF REJECT_BUFFER に同一箇所・同一分類の提案が存在する: スキップ
  GENERATE 改善提案:
    分類: [A〜F]
    優先度: HIGH(動作に影響)/ MEDIUM(品質に影響)/ LOW(読みやすさ)
    場所: L<行番号> または セクション名
    改善次元: [改善する次元] / trade-off: [低下しうる次元](なければ省略)
    Root Cause: <ステップ3の Root Cause、またはステップ2のCHECK失敗が起きる設計上の原因>
    Before: <現在の記述>
    After:  <改善後の記述>
    理由:   <1行>

SORT BY 優先度(HIGH → MEDIUM → LOW)

ステップ 4.5: 親子スキル一貫性チェック(CROSS_MODE = true のみ)

READ: {SKILL_DIR}/CROSS_CHECK.md
IF ファイルが見つからない:
  WARN: "CROSS_CHECK.md が見つかりません: {SKILL_DIR}/CROSS_CHECK.md"
  CROSS_MODE = false → 単一ファイル処理としてステップ5へ進む

ステップ 5: ユーザー確認 & 適用

SHOW USER:
  スコアサマリー(6次元の採点)
  改善提案リスト(番号付き、優先度順)

FORMAT:
  ── スコア ──────────────────────────────────
  [A] トークン効率          : X/5
  [B] 明瞭性                : X/5
  [C] 完全性                : X/5
  [D] ゲート設計・スコープ純粋性: X/5
  [E] エージェント・対話効率    : X/5
  [F] Progressive Disclosure: X/5
  ────────────────────────────────────────────

  ── 改善提案 ────────────────────────────────
  #1 [B] HIGH — L42: <問題の概要>
  Before: ...
  After:  ...
  理由: ...
  ────────────────────────────────────────────
  #2 ...

  ※ 複数ファイルモード(all / 複数パス)の場合:
  ── ファイル1: <パス> ───────────────────────
  [A] トークン効率          : X/5
  [B] 明瞭性                : X/5
  [C] 完全性                : X/5
  [D] ゲート設計・スコープ純粋性: X/5
  [E] エージェント・対話効率    : X/5
  [F] Progressive Disclosure: X/5
  ────────────────────────────────────────────
  ── ファイル2: <パス> ───────────────────────
  ...(同形式)
  ────────────────────────────────────────────
  ── 全ファイルの改善提案 ─────────────────────
  #1-1 [B] HIGH — L42: ...
  #2-3 [D] MEDIUM — L8: ...
  ─────────────────────────────────────────────

  ※ CROSS_MODE = true の場合のみ追加表示:
  ── 親子スキル一貫性 ──────────────────────────
  #X-1 [X2] MEDIUM — file1 vs file3: ...
  問題: ...
  推奨: ...
  理由: ...
  ─────────────────────────────────────────────

RECOMMEND:
  優先度 HIGH の提案から、以下の順で上位 3 件を選ぶ:
    1. trade-off なし かつ 改善次元が 2 つ以上(Pareto 改善)
    2. trade-off なし かつ 改善次元が 1 つ
    3. trade-off あり(必ず理由を添える)
  例: "#1 #3 #5 を最初に適用することを推奨します(理由: ...)"

IF AUTO_MODE = false:
  ASK USER:
    "適用する改善案を選んでください"
    "通常モード: 1 3 5 / all / skip"
    "all モード:  1-1 2-3 / all / skip(<ファイルindex>-<提案番号> 形式)"
  WAIT_FOR: ユーザーの選択
  IF ユーザーが "skip": REPORT "改善をスキップしました" → STOP
  IMPORTANT — PROHIBITED: ユーザーの選択なしにファイルを書き換えること
ELSE:
  承認された番号 = 全提案番号("all" として扱う)
  REPORT: "AUTO_MODE のため全提案を適用します"
ENDIF

FOR EACH 承認された番号(all モードでは "<ファイルindex>-<提案番号>" 形式):
  IDENTIFY: 対象ファイルと行番号を改善提案から特定する
  EDIT: 対象スキルファイルの該当箇所を改善後の記述(After:)に置き換える

VERIFY:
  変更した箇所を READ して、After: の内容が正しく反映されているか確認する
  差異があれば再 EDIT する(最大2回。それでも残る場合:
    AUTO_MODE = false: ユーザーに報告して手動修正を依頼する
    AUTO_MODE = true: WARN を出力してスキップし次の提案へ進む)

DETECT LOOP_COUNT:
  会話コンテキスト内の "適用後スコア: 平均" の出現回数を数える
  LOOP_COUNT = 出現回数 + 1(今回を含む)

IF LOOP_COUNT >= 5:
  WARN: "5サイクルを超えました。改善が収束しないため強制終了します。"
  STOP
ENDIF

EVALUATE 改善後スコア(改善を1件以上適用した場合のみ):
  改善後の状態で6次元スコアを再評価し、平均を算出する(今回平均)

IF LOOP_COUNT >= 2:
  前回平均 = 直前の "適用後スコア: 平均 Y.Y/5" の Y.Y を取得
  IF 今回平均 - 前回平均 < 0.2:
    REPORT: "スコア改善幅が 0.2 未満です({前回平均} → {今回平均})。改善が頭打ちのためループを終了できます。"
    STOP
  ENDIF
ENDIF

REPORT:
  "X 件の改善を適用しました: <ファイルパス>"
  "適用後スコア: 平均 Y.Y/5 — [A]X [B]X [C]X [D]X [E]X [F]X"
  IF 提案がゼロ件だった、または平均スコアが変化なし:
    "改善の余地がありません。ループを終了できます。"
  ELSE:
    "再度 /improve-skill を実行すると次のサイクルを行えます。"

評価の限界(検出できないもの)

このスキルが静的解析で検出できない問題:

  • 環境依存の失敗(OSのバージョン・インストール済みツールの差異)
  • ライブラリのバージョン変更による破壊的変更
  • 実際の出力が期待と異なるケース(Claude の解釈次第で変わる動作)
  • 対象プロジェクトの文脈に依存する正しさ(正しいシグナル名・パスなど)

これらは実プロジェクトでの使用後のポストモーテムで補完する。

Install via CLI
npx skills add https://github.com/agaemo/dotfiles --skill improve-skill
Repository Details
star Stars 0
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator