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

# 委任

> 設定済みの別 Agent にタスクを渡し、run id で結果を受け取る

委任は、ある Agent が別の Agent に助けを求める仕組みです。[Sub Agent](/ja/multi-agent/subagent) と違い、対象はその場で作られる存在ではありません。自分のワークスペース、記憶、スキル、セッション、スケジューラを持つ常駐の同僚です。自分の環境で回答し、その結果は依頼した Agent に戻ります。ユーザーに直接送られることはありません。

<Note>
  `agent_delegate` ツールは、有効な Agent が 2 つ以上ある場合にのみ現れます。単一 Agent の構成では表示されません。
</Note>

## Sub Agent か同僚か

|          | Sub Agent              | 委任                         |
| -------- | ---------------------- | -------------------------- |
| 寿命       | 1 つのタスクのために作られ、終われば消える | 常駐 Agent、事前に設定             |
| ワークスペース  | 呼び出し元と共有               | 独立                         |
| 記憶       | 自前のものは持たない             | 独立                         |
| アイデンティティ | 匿名                     | Agent 一覧に現れ、チャネルを持てる       |
| 結果       | その場で返る                 | その場で返る、または後から run id で受け取る |

自分の作業を並列化するなら Sub Agent。そのタスクが本来別の担当のもの——そのコードベース、そのナレッジベース、その顧客を持つ Agent のもの——であれば委任します。

## 委任は 1 つの run

委任するたびに `run_id` が返ります。これは対象のワークスペースに実際に記録された run へのハンドルであり、その親は依頼元の run です。したがって委任の連鎖はどちらの端からもたどれます。

ハンドルがあるからこそ、待つことが任意になります。呼び出し元が待てる時間を超えた作業はバックグラウンドで進み続け、呼び出し元は聞き直すのではなく後から受け取ります。

```
agent_delegate(agent_id="research", task="...", wait_seconds=0)
  -> { run_id: "a3ef...", status: "running" }

... 依頼元は別の作業をするか、先にユーザーへ返答する ...

agent_delegate(action="check", run_id="a3ef...")
  -> { status: "done", content: "..." }
```

既定の `wait_seconds` であれば、すぐ終わるタスクは 1 回の呼び出しでそのまま結果が返り、ハンドルを使う必要はありません。

## アクション

| アクション      | 内容                                          |
| ---------- | ------------------------------------------- |
| `list`     | この Agent が委任を許されている同僚                       |
| `delegate` | タスクを渡す。`agent_id`、`task`、任意で `wait_seconds` |
| `check`    | `run_id` の状態を読み、完了していれば結果を取得                |
| `cancel`   | 実行中の委任に停止を要求                                |

ハンドルを読めるのは、それを作成した Agent だけです。

## ガード

委任は完全な Agent 同士で行われるため、境界が設けられています。

* **許可リスト** —— 誰が誰に頼めるか。未設定ならすべての Agent 間で可能
* **循環** —— すでに連鎖に含まれる Agent へは再委任できない
* **深さ** —— 1 つの連鎖で許される委任の段数
* **サイズ** —— 1 回のタスク本文の上限
* **時間予算** —— 予算を超えた委任 run はキャンセルされる

キャンセルされた対象は、自らそのキャンセルを記録します。それでも回答を返した場合、その回答は破棄されず run に添付されます。

## 設定

```json theme={null}
{
  "agent_delegation": {
    "enabled": true,
    "allowed_targets": {
      "assistant": ["research", "support"],
      "research": []
    },
    "max_depth": 3,
    "timeout_seconds": 120,
    "default_wait_seconds": 30,
    "max_message_chars": 8000
  }
}
```

| フィールド                  | 既定値    | 意味                                                       |
| ---------------------- | ------ | -------------------------------------------------------- |
| `enabled`              | `true` | `false`、またはブロック全体を `false` にするとツールを提供しない                 |
| `allowed_targets`      | 未設定    | 送信元 Agent ID から到達可能な ID への対応。`"*"` は任意。未設定ならすべての組み合わせを許可 |
| `max_depth`            | `3`    | 1 つの連鎖での委任段数（1-8）                                        |
| `timeout_seconds`      | `120`  | 1 回の委任 run の時間予算（0.01-600）                               |
| `default_wait_seconds` | `30`   | run id を返すまでその場で待つ時間                                     |
| `max_message_chars`    | `8000` | 1 回の委任タスクの長さ上限                                           |

上記の `"research"` のように空配列を指定した Agent は、委任を受けることはできますが、さらに外へ委任することはできません。
