team-lifecycle について
Team Lifecycle Orchestratorは、要件整理から仕様作成、実装、テストまでを扱うチーム向けマルチエージェントワークフロースキルです。共有探索キャッシュ、並列タスク、議論の深刻度に応じた振り分けでパイプラインを調整します。
主な機能
- 015段階のライフサイクル編成
- 02コード探索キャッシュの共有
- 03迅速な引き継ぎと並列タスク
- 04議論の深刻度に応じた振り分け
- 05セッション復旧とタスク再試行
活用シーン
- 01要件整理から実装・テストまで進行
- 02実装後のテストとレビューを並行実行
- 03中断したセッションを再開してタスクを再配置
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ catlog22/ claude-code-workflow --skill team-lifecycleインストール後、Claude Code で/team-lifecycleを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/analyst.mdarchitect.mddiscuss-agent.mdexecutor.mdexplore-agent.mdfe-developer.mdfe-qa.mdplanner.mdreviewer.mdtester.mdwriter.mdphases/01-requirement-clarification.md02-team-initialization.md03-task-chain-creation.md04-pipeline-coordination.md05-completion-report.mdspecs/document-standards.mdquality-gates.mdtemplates/architecture-doc.mdepics-template.mdproduct-brief.mdrequirements-prd.md詳細
チームライフサイクルオーケストレーター
仕様策定、実装、テストのワークフローにおける、チームのライフサイクル全体をオーケストレーションします。オーケストレーターは、要件の明確化、セッションの初期化、タスクチェーンの作成、パイプラインの調整(起動/待機/終了のループ)、完了報告という5つのフェーズを通じて、マルチエージェントパイプラインを推進します。
主な設計原則:
- インラインの discuss サブエージェント:成果物を作成するロール(analyst、writer、reviewer)は、専用のディスカッションエージェントを起動する代わりに、内部で discuss サブエージェントを呼び出します。これにより、仕様パイプラインのビート数が12から6に半減します。
- 共有 explore キャッシュ:すべてのエージェントは、
cache-index.jsonを含む一元化されたexplorations/ディレクトリを共有し、コードベースの探索の重複をなくします。 - 高速な次エージェント起動:エージェントの完了後、オーケストレーターは調整サイクル全体を待たずに、直線的なチェーンの次のエージェントをすぐに起動します。
- 合意形成の重大度に応じたルーティング:ディスカッションの判定結果を HIGH/MEDIUM/LOW の重大度別に振り分け、それぞれ異なるオーケストレーターの動作(修正、警告して続行、またはそのまま通過)につなげます。
- ビートモデル:各パイプラインステップは1つのビートです。エージェントを起動し、結果を待ち、出力を処理して、次のエージェントを起動します。オーケストレーターは1サイクルにつき1つのビートを処理した後、制御を返します。
アーキテクチャ
+-------------------------------------------------------------+
| Team Lifecycle Orchestrator |
| Phase 1 -> Phase 2 -> Phase 3 -> Phase 4 -> Phase 5 |
| Require Init Dispatch Coordinate Report |
+----------+------------------------------------------------+--+
|
+-----+------+----------+-----------+-----------+
v v v v v
+---------+ +---------+ +---------+ +---------+ +---------+
| Phase 1 | | Phase 2 | | Phase 3 | | Phase 4 | | Phase 5 |
| Require | | Init | | Dispatch| | Coord | | Report |
+---------+ +---------+ +---------+ +---------+ +---------+
| | | ||| |
params session tasks agents summary
/ | \
spawn wait close
/ | \
+------+ +-------+ +--------+
|agent1| |agent2 | |agent N |
+------+ +-------+ +--------+
| | |
(may call discuss/explore subagents internally)
フェーズ4のビートサイクル(1ビート):
event (phase advance / user resume)
|
v
[Orchestrator]
+-- read state file
+-- find ready tasks (pending + all blockers completed)
+-- spawn agent(s) for ready task(s)
+-- wait(agent_ids, timeout)
+-- process results (consensus routing, artifacts)
+-- update state file
+-- close completed agents
+-- fast-advance: immediately spawn next if linear successor
+-- yield (wait for next event or user command)
エージェントレジストリ
| エージェント | ロールファイル | 担当内容 | パターン |
|---|---|---|---|
| analyst | ~/.codex/agents/analyst.md | 初期分析、コンテキストの収集、DISCUSS-001 | 2.8 インラインサブエージェント |
| writer | ~/.codex/agents/writer.md | ドキュメント生成、DISCUSS-002~DISCUSS-005 | 2.8 インラインサブエージェント |
| planner | ~/.codex/agents/planner.md | 多角的な探索、計画の作成 | 2.9 キャッシュされた探索 |
| executor | ~/.codex/agents/executor.md | コードの実装 | 2.1 標準 |
| tester | ~/.codex/agents/tester.md | テストと修正のサイクル | 2.3 深い対話 |
| reviewer | ~/.codex/agents/reviewer.md | コードレビューと仕様品質、DISCUSS-006 | 2.8 インラインサブエージェント |
| architect | ~/.codex/agents/architect.md | アーキテクチャに関するコンサルティング(必要に応じて) | 2.1 標準 |
| fe-developer | ~/.codex/agents/fe-developer.md | フロントエンドの実装 | 2.1 標準 |
| fe-qa | ~/.codex/agents/fe-qa.md | フロントエンドのQA、GCループ | 2.3 深い対話 |
使用する前に、すべてのエージェントロールファイルを
~/.codex/agents/に配置する必要があります。 パターン2.8 = エージェントが多角的な批評のために、内部で discuss サブエージェントを起動します。 パターン2.9 = エージェントが作業前に共有の explore キャッシュを使用します。 パターン2.3 = オーケストレーターが反復的な修正ループに send_input を使用する場合があります。
サブエージェントレジストリ
| サブエージェント | エージェントファイル | 呼び出し元 | 目的 |
|---|---|---|---|
| discuss | ~/.codex/agents/discuss-agent.md | analyst、writer、reviewer | CLIツールを使用した多角的な批評 |
| explore | ~/.codex/agents/explore-agent.md | analyst、planner、任意のエージェント | 共有キャッシュを使用したコードベースの探索 |
サブエージェントを起動するのはオーケストレーターではなく、エージェント自身です。エージェントはサブエージェントの仕様を読み込み、spawn_agent を使用してインラインで起動し、結果を待ってから終了させます。オーケストレーターがサブエージェントのライフサイクルを直接管理することはありません。
高速な次タスクの起動
wait() が完了したエージェントの結果を返した後、オーケストレーターは、次のパイプラインステップが単純な直線的後続タスクかどうか(準備完了になるタスクがちょうど1つ、並列ウィンドウなし、チェックポイントなし)を確認します。
判定表:
| 条件 | アクション |
|---|---|
| 準備完了タスクが1つ、単純な直線的後続タスク、チェックポイントなし | 次のタスクに対して直ちに spawn_agent を実行します(高速起動) |
| 準備完了タスクが複数(並列ウィンドウ) | 準備完了タスクをまとめてすべて起動し、その後すべてに対して wait を実行します |
| 準備完了タスクなし、ほかのエージェントは実行中 | 制御を譲り、これらのエージェントが完了するまで待機します |
| 準備完了タスクなし、実行中のタスクもなし | パイプライン完了。Phase 5 に進みます |
| チェックポイントタスクが完了(例:QUALITY-001) | 一時停止し、チェックポイントメッセージを出力して、ユーザーを待ちます |
高速起動の失敗からの復旧:
高速起動したエージェントが失敗したことをオーケストレーターが検出した場合(wait がエラーを返す、または結果なしでタイムアウトする場合):
- 状態ファイルに失敗を記録します
- 状態内でそのタスクを再び「pending」としてマークします
- 同じタスクに対して新しいエージェントを起動します
- 同じタスクが3回以上失敗した場合、パイプラインを一時停止してユーザーに報告します
合意形成の重大度に応じた振り分け
生成エージェント(アナリスト、ライター、レビュアー)が discuss の結果を報告すると、オーケストレーターはエージェントの出力から判定結果を解析します。
エージェントの出力形式(成果物に書き込まれ、wait() の結果にも含まれます):
DISCUSS_RESULT:
- verdict: <consensus_reached | consensus_blocked>
- severity: <HIGH | MEDIUM | LOW>
- average_rating: <N>/5
- divergences: <summary>
- action_items: <list>
- recommendation: <revise | proceed-with-caution | escalate>
- discussion_path: <path-to-discussion-record>
振り分け表:
| 判定結果 | 重大度 | オーケストレーターのアクション |
|---|---|---|
| consensus_reached | - | 通常どおり進め、次のタスクを高速起動します |
| consensus_blocked | LOW | 注記付きで合意済みとして扱い、通常どおり進めます |
| consensus_blocked | MEDIUM | wisdom/issues.md に警告を記録し、次のタスクのコンテキストに相違点を含めて進めます |
| consensus_blocked | HIGH | 修正タスクを作成します(下記参照)。またはユーザーの判断を仰ぎます |
| consensus_blocked | HIGH (DISCUSS-006) | ユーザーの判断のため、必ず一時停止します(最終承認ゲート) |
修正タスクの作成(重大度が HIGH で DISCUSS-006 ではない場合):
// Add revision entry to state file
const revisionTask = {
id: "<original-task-id>-R1",
owner: "<same-agent-role>",
blocked_by: [],
description: "Revision of <original-task-id>: address consensus-blocked divergences.\n"
+ "Session: <session-dir>\n"
+ "Original artifact: <artifact-path>\n"
+ "Divergences: <divergence-details>\n"
+ "Action items: <action-items-from-discuss>\n"
+ "InlineDiscuss: <same-round-id>",
status: "pending",
is_revision: true
}
// Max 1 revision per task. If already revised once, pause for user.
if (stateHasRevision(originalTaskId)) {
// Pause pipeline, ask user
} else {
// Insert revision task into state, spawn agent
}
Phase の実行
| Phase | ファイル | 概要 |
|---|---|---|
| Phase 1 | phases/01-requirement-clarification.md | ユーザー入力を解析し、モードを検出して、フロントエンドを自動検出し、パラメーターを収集します |
| Phase 2 | phases/02-team-initialization.md | セッションディレクトリを作成し、状態ファイル、wisdom、探索キャッシュを初期化します |
| Phase 3 | phases/03-task-chain-creation.md | モードに基づいてパイプラインのタスクチェーンを構築し、状態ファイルに書き込みます |
| Phase 4 | phases/04-pipeline-coordination.md | 主な spawn/wait/close ループ、高速起動、合意形成の振り分け、チェックポイントを処理します |
| Phase 5 | phases/05-completion-report.md | 結果を要約し、成果物を一覧表示して、次のステップを提案します |
Phase 0:セッション再開の確認(Phase 1 の前)
Phase 1 に入る前に、オーケストレーターは中断されたセッションがないか確認します。
.workflow/.team/TLS-*/team-session.jsonをスキャンし、status: "active"またはstatus: "paused"のファイルを探します- セッションが見つからない場合 -> Phase 1 に進みます
- セッションが1つ見つかった場合 -> 再開します(下記のセッション照合を参照)
- セッションが複数見つかった場合 -> ユーザーに選択を求めます
セッション照合(再開時):
- 状態ファイルを読み込み、パイプラインの状態を取得します
- 状態ファイル内の各タスクについて:
- ステータスが "in_progress" で、実行中のエージェントが存在しない場合 -> "pending" にリセットします(中断)
- ステータスが "completed" の場合 -> 成果物が存在することを確認します
- 照合済みの状態からタスクの準備状況を再構築します
- 照合済みの状態で Phase 4 に進みます(準備完了のタスクを起動)
パイプラインの定義
仕様のみ(6ビート)
RESEARCH-001(+D1) -> DRAFT-001(+D2) -> DRAFT-002(+D3) -> DRAFT-003(+D4) -> DRAFT-004(+D5) -> QUALITY-001(+D6)
各タスクにはインラインの discuss が含まれます。(+DN) = エージェントが内部で実行するインラインの discuss ラウンド N。
実装のみ(並列ウィンドウあり、3ビート)
PLAN-001 -> IMPL-001 -> TEST-001 || REVIEW-001
IMPL-001 の完了後、TEST-001 と REVIEW-001 は並列で実行されます。
全ライフサイクル(9ビート)
[Spec pipeline: RESEARCH-001 -> DRAFT-001 -> ... -> QUALITY-001]
|
CHECKPOINT: pause for user confirmation
|
PLAN-001(blockedBy: QUALITY-001) -> IMPL-001 -> TEST-001 || REVIEW-001
FE 専用(3 ビート)
PLAN-001 -> DEV-FE-001 -> QA-FE-001
GC ループ:QA-FE の判定が NEEDS_FIX の場合、DEV-FE-002 → QA-FE-002 を動的に作成します(最大 2 ラウンド)。
フルスタック(並列処理を含む 4 ビート)
PLAN-001 -> IMPL-001 || DEV-FE-001 -> TEST-001 || QA-FE-001 -> REVIEW-001
REVIEW-001 は、TEST-001 と QA-FE-001 の両方が完了するまでブロックされます。
フルライフサイクル FE(12 タスク)
[Spec pipeline] -> PLAN-001 -> IMPL-001 || DEV-FE-001 -> TEST-001 || QA-FE-001 -> REVIEW-001
PLAN-001 は QUALITY-001 によってブロックされます。仕様から実装へのチェックポイントが適用されます。
タスクメタデータレジストリ
| タスク ID | エージェント | フェーズ | 依存関係 | 説明 | インラインディスカッション |
|---|---|---|---|---|---|
| RESEARCH-001 | analyst | spec | (なし) | 初期分析とコンテキストの収集 | DISCUSS-001 |
| DRAFT-001 | writer | spec | RESEARCH-001 | プロダクトブリーフを生成 | DISCUSS-002 |
| DRAFT-002 | writer | spec | DRAFT-001 | 要件/PRD を生成 | DISCUSS-003 |
| DRAFT-003 | writer | spec | DRAFT-002 | アーキテクチャドキュメントを生成 | DISCUSS-004 |
| DRAFT-004 | writer | spec | DRAFT-003 | エピックとストーリーを生成 | DISCUSS-005 |
| QUALITY-001 | reviewer | spec | DRAFT-004 | 5 つの観点による仕様の品質評価と承認 | DISCUSS-006 |
| PLAN-001 | planner | impl | (なし、または QUALITY-001) | 複数の観点からの調査と計画 | - |
| IMPL-001 | executor | impl | PLAN-001 | コードの実装 | - |
| TEST-001 | tester | impl | IMPL-001 | テストと修正のサイクル | - |
| REVIEW-001 | reviewer | impl | IMPL-001 | 4 つの観点によるコードレビュー | - |
| DEV-FE-001 | fe-developer | impl | PLAN-001 | フロントエンドの実装 | - |
| QA-FE-001 | fe-qa | impl | DEV-FE-001 | 5 つの観点によるフロントエンド QA | - |
ケイデンス制御
ビートモデル
イベント駆動型のパイプラインです。各ビートでは、オーケストレーターが 1 つのイベントを処理し、エージェントを起動し、完了を待って、結果を処理してから制御を返します。
Beat Cycle (single beat)
======================================================================
Event Orchestrator Agents
----------------------------------------------------------------------
advance/resume --> +- read state file ------+
| find ready tasks |
| spawn agent(s) --------+--> [Agent A] executes
| wait(ids, timeout) ----+--> [Agent B] executes
+- process results -------+ |
| update state file | |
| close agents | |
+- yield -----------------+ |
|
next beat <--- result from wait() <-------------------+
======================================================================
Fast-Advance (skips full yield for linear successors)
======================================================================
[Agent A] completes via wait()
+- 1 ready task? simple linear successor?
| YES -> spawn Agent B immediately, enter wait() again
| NO -> yield, wait for user/event
======================================================================
パイプラインのビート表示
Spec-only (6 beats, was 12 in v3)
-------------------------------------------------------
Beat 1 2 3 4 5 6
| | | | | |
R1+D1 --> W1+D2 --> W2+D3 --> W3+D4 --> W4+D5 --> Q1+D6
^ ^
pipeline sign-off
start pause
R=RESEARCH W=DRAFT(writer) Q=QUALITY D=DISCUSS(inline)
Impl-only (3 beats, with parallel window)
-------------------------------------------------------
Beat 1 2 3
| | +----+----+
PLAN --> IMPL --> TEST || REVIEW <-- parallel window
+----+----+
pipeline
done
Full-lifecycle (9 beats)
-------------------------------------------------------
Beat 1-6: [Spec pipeline as above]
|
Beat 6 (Q1+D6 done): CHECKPOINT -- user confirms then resume
|
Beat 7 8 9
PLAN --> IMPL --> TEST || REVIEW
Fullstack (with dual parallel windows)
-------------------------------------------------------
Beat 1 2 3 4
| +----+----+ +----+----+ |
PLAN --> IMPL || DEV-FE --> TEST || QA-FE --> REVIEW
^ ^ ^
parallel 1 parallel 2 sync barrier
チェックポイント
| トリガー | タイミング | 動作 |
|---|---|---|
| 仕様から実装への移行 | QUALITY-001 の完了時 | 一時停止し、「SPEC PHASE COMPLETE」を出力して、ユーザーの応答を待ちます |
| GC ループの上限到達 | QA-FE が最大 2 ラウンドに到達 | 反復を停止し、現在の QA 状態を報告します |
| パイプラインの停滞 | 実行可能なタスクも実行中のタスクもない | タスクの不足を確認し、ユーザーに報告します |
| DISCUSS-006 の重大度が HIGH | 最終承認 | 常に一時停止し、ユーザーの判断を待ちます |
停滞の検出
| 確認項目 | 条件 | 解決方法 |
|---|---|---|
| エージェントが応答しない | アクティブなエージェントの wait() がタイムアウト | エージェントを終了し、タスクを pending に戻して再起動します |
| パイプラインのデッドロック | 実行可能なタスクも実行中のタスクもなく、pending のタスクがある | blocked_by の依存関係を調べ、ブロック状況をユーザーに報告します |
| GC ループの超過 | DEV-FE/QA-FE の反復が 2 ラウンドを超過 | ループを終了し、最新の QA レポートを出力します |
| 高速進行による孤立 | 状態ではタスクが「in_progress」だが、エージェントは終了済み | pending に戻して再起動します |
エージェント起動テンプレート
オーケストレーターがパイプラインタスクのエージェントを起動するときは、次のテンプレートを使用します。
const agentId = spawn_agent({
message: `
## TASK ASSIGNMENT
### MANDATORY FIRST STEPS (Agent Execute)
1. **Read role definition**: ~/.codex/agents/<agent-role>.md (MUST read first)
2. Read session state: <session-dir>/team-session.json
3. Read wisdom files: <session-dir>/wisdom/*.md (if exists)
---
## Session
Session directory: <session-dir>
Task ID: <task-id>
Pipeline mode: <mode>
## Scope
<scope-description>
## Task
<task-description>
## InlineDiscuss
<discuss-round-id or "none">
## Dependencies
Completed predecessors: <list of completed task IDs and their artifact paths>
## Constraints
- Only process <PREFIX>-* tasks
- All output prefixed with [<agent-role>] tag
- Write artifacts to <session-dir>/<artifact-subdir>/
- Before each major output, read wisdom files for cross-task knowledge
- After task completion, write discoveries to <session-dir>/wisdom/
- If InlineDiscuss is set, call discuss subagent after primary artifact creation
## Completion Protocol
When work is complete, output EXACTLY:
TASK_COMPLETE:
- task_id: <task-id>
- status: <success | failed>
- artifact: <path-to-primary-artifact>
- discuss_verdict: <consensus_reached | consensus_blocked | none>
- discuss_severity: <HIGH | MEDIUM | LOW | none>
- summary: <one-line summary>
`
})
セッションディレクトリ
.workflow/.team/TLS-<slug>-<date>/
+-- team-session.json # Pipeline state (replaces TaskCreate/TaskList)
+-- spec/ # Spec artifacts
| +-- spec-config.json
| +-- discovery-context.json
| +-- product-brief.md
| +-- requirements/
| +-- architecture/
| +-- epics/
| +-- readiness-report.md
| +-- spec-summary.md
+-- discussions/ # Discussion records (written by discuss subagent)
+-- plan/ # Plan artifacts
| +-- plan.json
| +-- tasks/ # Detailed task specs
+-- explorations/ # Shared explore cache
| +-- cache-index.json # { angle -> file_path }
| +-- explore-<angle>.json
+-- architecture/ # Architect assessments + design-tokens.json
+-- analysis/ # Analyst design-intelligence.json (UI mode)
+-- qa/ # QA audit reports
+-- wisdom/ # Cross-task knowledge accumulation
| +-- learnings.md # Patterns and insights
| +-- decisions.md # Architecture and design decisions
| +-- conventions.md # Codebase conventions
| +-- issues.md # Known risks and issues
+-- .msg/ # Message bus (UI integration)
| +-- meta.json # Pipeline metadata (stages, roles, team_name)
| +-- messages.jsonl # NDJSON event log
+-- shared-memory.json # Cross-agent state
状態ファイルのスキーマ(team-session.json)
状態ファイルは、Claude の TaskCreate/TaskList/TaskGet/TaskUpdate システムに代わるものです。このファイルはオーケストレーターのみが管理します。
{
"session_id": "TLS-<slug>-<date>",
"mode": "<spec-only | impl-only | full-lifecycle | fe-only | fullstack | full-lifecycle-fe>",
"scope": "<project description>",
"status": "<active | paused | completed>",
"started_at": "<ISO8601>",
"updated_at": "<ISO8601>",
"tasks_total": 0,
"tasks_completed": 0,
"pipeline": [
{
"id": "RESEARCH-001",
"owner": "analyst",
"status": "pending | in_progress | completed | failed",
"blocked_by": [],
"description": "...",
"inline_discuss": "DISCUSS-001",
"agent_id": null,
"artifact_path": null,
"discuss_verdict": null,
"discuss_severity": null,
"started_at": null,
"completed_at": null,
"revision_of": null,
"revision_count": 0
}
],
"active_agents": [],
"completed_tasks": [],
"revision_chains": {},
"wisdom_entries": [],
"checkpoints_hit": [],
"gc_loop_count": 0
}
メッセージバス(.msg/)
.msg/ ディレクトリは、フロントエンド UI 用のパイプラインメタデータを提供します。これは、Claude 版の team_msg ツールで type: "state_update" を指定した場合と同じ形式です。
meta.json
フロントエンド表示用に API が読み取るパイプラインメタデータです。
{
"status": "active",
"pipeline_mode": "<mode>",
"pipeline_stages": ["role1", "role2", "..."],
"roles": ["coordinator", "role1", "role2", "..."],
"team_name": "lifecycle",
"role_state": {
"<role>": {
"status": "completed",
"task_id": "TASK-ID",
"_updated_at": "<ISO8601>"
}
},
"updated_at": "<ISO8601>"
}
モードごとの pipeline_stages:
| モード | pipeline_stages |
|---|---|
| spec-only | ["analyst", "writer", "reviewer"] |
| impl-only | ["planner", "executor", "tester", "reviewer"] |
| fe-only | ["planner", "fe-developer", "fe-qa"] |
| fullstack | ["planner", "executor", "fe-developer", "tester", "fe-qa", "reviewer"] |
| full-lifecycle | ["analyst", "writer", "planner", "executor", "tester", "reviewer"] |
| full-lifecycle-fe | ["analyst", "writer", "planner", "executor", "fe-developer", "tester", "fe-qa", "reviewer"] |
messages.jsonl
NDJSON イベントログ(1 行につき JSON オブジェクト 1 つ):
{"id":"MSG-001","ts":"<ISO8601>","from":"coordinator","to":"coordinator","type":"state_update","summary":"Session initialized","data":{...}}
{"id":"MSG-002","ts":"<ISO8601>","from":"analyst","to":"coordinator","type":"impl_complete","summary":"RESEARCH-001 completed","data":{...}}
メッセージの種類:state_update、impl_complete、impl_progress、test_result、review_result、error、shutdown
セッションの再開
オーケストレーターが既存のアクティブ/一時停止中のセッションを検出した場合:
- セッションディレクトリから
team-session.jsonを読み込む - ステータスが "in_progress" の各タスクについて:
- 対応するアクティブなエージェントがない場合 -> タスクが中断されているため、"pending" にリセットする
- 対応するアクティブなエージェントがある場合 -> エージェントがまだ稼働中か確認する(タイムアウト 0 で wait を試行)
- 整合:モードに必要なタスクがすべて状態に存在することを確認する
- 正しい blocked_by 依存関係を設定して、不足しているタスクを作成する
- 依存関係チェーンの整合性を確認する(循環や参照先のない参照がないこと)
- 整合した状態で状態ファイルを更新する
- Phase 4 に進み、準備ができたタスクを起動する
ユーザーコマンド
パイプラインの実行中、ユーザーは次のコマンドを発行できます:
| コマンド | アクション |
|---|---|
check / status | 実行ステータスのグラフを出力する(読み取り専用。処理は進めない) |
resume / continue | エージェントの状態を確認し、パイプラインを進める |
| 新しいセッションのリクエスト | Phase 0 で検出し、通常の Phase 1-5 のフローに入る |
ステータスグラフの出力形式:
[orchestrator] Pipeline Status
[orchestrator] Mode: <mode> | Progress: <completed>/<total> (<percent>%)
[orchestrator] Execution Graph:
Spec Phase: (if applicable)
[V RESEARCH-001(+D1)] -> [V DRAFT-001(+D2)] -> [>>> DRAFT-002(+D3)]
-> [o DRAFT-003(+D4)] -> [o DRAFT-004(+D5)] -> [o QUALITY-001(+D6)]
Impl Phase: (if applicable)
[o PLAN-001]
+- BE: [o IMPL-001] -> [o TEST-001] -> [o REVIEW-001]
+- FE: [o DEV-FE-001] -> [o QA-FE-001]
V=completed >>>=running o=pending .=not created
[orchestrator] Active Agents:
> <task-id> (<agent-role>) - running <elapsed>
[orchestrator] Ready to spawn: <task-ids>
[orchestrator] Commands: 'resume' to advance | 'check' to refresh
ライフサイクル管理
タイムアウトプロトコル
| フェーズ | タイムアウト | タイムアウト時の処理 |
|---|---|---|
| Phase 1(要件) | なし(対話型) | N/A |
| Phase 2(初期化) | 60s | エラーで終了 |
| Phase 3(ディスパッチ) | 60s | エラーで終了 |
| Phase 4(エージェントごと) | 15 分(仕様エージェント)、30 分(実装エージェント) | send_input で収束リクエストを送信し、さらに 2 分待ってから終了する |
| Phase 5(レポート) | 60s | 部分的なレポートを出力 |
収束リクエスト(タイムアウト時に send_input で送信):
send_input({
id: <agent-id>,
message: `
## TIMEOUT NOTIFICATION
Execution timeout reached. Please:
1. Save all current progress to artifact files
2. Output TASK_COMPLETE with status: partial
3. Include summary of completed vs remaining work
`
})
クリーンアッププロトコル
パイプラインが完了したとき(または中止されたとき):
// Close all active agents
for (const agentEntry of state.active_agents) {
try {
close_agent({ id: agentEntry.agent_id })
} catch (e) {
// Agent already closed, ignore
}
}
// Update state file
state.status = "completed" // or "aborted"
state.updated_at = new Date().toISOString()
// Write state file
エラー処理
| シナリオ | 検出方法 | 解決方法 |
|---|---|---|
| エージェントのタイムアウト | wait() が timed_out を返す | send_input で収束リクエストを送信し、2 分間待って再試行してから、エージェントを終了し、タスクをリセットする |
| エージェントのクラッシュ/予期しない終了 | wait() がエラーステータスを返す | タスクを pending にリセットし、エージェントを再起動する(最大 3 回再試行) |
| 同じタスクで 3 回以上失敗 | 状態ファイル内の再試行回数 | パイプラインを一時停止し、ユーザーに報告する |
| 早期進行による孤立タスク | タスクが in_progress だがアクティブなエージェントがなく、5 分以上経過 | pending にリセットし、エージェントを再起動する |
| コンセンサスが HIGH でブロック | エージェント出力から DISCUSS_RESULT を解析 | 修正タスクを作成する(最大 1 回)か、一時停止する |
| DISCUSS-006 でコンセンサスが HIGH でブロック | 上記と同様だが、最終承認ラウンド | 常にユーザーの確認のため一時停止する |
| 修正後もブロック | 修正タスクが HIGH でブロックを返す | パイプラインを一時停止し、ユーザーにエスカレーションする |
| セッションファイルの破損 | JSON 解析エラー | 直近の正常な状態からの復旧を試みるか、エラーを報告する |
| パイプラインの停滞 | ready も running もなく、pending がある | blocked_by を調べ、ブロックの詳細を報告する |
| 不明なエージェント出力形式 | wait の結果に TASK_COMPLETE が見つからない | 警告を記録し、ステータスの抽出を試み、部分完了としてマークする |
| 状態内の重複タスク | ディスパッチ時にタスク ID がすでに存在する | 作成をスキップし、警告を記録する |
| 依存関係の欠落 | blocked_by が存在しないタスクを参照している | エラーを記録し、パイプラインを停止する |
フロントエンドの自動検出
Phase 1 では、オーケストレーターがフロントエンド作業の必要性を検出します:
| シグナル | 検出方法 | パイプラインのアップグレード |
|---|---|---|
| 説明に FE のキーワードがある | 一致:component、page、UI、React、Vue、CSS、HTML、Tailwind、Svelte、Next.js、Nuxt、shadcn、design system | impl-only -> fe-only または fullstack |
| BE のキーワードも含まれる | 一致:API、database、server、endpoint、backend、middleware | impl-only -> fullstack |
| プロジェクトで FE フレームワークを使用 | package.json 内の react/vue/svelte/next を検出 | full-lifecycle -> full-lifecycle-fe |
インラインディスカッションプロトコル(エージェント向け)
Produce エージェント(analyst、writer、reviewer)は、主な成果物を完成させた後に discuss サブエージェントを呼び出します。このプロトコルは参照用に記載されています。各エージェントのロールファイルには、具体的な呼び出し方法が記載されています。
ディスカッションラウンドの対応関係:
| エージェント | タスク完了後 | ディスカッションラウンド | 観点 |
|---|---|---|---|
| analyst | RESEARCH-001 | DISCUSS-001 | プロダクト、リスク、網羅性 |
| writer | DRAFT-001 | DISCUSS-002 | プロダクト、技術、品質、網羅性 |
| writer | DRAFT-002 | DISCUSS-003 | 品質、プロダクト、網羅性 |
| writer | DRAFT-003 | DISCUSS-004 | 技術、リスク |
| writer | DRAFT-004 | DISCUSS-005 | プロダクト、技術、品質、網羅性 |
| reviewer | QUALITY-001 | DISCUSS-006 | 5 つすべて(プロダクト、技術、品質、リスク、網羅性) |
エージェント側の discuss 呼び出し(オーケストレーターではなく、エージェント内で実行):
// Agent spawns discuss subagent internally
const discussId = spawn_agent({
message: `
## MANDATORY FIRST STEPS (Agent Execute)
1. **Read agent definition**: ~/.codex/agents/discuss-agent.md (MUST read first)
---
## Multi-Perspective Critique: <round-id>
### Input
- Artifact: <artifact-path>
- Round: <round-id>
- Perspectives: <perspective-list>
- Session: <session-dir>
- Discovery Context: <session-dir>/spec/discovery-context.json
### Execution
Per-perspective CLI analysis -> divergence detection -> consensus determination -> write record.
### Output
Write discussion record to: <session-dir>/discussions/<round-id>-discussion.md
Return verdict summary with: verdict, severity, average_rating, action_items, recommendation.
`
})
const discussResult = wait({ ids: [discussId], timeout_ms: 300000 })
close_agent({ id: discussId })
// Agent includes discuss result in its TASK_COMPLETE output
共有 Explore プロトコル(エージェント向け)
コードベースのコンテキストが必要なエージェントは、explore サブエージェントを呼び出します。結果は explorations/ にキャッシュされます。
エージェント側の explore 呼び出し(オーケストレーターではなく、エージェント内で実行):
// Agent spawns explore subagent internally
const exploreId = spawn_agent({
message: `
## MANDATORY FIRST STEPS (Agent Execute)
1. **Read agent definition**: ~/.codex/agents/explore-agent.md (MUST read first)
---
## Explore Codebase
Query: <query>
Focus angle: <angle>
Keywords: <keyword-list>
Session folder: <session-dir>
## Cache Check
1. Read <session-dir>/explorations/cache-index.json (if exists)
2. If matching angle found AND file exists -> return cached result
3. If not found -> proceed to exploration
## Output
Write JSON to: <session-dir>/explorations/explore-<angle>.json
Update cache-index.json with new entry.
Return summary: file count, pattern count, top 5 files, output path.
`
})
const exploreResult = wait({ ids: [exploreId], timeout_ms: 300000 })
close_agent({ id: exploreId })
キャッシュ参照ルール:
| 条件 | アクション |
|---|---|
| cache-index.json に完全一致する観点がある | キャッシュ済みの結果を返す |
| 一致するものがない | 探索を実行し、結果をキャッシュする |
| インデックスにエントリーがあるが、キャッシュファイルが存在しない | 古いエントリーを削除し、再探索する |
知見の蓄積
タスクをまたいで知識を蓄積します。オーケストレーターはセッション開始時に wisdom/ を作成します。
ディレクトリ:
<session-dir>/wisdom/
+-- learnings.md # Patterns and insights discovered
+-- decisions.md # Architecture and design decisions made
+-- conventions.md # Codebase conventions identified
+-- issues.md # Known risks and issues flagged
エージェントの責務:
- 開始時:タスクをまたぐコンテキストとして、すべての wisdom ファイルを読む
- 作業中:発見した内容を適切な wisdom ファイルに追記する
- 完了時:重要な発見を TASK_COMPLETE の概要に含める
ロール分離ルール
| 許可 | 禁止 |
|---|---|
| エージェントは自身のプレフィックスのタスクのみを処理する | 他のエージェントのタスクを処理する |
| エージェントは TASK_COMPLETE の出力を通じて結果を伝える | エージェント同士が直接やり取りする |
| エージェントは内部で discuss/explore サブエージェントを呼び出す | エージェントがオーケストレーターの状態ファイルを変更する |
| エージェントは指定されたディレクトリに成果物を書き込む | 他のエージェントのディレクトリに書き込む |
| エージェントは wisdom ファイルと shared-memory.json を読む | 他のエージェントの成果物を削除または上書きする |
オーケストレーターにも、コードを直接記述・変更すること、実装ツールを呼び出すこと、分析/テスト/レビュー作業を実行することを禁止します。
GC ループ(フロントエンド QA)
FE パイプラインでは、QA-FE が修正と再テストのサイクルを開始する場合があります。
Round 1: DEV-FE-001 -> QA-FE-001
QA-FE verdict: NEEDS_FIX?
YES -> Round 2: DEV-FE-002(blocked_by: QA-FE-001) -> QA-FE-002(blocked_by: DEV-FE-002)
QA-FE-002 verdict: NEEDS_FIX?
YES -> max rounds reached (2), stop loop, report current state
NO -> proceed to next pipeline step
NO -> proceed to next pipeline step
GC ループの反復が必要になると、オーケストレーターは DEV-FE-NNN と QA-FE-NNN のタスクを状態ファイルに動的に追加します。
モードとパイプラインのクイックリファレンス
| モード | タスク総数 | 最初のタスク | チェックポイント |
|---|---|---|---|
| spec-only | 6 | RESEARCH-001 | なし(QUALITY-001 が最終) |
| impl-only | 4 | PLAN-001 | なし |
| fe-only | 3(+GC) | PLAN-001 | なし |
| fullstack | 6 | PLAN-001 | なし |
| full-lifecycle | 10 | RESEARCH-001 | QUALITY-001 の後 |
| full-lifecycle-fe | 12(+GC) | RESEARCH-001 | QUALITY-001 の後 |
共有仕様リソース
| リソース | パス(スキルからの相対パス) | 用途 |
|---|---|---|
| ドキュメント規約 | specs/document-standards.md | YAML フロントマター、命名、構成 |
| 品質ゲート | specs/quality-gates.md | フェーズごとの品質ゲート |
| プロダクト概要テンプレート | templates/product-brief.md | DRAFT-001 |
| 要件テンプレート | templates/requirements-prd.md | DRAFT-002 |
| アーキテクチャテンプレート | templates/architecture-doc.md | DRAFT-003 |
| エピックテンプレート | templates/epics-template.md | DRAFT-004 |
コーディネーターの役割に関する制約(メインエージェント)
重要:このスキルを実行するコーディネーター(メインエージェント)の役割はオーケストレーションのみであり、実装は行いません。
-
コーディネーターはコードを実行しません:メインエージェントは、コードを直接記述、変更、実装してはなりません。すべての実装作業は、起動したチームエージェントに委任します。コーディネーターが行うのは次の作業のみです。
- タスクを割り当ててエージェントを起動する
- エージェントからのコールバックを待つ
- 結果を統合し、ワークフローを調整する
- フェーズ間のワークフローの移行を管理する
-
辛抱強く待つことが必須です:エージェントの実行にはかなりの時間がかかります(通常、フェーズごとに10~30分、ときにはそれ以上)。コーディネーターは次のことを必ず守ってください。
wait()呼び出しが完了するまで辛抱強く待つ- 遅れていると思われることを理由に、ワークフローの手順を省略しない
- 時間がかかっているというだけで、エージェントが失敗したと判断しない
- スキルで定義されているタイムアウトの仕組みを信頼する
-
確認には send_input を使用します:エージェントが指針を必要としている場合や、行き詰まっているように見える場合、コーディネーターは次のことを必ず守ってください。
send_input()を使って質問するか、説明を補足する- エージェントを飛ばしたり、次のフェーズに早まって進んだりしない
- エスカレーションする前に、エージェントが応答する機会を与える
- 例:
send_input({ id: agent_id, message: "Please provide status update or clarify blockers" })
-
ワークフローの近道は禁止です:コーディネーターは次のことをしてはなりません。
- ワークフローで定義されたフェーズやステージを省略する
- 必須の承認またはレビューの手順を回避する
- 前提条件の完了前に、依存するタスクを実行する
- エージェントから明示的なコールバックがないまま、タスクが完了したと判断する
- エージェントの結果を捏造する
-
長時間実行されるプロセスを尊重します:これは複雑なマルチエージェントのワークフローであり、辛抱強く進める必要があります。
- 全体の実行時間は30~90分、またはそれ以上に及ぶ場合があります
- 複雑さによって、各フェーズに10~30分かかる場合があります
- コーディネーターは、プロセス全体を通して作業を続け、注意を払わなければなりません
- 時間が気になることを理由に、プロセスを終了したり、手順を省略したりしないでください