約4分

サブエージェント:AIの作業を専門単位へ分ける設計

サブエージェントは、メインのAIエージェントが特定の作業を委任する専門担当エージェントです。独自のコンテキスト・ツール・権限を持ち、結果だけを親に返します。

本社の担当者が「この調査は専門チームに任せよう」と依頼し、専門チームは調べ終えたら要点だけを報告書で返す。サブエージェントは、AIエージェントが特定の作業を、独立した別のエージェントへ任せる仕組みです。任された作業は、そのエージェント自身のコンテキストウィンドウの中で完結し、最終的な結果だけが親のエージェントに返ります。

なぜわざわざ分けるのか

AIエージェントは、会話が長くなるほどコンテキストウィンドウを消費します。調査、実装、レビューをすべて一つの会話でこなすと、途中で文脈が薄れたり、費用が膨らんだりします。

サブエージェントに分けると、次のことができます。

  • 調査や探索の途中の段階をサブエージェントの中に閉じ込め、親の会話を散らかさない
  • 用途に応じてモデルを使い分ける(重い推論には高性能なモデル、軽い作業には安いモデル)
  • 使えるツールや権限をサブエージェントごとに絞り、誤操作のリスクを下げる
  • 複数のサブエージェントを並行して動かし、処理を速くする

親とサブの間でやり取りされる情報は、次のように分かれます。

  1. 親からサブへ:会話履歴そのものではなく、任せる作業をまとめた委任メッセージが渡る
  2. サブの起動時:サブエージェント自身の指示に加え、通常は CLAUDE.md や開始時点の git status など、Claude Code が用意する環境情報も読み込まれる
  3. サブの中:ファイルの読み込み、検索、ツールの実行など、途中の処理を独立したコンテキストで行う
  4. サブから親へ:作業結果が返り、探索の途中経過を親の会話へ大量に持ち込まずに済む

通常のサブエージェントは親の会話履歴をそのまま引き継ぎません。ただし、会話を複製して始める 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階層下まで)。深くなるほど追いにくくなる
  • サブエージェントの失敗の記録は別のコンテキストに残るので、原因を調べるときは専用の手段で確かめる