サブエージェント設定ガイド

サブエージェント設定ガイド

サブエージェントはOpenClawの核心機能です。

メインセッションは「指揮者」として会話とマネジメントに専念し、実際の作業(検索、コーディング、データ処理等)はサブエージェントに委譲します。これにより、メインセッションのコンテキストを圧迫せず、記憶の持続時間を延ばし、並列実行で効率を上げることができます。


役割の違い

役割メインセッションサブエージェント
担当会話・判断・意思決定実作業・ツール実行
やることユーザーとの対話、サブへの指示出し、結果の統合検索、調査、ファイル操作、コーディング、デバッグ
コンテキスト軽く保つ(記憶の維持)専用コンテキストで集中作業
モデルOpus(高度な判断)Sonnet/Opus(タスクに応じて選択)

なぜサブに投げる方が良いのか

観点メリット
精度サブは専用のコンテキストで集中作業するため、精度が高い
記憶メインのコンテキストが膨張しない → 記憶が長持ちする
速度並列実行できる → ユーザーの待ち時間が減る
品質メインは会話と判断に集中できる → 回答の質が上がる

「1回のツール呼び出しだから自分でやる」は典型的なアンチパターンです。

メインエージェントがツールを直接叩くと、コンテキストが肥大化してセッション圧縮が早まり、記憶が失われます。サブに任せることで、メインのコンテキストを軽く保ち、長期的な文脈・関係性を維持できます。


サブエージェントの仕組み

実行フロー

1. メインセッション
   └─> sessions_spawn でサブエージェントを起動
       ├─ task: タスク内容
       ├─ model: 使用モデル(省略時はデフォルト設定 or 親を継承)
       ├─ thinking: 推論レベル(省略時はデフォルト設定 or 親を継承)
       └─ label: 識別名

2. サブエージェント
   └─> 専用のセッションで作業実行
       ├─ ツール呼び出し(Read, web_fetch, exec等)
       ├─ 結果をまとめる
       └─ 完了を Announce(メインに通知)

3. メインセッション
   └─> サブの結果を受け取り、ユーザーに報告

セッションキー

サブエージェントは独立したセッションキーで管理されます:

セッションタイプキー形式
メインセッションagent:<agentId>:mainagent:main:main
サブエージェント(深度1)agent:<agentId>:subagent:<uuid>agent:main:subagent:abc123...
サブエージェント(深度2)agent:<agentId>:subagent:<uuid>:subagent:<uuid>agent:main:subagent:abc123...:subagent:def456...

設定方法

サブエージェントの動作は ~/.openclaw/openclaw.json で制御します。基本設定は agents.defaults.subagents セクション、ツールポリシーは tools.subagents セクションに分かれています。

基本設定

{
  agents: {
    defaults: {
      subagents: {
        maxConcurrent: 8,        // 同時実行可能なサブの数(デフォルト: 8)
        model: "sonnet",         // デフォルトモデル(省略時は親のモデルを継承)
        thinking: "low",         // デフォルトthinkingレベル(省略時は親を継承)
        maxSpawnDepth: 1,        // ネストの深さ(範囲: 1–5、デフォルト: 1)
        maxChildrenPerAgent: 5,  // 1セッションが持てる子の数(範囲: 1–20、デフォルト: 5)
        archiveAfterMinutes: 60  // サブセッションの自動アーカイブ(デフォルト: 60分)
      }
    }
  }
}

現在の設定を確認するには:

cat ~/.openclaw/openclaw.json | jq '.agents.defaults.subagents'

設定項目の詳細

maxConcurrent

同時実行可能なサブエージェントの数です。サブエージェント専用のキュー(レーン名: subagent)で管理されます。多すぎるとシステムリソースを消費するため、デフォルトの8が推奨です。

model と thinking

サブエージェントのデフォルトモデルと推論レベルを指定します。省略時は親セッション(メイン)のモデル・thinkingを継承します。sessions_spawn の呼び出し時に明示的に指定すると、デフォルト設定より優先されます。

{
  agents: {
    defaults: {
      subagents: {
        model: "sonnet",   // デフォルトは Sonnet(コスト効率)
        thinking: "low"    // 軽い判断・要約タスク向け
      }
    }
  }
}
サブエージェントもそれぞれ独自のコンテキストを持つため、トークン使用量が増えます。頻繁に使う場合は、サブには軽量モデル(Sonnet)を設定し、メインには高品質モデル(Opus)を使う構成がコスト最適化に有効です。

maxSpawnDepth

サブエージェントがさらにサブエージェントを起動できるかを制御します。範囲は1〜5ですが、実用上は1か2を推奨します。

動作
1サブは子を起動できない(デフォルト)
2サブは子を起動できる(オーケストレーターパターン)
3–5さらに深いネスト(特殊なユースケース向け)

詳細は後述の「ネストされたサブエージェント」を参照してください。


モデル × Thinking 使い分けルール

サブエージェントを起動する際、タスクの性質に応じてモデルと推論レベルを選択します。

判断フロー

手順書を渡せば完成する?
├── Yes → Sonnet
│   └── 判断・取捨選択がある?
│       ├── No  → thinking: off(機械的に実行するだけ)
│       └── Yes → thinking: low(要約の取捨選択など)
│
└── No → Opus
    └── 複数ステップの推論が要る?
        ├── No  → thinking: low(提案・分析)
        └── Yes → thinking: high(研究・複雑な実装)

具体的な割り当て

タスクタイプmodelthinking具体例
定型抽出sonnetoff事実抽出、ファイル分割、テンプレ適用、grep的作業
要約・整理sonnetlow会話要約、weekly digest、インデックス生成、ドキュメント統合
設計・分析opuslowアーキテクチャ提案、比較分析、Feature Request作成
深い研究・複雑な実装opushighソース解析+設計+PoC、デバッグ込み開発、未知の問題解決

一言で覚える:

  • 「手順書を渡せば完成する?」→ Yes: Sonnet / No: Opus
  • 「深く考える必要がある?」→ Yes: thinking高め / No: thinking低めorオフ

コスト比較

設定概算コスト
Sonnet (thinking: off)最安
Sonnet (thinking: low)2-3倍
Opus (thinking: low)10倍
Opus (thinking: high)15-20倍

実際の使い方の例

例1: Sonnetで簡単な調査

メインセッションからサブエージェントを起動するには、AIに以下のように指示します:

Sonnetサブで「OpenClaw サブエージェント」を検索して、
上位5件の要約を /tmp/research.md に保存して

AIは内部で以下のツール呼び出しを実行します:

{
  "tool": "sessions_spawn",
  "parameters": {
    "task": "web_searchで「OpenClaw サブエージェント」を検索し、\n上位5件を要約して /tmp/research.md に保存",
    "model": "sonnet",
    "thinking": "low",
    "label": "research-subagents"
  }
}

例2: Opusで複雑な設計

Opusサブで以下を実装して:
- 新規機能XYZの設計案を作成
- 既存のコードベースとの整合性を検証
- 実装手順書を /tmp/xyz-design.md に出力

例3: 並列実行(複数のサブを同時に起動)

以下の3つのタスクを並列で実行して:
1. 株価データの取得(Sonnet)
2. ニュース検索(Sonnet)
3. レポート生成(Opus)

AIは3つの sessions_spawn を同時に実行し、すべての結果が揃ったらまとめて報告します。


サブエージェントの管理

スラッシュコマンド

チャット画面で /subagents コマンドを使って、サブエージェントの状態を確認・操作できます。

コマンド動作
/subagents list現在のサブエージェント一覧
/subagents kill <id|#|all>特定のサブまたは全サブを停止
/subagents log <id|#> [limit] [tools]サブのログを表示
/subagents info <id|#>サブの詳細情報(ステータス、タイムスタンプ、セッションID、トランスクリプトパス、cleanup等)
/subagents send <id|#> <message>サブにメッセージを送信

例: サブエージェントの一覧表示

/subagents list

出力例:

