Agent SDK のサブエージェント|作り方と任せ方の線引き

この記事の要点
- サブエージェントは、親の AI が作業の一部を切り出して任せる「別の AI」。途中のやり取りは子の中に閉じ、親には最後の報告だけが返る
- SDK では query() の agents に、説明・指示・使える道具・モデルなどを書いて定義する。説明を読んで AI が呼ぶかを決める
- 子が子を呼ぶ深さ・同時に動く数・全体の金額に上限を付けられる。業務で使うなら3つとも決めておく
Claude Agent SDK は、Claude Code と同じ仕組みの AI エージェントを自分のアプリの中で動かすための道具です。全体像は Claude Agent SDK とは で解説しました。
この記事では、公式ドキュメント「Subagents in the SDK」(2026年11月8日確認)にもとづいて、親の AI が作業を「別の AI」に切り出して任せる仕組み=サブエージェント を、SDK で使う視点から整理します。Claude Code の画面で使うサブエージェントの話は Codex と Claude Code のサブエージェント にまとめています。
結論:調べものは「別の担当」に出して、要点だけ受け取る
サブエージェントは、親のエージェントが必要なときに立ち上げる 別の AI のインスタンス です。子は自分専用の会話の中で作業し、親に返ってくるのは最後のメッセージだけ です。
公式は、任せることで得られる良さを4つ挙げています。
| 良さ | 何がうれしいか | 公式の例 |
|---|---|---|
| 文脈の分離 | 子が読んだ大量のファイルが親の会話にたまらない | 調査役が何十ものファイルを読み、親は要約だけ受け取る |
| 並行で動かせる | 独立した作業が、いちばん遅い1本の時間で終わる | 書き方・安全性・テストの確認を同時に回す |
| 専門の指示 | 子ごとに専用の指示や知識を持たせられる | データ移行役にだけ SQL の注意点を持たせる |
| 道具の制限 | 子が使える道具を絞り、意図しない操作を減らす | 文書の確認役は読む道具だけ |

