背景
issue #28 で harness mode の三系統対応(Claude Code / Codex CLI / Codex app)は完了したが、これは 「人間が agent chat を開いて autoforge-tools を呼ぶ」 前提のフロー。本 issue は別軸として、人間がチャットを開かずに autoforge 自身が agent CLI を非対話で駆動する モードを新設する。
issue #28 本文の B 項に書かれていた agent_loop.py:92-101 などの参照は、実際には現コードに存在しなかった。本 issue はその B 項を 現コードに合わせて再定義 したもの。
想定ユースケース
- ローカル自動化:
autoforge loop --mode goals --backend codex を一発叩くと autoforge.yml の goals を順次解いて止まる
- CI 自動修正: GitHub Actions で
--backend codex を起動して issue 自動解決
- cron 定期走行: 定時で
--mode goals を回して TODO を消化
いずれも「ANTHROPIC_API_KEY を持たないがサブスク (Claude Code / Codex CLI) を持っている」ユーザーが恩恵を受ける。
ゴール
autoforge loop --mode goals --backend {auto,claude,codex} を新設し、PATH に居る agent CLI をシェルアウトで非対話駆動して autoforge.yml の goals を解かせる。既存の loop(API 型 pipeline モード)は --mode pipeline (default) として温存。
タスク
A. autoforge/harness/agent_loop.py を新規作成
_argv_claude(prompt, ...) / _argv_codex(prompt, ...) でバックエンド別 argv を組み立て
run_agent(backend, prompt, *, timeout, cwd) -> AgentResult で非対話実行
- タイムアウト・stderr 取得・終了コード正常化
B. autoforge/cli.py の loop サブコマンド拡張
--mode {pipeline,goals} (default: pipeline)
--backend {auto,claude,codex} (default: auto)
auto は which claude → which codex の順でフォールバック
- 既存 pipeline モードの引数(
--interval / --max-cycles)は不変
C. goals モードの実行フロー
D. テスト
_argv_claude / _argv_codex の snapshot tests
- PATH 検出フォールバック(claude あり / codex あり / 両方なし → 適切なエラー)
--dry-run で実行コマンドだけ表示するテスト
- pipeline モード回帰テスト
E. ドキュメント
- README に
--mode goals --backend を追記
docs/integration-guide.md または新規 docs/non-interactive-mode.md に運用例
非ゴール
pipeline モード(ANTHROPIC_API_KEY 必須)の挙動変更は無し
- Codex app(チャット)は対象外(人間が開く前提のため harness mode 側で対応済み)
- カスタム LLM プロバイダ追加(Anthropic / OpenAI 以外)
受け入れ条件
実装規模見積もり(PR 分割案)
CLAUDE.md PR 分割ルール(レビュー単位 ~400 行 / ロールバック単位 / リリース単位)に従い、4 PR 構成を想定:
- PR1 (foundation):
agent_loop.py 新規 + argv snapshot tests(~200 行)
- PR2 (cli integration):
--mode / --backend フラグ + PATH 自動検出 + dry-run(~150 行、PR1 依存)
- PR3 (goals dispatch):
goals モード実行フロー + autoforge.yml 連携(~200 行、PR2 依存)
- PR4 (docs): README / docs 更新(~100 行、独立)
実装着手前に PR1 のスコープで合意を取る。
関連
背景
issue #28 で harness mode の三系統対応(Claude Code / Codex CLI / Codex app)は完了したが、これは 「人間が agent chat を開いて autoforge-tools を呼ぶ」 前提のフロー。本 issue は別軸として、人間がチャットを開かずに autoforge 自身が agent CLI を非対話で駆動する モードを新設する。
issue #28 本文の B 項に書かれていた
agent_loop.py:92-101などの参照は、実際には現コードに存在しなかった。本 issue はその B 項を 現コードに合わせて再定義 したもの。想定ユースケース
autoforge loop --mode goals --backend codexを一発叩くと autoforge.yml の goals を順次解いて止まる--backend codexを起動して issue 自動解決--mode goalsを回して TODO を消化いずれも「
ANTHROPIC_API_KEYを持たないがサブスク (Claude Code / Codex CLI) を持っている」ユーザーが恩恵を受ける。ゴール
autoforge loop --mode goals --backend {auto,claude,codex}を新設し、PATH に居る agent CLI をシェルアウトで非対話駆動して autoforge.yml の goals を解かせる。既存のloop(API 型 pipeline モード)は--mode pipeline(default) として温存。タスク
A.
autoforge/harness/agent_loop.pyを新規作成_argv_claude(prompt, ...)/_argv_codex(prompt, ...)でバックエンド別 argv を組み立てrun_agent(backend, prompt, *, timeout, cwd) -> AgentResultで非対話実行B.
autoforge/cli.pyのloopサブコマンド拡張--mode {pipeline,goals}(default:pipeline)--backend {auto,claude,codex}(default:auto)autoはwhich claude→which codexの順でフォールバック--interval/--max-cycles)は不変C.
goalsモードの実行フローautoforge.ymlのgoalsを順次読むdescriptionと context を agent_loop へプロンプトとして渡すD. テスト
_argv_claude/_argv_codexの snapshot tests--dry-runで実行コマンドだけ表示するテストE. ドキュメント
--mode goals --backendを追記docs/integration-guide.mdまたは新規docs/non-interactive-mode.mdに運用例非ゴール
pipelineモード(ANTHROPIC_API_KEY必須)の挙動変更は無し受け入れ条件
autoforge loop --mode goals --backend codex --dry-runが成功し、組み立てた argv を表示codexが居る環境で--backend autoがcodexを選ぶ--backend autoが分かりやすいエラーで終わる実装規模見積もり(PR 分割案)
CLAUDE.md PR 分割ルール(レビュー単位 ~400 行 / ロールバック単位 / リリース単位)に従い、4 PR 構成を想定:
agent_loop.py新規 + argv snapshot tests(~200 行)--mode/--backendフラグ + PATH 自動検出 + dry-run(~150 行、PR1 依存)goalsモード実行フロー + autoforge.yml 連携(~200 行、PR2 依存)実装着手前に PR1 のスコープで合意を取る。
関連