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 ラン)

  • e2ereview並列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.summarye2e.findingsreview.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 内部ナレッジ