---
id: subtasks
title: サブタスクと並列実行
category: advanced
order: 100
keywords: [サブタスク, SpawnSubTask, 並列, waiting_subtasks, research-sub, 分解]
---

# サブタスクと並列実行

大きな仕事は、エージェントが複数のサブタスクに分解して並列実行できます。「5 社を比較調査して」のように独立した調査項目が並ぶタスクで効果的です。

## どう動くか

エージェントは `SpawnSubTask` ツールを呼んでサブタスクをキューに追加します。複数回呼べば複数のサブタスクが並列にスケジュールされます。各サブタスクには独立した専用ワークスペースが割り当てられ、別ジョブとして実行されます。

サブタスクを 1 つ以上生成すると、親タスクは **waiting_subtasks** 状態に入ります。すべての子が完了すると親が再開し、子の成果をまとめて最終出力を作ります。

ジョブの状態遷移については「[タスクの実行と監視](03-running.md)」を参照してください。

## SpawnSubTask の引数

| 引数 | 説明 |
|---|---|
| title | サブタスクのタイトル（簡潔に） |
| instruction | 何を調査・実行し、どんな形式で `output/` に書くかの具体的な指示 |
| piece | 使用するピース（省略時は `general`） |

`piece` には `general` / `research` / `brainstorming` / `orchestrated` / `data-process` / `office-process` などを指定できます。指定したピースが見つからない場合はエラーになります。

調査系のサブタスクには、専用ピース **research-sub**（dig → analyze → verify の 3 ステップ）が使われます。research-sub はそれ以上のサブタスク分解を行わず、調査をその場で完結させます。

## サブタスクの確認

タスク詳細の **サブタスク** タブで進捗を確認できます。

- ヘッダーに「N/M 完了」のカウンタが出る
- 各サブタスクはカード表示で、ステータス・出力ファイル・ログ・入力ファイルを開ける
- Chat 画面ではインラインのサブタスクカードとして進捗が流れる

各子は独立ワークスペースを持つため、成果物（`output/`）も子ごとに分かれて配信されます。

## 待機中の入力（割り込み）

親が waiting_subtasks の間でも、Chat 画面から親へメッセージを送れます（割り込み = interjection）。送ったメッセージは、エージェントが次のイテレーションで取り込みます。

- 割り込みが効くのは **running** と **waiting_subtasks** の間
- 入力欄がロックされるのはジョブ割り当て中（dispatching）のみ
- 割り込みは親タスクに対して行われ、実行中の個々の子タスクには直接届きません

## 分解の上限

無限再帰や暴走を防ぐため、`config.yaml` の `subtasks` セクションで上限を設定します（キーはスネークケース）。

```yaml
subtasks:
  max_depth: 2        # SpawnSubTask のネスト最大深度（デフォルト 2、0 で分解禁止）
  max_per_parent: 10  # 1 ジョブが生成できるサブタスクの最大数（デフォルト 10）
```

- `max_depth: 0` にすると分解そのものを無効化できます
- 深度上限に達したジョブでは SpawnSubTask が提示されず、エージェントは自力で処理します
- `max_per_parent` を超える生成はできません

## TIP

> サブタスクは「独立して並列実行できる」項目に向きます。前の結果に依存する逐次処理は、1 つのタスク内の movement 遷移で扱う方が確実です（→「[ピースの仕組み](05-pieces.md)」）。

> サブタスクへの instruction には、成果物を `output/` にどう書くかまで具体的に指定すると、親がまとめやすくなります。
