Skip to content

feat(cli): autoforge loop --mode goals --backend {auto,claude,codex} (#32 / #30 PR2)#35

Open
k-buchi4696 wants to merge 1 commit into
feature/30-agent-loop-foundationfrom
feature/32-cli-mode-backend
Open

feat(cli): autoforge loop --mode goals --backend {auto,claude,codex} (#32 / #30 PR2)#35
k-buchi4696 wants to merge 1 commit into
feature/30-agent-loop-foundationfrom
feature/32-cli-mode-backend

Conversation

@k-buchi4696

Copy link
Copy Markdown
Collaborator

Summary

issue #30 を 4 PR で実装する内、PR2 (CLI integration + PATH auto-detection) に相当(sub-issue #32)。

`autoforge loop` サブコマンドに `--mode {pipeline,goals}` と `--backend {auto,claude,codex}` を追加。`auto` は PATH から `claude` → `codex` の順に検出。`--mode goals` の実行ロジックは PR3 で実装し、本 PR では backend resolution まで配線して stub にする。

Stacked on #31 (PR1 foundation)。#31 がマージされたら自動的にベースが `main` に切り替わります。

変更内容

`autoforge/harness/agent_loop.py` (+18 行)

  • `shutil` import
  • `detect_backend() -> Backend | None`: PATH を `claude` → `codex` の順に探索

`autoforge/cli.py` (+44 行)

  • `loop_parser` に `--mode {pipeline,goals}` (default: `pipeline`)
  • `loop_parser` に `--backend {auto,claude,codex}` (default: `auto`)
  • `_run_loop` 冒頭で `args.mode` を見て分岐
  • 新規 `_run_loop_goals` (stub): backend を `detect_backend` または明示指定で解決し、PR3 で実装される旨を表示

`tests/harness/test_agent_loop.py` (+30 行)

TestDetectBackend (4 件):

  • claude のみ → `Backend.CLAUDE`
  • codex のみ → `Backend.CODEX`
  • 両方 → `Backend.CLAUDE` (claude 優先)
  • 両方なし → `None`

`tests/test_cli.py` (+59 行)

TestLoopModeBackend (5 件):

  • default は `--mode pipeline --backend auto`
  • `--mode goals --backend codex` で stub にディスパッチ
  • `--mode goals --backend auto` で claude を検出
  • PATH に何もないと stderr に明確なエラー & exit 1
  • `--mode bogus` は argparse が拒否

Test Plan

  • `pytest tests/harness/test_agent_loop.py tests/test_cli.py -v` — 23 passed
  • `pytest tests/` — 566 passed (既存 557 + 新規 9, pipeline モード回帰なし)
  • レビュアー: 実機で `autoforge loop --mode goals --backend codex` が backend resolution まで動くこと
  • レビュアー: PATH に何もない環境で `--backend auto` のエラーメッセージが分かりやすいこと

スコープ外(後続 PR)

Refs

🤖 Generated with Claude Code

…32 / #30 PR2)

issue #30 の PR2 (CLI integration + PATH auto-detection) を実装。

autoforge/harness/agent_loop.py:
- shutil import 追加
- detect_backend() -> Backend | None: shutil.which で claude → codex の順に
  PATH を探索し、最初に見つかったものを返す。両方なければ None

autoforge/cli.py:
- loop_parser に --mode {pipeline,goals} (default: pipeline) を追加
- loop_parser に --backend {auto,claude,codex} (default: auto) を追加
- _run_loop の冒頭で args.mode を見て分岐:
  - pipeline (既存): API モード SDLC pipeline (ANTHROPIC_API_KEY 必須)
  - goals: 新設 _run_loop_goals stub
- _run_loop_goals: backend を解決 (auto は detect_backend、明示指定なら
  そのまま) して resolved を表示。実際の goals 実行は PR3 (#33) で実装

tests/harness/test_agent_loop.py:
- TestDetectBackend 4 件追加
  - claude のみ PATH にある → Backend.CLAUDE
  - codex のみ PATH にある → Backend.CODEX
  - 両方ある → Backend.CLAUDE (claude を優先)
  - 両方ない → None

tests/test_cli.py:
- TestLoopModeBackend 5 件追加
  - --mode default が pipeline、--backend default が auto
  - --mode goals --backend codex で stub にディスパッチし backend=codex 表示
  - --mode goals --backend auto で claude を検出
  - --mode goals --backend auto で何も無い時 stderr に分かりやすいエラー & exit 1
  - --mode bogus は argparse が拒否

566 tests pass (既存 557 + 新規 9). pipeline モード回帰なし。

スコープ外(後続 PR):
- goals 実行ロジック (autoforge.yml 連携) → PR3 (#33)
- ドキュメント → PR4 (#34)

Refs #30, #32

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant