本社の担当者が「この調査は専門チームに任せよう」と依頼し、専門チームは調べ終えたら要点だけを報告書で返す。サブエージェントは、AIエージェントが特定の作業を、独立した別のエージェントへ任せる仕組みです。任された作業は、そのエージェント自身のコンテキストウィンドウの中で完結し、最終的な結果だけが親のエージェントに返ります。
なぜわざわざ分けるのか
AIエージェントは、会話が長くなるほどコンテキストウィンドウを消費します。調査、実装、レビューをすべて一つの会話でこなすと、途中で文脈が薄れたり、費用が膨らんだりします。
サブエージェントに分けると、次のことができます。
- 調査や探索の途中の段階をサブエージェントの中に閉じ込め、親の会話を散らかさない
- 用途に応じてモデルを使い分ける(重い推論には高性能なモデル、軽い作業には安いモデル)
- 使えるツールや権限をサブエージェントごとに絞り、誤操作のリスクを下げる
- 複数のサブエージェントを並行して動かし、処理を速くする
親とサブの間でやり取りされる情報は、次のように分かれます。
- 親からサブへ:会話履歴そのものではなく、任せる作業をまとめた委任メッセージが渡る
- サブの起動時:サブエージェント自身の指示に加え、通常は
CLAUDE.mdや開始時点の git status など、Claude Code が用意する環境情報も読み込まれる - サブの中:ファイルの読み込み、検索、ツールの実行など、途中の処理を独立したコンテキストで行う
- サブから親へ:作業結果が返り、探索の途中経過を親の会話へ大量に持ち込まずに済む
通常のサブエージェントは親の会話履歴をそのまま引き継ぎません。ただし、会話を複製して始める fork は例外です。
Claude Code で定義する
以下は Claude Code の場合の説明です(公式ドキュメントで2026年9月に確認した内容です。仕様は更新されることがあります)。
Claude Code では、.claude/agents/ ディレクトリにマークダウンのファイルを置いて、サブエージェントを定義します。
.claude/agents/
└── security-reviewer.md # プロジェクトスコープのサブエージェント
~/.claude/agents/
└── research.md # 全プロジェクト共通のサブエージェント
各ファイルには、YAML のフロントマターで設定を書きます。
---
name: security-reviewer
description: セキュリティ観点でコードをレビューする。認証・権限・入力検証の問題を探す時に使う。
tools: Read, Glob, Grep
model: opus
---
セキュリティの観点でコードをレビューし...
tools には使わせるツールを、model には sonnet や opus のような別名か、モデルの ID を書きます。description にどんな作業を任せるべきかを書いておくと、親のエージェントがそれを見て、自分の判断でこのサブエージェントへ任せます。
任せる前に境界を決めておく
サブエージェントは、親が気づかないところで処理が走る構造です。許可するツールと操作の範囲を最初に設計しておかないと、意図しないファイルの変更や API の呼び出しが起こることがあります。
toolsで、使えるツールを最小限に絞る。書き込み系のツールには特に注意する- モデルを下げすぎると精度が落ちる。作業の複雑さに合わせて選ぶ
- 並行して動かすと速いが、同じファイルへの同時の書き込みがぶつからないようにする
- サブエージェントはさらにサブエージェントを呼べる(既定ではメインの会話から3階層下まで)。深くなるほど追いにくくなる
- サブエージェントの失敗の記録は別のコンテキストに残るので、原因を調べるときは専用の手段で確かめる