> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dureai.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# 多代理编排

> 通过消息、任务分派、结果报告、heartbeat 和人工 decision gate 协调多个编程代理。

多个 terminal 出现在同一屏幕上，并不意味着它们已经成为一个团队。Dure
提供不依赖特定 provider 的协调层，让代理能够互相交接工作、报告结果、上报
阻塞，并在需要时等待人工决策。

## 运行命令前的要求

* 安装 `dure` CLI，并在准备使用的 app channel 中至少启动一次 Dure。这会创建
  CLI 所读取的 registry。完成后，`task-create` 不要求应用保持运行。
* `task-create` 只记录任务。`--title` 为必填项，但不要求 provider、运行中的
  agent、project、worktree 或 managed session。`--spec` 与 `--deps` 可选。
* 目前没有单独的 `--requirements` 字段。请把范围、验收条件、验证方式和预期
  结果格式写进自由格式的 `--spec`。Dure 会持久化并传递它，但不会判断这份
  契约是否完整。
* 在 Dure 内打开的 terminal 会自动继承正确的 app channel。安装版默认使用
  `stable`；从外部 shell 控制隔离的开发构建时，必须把
  `DURE_APP_CHANNEL` 设置为该构建的 channel。
* `dispatch --inject` 的要求更严格：目标必须注册在同一个 channel 中，而且其
  session 必须能够接收输入。远程 mailbox 尚未桥接，因此完整的结果回传循环
  目前还要求目标是本地代理。不加 `--inject` 时，dispatch 只会持久化任务分配
  与消息。

## 协调层提供什么

<CardGroup cols={2}>
  <Card title="带类型的消息" icon="messages-square">
    区分 note、status、dispatch、完成报告、escalation、decision gate 与
    heartbeat。
  </Card>

  <Card title="Provider 中立的接收者" icon="waypoints">
    可以发送给一个代理、代表所有人的 `@all`，或 `@claude`、`@codex` 等
    provider 分组。
  </Card>

  <Card title="有结果回传的任务" icon="list-checks">
    记录任务并分配给代理，再接收结构化的 `worker_done` 结果，无需从 terminal
    输出中猜测进度。
  </Card>

  <Card title="把人工判断放进流程" icon="split">
    在跨越需要批准的边界前，代理可以提出阻塞式问题或创建 decision gate。
  </Card>
</CardGroup>

消息与任务状态会持久化在当前 Dure app channel 中。在托管 agent session
里，Dure 会自动识别发送者，因此通常无需额外传入 `--from` identity。

## 一个小型协调循环

向当前团队发送公告：

```sh theme={"system"}
dure orch send --to @all \
  --subject "异步切换 candidate" \
  --body "停止跟踪 origin/main，并向 coordinator 报告 blocker。"
```

创建任务并分派给指定代理：

```sh theme={"system"}
dure orch task-create \
  --title "审查会话恢复 diff" \
  --spec "范围：恢复 diff。验证行为、测试与 rollback 路径。输出：只报告发现的问题。"

# 将 t7 替换为 task-create 输出的 ID。
dure orch dispatch --task t7 --to review-agent --inject
```

`--inject` 会把任务说明与报告约定放入目标代理的 terminal。Dispatch 本身也会
保存为带类型的消息，因此它不只是一次原始按键输入。

等待结果、阻塞上报或需要人工处理的决策：

```sh theme={"system"}
dure orch check --wait \
  --types worker_done,escalation,decision_gate \
  --timeout 900
```

## 协调模式

### 并行分解独立工作

为调研、实现与审查分别创建任务，再分派给不同代理或 provider。Worktree
隔离文件修改，orchestration channel 则传递共同目标与结果。

### 用提问代替无声阻塞

需要 coordinator 回答的代理可以等待 reply：

```sh theme={"system"}
dure orch ask --to coordinator \
  --question "fallback 是否应保留旧会话？" \
  --options "保留,替换"
```

### 区分耗时工作与代理卡死

执行长任务的 worker 可以发送 `heartbeat`。无法继续的任务可以发送
`escalation`，因此无需盯着每个 terminal，也能看出两者的区别。

## 与 terminal 注入的区别

向另一个 terminal 输入 text 适合唤醒代理或传递 prompt，但它没有 task
identity、message type 或持久的结果约定。Dure orchestration 会先记录通信。
Injection 只是传递已分配任务的可选方式，并不是 source of truth。

<Warning>
  目前，编排只在一个 Dure app channel 内本地运行。远程 SSH 代理不会直接
  加入本地 mailbox，`@all` 也尚未为每个接收者分别记录送达确认。必须执行的
  操作请明确指定接收者。
</Warning>

请在[当前限制](/cn/current-limits)中查看准确的 alpha 边界，或通过
[provider 支持级别](/cn/providers)为任务选择 worker。
