PR Improver
現在のブランチを改善するには、/code-improver:improve を実行します。これは動的ワークフローで、PRレビュアーと修正サブエージェントをブランチの変更に対してループさせ、レビューがクリティカル/メジャーな指摘をゼロにするまで繰り返します。ループ、その台帳、ガードはワークフロー内に存在します。このスキルはブランチの差分からスコープを導出し、結果を中継します。
ループの開始
ユーザーから提供された: $ARGUMENTS(空の場合は、ベースブランチと設定を会話から取得)。
1. ブランチとその変更範囲の解決
- リポジトリルート:
git rev-parse --show-toplevel。リポジトリ外ではエラーを出力して停止。 - ベース: 引数があればそれ、なければリポジトリのデフォルトブランチ(
git symbolic-ref refs/remotes/origin/HEAD→ その短縮名、それもなければmain)。現在のブランチがベースと同じ場合は実行を拒否 — 改善する差分がありません。 - 変更ファイル:
git diff --name-only <base>...HEAD。空の場合はその旨を伝えて停止。 - スコープ: 変更ファイルのディレクトリを拡大して取得 — ファイル単位のグロブは狭すぎます(PR修正では、変更コードの隣にテストを追加するのが正当です)。各変更ファイルをそのリポジトリ相対ディレクトリグロブ
<dir>/**にマッピング(ルート直下のファイルが変更された場合のみ**をルートに)、その後重複を除去し、別のグロブに包含されるものを削除。
2. ループスクリプトの解決
ループはこのプラグイン内の動的ワークフロー workflows/improve.js です。パスで起動: scriptPath は解決された絶対パスを取ります。Workflow ツールの name はビルトインおよびプロジェクトワークフローを解決するため、マーケットプレイスからインストールされたものは code-improver:improve に応答しない可能性があります。以下の順で試し、最初に見つかったものを使用 — ホームディレクトリが . より先に来るため、インストール済みコピーがこのマーケットプレイスのチェックアウトより優先されます。
Bash: ls -d -- "${CLAUDE_PLUGIN_ROOT}/workflows/improve.js"Bash: ls -d -- "${CODEX_PLUGIN_ROOT}/workflows/improve.js"(代わりにその変数が設定されている場合)Bash: find ~/.claude ~/.codex . -maxdepth 7 -path '*/code-improver/workflows/improve.js' -print -quit 2>/dev/null
出力されたパスをそのまま使用します。そのプラグインディレクトリ — パスから /workflows/improve.js を削除したもの — が pluginRoot です。3つすべて空の場合は、{name: "code-improver:improve"} を一度試します。それも利用できない場合は停止し、ループが見つからなかったことを伝えます。手動でパスを組み立てたり、ループを即興で作成したりしないでください。
3. ワークフローの呼び出し
Workflow ツールで、{scriptPath: "<step 2 のパス>", args: {...}} のように実行します。
{
"target": "<リポジトリルート>",
"reviewer": {
"kind": "skill",
"name": "pr-review-toolkit:review-pr",
"notes": "ワーキングツリーの変更を <base> に対するプルリクエストとしてレビュー: 正確性、テスト、エラーハンドリング、およびスキルが規定するレビューの観点。"
},
"scope": ["<導出されたディレクトリグロブ>/**"],
"pluginRoot": "<step 2 のプラグインディレクトリ>",
"maxRounds": 5
}
reviewer— 上記のデフォルトではpr-review-toolkitプラグインが必要です。ユーザーが別のPRレビュアー(スキルまたはエージェント)を指定した場合は、それを使用し、kind を適宜設定します。maxRoundsは、ユーザーが異なる上限を指定した場合のみ設定。pluginRootは実行がメトリクスコレクターを見つけるために必要です。step 2 でワークフロー名にフォールバックした場合のみ、このキーを省略 — ワークフローは自身を検索します。finalizeのデフォルトはPRに適しています: ブランチがプラグイン内にない限りバージョンバンプなし、ナレーション削除とドキュメントパスはそのまま。decisionは継続時のみ(後述)。
ループのベースラインスナップショットはループ開始時のツリーです — そのスコープガードはブランチの未コミット作業を保護します。PR自身のコミットがレビュアーによってレビューされるものです。
ワークフローはバックグラウンドで実行され、監視は不要です: レビュー、修正、再レビュー、修正ラウンドごとにスコープチェックを行い、クリーンレビューでのみ完了できます。決してコミットは行いません。すべての変更はワーキングツリーに残ります。
Workflow ツールが利用できない、または拒否された場合は、その旨を伝えて停止してください。 ループを直接編集で即興で作成しないでください — 台帳、スコープガード、エスカレーション保証はワークフローに存在し、インラインで模倣したものにはそれらがありません。
結果が halted: "reviewer-unavailable" の場合は、その旨を伝えて停止してください。 レビュアーがこのセッションにインストールされていません。どのプラグインがそれを提供しているか(デフォルトでは pr-review-toolkit が必要)をユーザーに伝え、インストール後に再実行してください。自分でブランチをレビューしないでください。
ループが実行中はあなたのターンを終了しないでください。 Workflow ツールはタスクIDを即座に返します。結果は後で届きます。インタラクティブセッションでは、完了通知があなたを再度呼び出します — それを待ってください。非インタラクティブ実行(スクリプト、CI、eval)では後続のターンがないため、途中で停止するとループを放棄することになります。起動後は、返されたタスクIDを使って TaskOutput でポーリングするか、スリープして再チェックし、完了するまで待機してから結果を中継してください。「ループは実行中です。後で報告します」と答えるセッションは実行を失います。
結果の中継
ワークフローは構造化された結果を返します。正直に報告してください — 違いは重要です。
converged: true— 最後のアクションがクリティカル/メジャーな指摘ゼロのレビューでした。使用したラウンド数、残ったマイナー指摘数(open_minor_count)、および成果物パス(ledger_path、metrics)を報告。capped: true— 修正予算を使い切り、最終レビューでも依然としてブロッキングな問題が見つかりました。明確に: 上限到達、収束していないと伝え、open_blockingをリストアップ。これを成功として提示しないでください。escalation— ループが収束しないことを検出(繰り返し発生する指摘、減少しないカウント、または修正が問題を別の場所に移動させたなど)。エスカレーションメッセージと指摘IDをユーザーに伝えてください: これはさらなるラウンドではなく、設計上の決定が必要です。halted— ガードが発動(スコープ違反、未登録の新しいファイル、応答しないまたは利用できないレビュアー、またはファイナライズパスでそれに続くチェックに失敗した編集など)。violations/new_untracked_files内のパス、finalize_regressions内の箇所、および notes を報告。notesは常に結果と共に添付されています — それらを表面化してください。例えば「git リポジトリが初期化されました」のような重大な警告が含まれます。
エスカレーション後の継続
ループは設計上、エスカレーションで停止します。ユーザーが決定したら、同じ引数に以下を追加して新しい実行を開始します。
{ "decision": "<ユーザーの判断をそのまま>" }
新しい実行はディスク上の台帳を再読み込みするため、すべての指摘、却下、判定が引き継がれます — ラウンドは再開され、再導出は行われません。
実行中のループを停止するには、ワークフロータスクを停止します(TaskStop)。ディスク上の台帳は最後のラウンドまでの状態であり、再実行はそこから再開します。
使用すべきでないケース
- 一度きりのレビュー: PRレビュースキルを直接実行してください。ループの価値は反復にあります。
- スキル:
skill-improverエントリを使用してください。適切なレビュアーを配線します。 - プッシュ前の探索的作業: review-and-fix ループは差分を固めます。形状が流動的なうちは、手動の反復がより制御を提供します。