サブエージェントを用意する3つの方法
結論から言うと、SDK のアプリでは「コードで定義する」方法が推奨 です。用意の仕方は次の3つです。
- コードで定義する:
query()の options にあるagentsに書く(この記事の中心) - ファイルで定義する:
.claude/agents/に Markdown ファイルとして置く - 最初から入っている汎用の子を使う:何も定義しなくても、Claude は
general-purposeという子を Agent ツールでいつでも呼べる
同じ名前の子がコードとファイルの両方にある場合は、コードで定義した方が優先 されます。なお、汎用の子を使わせたくない場合は、環境変数 CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS=1 で外せます。その場合、種類を指定しない呼び出しはエラーになります。
Claude は子を Agent ツール で呼び出します。そのため、親の許可リストには Agent を入れておきます。
定義に書く項目
子の定義で必須なのは、「いつ使うか」の説明と、子への指示の2つだけ です。そのほかは必要に応じて足します。
| 項目 | 必須 | 中身 |
|---|---|---|
| description | 必須 | いつこの子を使うか。AI はこれを読んで呼ぶかを決める |
| prompt | 必須 | 子の役割と振る舞いを決める指示 |
| tools | 任意 | 使える道具の一覧。省略すると子が使える道具をすべて受け継ぐ |
| disallowedTools | 任意 | 外したい道具。MCP サーバー単位でもまとめて外せる |
| model | 任意 | sonnet・opus・haiku・inherit(親と同じ)など |
| maxTurns | 任意 | 何往復で止めるか。上限に達すると途中までの結果として返る |
| background | 任意 | 呼ばれたら裏で動かす |
| effort | 任意 | 考える深さ |
| skills・mcpServers | 任意 | 最初から読み込むスキル、使える MCP サーバー |
公式の例では、読む道具だけを持ったコードの確認役 と、コマンドを動かせるテスト役 の2つを定義しています。役割ごとに道具をはっきり分けるのが基本の形です。
また、定義は実行のたびに組み立て直せます。たとえば「厳しく確認する日は性能の高いモデル、それ以外は軽いモデル」のように、条件によって子の中身を変える 使い方も公式に載っています。考える深さの調整は Claude Code のサブエージェントと effort も参考になります。
子に渡るもの・渡らないもの
いちばん誤解しやすいのがここです。子は親の会話を知りません。 親から子へ渡るのは、Agent ツールに渡す依頼文だけです。
| 子が受け取るもの | 子が受け取らないもの |
|---|---|
| 自分の指示(prompt)と、Agent ツールの依頼文 | 親の会話の履歴や、親が使った道具の結果 |
| プロジェクトの CLAUDE.md(設定で読み込む場合) | 定義の skills に書いていないスキルの中身 |
| 道具の定義(親から受け継ぐか、tools で絞ったもの) | 親のシステムプロンプト |
そのため、ファイルの場所・エラーの文面・決めたことなど、子が必要な情報は依頼文に直接書く 必要があります。「さっきのあれ」は子には通じません。
例外は フォーク です。フォークは会話を空から始めるのではなく、それまでの会話をコピーして始める子です。
また、親は子の報告を受け取りますが、自分の返事の中で要約してしまうことがあります。子の報告をそのまま見せたい場合は、親への指示にそう書いておきます。
呼び出し方は「自動」「名指し」「フォーク」
ふだんは AI が説明を読んで自動で呼びます。 確実に使わせたいときは、依頼文の中で名前を出します。
- 自動:作業の内容と各子の description を見て、Claude が呼ぶかどうかを決める。説明は具体的に書く
- 名指し:「code-reviewer エージェントを使って確認して」のように名前を書くと、その子が直接呼ばれる
- フォーク:会話をコピーした子。新しい版では何も設定しなくても Claude が始められる。止めたいときは禁止ルールに
Agent(fork)を入れる
待つか、裏で走らせるか
子は基本的に裏で動きます。 結果は後のターンで届きます。ただし、次の作業に子の報告が要るときは、Claude はその場で待ちます。
自分で決めたい場合は、依頼文で「テスト役を動かして、終わるまで待って」と頼むか、定義の background を true にして常に裏で動かします。
子が呼ばれたかを確かめる・続きから再開する
子が呼ばれたかどうかは、流れてくるメッセージで確かめられます。 道具の呼び出しの名前が Agent になっているものを探します。古い版では Task という名前だったので、公式は両方を見るよう勧めています。子の中から出たメッセージには、親の呼び出しを指す印(parent_tool_use_id)が付きます。
途中で止まった子は、最初からやり直さずに続きから再開 できます。手順は3つです。
- 1回目の呼び出しで、セッションの ID を控える
- Agent ツールの結果に入っている子の ID(agentId)を読み取る
- 2回目の呼び出しで同じセッションを再開し、依頼文に子の ID を書く
このとき、2回とも同じ子の定義を渡します。なお、最初から入っている調査用・計画用の子は使い切りで、再開用の ID を返しません。再開したい場合は、自分で定義した子か汎用の子を使います。
増えすぎを止める:深さ・同時数・金額
業務で使ううえで、ここがいちばん大事です。子を何人呼ぶかは Claude が自分で決めます。 しかも子が子を呼べるので、1つの依頼が木のように広がることがあります。各子の利用料は、その呼び出し全体の金額に加算されます。
公式は、3つの上限で広がりを抑える方法を示しています。
| 上限 | 設定の仕方 | 既定 | 上限に達すると |
|---|---|---|---|
| 深さ | 環境変数 CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH | 3層。1にすると子は孫を呼べない | いちばん下の子は自分で作業する |
| 同時数 | 環境変数 CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS | 20 | 数が減るまで新しい子を断る |
| 金額 | maxBudgetUsd(TypeScript)・max_budget_usd(Python) | 上限なし | 新しい子を断り、裏の子を止め、呼び出しを終える |
公式の例では、孫は作らせない・同時は5つまで・見積もりが5ドルに届いたら止める という設定にしています。環境変数は options の env で渡します。TypeScript では env が環境変数を置き換えるので、元の環境変数も一緒に渡す点に注意します。
また、新しいモデルの Claude Opus 5 は、以前のモデルより子に任せがちだと公式は書いています。指示で控えめにさせることもできますが、指示はあくまで誘導なので、上限は別に設定しておく のが公式の考え方です。金額をどう読むかは Agent SDK の料金と使用量の確認 で解説しています。
数十〜数百の子を動かすような大きな仕事は、会話の外で台本として動かす Workflow ツールの出番だと公式は案内しています。
うまく任せてくれないとき
子に任せずに親が自分で片付けてしまう場合は、名指しと説明の見直し が効きます。
- 依頼文の中で子の名前を出す
- description に「どんな作業のときに使うか」を具体的に書く
ファイルで定義した子が読み込まれないときは、新しく作った agents フォルダ がよくある原因です。起動時に無かったフォルダは監視されないので、最初のファイルを置いたら作り直しが要ります。名前の重複や、設定部分の書き間違いも確認します。
仕事に入れるときの考え方
サブエージェントを業務に入れるときは、「読むだけの子」から始めて、道具と上限を先に決める のが安全です。
- まず調べもの・確認だけをする子を作り、読む道具だけを渡す
- 呼び出しの深さ・同時数・金額の上限を決めてから動かす
- 子が返す報告の形(何を何行で)を指示に書いておき、親がまとめやすくする
子の報告を決まった形のデータで受け取りたい場合は、Agent SDK の構造化出力 と組み合わせると扱いやすくなります。複数の AI をどう分担させるかの全体像は Claude Code のマルチエージェント も参考にしてください。
まとめ
- サブエージェントは 作業を切り出して任せる別の AI。途中のやり取りは子の中に閉じ、親には最後の報告だけが返る
- SDK では
agentsに 説明・指示・道具・モデル を書いて定義する。子は親の会話を知らないので、必要な情報は依頼文に書く - 業務では 深さ・同時数・金額の3つの上限 を必ず決め、読むだけの子から始める
出典
この記事はAIを使って下書きし、著者が事実確認・加筆しています。ツールの機能や料金は変わることがあるため、最新の情報は各社の公式ページでご確認ください。


