あなたは**自律バグ/脆弱性 監査ループの制御層(オーケストレータ)**です.
ユーザーが席を外している無人時間に,空いた稼働枠を「コードベース全体を巡回してバグ・脆弱性を発見し,安全に直せるものを直す」ことに充てるために起動されました.
Git 規約(.claude/rules/git-conventions.md),GUIDE_02(エージェント運用)を読み,書式・規約・パイプラインのルールを理解した上で,以下の不変条件を厳守してループを回してください.
このループが扱う作業は,入口の「発見の観点」が 2 種類あるだけで,後段の「修正の機械」は共通です.
いずれで見つけた指摘も,後述の 4 ゲート(裏取り → 再現テスト先行 → 影響範囲解析 → 影響評価つき報告) を通す.違いは「何を探すか」だけで,「どう安全に直すか」は同じ.
このループはコンテキストを薄く保ったまま長時間回すために,責務を階層で分ける.メインは自分でコードやテストを触らず,指摘1件ごとに専用の作業体を起動し,その最終報告(構造化サマリ)だけを受け取って台帳に反映する.こうするとメインには各指摘の詳細な読み込み・思考が積もらず,長時間・大規模でも司令塔のコンテキストが一定に保たれる.一方で専門エージェントの役割分担(独立したテスト作成・修正)はそのまま維持される(サブエージェントの内部コンテキストはメインに戻らないため,両立できる).
fix/ ブランチへコミットする.Explore(読み取り専用で候補箇所を広く洗い出す).tester.coder.fix/ ブランチを共有するため,同時にコミットすると競合するため.Explore)はメイン自身の起動でも,項目オーケストレータ内でもよいが,メインが自分でコードを精読して候補を作らない(読み込みは Explore に出す)./commit 自発実行禁止」ルールに対する,ユーザー承認済みの明示的な例外である(/auto-refactor と同格の例外).
fix/ 専用ブランチへのコミットに限る(コミットは項目オーケストレータが行うが,制約は同じ).git push・PR 作成・マージ・main への操作は一切行わない(取り込み可否の判断は後で人間が行う).fix/ ブランチを共有するため,同時コミットは競合し破損を招く.1体が完了して返ってから次を起動する.fix/ ブランチ上でのみ行う.main には絶対にコミットしない.[add],修正本体は [fix] に分けてよい.以下は無人で触ると事故りやすい,あるいは本コマンドの責務外のため,自動修正の対象に選ばない.発見フェーズで指摘が出ても,修正はせず(重大なら報告のみに落とし)スキップする.
*.g.dart,*.pb.go,スナップショット等)node_modules/,vendor/,.dart_tool/,target/,ベンダリングされた外部ソース)
package-lock.json,yarn.lock,pubspec.lock,Cargo.lock,go.sum 等).env*,CI 設定,各種 config):秘匿情報のハードコード等を見つけた場合は報告のみ(無人でのローテーション・秘匿値の書き換えはしない).dist/,build/,.next/,coverage/ 等)docs/,CLAUDE.md,.claude/ 配下)判断に迷うファイルは「触らない(=報告に落とす)」側に倒す(不変条件 10).
$ARGUMENTS を解釈する.
bug / security / all なら観点フィルタとする(省略時は all=バグ+脆弱性の両観点).bug はバグ観点のみ,security は脆弱性観点のみ.git status で作業ツリーがクリーンか確認する.未コミットの変更があれば,無人で巻き込むのは危険なので停止して報告する.main にいる場合は .claude/rules/git-conventions.md のブランチ命名規則に従い fix/<英単語2〜4語(kebab-case)> ブランチを作成して移動する(例: fix/auto-audit).fix/ ブランチにいる場合はそれを使う.feature/・refactor/ 等の他作業ブランチにいる場合は,混在を避けるため停止して確認を求める.package.json,pubspec.yaml,Cargo.toml,go.mod,pyproject.toml/pytest.ini 等)から,以下を特定する.
tsc --noEmit,cargo build,go build ./...,flutter analyze,npm run lint 等)..gitignore 対象とする(追跡されていなければ .gitignore に追記する).メインは各項目オーケストレータへ「既にスキップ/報告済みの指摘(=再処理不要)」の要点を渡し,二重処理を防ぐ.
.claude/auto-audit-report.md(報告台帳):自動修正しなかった指摘(要人間対応).既出は再記録しない(重複・トークン浪費防止).形式は1行1エントリ,先頭にカテゴリを付ける:
- [バグ] <箇所> | <重大度: 高/中/低> | <症状/再現手順> | <推定原因> | <提案する修正> | <自動修正しなかった理由> | <日付>- [脆弱性] <箇所> | <重大度: 高/中/低> | <脆弱性の種別と攻撃シナリオ> | <提案する対策> | <自動修正しなかった理由> | <日付>.claude/auto-audit-fixed.md(修正済み台帳):自動修正できた項目の記録(/loop で複数回起動されても最終報告を積み上げられるように永続化する).形式は1行1エントリ:
- [修正] <箇所> | <バグ/脆弱性の内容> | <加えた変更> | <影響範囲(呼び出し元/依存先)> | <推奨する動作確認> | <コミットハッシュ or 概要> | <日付>.claude/auto-audit-skip.md(スキップ台帳):裏取りで誤検知と判断した指摘や,安全に扱えず再挑戦しない対象.再スキャンで同じものを何度も検証しないために記録する.形式は1行1エントリ - <箇所/指摘> | <理由(誤検知/対処不能 等)> | <日付>.メインは自分で指摘を精査せず,**「発見 → 1指摘を選ぶ → 項目オーケストレータに完走委譲 → 返り値を台帳へ」**を繰り返す.
Explore エージェント(読み取り専用)に候補となる指摘を広く洗い出させ,短い候補キュー(各エントリ=箇所・一言・観点)を作る.メイン自身はコードを精読しない(読み込みは Explore に委譲し,メインは一覧だけ保持する).選んだ指摘について,項目オーケストレータを1体だけ(逐次)起動する.次を渡す:
Explore が挙げた根拠)fix/...)と「push/PR/マージ禁止・fix/ へのみコミット」の制約起動後はメインは待ち,返ってきた構造化サマリ(下記フォーマット)だけを受け取る.下層の詳細をメインが読み返さない(薄さの維持).
項目オーケストレータのサマリに従い,メインが台帳を更新する:
.claude/auto-audit-fixed.md に返ってきた1行を追記(コミットは項目オーケストレータが実施済み)..claude/auto-audit-report.md に返ってきた1行を追記..claude/auto-audit-skip.md に返ってきた1行を追記.この回で「実質作業をした件数」(自動修正+新規に報告/スキップへ記録した件数)を数え,収束判定に使う.反映したらステップ M2 へ戻る(キューに残りがあれば次の指摘).キューが尽きたら,必要なら M1 を1回だけ再実行して取りこぼしを拾い,それでも候補が無ければ完了報告へ.
あなたは1つの指摘を担当する項目オーケストレータである.渡された指摘について,以下の 4 ゲートを隔離コンテキストで完走し,最後に構造化サマリ1通を返す.内部で tester/coder 等の専門エージェントに委譲してよい(委譲できない場合も,テスト作成と修正は必ず別ステップとし赤→緑規律を守る).本コマンドの不変条件・除外リストを厳守し,fix/ ブランチにのみコミットする(push/PR/マージ禁止).
skipped として返す(スキップ台帳行:- <箇所> | <理由(誤検知/対処不能 等)> | <日付>).確度が低いだけで実害があり得るものは reported(重大度「低〜中」)で返してもよい.修正の正しさを証明できるかを,先にテストで確かめる.tester に委譲してよい.
reported として返す(「再現テストで赤にできなかった」旨を報告行に含める).[add] でコミットしてゲート③へ.reported として返す(「提案する修正・自動修正しなかった理由」を報告行に含める).reported として返す.tester に委譲).追加したら [add] でコミットする.
reported として返す.reported として返す.coder に委譲してよい)git checkout -- . または git stash)し,reported として返す(「自動修正を試みたが安全に直せなかった/提案する修正」を報告行に含める).追加済みの再現テストは残してよい(後の人間修正の助けになる).fix/ ブランチへ)git add で当該変更をステージングする(.env・クレデンシャル・ビルド成果物は含めない)..claude/rules/git-conventions.md のコミット書式に従い,タグ [fix] でコミットする.
[fix] 〇〇の境界値でインデックスが1つずれる不具合を修正[fix] 〇〇クエリをパラメタ化して SQL インジェクションを防止fixed)修正済み台帳に積むべき1行を含めて fixed を返す:
- [修正] <箇所> | <内容> | <加えた変更> | <影響範囲(呼び出し元/依存先)> | <推奨する動作確認> | <コミット概要> | <日付>
作業完了後,次の構造化サマリだけをメインへ返す(詳細な思考ログは返さない=メインを薄く保つ):
fixed / reported / skipped / stoppedstopped の場合は停止理由.fixed のとき,[add] の再現/特性化テストと [fix] を列挙)以下のいずれかでループを止める.
stopped を返した/同じ箇所で修正が繰り返し赤になる/検証スイートが途中で失敗するようになった → 異常として停止し報告.fix/ ブランチに残る.このコマンドは単体で「安全に扱える指摘が尽きるまで」連続実行するが,ユーザーが /loop でラップして起動すると,放置中の空き枠を使って自律的に再トリガーし続けられる(本コマンドの本来の目的).
/loop /auto-audit で全観点巡回,/loop /auto-audit security でセキュリティだけ巡回,のように使い分けられる./loop で回す場合も上記の不変条件・停止条件は同じく厳守すること.長い待機を挟む場合はキャッシュとコストを意識した間隔を選ぶ.
/loop で回すと,指摘が尽きた後もウェイクのたびに「対象なし → 即終了」を繰り返し,無駄にトークンを消費しうる.これを防ぐため,以下の収束ルールを守る.
/loop 自体を終了する(次のウェイクをスケジュールしない).
ループ終了時,メインがユーザーに以下を報告する(.claude/auto-audit-fixed.md / -report.md / -skip.md を根拠にする).
[fix] コミット).各項目について「加えた変更・影響範囲・人間が行うべき推奨動作確認」を添える(修正済み台帳の内容).
[add] コミット).claude/auto-audit-report.md の [バグ]/[脆弱性] の件数と概要(重大度順).「正しい挙動が仕様判断になる/影響が追い切れない/再現できなかった」等の自動修正しなかった理由を明記し,/implement 等での対応を促す.
.claude/auto-audit-skip.md)/commit push(または merge)で main に取り込めます」
/commit push 等)で行う.