# RESEARCH-003: Orca 多 Agent 协同调度与 DAG 拓扑编排实证调研研报

- **研报编号**：`RESEARCH-003`
- **课题**：Orca 调度引擎（Orchestration）与 Worktree 隔离机制在研发 Autonomous Loop 中的集成可行性、实证参数与架构模式调研
- **调研时间**：2026年10月（基于本机已安装运行的 Orca CLI 1.4.224 官方指南与运行时实证）
- **一手信源**：
  - `/Applications/Orca.app/Contents/Resources/bin/orca` (v1.4.224)
  - `orca skills get orchestration`（版本自匹配官方编排规范）
  - `orca skills get orca-cli`（Worktree 与终端管理规范）
  - `orca status --json`（本机运行时环境与特性探针）
  - `references/coordinator-loop.md` 及 `references/placement-and-remote.md`
- **统一语言遵循**：[`CONTEXT.md`](../../CONTEXT.md)
- **协议依据**：[`AGENTS.md`](../../AGENTS.md)（实证探路优先原则与实体资产留痕优先原则）
- **状态**：已落盘归档 ✅

---

## 1. 调研背景与核心问题 (Questions)

在现有单 Agent 的 Autonomous Execution Loop 中，所有任务均按单线程拓扑顺序推进。随着工程复杂度增加（例如生物、化学多学科复习包同时生成、双轴自审、大批量 HTML 排版校验），出现以下诉求：
1. **多任务并行化**：生物复习包与化学复习包彼此无耦合，理论上可并发生成以大幅缩短耗时；
2. **拓扑依赖串行化**：考情调研（Research）必须严格先于规格制定（Spec），规格必须先于工单分解（Tickets），工单必须先于代码交付；
3. **工作区分支与环境隔离**：在进行高风险重构、大范围页面改写或多 Agent 并发写入同一仓库时，单一直连工作区容易发生 Git 锁冲突或未提交文件的脏覆盖，需要 Worktree（Git 工作树）进行物理隔离。

为此，深入考证以下核心问题：
- **问题 1**：Orca 编排引擎的核心对象模型与命令流是什么？
- **问题 2**：如何通过 DAG 声明串行与并行依赖？
- **问题 3**：Worktree 隔离的最佳实践、放置策略与生命周期边界是什么？
- **问题 4**：如何将 Orca 调度平滑嵌入现有的 `AGENTS.md` Autonomous Loop 体系中？

---

## 2. 一手实证数据与运行时探针 (Primary Truth)

### 2.1 本机 Orca 运行时状态
通过 `orca status --json` 实测证实：
- **客户端版本**：`1.4.224`；
- **运行状态**：`running: true, pid: 70407, reachable: true`；
- **关键就绪能力**：
  - `orchestration.contract.v1`（编排契约协议）；
  - `orchestration.federation.v1`（联邦多 Agent 调度）；
  - `worktree.create-idempotency.v1`（幂等式 Worktree 创建）；
  - `agent-session.turn-completion.v1`（Agent 轮次完成回传）。

### 2.2 核心对象与生命周期模型
Orca 编排体系具备严格的四层生命周期对象：
1. **Run（目标执行周期）**：
   - 创建指令：`orca orchestration run-create --objective "<目标描述>" --json`
   - 代表一次编排任务的统一上下文边界，所有 Task 与 Dispatch 均归属于该 Run。
2. **Task（任务定义与 DAG 依赖）**：
   - 创建指令：`orca orchestration task-create --spec "<任务说明书>" --deps '["<前置task_id>"]' --json`
   - 通过 `--deps` 传入前置任务 ID 数组，原生表达**串行阻塞**；
   - 无前置依赖或前置依赖已结算的 Task 会自动进入 `ready` 状态（`task-list --ready --json`），原生支持**并行 Wave**。
3. **Dispatch（派发与执行实体）**：
   - 派发指令：`orca orchestration worker-start --task <task_id> --worktree <策略> --agent <agent类型> --json`
   - 将 Task 绑定到具体的 Agent 终端与工作空间中执行。
4. **Delivery & Message（结构化通信与 ACK）**：
   - 监听指令：`orca orchestration check --wait --types "worker_done,escalation,question" --timeout-ms 900000 --json`
   - 回复与确认：`orca orchestration reply --id <msg_id> --body "<内容>" --json` 并配合 `--ack <delivery_id>`。

---

## 3. 关键机制深度解构 (Mechanism Analysis)

### 3.1 串行与并行编排范式 (Serial vs. Parallel)

#### A. 串行链条 (Strict Dependency)
- **场景**：研报调研 ➔ 规格沉淀 ➔ 工单拆解；
- **实现**：
  ```bash
  # 步骤 1：研报任务
  TASK1=$(orca orchestration task-create --spec "执行考情调研并落盘研报" --json | jq -r .result.id)
  # 步骤 2：规格任务（依赖 Task 1）
  TASK2=$(orca orchestration task-create --spec "依据研报沉淀 Spec" --deps "[\"$TASK1\"]" --json | jq -r .result.id)
  ```
  Task 2 绝不会在 Task 1 发出 `worker_done` 之前进入 ready 状态。

