# SpawnSubTask

タスクを並列サブタスクに分解して実行する。各サブタスクは独立した worker（ジョブ）で動き、完了後に親タスクが結果を集約する。

## 基本

```js
SpawnSubTask({
  title: "ローカル LLM 比較調査",
  instruction: "Ollama, vLLM, llama.cpp の最新性能ベンチマークを比較する。各ツールについて: 1) 直近6ヶ月の主要ベンチマーク, 2) ハードウェア要件, 3) 対応モデル一覧 を output/report.md にまとめる。",
  piece: "research"   // 任意。指定しないと自動分類
})
```

呼び出すと `subtasks/{index}/` にサブタスクのワークスペースが作られ、結果はそこに集約される。

## いつ使うか

### 並列分解が効果的なケース

- 2 つ以上の **独立したテーマ**（互いに参照しない）
- 各テーマが軽くなく、調査・処理に時間がかかる
- 分解後の各タスクが単独でも意味を持つ成果物になる

例:
- 「3 つの製品比較レポート」→ 製品ごとに 3 サブタスク
- 「複数 PDF の OCR 処理」→ ファイルごとに分解
- 「複数 SNS の情報収集」→ プラットフォーム別に分解

### 分解しないほうがよいケース

- 単一テーマで論理的に連続する処理（A→B→C のように依存）
- サブタスクが極端に小さい（オーバーヘッドの方が大きい）
- 全体像を見ながら判断する必要がある作業（対話的タスク等）

## instruction の書き方

- **完結した依頼文**で書く（親タスクの文脈を持たないので、サブタスクは instruction だけで判断する）
- 期待する成果物（出力ファイル名・場所）を明示
- 必要な前提情報があれば文中に展開

❌ 「これと同じ調査を別キーワードでやって」
✅ 「キーワード『A』『B』『C』について、各々のメリット・デメリットを比較する独立した調査を行い、output/A-vs-B.md にまとめる」

## piece の指定

- 省略時: 親と同じ classifier ロジックで自動選択
- 明示する場合: `research`, `general`, `office-process` 等の piece 名を指定

## 結果の参照

サブタスク完了後、親タスクは:
- `subtasks/{index}/output/` 以下にサブタスクの成果物がある
- Read で参照して集約レポートを作成する

## 制限

- ネスト深さは `subtasks.maxDepth`（デフォルト 2）まで
- サブタスクが waiting_human 等で停止すると親もブロックされる