active subagents:
1. research-subagents (claude-sonnet-4-5, 2m) running - web_searchで「OpenClaw サブエージェント」を検索...
2. design-xyz (claude-opus-4-6, 5m) running - 新規機能XYZの設計案を作成...

例: 特定のサブを停止

/subagents kill 1

ネストされたサブエージェント

デフォルトでは、サブエージェントはさらにサブエージェントを起動できません(maxSpawnDepth: 1)。maxSpawnDepth: 2 に設定することで、オーケストレーターパターンが可能になります。

オーケストレーターパターン

メインセッション(Opus)
  └─> オーケストレーター(Sonnet、深度1)
       ├─> ワーカー1(Sonnet、深度2)
       ├─> ワーカー2(Sonnet、深度2)
       └─> ワーカー3(Sonnet、深度2)

メインセッションは「PM(プロジェクトマネージャー)」として全体を管理し、オーケストレーターがタスクをワーカーに分配します。各ワーカーは独立して作業し、結果をオーケストレーターに返します。オーケストレーターが統合した結果をメインに返します。

設定例

{
  agents: {
    defaults: {
      subagents: {
        maxSpawnDepth: 2,          // サブがサブを起動可能に
        maxChildrenPerAgent: 5,    // 1セッションが持てる子の数(範囲: 1–20)
        maxConcurrent: 8           // 全体の並列実行数
      }
    }
  }
}

深度別のツールポリシー

