ひとことで言うと
サブエージェントは、AIエージェントが持つ「作業を別の独立したエージェントへ委任する」仕組みです。委任された作業は独自のコンテキストウィンドウの中で完結し、最終結果だけが親エージェントへ返ります。Claude Code や OpenAI Codex などのコーディングエージェントで広く採用されています。
なぜ必要なのか
AIエージェントは会話が長くなるにつれてコンテキストウィンドウを消費します。調査・実装・レビューをすべて一つの会話で行うと、途中で文脈が薄れたり、コストが膨らんだりします。
サブエージェントを使うと:
- 調査や探索の中間ステップをサブエージェント内に閉じ込め、親の会話を汚さない
- 用途に応じてモデルを使い分けられる(重い推論には高性能モデル、軽い作業には安価なモデル)
- ツールや権限をサブエージェントごとに制限し、誤操作のリスクを下げる
- 複数サブエージェントを並列で動かして処理を高速化できる
Claude Code での動き
Claude Code では .claude/agents/ ディレクトリにマークダウンファイルを置くことでサブエージェントを定義します。
.claude/agents/
└── security-reviewer.md # プロジェクトスコープのサブエージェント
~/.claude/agents/
└── research.md # 全プロジェクト共通のサブエージェント
各ファイルはYAMLフロントマターで設定を記述します:
---
name: security-reviewer
description: セキュリティ観点でコードをレビューする。認証・権限・入力検証の問題を探す時に使う。
model: claude-opus-4-6
allowed-tools: Read Glob Grep
---
セキュリティの観点でコードをレビューし...
description にどんな作業を委任すべきかを書いておくと、親エージェントが自動でこのサブエージェントへ委任を判断します。
親エージェントとの情報のやり取り
- 親 → サブ: タスクの指示のみを渡す。会話履歴は渡さない
- サブ内: ファイル読み込み・検索・ツール実行など中間処理をすべて行う
- サブ → 親: 最終出力(サマリーや結論)だけが返る
この分離により、親エージェントのコンテキストは本当に必要な情報だけになります。
実務で気にするポイント
allowed-toolsでサブエージェントが使えるツールを最小限に絞る。書き込み系ツールは特に注意- モデルを下げすぎると精度が落ちる。タスクの複雑さに合わせて選ぶ
- 並列実行は速いが、同じファイルへ同時に書き込む競合に注意する
- サブエージェントが深くネストすると追跡が難しくなる。2〜3段階が目安
- サブエージェントの失敗ログは別コンテキストに残るため、デバッグ時は専用の手段で確認する
注意: サブエージェントは「親が気づかない場所で処理が走る」構造です。許可するツールと操作範囲を最初に設計しておかないと、意図しないファイル変更やAPI呼び出しが発生することがあります。