> ## 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に依存しない連携レイヤーを加え、エージェント同士の作業引き継ぎ、
結果報告、blockerの通知、人間の判断待ちを可能にします。

## コマンドを実行する前の要件

* `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">
    タスクを記録してエージェントへ割り当て、terminal出力から推測せずに
    構造化された`worker_done`結果を受け取ります。
  </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の追跡を停止し、blockerはcoordinatorへ報告する。"
```

タスクを作り、名前を持つエージェントへ割り当てます。

```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自体も種類を持つメッセージとして残るため、単なるkeystroke送信とは
異なります。

結果、blocker、人間の判断が必要なイベントを待ちます。

```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>

正確なalpha境界は[現在の制約](/jp/current-limits)で確認し、タスクに合う
workerは[provider対応レベル](/jp/providers)を参照してください。
