Skip to content

Fable のオーケストレーション設計 ​

役割分担(ユーザー指定 → 実際の割当) ​

役割ユーザー指定実際の実行手段備考
オーケストレーション・設計・issue 作成・最終判定Fable親セッション + ワークフロー内の judge エージェント(model: 'fable')設計書 docs/spec/ps-design.md、issue 19 件の本文は親が執筆
調査・検証Opusinvestigate(/issue-investigate)と review(/pr-review の Claude 側)「Opus の使い所わからん」→ 実測ベースの調査と厳格レビューが最適だった(SDK の関数を実際にビルドして訂正、テスト弱体化の検出)
E2E・キャプチャSonnete2e(/issue-test)、post-merge、実装エージェントの 運転手PCSX-Redux CLI + Lua でキャプチャ、画素・メトリクスで判定
コードレビューCodex gpt-5.6-solreview 内で codex exec -s read-onlyOpus の所見と統合して 📋 コメント
コーディングCodex gpt-5.6-luna(LunaMax は利用不可)実装エージェント(Sonnet)が codex exec --full-auto を運転Codex クォータ切れ後は Sonnet 自身が実装
画像生成higgsfield MCP親セッションが generate_image_batch21 点、プロンプトは設定画を参照画像に
git 定型Haikumerge エージェントgh pr merge --squash --delete-branch、worktree 掃除

パイプライン(1 issue = 1 ラン) ​

1 本の JavaScript ワークフローが issue 1 件をマージまで運ぶ

開始
issue #n
Opus
investigate
コードと実測から調査し、🔍 調査結果・対応方針を issue にコメント
Sonnet Codex luna
implement
Sonnet が Codex luna を運転。worktree で実装 → PR 作成 → 💬 実装コメント
判定ラウンド(r = 1..3 を差戻しのたびに繰り返す)
Sonnet
e2e
PCSX-Redux でキャプチャし受入条件を判定 → 🧪 コメント
Opus Codex sol
review
2 系統のレビューを統合 → 📋 重大度付きコメント
並列の 2 結果を突き合わせ
Fable
judge
🧭 マージ / 差戻しを判定。差戻しなら fix(Sonnet + Codex luna が 🔧 修正)→ 次ラウンドへ戻る
merge = true
merge → post-merge → merged
Haiku が squash マージ + worktree 掃除 → Sonnet が main で再検証・📝 T-2 サマリ・issue クローズ
r = 3 で未収束
escalated
親(Fable)に返す。親が判定コメントを読み、修正指示付きで追加ラウンドを起動
  • e2e と review は 並列(parallel([...]))、他は直列
  • 複数 issue は parallel(issues.map(runIssue)) で 並列に走らせ、worktree(.worktrees/issue-N)で分離
  • 判定ルール(judge プロンプトに明記): 両方 LGTM → マージ / 「低」のみ残存で受入条件を満たす → マージ可(残件は issue に記録)/ それ以外 → 差戻し(Codex が着手できる粒度の fix_instructions を返す)

設計上の工夫 ​

StructuredOutput でスクリプトが分岐する ​

js
const SCHEMA_VERDICT = { verdict: 'LGTM' | 'NEEDS_FIX', findings: [...], comment_url, evidence: [...] }
const SCHEMA_JUDGE   = { merge: boolean, fix_instructions: string, rationale: string }
const SCHEMA_IMPL    = { pr_url, branch, worktree, build_ok, test_ok, summary, codex_runs }

各エージェントは自由文の代わりにこの JSON を返すため、if (judge.merge) のような分岐と、次エージェントへの 文脈の受け渡し(impl.summary、e2e.findings、review.findings)が機械的にできます。

共通環境ブロック ENV ​

全プロンプトの先頭に同じブロックを差し込みました: SDK の環境変数、設計正典・ワークフロー正典のパス、PCSX-Redux CLI の起動法、エビデンス添付スクリプト、ワークフローログ、禁止事項(force push / main 直 push / git add -A)。「毎回必ず読むファイル」を指名することで、エージェントごとの解釈ブレを抑えました。

resume モード ​

上限やプロセス再起動で止まった issue を、PR がある状態から再開できるように args.resume を追加しました。調査・実装をスキップし、親が書いた fix 指示から修正ラウンドに入ります。

json
{"issues":[2], "resume":{"issue":2, "pr_url":"…/pull/17", "branch":"feature/issue-2-…",
  "worktree":".worktrees/issue-2", "fix":"…差戻し指示…", "rounds":2}}

親が直接運転する「縮退モード」 ​

Claude サブエージェントが上限で使えない時間帯は、親セッションが同じ手順(Codex luna 実装 → 自分で make test/E2E → Codex sol レビュー → 判定 → マージ)を Bash で直接 回しました(#2 追加ラウンド、#4、#5)。役割分担は崩れますが、ゲート(E2E ✅ + レビュー ✅)は同じ に保っています。

情報の流れ(トレーサビリティ) ​

すべての判断は GitHub 上のコメントに残す設計です(dev-workflow の traceability.md T-2/T-3)。1 つの PR には典型的に次が並びます:

  1. 💬 実装ラウンドコメント(エンジン判断・コミット SHA・未達)
  2. 🧪 E2E 結果(受入条件表・キャプチャ・メトリクス)
  3. 📋 レビュー(Codex + Claude 統合、重大度付き指摘)
  4. 🧭 オーケストレーター判定(マージ/差戻しの根拠)
  5. 🔧 修正対応(差戻し指摘ごとの ✅/⏭)
  6. 📝 作業実施サマリ(post-merge、8 項目)

例: PR #24(#8 フロー全画面) は 4 ラウンド + 追加ラウンド 2 回、コメント 20 件超。

aieo-product 内部ナレッジ