#### B. 并行波次 (Parallel Waves)
- **场景**：生物复习包生成 与 化学复习包生成（两者无依赖）；
- **实现**：
  ```bash
  # 同时创建两个无依赖 Task
  TASK_BIO=$(orca orchestration task-create --spec "生成 docs/期中/生物.html" --json | jq -r .result.id)
  TASK_CHEM=$(orca orchestration task-create --spec "生成 docs/期中/化学.html" --json | jq -r .result.id)
  # 并行拉起两个 Worker
  orca orchestration worker-start --task $TASK_BIO --worktree current --agent codex --json
  orca orchestration worker-start --task $TASK_CHEM --worktree current --agent claude --json
  # 协调者一次性等待任一或全量事件
  orca orchestration check --wait --types "worker_done,escalation" --timeout-ms 900000 --json
  ```

---

### 3.2 工作区放置与 Worktree 隔离策略 (Placement & Worktrees)

官方规范明确界定了三种 `--worktree` 放置行为：

| 放置参数 | 行为与物理路径 | 适用场景 | 风险与注意事项 |
| :--- | :--- | :--- | :--- |
| **`--worktree current`** | 在当前工作区创建全新 Agent 终端，共享代码目录 | **默认推荐**。修改不同文件（如一个写生物，一个写化学），无并发冲突 | 若多个 Worker 同时写 `AGENTS.md` 或同一文件会导致写入冲突 |
| **`--worktree new-child`** | 创建层叠的独立 Git Worktree（自动建立临时分支与独立工作目录） | **高风险或多头并发**。两个 Worker 需要改动重叠模块，或做破坏性重构验证 | 任务结束后必须由协调者执行合并（merge/cherry-pick）或清理 |
| **`--worktree new-top-level`** | 创建并列的顶级独立 Worktree | 长期跨分支独立研发线 | 资源消耗较大，通常不用于快速闭环工单 |

> **关键规则（官方强调）**：
> 默认使用 `current`。仅当“存在明确的文件重叠冲突风险”或“用户明确要求拉起独立分支”时，才使用 `new-child`。

---

### 3.3 结算与资源回收协议 (Worker Contract & Cleanup)

1. **Worker 完工凭证**：
   Worker 必须调用 `worker_done`，提供 3 句话总结与显式的 `--outcome succeeded` 或 `--outcome failed`；
2. **Coordinator 回收责任**：
   Coordinator 收到合法的 `worker_done` 后，必须执行且仅执行以下之一：
   - 转移给新任务：`orca orchestration worker-start --task <next_task> --terminal <handle> --json`；
   - 彻底释放终端：`orca orchestration worker-release --dispatch <dispatch_id> --json`；
   - 严禁悬空不释放，避免进程泄露。

---

## 4. 集成方案架构设计 (Proposed Architecture)

将 Orca 调度集成进项目生命周期，形成 **“协调者-专家池”分层架构 (Coordinator-Worker Hierarchy)**：

```mermaid
flowchart TD
    User["用户输入 / 方案敲定"] --> Coord["Coordinator (主循环协调者)"]
    Coord --> CreateRun["1. 创建 Run (run-create)"]
    CreateRun --> BuildDAG["2. 编排工单 DAG 依赖拓扑 (task-create --deps)"]
    
    subgraph ExecutionPlane ["Orca 调度执行平面"]
        direction TB
        BuildDAG --> Wave1["Wave 1 (调研与规格)"]
        Wave1 --> |worker_done| Wave2["Wave 2 并行交付 (Parallel Wave)"]
        
        subgraph Wave2Tasks ["并行执行区"]
            WorkerBio["Worker A: 生物交付<br>(worktree current / child)"]
            WorkerChem["Worker B: 化学交付<br>(worktree current / child)"]
        end
        
        Wave2 --> Wave2Tasks
        Wave2Tasks --> |全量 worker_done| Wave3["Wave 3 (双轴自审与门禁)"]
        Wave3 --> WorkerReview["Worker C: code-review 审查"]
    end
    
    WorkerReview --> Release["4. 资源回收 (worker-release)"]
    Release --> Commit["5. 主分支归档与交付报告"]
```

### 4.1 核心价值
1. **耗时减半**：双科交付实现真正物理并发；
2. **隔离安全**：复杂大改动可派发到 `new-child` Worktree，验证完全绿灯后再合入 `main`，主分支零污染风险；
3. **结构化示踪**：每一个 Worker 的交互、耗时与产出均被 Orca 原生记录与索引，便于后续复盘追踪。

---

## 5. 调研结论与下一步行动路线建议 (Recommendations)

### 5.1 结论
Orca CLI 1.4.224 在当前环境下**完全具备**成熟可靠的 DAG 编排、多 Agent 派发与 Worktree 隔离能力。将 Orca 调度融入 Autonomous Loop 具有极高的技术可行性与工程价值。

### 5.2 推荐推进路线 (基于 Ask-Matt 视角)

1. **路线 A（推荐）：治理立法先行 ➔ 更新 `AGENTS.md` 增加调度决策准则**：
   - 在 `AGENTS.md` 的自主执行闭环中，增设“第 5 节：Orca 调度编排协议 (Orchestration Protocol)”；
   - 明确定义何时走单 Agent 本地执行、何时走 Orca 并行 Wave、何时开启 `new-child` Worktree 隔离矩阵；
   - 同步至 `~/.gemini/config/GEMINI.md`。

2. **路线 B：沉淀 ADR 架构决策 ➔ 确立双核调度演进方案**：
   - 编写 `docs/adr/0002-基于Orca编排引擎的多Agent协同架构.md`，把上下文权衡、容灾回收策略固定下来。

3. **路线 C：小步试点验证 ➔ 选取一个后续任务（如模拟卷或专项突破）实测并行调度**：
   - 试水一次真实的 `run-create ➔ worker-start ➔ check --wait ➔ release` 闭环。
