Auto-Loop
Stop hook が支援する TDD ループ。受け入れ基準と上限を定義し、チェックポイントが進行中の間は Claude に継続を要求します。
仕組み
受け入れ基準を定義
- [ ] を作業状態として記録し、各基準を実際に検証
Auto-Loop が反復
各イテレーションで未完了の AC に Red-Green-Refactor を適用するよう Claude に要求
Stop Hook が再注入
状態が有効な間、Stop hook が reason とともに終了をブロックし次の反復を要求
完了記録または上限で終了
状態が完了、停止要求を受信、または最大イテレーション数に到達したら終了
結果を検証してください:受け入れ基準のチェックとチェックポイント状態はモデルが管理する状態であり、独立した証明ではありません。 完了と判断する前に diff を確認し、プロジェクトの実際のテスト、lint、build を実行してください。
TDD サイクル
同梱の指示は、各 Auto-Loop イテレーションに次の TDD サイクルを求めます:
| フェーズ | アクション | 推奨サポート |
|---|---|---|
| RED | 次の AC のための失敗するテストを書く | /test-first ガイド |
| GREEN | テストを通過する最小限のコードを書く | プロジェクトのテストコマンド |
| REFACTOR | コード品質を改善 | 任意の code-reviewer agent |
| VALIDATE | 完全なテストスイート + lint を実行 | test-runner + プロジェクトコマンド |
| COMMIT | 進捗を保存 | 許可時に /smart-commit |
| DECIDE | 完了をチェック、継続または終了 | チェックポイント状態 + 実際の検証 |
使用例
基本的な使用方法
/auto-loop "電卓モジュールを作成
受け入れ基準:
- [ ] add(a, b) 関数
- [ ] subtract(a, b) 関数
- [ ] multiply(a, b) 関数
- [ ] divide(a, b) ゼロチェック付き
- [ ] 全関数の単体テスト" イテレーション上限を設定
/auto-loop "ユーザー認証を実装" --max-iterations 15 チェックポイントから再開
# 中断または再起動後
/auto-loop --resume チェックポイントシステム
Auto-Loop は .auto-loop/checkpoint.json に状態を保存します:
{
"request": "電卓モジュールを作成",
"current_iteration": 5,
"max_iterations": 20,
"status": "in_progress",
"acceptance_criteria": [
{ "id": 1, "description": "add(a, b) 関数", "done": true },
{ "id": 2, "description": "subtract(a, b) 関数", "done": true },
{ "id": 3, "description": "multiply(a, b) 関数", "done": false }
],
"files_changed": ["calculator.js", "calculator.test.js"]
} チェックポイントが存在し有効な場合に中断した実行を再開できます。記録されたファイルや状態はレビュー用であり、変更やテストの正しさを証明するものではありません。
停止と制御
ループを停止
# 別のターミナルで
touch .auto-loop/stop 現在のイテレーション完了後にグレースフルにループが停止します。
ループを再開
# 保持されたチェックポイントから再開
/auto-loop --resume
Hook が停止シグナルを消費し、チェックポイントは --resume 用に残ります。
Stop Hook の仕組み
Auto-Loop は Claude Code の Stop hook 機構を使用します。 インストーラーはこの設定をプロジェクトのローカル settings にマージします。
# .claude/settings.local.json(install.sh がマージ)
{
"hooks": {
"Stop": [{
"hooks": [{
"type": "command",
"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/auto-loop-stop.sh"
}]
}]
}
}
Claude が停止しようとすると、hook がローカルのチェックポイントを確認します。ループが有効で上限未満なら
{"decision": "block", "reason": "..."} を出力して次の反復を要求します。
完了、停止、上限到達、または有効な進行中チェックポイントがない場合は、decision payload なしで正常終了します。