深度セッションタイプsessions_spawnsubagentsその他のツール
0メイン✅ 常に可能
1オーケストレーター(maxSpawnDepth≥2
1リーフワーカー(maxSpawnDepth=1
2リーフワーカー
深度1のサブエージェントは、maxSpawnDepth≥2 の場合のみ sessions_spawnsubagentssessions_listsessions_history が許可されます。深度2のサブエージェントは常にリーフワーカーであり、さらにサブを起動できません。

結果の流れ(Announce chain)

1. 深度2ワーカー完了 → 深度1オーケストレーターに Announce
2. 深度1オーケストレーター完了 → メインセッションに Announce
3. メインセッション → ユーザーに報告

各レベルは直接の子からのAnnounceのみを受け取ります。

カスケード停止

オーケストレーターを停止すると、その配下のワーカーも自動的に停止します:

コマンド動作
/stopメインセッションと全サブを停止(カスケード)
/subagents kill <id>特定のサブとその配下の子を停止
/subagents kill all全サブを停止

ツールポリシーの制御

サブエージェントがアクセスできるツールを制御できます。

デフォルト動作

サブエージェントはセッション管理ツール以外のすべてのツールにアクセスできます。

デフォルトで拒否されるツール:

  • sessions_list
  • sessions_history
  • sessions_send
  • sessions_spawnmaxSpawnDepth=1 の場合)

例外: maxSpawnDepth≥2 の場合、深度1のサブエージェント(オーケストレーター)は sessions_spawnsubagentssessions_listsessions_history にアクセスできます。

カスタムツールポリシー

tools.subagents.tools で特定のツールを明示的に拒否・許可できます。

{
  tools: {
    subagents: {
      tools: {
        // deny は常に優先(deny wins)
        deny: ["gateway", "cron"],
        // allow を設定すると許可リスト方式になる(deny は依然として優先)
        // allow: ["read", "exec", "process"]
      }
    }
  }
}
deny は常に allow より優先されます。allow を設定した場合、リストに含まれないツールはすべて拒否されます(ホワイトリスト方式)。

自動アーカイブ

サブエージェントのセッションは、完了後に自動的にアーカイブ(削除)されます。

設定

{
  agents: {
    defaults: {
      subagents: {
        archiveAfterMinutes: 60  // デフォルト: 60分
      }
    }
  }
}

動作

  • サブセッションは完了後、archiveAfterMinutes 経過後に自動アーカイブされます
  • アーカイブは sessions.delete を使用し、トランスクリプトは *.deleted.<timestamp> にリネームされて保持されます
  • cleanup: "delete" をセッション起動時に指定すると、Announce直後に即座にアーカイブされます(トランスクリプトはリネームで保持)
  • アーカイブはベストエフォートです。Gatewayを再起動すると、保留中のアーカイブタイマーは失われます
  • 深度1・深度2のセッションに等しく適用されます
{
  "tool": "sessions_spawn",
  "parameters": {
    "task": "...",
    "cleanup": "delete"  // Announce直後にアーカイブ
  }
}

注意点と制限事項

コンテキストとトークン使用量

サブエージェントはそれぞれ独自のコンテキストを持つため、複数のサブを起動するとトークン使用量が増加します。頻繁に使う場合は、サブには軽量モデル(Sonnet)を設定し、メインには高品質モデル(Opus)を使う構成がコスト効率的です。

プロジェクトコンテキストの注入

サブエージェントにはメインセッションと異なるワークスペースファイルが注入されます:

ファイルメインセッションサブエージェント
AGENTS.md
TOOLS.md
SOUL.md
IDENTITY.md
USER.md
HEARTBEAT.md
BOOTSTRAP.md

これは、サブエージェントがタスク実行に特化し、メインセッションの人格・アイデンティティを継承しないようにするためです。サブエージェントに必要なコンテキストは、sessions_spawntask パラメータに含めてください。

AGENTS.md の記述に注意: AGENTS.md に「SOUL.md等はシステムプロンプトに自動注入されるため読む必要なし」と記載している場合、それはメインセッション向けの指示です。サブエージェントには AGENTS.mdTOOLS.md のみが注入されます。

セキュリティルール

AGENTS.md には以下のルールを記載することを推奨します(セキュリティ初期設定も参照):

## サブセッションの制約(必須ルール)

- **サブセッションはルートルールファイル(AGENTS.md, SOUL.md, IDENTITY.md, USER.md, SECURITY-INDEX.md)を変更しない。**
- **サブセッションが提案した変更は、メインセッションが判断・適用する。**

Announce の制約

サブエージェントがメインセッションに結果を返す「Announce」はベストエフォートです。Gatewayが再起動すると、保留中のAnnounceは失われます。

Announce結果には以下の統計情報が含まれます:

  • 実行時間(例: runtime 5m12s
  • トークン使用量(入力/出力/合計)
  • 推定コスト(モデル料金が設定されている場合)
  • sessionKeysessionId、トランスクリプトパス

サブエージェントが ANNOUNCE_SKIP と返した場合、Announceはスキップされます。

タイムアウト

サブエージェントにタイムアウトを設定できます。

{
  "tool": "sessions_spawn",
  "parameters": {
    "task": "...",
    "runTimeoutSeconds": 300  // 5分でタイムアウト
  }
}

タイムアウト後、サブの実行は停止しますが、セッション自体は archiveAfterMinutes まで残ります。

認証

サブエージェントの認証はエージェントIDに基づきます。メインエージェントの認証プロファイルはフォールバックとして利用可能です(エージェント固有のプロファイルが優先)。


sessions_spawn パラメータ一覧

パラメータ必須説明
taskタスク内容
label識別名
model使用モデル(無効な値は警告付きでデフォルトにフォールバック)
thinking推論レベル
agentId別のエージェントIDで起動(allowAgents で許可が必要)
runTimeoutSecondsタイムアウト秒数(デフォルト: 0 = 無制限)
cleanupdelete or keep(デフォルト: keep

まとめ

項目内容
メインの役割会話・判断・意思決定
サブの役割実作業・ツール実行
基本設定agents.defaults.subagents セクション
ツールポリシーtools.subagents.tools セクション(deny/allow
注入されるファイルAGENTS.md + TOOLS.md のみ
推奨設定maxConcurrent: 8, model: "sonnet", thinking: "low"
使い分けルール手順書で完成するならSonnet、深い思考が必要ならOpus
管理コマンド/subagents list, /subagents kill, /subagents info
応用maxSpawnDepth: 2 でオーケストレーターパターン

サブエージェントを活用することで、メインセッションのコンテキストを軽く保ち、記憶を長持ちさせながら、効率的に作業を並列実行できます。


関連ページ


最終更新: 2026-02-16