コンテンツにスキップ

SDK から subagent を定義する

tier 3(必要になったら)確認 1 か月前(2026年8月23日)

どこまで来たら使えたと言えるか

面: 両方で同じ

段達成したと言える状態
1. 触るquery() の agents オプションに AgentDefinition を 1 つ渡し、Claude がそれを起動するところまで確認した
2. 入れる用途ごとに description と prompt を書き分け、tools と model を絞った subagent を運用している
3. 効かせるコンテキスト継承の範囲とバックグラウンド実行の既定を踏まえ、必要なら session_id と agent ID で再開できる

何のためのものか

SDK でサブエージェントを定義・起動する機能。コンテキストの分離、並列実行、専門的な指示の適用に使う。

触る

作り方は 3 通り。

方法説明
プログラム定義(推奨)query() の agents オプションに AgentDefinition を渡す
ファイル定義.claude/agents/ に Markdown を置く
組み込み general-purpose定義不要

同名ならプログラム定義がファイル定義より優先される。

必須は description(Claude がいつ使うかを判断する)と prompt(システムプロンプト)の 2 つだけ。

入れる

絞るフィールドを足す。

  • tools / disallowedTools — 省略するとサブエージェントが利用可能な全ツールを継承する
  • model — 'opus' / 'sonnet' / 'haiku' / 'inherit' または完全なモデル ID
  • skills — 起動時にコンテキストへプリロードするスキル名
  • maxTurns / effort / permissionMode / background

Python SDK でも disallowedTools や mcpServers は camelCase のまま。

呼び出しは description に基づく自動選択のほか、プロンプトにエージェント名を含めれば明示的に呼べる。Agent を allowedTools に含めると起動が自動承認される。

効かせる

  • 継承されるものとされないものを押さえる。 受け取るのは自身のシステムプロンプトと Agent ツールのプロンプト、(settingSources に project を含む場合)プロジェクトの CLAUDE.md、ツール定義。受け取らないのは親の会話履歴・ツール結果・親のシステムプロンプト、そして skills に明示していないスキル内容
  • 親が受け取るのは最終メッセージだけ。 中間のツール呼び出しや結果は親のコンテキストに蓄積しない
  • v2.1.198 以降は既定でバックグラウンド実行。 同期にしたいなら Agent ツール入力に run_in_background: false、常にバックグラウンドにしたいなら AgentDefinition.background: true
  • 再開するには 3 手順。 ResultMessage から session_id を取り、Agent ツール結果テキストから agentId: <id> を解析し、次のクエリで resume: sessionId を渡してプロンプトにエージェント ID を含める

落とし穴

  • 組み込みの Explore / Plan は agentId を返さないため再開できない
  • query() は既定で新セッションを作る。 再開には resume の指定が要る
  • ツール名の履歴に注意。 現在の SDK は tool_use ブロックで "Agent" を出すが、system:init のツールリストと result.permission_denials[].tool_name では引き続き "Task" を使う
  • initialPrompt はメインスレッドエージェントとして動く場合のみ効き、サブエージェント呼び出し時は無視される

根拠と前後

このページが書ける範囲は、根拠にした facts に書かれていることだけです。 仕様そのものはそちらを読んでください。