コード改善ツール (Code Improver)
/code-improver:improve を実行すると、コードターゲットを改善できます。これは動的ワークフローで、指定されたレビュアーと修正サブエージェントをループさせ、レビューが重大かつ致命的な問題をゼロと報告するまで繰り返した後、自身の残骸を削除します。ループ、その台帳、ガード機構はワークフロー内に存在します。このスキルは、汎用エントリが必要とする3つの入力を収集し、結果を中継します。
ループの開始
ユーザーから提供された情報: $ARGUMENTS (空の場合は、会話の詳細から取得します)
1. 必要な3つの入力を収集する — 推測は禁止
- ターゲット: 改善対象のディレクトリへの絶対パス。相対パスはワーキングディレクトリを基準に解決し、ディレクトリが存在することを確認します。
- レビュアー: すべてのレビューを実行するインストール済みのスキルまたはエージェント。ユーザーが名前を指定する必要があります。デフォルトはなく、バンドルされたレビュアーもありません。種類を判別します:
- 名前空間付きエージェント(例:
plugin-dev:skill-reviewer)→"kind": "agent" - インストール済みスキル(例:
pr-review-toolkit:review-pr)→"kind": "skill"名前がどちらにも該当する可能性がある場合は、セッションのスキル一覧を確認します。それでも曖昧な場合はユーザーに尋ねます。レビュアーが指定されていない場合は、尋ねてください — 自分で選ばないでください。
- 名前空間付きエージェント(例:
- スコープ: ループが触れてよいリポジトリ相対のグロブ。汎用エントリはこれを明示的に要求します。ユーザーが指定しなかった場合は、ターゲットディレクトリ(
<repo-relative-target>/**)を提案し、起動前に確認します。
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: "<ステップ2のパス>", args: {...}} で実行します:
{
"target": "<絶対ターゲットパス>",
"reviewer": { "kind": "agent|skill", "name": "<名前空間付き名前>", "notes": "<レビュアーがターゲットについて知っておくべきこと>" },
"scope": ["<リポジトリ相対グロブ>/**"],
"pluginRoot": "<ステップ2のプラグインディレクトリ>",
"maxRounds": 5
}
maxRoundsは、ユーザーが異なる上限を要求した場合のみ指定します。pluginRootは実行時にメトリクスコレクターを見つけるために使用します。このキーは、ステップ2がワークフロー名にフォールバックした場合のみ省略します — その場合ワークフローは自分自身を検索します。finalize({"version_bump": bool, "narration_strip": bool, "docs_pass": bool})は、デフォルトを上書きする場合のみ指定します: ターゲットがプラグイン内にある場合はバージョンバンプ、ナレーション削除とドキュメントパスは常に実行されます。decisionは継続時のみ指定します(下記参照)。
ワークフローはバックグラウンドで実行され、監視は不要です。レビュー、修正、再レビューを行い、修正ラウンドごとにスコープを確認し、クリーンなレビューでのみ完了できます。コミットは一切行われず、すべての変更はワーキングツリーに残ります。
Workflowツールが利用できないか拒否された場合は、停止してその旨を伝えてください。 ループを直接編集でインライン実装しないでください — 台帳、スコープガード、エスカレーション保証はワークフロー内にあり、インラインの模倣にはそれらが一切ありません。
結果が halted: "reviewer-unavailable" の場合は、その旨を伝えて停止してください。 指定されたレビュアーはこのセッションにインストールされていません。どのプラグインが提供するかをユーザーに伝え、インストール後に再実行してください。自分でターゲットをレビューしないでください。
ループ実行中はあなたのターンを終了しないでください。 Workflowツールは即座にタスクIDを返します。結果は後で届きます。インタラクティブセッションでは、完了通知があなたを再呼び出しします — それを待ってください。非インタラクティブ実行(スクリプト、CI、評価)では後続のターンがありません。途中で停止するとループがラウンド途中で放棄されるため、起動後はタスク(返されたタスクIDを使用したTaskOutput、またはスリープ&再チェック)が完了するまでポーリングし、その後結果を中継してください。「ループは実行中です。後で報告します」と答えるセッションは、実行を失ったことになります。
結果の中継
ワークフローは構造化された結果を返します。正直に報告してください — その違いは重要です:
converged: true— 最後のアクションが、重大かつ致命的な問題がゼロのレビューでした。使用ラウンド数、残っている軽微な問題の数 (open_minor_count)、およびアーティファクトパス (ledger_path,metrics) を報告します。capped: true— 修正予算を使い切り、最終レビューでもまだブロックする問題が見つかりました。明確に報告: 上限に達した、収束していない、そしてopen_blockingをリストします。これを成功として提示しないでください。escalation— ループが収束していないことを検出しました(繰り返し発生する問題、減少しないカウント、または問題を別の場所に移動させた修正)。エスカレーションメッセージと問題IDをユーザーに中継します: これはさらなるラウンドではなく、設計上の決定が必要です。halted— ガードが発動しました(スコープ違反、未登録の新しいファイル、停止または利用不可のレビュアー、またはファイナライズパスによる編集が後続のチェックに失敗した場合)。violations/new_untracked_filesのパス、finalize_regressionsのサイト、およびメモを中継します。notesは常に結果に付随します — それらを表面化してください。「gitリポジトリが初期化されました」などの重要な警告が含まれています。
エスカレーション後の継続
ループは設計上、エスカレーション時に停止します。ユーザーが判断したら、同じ target と reviewer に加えて以下を指定して新しい実行を開始します:
{ "decision": "<ユーザーの判断、そのまま>" }
新しい実行はディスク上の台帳を再読み込みするため、すべての発見事項、却下、判定が引き継がれます。ラウンドは再開され、再導出は行われません。
実行中のループを停止するには、ワークフロータスクを停止します(TaskStop)。ディスク上の台帳は最後のラウンド時点で最新であり、再実行はそこから再開されます。
使用すべきでない場合
- Claude Codeスキル:
skill-improverエントリを使用してください — 適切なレビュアーを配線します。 - ブランチ / プルリクエスト:
pr-improverエントリを使用してください — 差分からスコープを導出します。 - 1回限りのレビュー: レビュアーを直接呼び出してください。ループの価値は反復にあります。
- 簡単な単発修正: ファイルを直接編集してください。