| name | auto-fix |
| description | lint/test の失敗を検出し、外部 AI CLI(Claude Code / Codex / Gemini)でコード修正 → 再検証をループする。 |
| disable-model-invocation | true |
auto-fix
lint やテストの失敗を外部 AI CLI で自動修正し、再検証するスキル。
手順
1. 失敗を検出
ユーザー指定のコマンド、またはプロジェクトに応じて自動検出:
ruff check . 2>&1
pytest -x --tb=short 2>&1
mypy src/ 2>&1
eslint . 2>&1
tsc --noEmit 2>&1
- 出力(stdout + stderr)と終了コードをキャプチャする
- 終了コード 0 の場合は「問題なし」と報告して終了
2. エラーを解析
失敗出力から構造化情報を抽出する:
- ファイルパス と 行番号
- エラーメッセージ / テスト名
- エラーカテゴリ(syntax, type, import, assertion 等)
エラー箇所周辺のソースコードを読んでコンテキストを把握する。
3. 修正プロンプトを作成
以下のテンプレートで /tmp/bc_fix_prompt.txt に書き出す:
以下のエラーを修正してください。
## エラー一覧
{ファイル名:行番号 エラーメッセージ のリスト}
## 関連ソースコード
### {file1}:{start_line}-{end_line}
```{language}
{ソースコード}
指示
- 修正後のコードブロックのみを出力すること
- 関係のないコードは変更しないこと
- 既存のスタイル・フォーマットを維持すること
- 以下の形式で出力:
{filepath}
{修正後のコード}
- `.env`、シークレット、クレデンシャルは絶対に含めない
### 4. 外部 AI CLI に送信
ユーザー指定の CLI(デフォルト: 最初に見つかったもの)に送信:
```bash
# Claude Code
cat /tmp/bc_fix_prompt.txt | claude -p 2>&1 | tee /tmp/bc_fix_result.txt
# Codex
cat /tmp/bc_fix_prompt.txt | codex exec - 2>&1 | tee /tmp/bc_fix_result.txt
# Gemini
cat /tmp/bc_fix_prompt.txt | gemini 2>&1 | tee /tmp/bc_fix_result.txt
- タイムアウト: 120 秒
- レスポンスからファイルパスと修正コードブロックを抽出する
5. 修正を適用
返された修正コードブロックごとに:
- 元のファイルを読む(バックアップとして内容を記録)
- 該当箇所を修正コードで置き換える
- ファイルを書き出す
6. 再検証(ループ)
ステップ 1 と同じコマンドを再実行する。
ループ条件:
- Pass(終了コード 0): 成功を報告、変更サマリを表示。終了。
- Fail(同じエラー): 修正が効かなかった。別の CLI で再試行、または プロンプトを改善。最大 3 回。
- Fail(新しいエラー): 修正がリグレッションを起こした。直前の変更を revert して再試行。
- 最大リトライ到達: 現在の状態を報告、残りのエラーを一覧し、手動修正を提案。
7. 結果を報告
## Auto-Fix レポート
### ステータス: {FIXED / PARTIALLY_FIXED / FAILED}
### チェックコマンド
`{command}`
### イテレーション
| # | 使用 CLI | 修正前エラー数 | 修正後エラー数 | 結果 |
|---|---------|--------------|--------------|------|
| 1 | Claude | 5 | 2 | 部分修正 |
| 2 | Codex | 2 | 0 | 修正完了 |
### 変更内容
- `src/foo.py:42` — 戻り値の型注釈を追加
- `src/bar.py:15-20` — 非推奨 API 呼び出しを置換
### 残存する問題(あれば)
- `src/baz.py:99` — 複雑なロジックエラー、手動レビューが必要
ガードレール
- 最大 3 回リトライ — 無限ループ防止
- リグレッション時は revert — 修正でエラーが増えたら即座に元に戻す
- 破壊的変更禁止 — ファイル削除や大規模なコード除去はユーザー承認が必要
- スコープ制御 — 報告されたエラーに直接関連するファイルのみ変更