Skip to content

feat: 非対話型 agent driver (agent_loop.py) と loop --mode goals --backend {auto,claude,codex} を新規実装 #30

Description

@k-buchi4696

背景

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.pyloop サブコマンド拡張

  • --mode {pipeline,goals} (default: pipeline)
  • --backend {auto,claude,codex} (default: auto)
  • autowhich claudewhich 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 以外)

受け入れ条件

  • autoforge loop --mode goals --backend codex --dry-run が成功し、組み立てた argv を表示
  • PATH に codex が居る環境で --backend autocodex を選ぶ
  • PATH に何も居ない環境で --backend auto が分かりやすいエラーで終わる
  • 既存 pipeline モードのテストが全て pass

実装規模見積もり(PR 分割案)

CLAUDE.md PR 分割ルール(レビュー単位 ~400 行 / ロールバック単位 / リリース単位)に従い、4 PR 構成を想定:

  1. PR1 (foundation): agent_loop.py 新規 + argv snapshot tests(~200 行)
  2. PR2 (cli integration): --mode / --backend フラグ + PATH 自動検出 + dry-run(~150 行、PR1 依存)
  3. PR3 (goals dispatch): goals モード実行フロー + autoforge.yml 連携(~200 行、PR2 依存)
  4. PR4 (docs): README / docs 更新(~100 行、独立)

実装着手前に PR1 のスコープで合意を取る。

関連

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions