サブエージェントは単一のセッション内で動作します。多くの独立したセッションを並行して実行し、1 つの場所から監視するには、バックグラウンドエージェントを参照してください。互いに通信するセッションについては、エージェントチームを参照してください。
- コンテキストを保持する ことで、探索と実装をメインの会話から分離します
- 制約を強制する ことで、サブエージェントが使用できるツールを制限します
- 設定を再利用する ことで、ユーザーレベルのサブエージェントをプロジェクト全体で再利用します
- 動作を特化させる ことで、特定のドメイン向けの焦点を絞ったシステムプロンプトを使用します
- コストを制御する ことで、Haiku のような高速で安価なモデルにタスクをルーティングします
組み込みサブエージェント
Claude Code には、Claude が適切なときに自動的に使用する組み込みサブエージェントが含まれています。各サブエージェントは、親の会話の権限を継承し、追加のツール制限があります。 Explore と Plan は CLAUDE.md ファイルと親セッションの git ステータスをスキップして、研究を高速かつ低コストに保ちます。その他すべての組み込みおよびカスタムサブエージェントは両方をロードします。サブエージェントに到達するものの完全な内訳については、スタートアップ時にロードされるものを参照してください。- Explore
- Plan
- General-purpose
- Other
コードベースの検索と分析に最適化された高速な読み取り専用エージェント。
- モデル:メイン会話から継承され、Claude API では Opus でキャップされるため、Explore はセッション用に既に選択したモデルより高価なモデルで実行されることはありません
- ツール:読み取り専用ツール。Write と Edit は拒否されます
- 目的:ファイル検出、コード検索、コードベース探索
Explore という名前のユーザーまたはプロジェクトサブエージェントは組み込みをオーバーライドし、独自の model フィールドを保持するため、model: haiku で定義して探索を低コストモデルに保つことができます。Claude は、変更を加えずにコードベースを検索または理解する必要があるときに Explore に委譲します。これにより、探索結果がメインの会話コンテキストから除外されます。Explore を呼び出すときに、Claude は徹底度レベルを指定します:ターゲット検索の場合は quick、バランスの取れた探索の場合は medium、包括的な分析の場合は very thorough。- 特定の組み込みタイプをブロックするには、特定のサブエージェントを無効にするに示されているように
permissions.denyに追加します。 - Claude がサブエージェントに委譲することを防ぐには、
permissions.denyでAgentツール自体を拒否します。 - 組み込みの
ExploreとPlanサブエージェントのみを削除するには、CLAUDE_CODE_DISABLE_EXPLORE_PLAN_AGENTS=1を設定します。Claude はファイルを直接読み取り、探索し、サブエージェントに委譲する代わりに実行します。Claude Code v2.1.198 以降が必要です。 - 非インタラクティブモードおよび Agent SDKでは、
CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS=1を設定して、すべての組み込みタイプを削除し、独自のものだけを提供します。
クイックスタート:最初のサブエージェントを作成する
サブエージェントは YAML フロントマターを含む Markdown ファイルです。Claude に作成してもらうか、手動で作成することができます。 v2.1.198 以降、/agents コマンドはインタラクティブな作成ウィザードを開かなくなりました。実行すると、Claude に依頼するか .claude/agents/ を直接編集するよう促すメッセージが表示されます。サブエージェントファイル、フロントマターフィールド、.claude/agents/ および ~/.claude/agents/ の場所は変わりません。ターミナルウィザードのみが削除されました。
このチュートリアルでは、コードをレビューして改善を提案するユーザーレベルのサブエージェントを作成します。
1
Claude にサブエージェントの作成を依頼する
Claude Code で、作成したいサブエージェントと保存場所を説明します:Claude は
name、description、tools リスト、model、およびシステムプロンプトを含むファイルを作成します。2
ファイルを確認する
~/.claude/agents/code-improver.md を開き、フロントマターが要求内容と一致することを確認します。結果は次のようになります:~/.claude/agents/ に存在するため、サブエージェントはマシン上のすべてのプロジェクトで利用可能です。代わりに 1 つのプロジェクトにスコープを設定するには、そのプロジェクトの .claude/agents/ ディレクトリに移動します。サブエージェントスコープを選択するで 2 つを比較しています。3
試してみる
Claude に新しいサブエージェントに委譲するよう依頼します:Claude は新しいサブエージェントに委譲し、コードベースをスキャンして改善提案を返します。Claude が新しいサブエージェントを見つけられない場合は、Claude Code を再起動してもう一度試してください。これは
~/.claude/agents/ がセッション開始前に存在しなかった場合にのみ発生します。実行中のセッションは新しく作成された agents ディレクトリを検出しないためです。Claude Code v2.1.197 以前では、
/agents はライブサブエージェントを一覧表示する Running タブと、サブエージェントを作成、編集、削除するための Library タブを備えたインタラクティブウィザードを開きます。サブエージェントを設定する
サブエージェントのファイルの場所によって、誰がそれを利用できるかが決まり、フロントマターによって何ができるかが決まります。このセクションでは、サブエージェントファイルがどこに存在するか、およびサポートするすべてのフィールドについて説明します。サブエージェントのスコープを選択する
スコープに応じて、異なる場所にサブエージェントファイルを保存します。複数のサブエージェントが同じ名前を共有する場合、Claude Code はより高い優先度の場所からのものを使用します。
プロジェクトサブエージェント (
.claude/agents/)は、コードベース固有のサブエージェントに最適です。バージョン管理にチェックインして、チームが協力して使用および改善できるようにします。
プロジェクトサブエージェントは、現在の作業ディレクトリから上へ向かって検出されます。そのため、そこからリポジトリルートまでのすべての .claude/agents/ がスキャンされます。v2.1.178 以降、これらのネストされたディレクトリの複数が同じ name を定義する場合、Claude Code は作業ディレクトリに最も近い定義を使用します。
--add-dir で追加されたディレクトリもスキャンされます:追加されたディレクトリ内の .claude/agents/ フォルダはプロジェクトサブエージェントと一緒に読み込まれます。追加ディレクトリを参照して、--add-dir から読み込まれる他の設定タイプを確認してください。--add-dir なしでプロジェクト全体でサブエージェントを共有するには、~/.claude/agents/ またはプラグインを使用します。
ユーザーサブエージェント (~/.claude/agents/)は、すべてのプロジェクトで利用可能な個人用サブエージェントです。
Claude Code は .claude/agents/ と ~/.claude/agents/ を再帰的にスキャンするため、agents/review/ や agents/research/ などのサブフォルダに定義を整理できます。サブディレクトリパスはサブエージェントの識別方法や呼び出し方法に影響しません。これは name フロントマターフィールドからのみ識別されるためです。
name 値をツリー全体で一意に保ちます:1 つのスコープ内の 2 つのファイルが同じ名前を宣言する場合、Claude Code は 1 つのみを読み込みます。選択されるのはファイルシステムの読み取り順序によって決まります。ネストされたプロジェクトディレクトリ全体では、作業ディレクトリに最も近い定義が優先されます。/doctorセットアップチェックアップは、同じディレクトリ内で名前を共有するファイルを報告し、1 つを除くすべての名前を変更または削除することを提案します。v2.1.205 より前では、/doctor は診断画面を開き、重複をリストして、どの定義がアクティブであるかを表示していました。
プラグイン agents/ ディレクトリも再帰的にスキャンされます。プロジェクトおよびユーザースコープとは異なり、プラグインの agents/ ディレクトリ内のサブフォルダはスコープ付き識別子の一部になります:プラグイン my-plugin の agents/review/security.md にあるファイルは my-plugin:review:security として登録されます。
CLI で定義されたサブエージェント は、Claude Code を起動するときに JSON として渡されます。これらはそのセッションのみに存在し、ディスクに保存されないため、クイックテストまたは自動化スクリプトに役立ちます。単一の --agents 呼び出しで複数のサブエージェントを定義できます:
- macOS, Linux, WSL
- Windows PowerShell
--agents フラグは、ファイルベースのサブエージェントと同じフロントマターフィールドを持つ JSON を受け入れます:description、prompt、tools、disallowedTools、model、permissionMode、mcpServers、hooks、maxTurns、skills、initialPrompt、memory、effort、background、isolation、および color。システムプロンプトには prompt を使用します。これはファイルベースのサブエージェントの markdown 本体と同等です。
管理サブエージェント は、組織管理者によってデプロイされます。管理設定ディレクトリ内の .claude/agents/ に markdown ファイルを配置し、プロジェクトおよびユーザーサブエージェントと同じフロントマター形式を使用します。管理定義は、同じ名前のプロジェクトおよびユーザーサブエージェントより優先されます。
プラグインサブエージェント は、インストールしたプラグインから提供されます。これらはカスタムサブエージェントと一緒に読み込まれ、スコープ付き名の下で @-mention タイプアヘッドに表示されます。プラグインサブエージェントの作成の詳細については、プラグインコンポーネントリファレンスを参照してください。
セキュリティ上の理由から、プラグインサブエージェントは
hooks、mcpServers、または permissionMode フロントマターフィールドをサポートしていません。これらのフィールドはプラグインからエージェントを読み込むときに無視されます。これらが必要な場合は、エージェントファイルを .claude/agents/ または ~/.claude/agents/ にコピーしてください。また、settings.json または settings.local.json の permissions.allowにルールを追加することもできますが、これらのルールはプラグインサブエージェントだけでなく、セッション全体に適用されます。tools と model を使用し、定義の本体がチームメイトのシステムプロンプトに追加指示として追加されます。エージェントチームを参照して、どのフロントマターフィールドがこのパスに適用されるかを確認してください。
サブエージェントファイルを書く
サブエージェントファイルは、YAML フロントマターを使用して設定を行い、その後に Markdown でシステムプロンプトを続けます:Claude Code は
~/.claude/agents/ と .claude/agents/ を監視します。ディスク上でサブエージェントファイルを追加または編集するか、Claude にファイルを書くよう依頼すると、Claude Code は数秒以内に変更を検出し、次の委譲は更新された定義を使用します。再起動は不要です。ただし、2 つのケースでは再起動が必要です:- ウォッチャーはセッション開始時に存在していたディレクトリのみをカバーするため、新しい
agentsディレクトリでスコープの最初のエージェントファイルを作成した後、再起動して読み込みます。 --disable-slash-commandsで開始されたセッションはこれらのディレクトリをまったく監視しません。
--append-subagent-system-promptフラグはネストされたサブエージェントを含む、すべてのサブエージェントのシステムプロンプトの末尾に提供するテキストを追加します。Claude Code v2.1.205 以降が必要です。
サブエージェントはメイン会話の現在の作業ディレクトリで開始します。サブエージェント内では、cd コマンドは Bash または PowerShell ツール呼び出し間で永続化されず、メイン会話の作業ディレクトリに影響しません。代わりにサブエージェントにリポジトリの分離されたコピーを提供するには、isolation: worktreeを設定します。
isolation: worktree を持つサブエージェントは、その worktree 内で Bash および PowerShell コマンドを実行します。作業ディレクトリが主要なチェックアウトに解決されるコマンド(例えば、サブエージェントの実行中に worktree ディレクトリが削除された場合)は、エラーで失敗します。v2.1.203 より前では、そのようなコマンドは主要なチェックアウトで実行される可能性がありました。
サポートされているフロントマターフィールド
以下のフィールドは YAML フロントマターで使用できます。name と description のみが必須です。
モデルを選択する
model フィールドは、サブエージェントが使用するAI モデルを制御します:
- モデルエイリアス:利用可能なエイリアスの 1 つを使用します:
sonnet、opus、haiku、またはfable - 完全なモデル ID:
claude-opus-4-8またはclaude-sonnet-5などの完全なモデル ID を使用します。--modelフラグと同じ値を受け入れます - inherit:メイン会話と同じモデルを使用します
- 省略:指定されていない場合、デフォルトは
inherit(メイン会話と同じモデルを使用)です
model パラメーターを渡すこともできます。Claude Code はサブエージェントのモデルを次の順序で解決します:
CLAUDE_CODE_SUBAGENT_MODEL環境変数(設定されている場合)- 呼び出しごとの
modelパラメーター - サブエージェント定義の
modelフロントマター - メイン会話のモデル
CLAUDE_CODE_SUBAGENT_MODEL を inherit に設定することは、設定しないのと同じです:解決は呼び出しごとの model パラメーター、その後フロントマターで続きます。以前のバージョンでは、inherit はサブエージェントをメイン会話のモデルに強制し、これらの両方のソースを無視していました。
環境変数、呼び出しごとのパラメーター、およびフロントマター値は、組織の availableModels許可リストに対してチェックされます。除外されたモデルに解決される値は使用されず、サブエージェントは継承されたモデルで実行されます。
v2.1.198 以降、サブエージェントはメイン会話の拡張思考設定も継承します:セッションで思考がオンの場合、サブエージェントではオンになり、オフの場合はオフのままです。サブエージェントごとの思考設定はありません。v2.1.198 より前では、サブエージェントはメイン会話の設定に関係なく、拡張思考が無効で実行されていました。
サブエージェント機能を制御する
ツールアクセス、権限モード、および条件付きルールを通じて、サブエージェントが実行できることを制御できます。利用可能なツール
サブエージェントは、デフォルトでメイン会話で利用可能な内部ツールと MCP ツールを継承します。以下のツールはメイン会話の UI またはセッション状態に依存し、tools フィールドにリストされている場合でも、サブエージェントでは利用できません:
AskUserQuestionEnterPlanModeExitPlanMode(サブエージェントのpermissionModeがplanの場合を除く)ScheduleWakeupWaitForMcpServers
tools フィールド(許可リスト)または disallowedTools フィールド(拒否リスト)を使用します。この例は tools を使用して、Read、Grep、Glob、および Bash のみを排他的に許可します。サブエージェントはファイルを編集したり、ファイルを書き込んだり、MCP ツールを使用したりできません:
disallowedTools を使用して、Write および Edit を除く、メイン会話からすべてのツールを継承します。サブエージェントは Bash、MCP ツール、およびその他すべてを保持します:
disallowedTools が最初に適用され、その後 tools が残りのプールに対して解決されます。両方にリストされているツールは削除されます。
tools リストのどの項目もツールに解決されない場合(例えば、すべてのエントリが誤字であるか、サブエージェントで利用できないツールに名前を付けている場合)、Claude Code はサブエージェントの起動を拒否し、Agent ツールは解決されていないエントリに名前を付けるエラーを返します。v2.1.208 より前では、そのサブエージェントはツールなしで起動し、空または混乱した結果を返す可能性がありました。
両方のフィールドは、正確なツール名に加えて MCP サーバーレベルのパターンを受け入れます:mcp__<server> または mcp__<server>__* は、指定されたサーバーからすべてのツールを付与または削除します。disallowedTools では、mcp__* はすべてのサーバーからすべての MCP ツールも削除します。この例は、github MCP サーバーからすべてのツールを削除しながら、他のサーバーのツールと組み込みツールをすべて保持します:
生成できるサブエージェントを制限する
エージェントがclaude --agent でメインスレッドとして実行される場合、Agent ツールを使用してサブエージェントを生成できます。生成できるサブエージェントの種類を制限するには、tools フィールドで Agent(agent_type) 構文を使用します。
バージョン 2.1.63 では、Task ツールが Agent に名前変更されました。設定とエージェント定義の既存の
Task(...) 参照は引き続きエイリアスとして機能します。worker と researcher サブエージェントのみを生成できます。エージェントが他の種類を生成しようとすると、リクエストは失敗し、エージェントはプロンプトで許可されたタイプのみを表示します。特定のエージェントをブロックしながら他のすべてを許可するには、代わりにpermissions.denyを使用します。
制限なしでサブエージェントを生成できるようにするには、括弧なしで Agent を使用します:
Agent が tools リストから完全に省略されている場合、エージェントはサブエージェントを生成できません。
Agent(agent_type) 許可リスト構文は、claude --agent でメインスレッドとして実行されるエージェントにのみ適用されます。サブエージェント定義では、tools に Agent をリストするとそのサブエージェントはネストされたサブエージェントを生成できますが、括弧内のタイプリストは無視されます。
MCP サーバーをサブエージェントにスコープする
mcpServers フィールドを使用して、メイン会話で利用可能でないMCP サーバーへのアクセスをサブエージェントに付与します。ここで定義されたインラインサーバーは、サブエージェントの開始時に接続され、終了時に切断されます。文字列参照は親セッションの接続を共有します。
リスト内の各エントリは、インラインサーバー定義またはセッションで既に設定されている MCP サーバーを参照する文字列のいずれかです:
.mcp.json サーバーエントリ(stdio、http、sse、ws)と同じスキーマを使用し、サーバー名でキー付けされます。
MCP サーバーをメイン会話から完全に除外し、そのツール説明がコンテキストを消費するのを避けるには、.mcp.json ではなくここでインラインで定義します。サブエージェントはツールを取得します。親の会話は取得しません。
v2.1.153 以降、メインセッションに適用される MCP 制限は、サブエージェントフロントマターで宣言されたサーバーもカバーします:
これらのいずれかがサーバーをブロックする場合、Claude Code はそれをスキップし、ブロックされたサーバーの名前を示す警告を表示します。
管理設定の制限は、定義方法に関係なく、すべてのサブエージェントに適用されます。--strict-mcp-config は、--agents または SDK agents オプションを通じてインラインで渡すサーバーをフィルタリングしません。これらは明示的な呼び出し元入力であるためです。
権限モード
permissionMode フィールドは、サブエージェントが権限プロンプトをどのように処理するかを制御します。サブエージェントはメイン会話から権限コンテキストを継承しますが、モードをオーバーライドできます。ただし、以下で説明するように、親モードが優先される場合があります。
親が
bypassPermissions または acceptEdits を使用する場合、これが優先され、オーバーライドできません。親が自動モードを使用する場合、サブエージェントは自動モードを継承し、フロントマター内の permissionMode は無視されます:分類器は、親セッションと同じブロックおよび許可ルールを使用してサブエージェントのツール呼び出しを評価します。
スキルをサブエージェントにプリロードする
skills フィールドを使用して、スキルコンテンツをスタートアップ時にサブエージェントのコンテキストに注入します。これにより、実行中にスキルを検出して読み込む必要なく、サブエージェントにドメイン知識を提供します。
toolsリストから Skill を省略するか、disallowedTools に追加します。
disable-model-invocation: trueを設定するスキルをプリロードすることはできません。プリロードは Claude が呼び出すことができるスキルの同じセットから引き出されるためです。リストされたスキルが見つからないか無効な場合、Claude Code はそれをスキップし、デバッグログに警告をログします。
これはサブエージェントでスキルを実行するの逆です。サブエージェントの
skills を使用すると、サブエージェントはシステムプロンプトを制御し、スキルコンテンツを読み込みます。スキルの context: fork を使用すると、スキルコンテンツが指定したエージェントに注入されます。どちらも同じ基盤システムを使用します。永続メモリを有効にする
memory フィールドは、会話全体で存続する永続ディレクトリをサブエージェントに提供します。サブエージェントはこのディレクトリを使用して、コードベースパターン、デバッグの洞察、アーキテクチャの決定など、時間をかけて知識を構築します。
メモリが有効な場合:
- サブエージェントのシステムプロンプトには、メモリディレクトリの読み取りと書き込みの指示が含まれます。
- サブエージェントのシステムプロンプトには、メモリディレクトリの
MEMORY.mdの最初の 200 行または 25KB(どちらか小さい方)も含まれ、MEMORY.mdがその制限を超える場合はキュレーションの指示が含まれます。 - Read、Write、および Edit ツールが自動的に有効になり、サブエージェントがメモリファイルを管理できるようになります。
-
projectは推奨されるデフォルトスコープです。バージョン管理を通じてサブエージェント知識を共有可能にします。 - サブエージェントに作業を開始する前にメモリを確認するよう依頼します:「このプルリクエストをレビューし、以前に見たパターンについてメモリを確認してください。」
- タスク完了後、サブエージェントにメモリを更新するよう依頼します:「完了したので、学習したことをメモリに保存してください。」時間をかけて、これはサブエージェントをより効果的にする知識ベースを構築します。
-
メモリ指示をサブエージェントの markdown ファイルに直接含めて、独自の知識ベースを積極的に維持するようにします:
hooks を使用した条件付きルール
ツール使用をより動的に制御するには、PreToolUse hooks を使用して、操作が実行される前に検証します。これは、ツールの一部の操作を許可しながら他の操作をブロックする必要がある場合に役立ちます。
この例は、読み取り専用データベースクエリのみを許可するサブエージェントを作成します。PreToolUse hook は、各 Bash コマンドが実行される前に command で指定されたスクリプトを実行します:
shell: powershell を追加します。
特定のサブエージェントを無効にする
設定のdeny 配列にサブエージェントを追加することで、Claude が特定のサブエージェントを使用するのを防ぐことができます。Agent(subagent-name) 形式を使用します。ここで subagent-name はサブエージェントの name フィールドと一致します。
--disallowedTools CLI フラグを使用することもできます:
サブエージェント用の hooks を定義する
サブエージェントは、サブエージェントのライフサイクル中に実行されるhooksを定義できます。hooks を設定する方法は 2 つあります:- サブエージェントのフロントマター内:そのサブエージェントがアクティブな間のみ実行される hooks を定義します
settings.json内:サブエージェントが開始または停止するときにメインセッションで実行される hooks を定義します
サブエージェントフロントマター内の hooks
サブエージェントの markdown ファイルで直接 hooks を定義します。これらの hooks は、その特定のサブエージェントがアクティブな間のみ実行され、終了時にクリーンアップされます。フロントマター hooks は、Agent ツールまたは @-mention を通じてサブエージェントとして生成されるときに発火します。また、
--agentまたは agent 設定でメインセッションとして実行される場合にも発火します。メインセッションの場合、settings.jsonで定義されている hooks と一緒に実行されます。
この例は、
PreToolUse hook で Bash コマンドを検証し、PostToolUse でファイル編集後にリンターを実行します:
Stop hooks は自動的に SubagentStop イベントに変換されます。
サブエージェントイベント用のプロジェクトレベル hooks
メインセッションでサブエージェントのライフサイクルイベントに応答する hooks をsettings.json で設定します。
両方のイベントは、名前でエージェント型をターゲットにするマッチャーをサポートします。マッチャー値は、プロジェクトレベルおよびユーザーレベルのサブエージェントの場合はエージェントのフロントマター
name、または my-plugin:db-agent などのプラグインサブエージェントの場合はプラグインスコープ識別子です。スコープ付き名にはコロンが含まれるため、アンカーなしの正規表現として評価されます。^my-plugin:db-agent$ のように ^ と $ でアンカーして、そのエージェントのみと一致させます。
この例は、db-agent サブエージェントが開始するときのみセットアップスクリプトを実行し、サブエージェントが停止するときにクリーンアップスクリプトを実行します:
db-agent など)は Claude Code v2.1.195 以降で正確に一致します。以前のバージョンでは、アンカーなしの正規表現として評価され、prod-db-agent などそれを含むエージェント型でも発火します。これらのバージョンでは ^db-agent$ のようにアンカーしてください。
完全な hook 設定形式については、Hooksを参照してください。
サブエージェントを使用する
自動委譲を理解する
Claude は、リクエスト内のタスク説明、サブエージェント設定のdescription フィールド、および現在のコンテキストに基づいて、タスクを自動的に委譲します。積極的な委譲を促進するには、サブエージェントの description フィールドに「use proactively」などのフレーズを含めます。
サブエージェントを明示的に呼び出す
自動委譲では不十分な場合、サブエージェント自体をリクエストできます。3 つのパターンは、1 回限りの提案からセッション全体のデフォルトまでエスカレートします:- 自然言語:プロンプトでサブエージェントに名前を付けます。Claude は委譲するかどうかを決定します
- @-mention:サブエージェントが 1 つのタスクで実行されることを保証します
- セッション全体:セッション全体が
--agentフラグまたはagent設定を通じてそのサブエージェントのシステムプロンプト、ツール制限、およびモデルを使用します
@ を入力し、タイプアヘッドからサブエージェントを選択します。ファイルを @-mention する方法と同じです。これにより、Claude の選択ではなく、特定のサブエージェントが実行されることが保証されます:
my-plugin:code-reviewer または my-plugin:review:security などのスコープ付き名で表示されます。プラグインがサブエージェントをサブフォルダに整理する場合です。セッションで現在実行されている名前付きバックグラウンドサブエージェントもタイプアヘッドに表示され、名前の横にステータスが表示されます。
ピッカーを使用せずに手動で mention を入力することもできます:ローカルサブエージェントの場合は @agent-<name>、プラグインサブエージェントの場合はスコープ付き名の後に @agent- を続けます。例えば @agent-my-plugin:code-reviewer。
セッション全体をサブエージェントとして実行します。 --agent <name>を渡して、メインスレッド自体がそのサブエージェントのシステムプロンプト、ツール制限、およびモデルを採用するセッションを開始します:
--system-promptと同じように、デフォルト Claude Code システムプロンプトを完全に置き換えます。CLAUDE.md ファイルとプロジェクトメモリは引き続き通常のメッセージフローを通じて読み込まれます。エージェント名は起動ヘッダーに @<name> として表示されるため、アクティブであることを確認できます。
これは組み込みとカスタムの両方のサブエージェントで機能し、セッションを再開するときに選択が保持されます。
プラグイン提供のサブエージェントの場合、エージェント名を渡すだけで、Claude Code がそれを見つけます:
agents/ ディレクトリのサブフォルダに配置する場合、スコープ付き名にサブフォルダを含めます。例えば claude --agent my-plugin:review:security。
プロジェクト内のすべてのセッションのデフォルトにするには、.claude/settings.json で agent を設定します:
サブエージェントをフォアグラウンドまたはバックグラウンドで実行する
サブエージェントは、フォアグラウンドまたはバックグラウンドで実行できます:- フォアグラウンドサブエージェント は、完了するまでメイン会話をブロックします。権限プロンプトは発生時にあなたに渡されます。
- バックグラウンドサブエージェント は、作業を続ける間に並行して実行されます。v2.1.186 以降、バックグラウンドサブエージェントが権限が必要なツール呼び出しに到達すると、プロンプトがメインセッションに表示され、要求しているサブエージェントの名前が付けられます。承認してサブエージェントを続行させるか、Esc を押してそのツール呼び出しのみを拒否し、サブエージェントを停止しないようにします。v2.1.186 より前は、バックグラウンドサブエージェントはプロンプトが表示されるツール呼び出しを自動拒否していました。
- Claude に「run this in the background」と依頼する
- Ctrl+B を押して実行中のタスクをバックグラウンドにする
/tasksにリストされたままで、完了とマークされ、実行中の作業の下にソートされます。セッションがタスクリストをクリーンアップするまで、その詳細ビューは開いたままです。失敗したサブエージェント、または停止したサブエージェントはリストから削除されます。v2.1.208 より前は、完了したサブエージェントは完了した瞬間にリストから削除され、その詳細ビューが閉じられました。
すべてのバックグラウンドタスク機能を無効にするには、CLAUDE_CODE_DISABLE_BACKGROUND_TASKS 環境変数を 1 に設定します。環境変数を参照してください。
CLAUDE_CODE_FORK_SUBAGENTが 1 に設定されている場合、すべてのサブエージェント生成はバックグラウンドで実行され、フロントマター background フィールドは効果がありません。これは、フォークモードが Agent ツールから run_in_background パラメータを削除するためです。CLAUDE_CODE_DISABLE_BACKGROUND_TASKS はフォークモードより優先され、サブエージェント生成をフォアグラウンドに保ちます。
サブエージェント内の API エラー
v2.1.199 以降、実行が API エラー(使用制限や繰り返されるサーバーエラーなど)で終了するサブエージェントは、エラーテキストをサブエージェントの検出結果のように返すのではなく、その失敗を Claude に報告します。Claude が受け取るものは、サブエージェントが実行された場所によって異なります:- フォアグラウンド:レート制限、オーバーロード、またはサーバーエラーが既に出力を生成したサブエージェントを遮断する場合、Agent ツールはその部分的な出力を、サブエージェントが遮断され、タスクを完了しなかったというメモ付きで返します。v2.1.200 以降、何も出力しなかったサブエージェント、またはツール呼び出しのみが出力だったサブエージェントは、
Agent terminated early due to an API errorで失敗し、その後にエラーの詳細が続きます。v2.1.199 では、ツール呼び出しのみの形状を遮断したレート制限、オーバーロード、またはサーバーエラーは、遮断メモのみを含む空の部分的な結果を返していました。 - バックグラウンド:サブエージェントは失敗とマークされ、Claude が終了時に受け取るメッセージは API エラーに名前を付け、サブエージェントの最後の出力を含むため、部分的な作業は失われません。
一般的なパターン
大量操作を分離する
サブエージェントの最も効果的な用途の 1 つは、大量の出力を生成する操作を分離することです。テストの実行、ドキュメントの取得、またはログファイルの処理は、かなりのコンテキストを消費できます。これらをサブエージェントに委譲することで、詳細な出力はサブエージェントのコンテキストに留まり、関連する概要のみがメイン会話に返されます。並行研究を実行する
独立した調査の場合、複数のサブエージェントを生成して同時に動作させます:サブエージェントをチェーンする
マルチステップワークフローの場合、Claude にサブエージェントを順序立てて使用するよう依頼します。各サブエージェントはタスクを完了して結果を Claude に返し、Claude は関連するコンテキストを次のサブエージェントに渡します。サブエージェントとメイン会話の選択
メイン会話 を使用する場合:- タスクが頻繁なやり取りまたは反復的な改善が必要な場合
- 複数のフェーズが重要なコンテキストを共有する場合(計画、実装、テスト)
- 迅速でターゲット化された変更を行う場合
- レイテンシが重要な場合。サブエージェントは新規に開始し、コンテキストを収集するのに時間がかかる場合があります
- タスクがメインコンテキストで不要な詳細な出力を生成する場合
- 特定のツール制限または権限を強制したい場合
- 作業が自己完結型で、概要を返すことができる場合
/btwを使用します。完全なコンテキストを表示しますが、ツールアクセスはなく、答えは履歴に追加されるのではなく破棄されます。
ネストされたサブエージェントを生成する
Claude Code v2.1.172 以降、サブエージェントは独自のサブエージェントを生成できます。委譲されたタスク自体が並行サブタスクに分割される場合、これを使用します。例えば、レビュアーサブエージェントが検出結果ごとに検証者をディスパッチする場合、中間出力がメイン会話に到達することはありません。トップレベルのサブエージェントの概要のみがあなたに返されます。 ネストされたサブエージェントは、トップレベルのものと同じ方法で設定され、同じスコープから解決されます。 プロンプト入力の下のサブエージェントパネルは、完全なツリーを表示します:各行は子孫の(+N) カウントを表示し、v2.1.193 以降、行を開くとそのサブエージェントの兄弟と直接の子が main へのパスとともに表示されます。
深さは、各レベルがフォアグラウンドまたはバックグラウンドで実行されるかどうかに関係なく、メイン会話の下のサブエージェントレベルの数として数えられます。深さ 5 のサブエージェントは Agent ツールを受け取らず、さらに生成することはできません。制限は固定されており、設定不可能です。
Claude Code v2.1.187 以降、バックグラウンドサブエージェントの深さは最初に生成されるときに固定され、後で再開しても深さは変わりません。例えば、メイン会話がサブエージェント A を生成し、A が深さ 2 でバックグラウンドサブエージェント B を生成する場合、B はメイン会話から直接再開するときも深さ 2 のままです。サブエージェントをより浅いコンテキストから再開しても、深さ制限が既に防止した追加レベルを生成させることはできません。
特定のサブエージェントが他のサブエージェントを生成するのを防ぐには、その tools リストから Agent を省略するか、disallowedTools に追加します。
フォークは引き続き別のフォークを生成することはできません。他のサブエージェントタイプを生成でき、それらは深さ制限にカウントされます。
サブエージェントコンテキストを管理する
スタートアップで読み込まれるもの
各サブエージェントは、新しい分離されたコンテキストウィンドウで開始します。会話履歴、既に呼び出したスキル、または Claude が既に読み込んだファイルは表示されません。Claude はタスクを要約した委譲メッセージを作成し、サブエージェントはそこから動作します。例外はフォークで、新規に開始するのではなく親会話を継承します。 非フォークサブエージェントの初期コンテキストには以下が含まれます:- システムプロンプト:エージェント自身のプロンプトと Claude Code が追加する環境詳細。完全な Claude Code システムプロンプトではありません。カスタムサブエージェントはマークダウン本体または
promptフィールドで定義します。組み込みエージェントは事前定義されたプロンプトを持ちます。 - タスクメッセージ:Claude が作業を引き継ぐときに作成する委譲プロンプト。
- CLAUDE.md とメモリ:メイン会話が読み込むメモリ階層のすべてのレベル。
~/.claude/CLAUDE.md、プロジェクトルール、CLAUDE.local.md、および管理ポリシーファイルを含みます。組み込みの Explore および Plan エージェントはこれをスキップします。 - Git ステータス:親セッションの開始時に取得されたスナップショット。ワーキングディレクトリが Git リポジトリでない場合、または
includeGitInstructionsがfalseの場合は不在です。Explore および Plan はそれに関係なくスキップします。 - プリロードされたスキル:エージェントの
skillsフィールドで名前が付けられたスキルの完全なコンテンツ。組み込みエージェントはスキルをプリロードしません。 - 兄弟名簿:
mainと、セッション内のすべての他の名前付きエージェントをリストするシステムリマインダー。各エージェントはSendMessageの有効なto値です。Claude Code v2.1.206 以降が必要です。名簿は、サブエージェントのツールにSendMessageが含まれ、少なくとも 1 つの他のエージェントに名前がある場合にのみ表示されます。Claude がそれを生成するときに名前を付けたか、エージェントチームチームメイトとして実行されるかは関係ありません。これはサブエージェントが開始するときに取得されたスナップショットであるため、後で名前が付けられたエージェントは表示されません。
vendor/ ディレクトリを無視する」などのルールが必須の場合は、委譲時に Claude に与えるプロンプトで再度述べてください。
サブエージェントを再開する
各サブエージェント呼び出しは、新しいコンテキストで新しいインスタンスを作成します。最初からやり直すのではなく、既存のサブエージェントの作業を続けるには、Claude に再開するよう依頼します。 再開されたサブエージェントは、すべての前のツール呼び出し、結果、および推論を含む、完全な会話履歴を保持します。サブエージェントは、新規に開始するのではなく、停止した場所から正確に再開します。 サブエージェントが完了すると、Claude はエージェント ID を受け取ります。組み込みの Explore および Plan エージェントは 1 回限りで、エージェント ID を返さないため、再開できません。作業を続ける必要がある場合は、general-purpose またはカスタムサブエージェントを使用してください。
Claude は SendMessage ツールを使用してエージェントの ID または名前を to フィールドとしてサブエージェントを再開します。SendMessage はエージェントチームが有効になっている必要はありません。shutdown_request および plan_approval_response などの構造化チームプロトコルメッセージのみが必要です。
サブエージェントを再開するには、Claude に前の作業を続けるよう依頼します:
SendMessage を受け取った場合、新しい Agent 呼び出しを必要とせずにバックグラウンドで自動再開します。Claude が TaskStop ツールで停止したサブエージェントにも同じことが適用されます。
v2.1.191 以降、/tasks で x を使用して自分で停止したサブエージェント、または SDK stop_task リクエストは自動再開しません。SendMessage 呼び出しは、エージェントがキャンセルされたことを示す拒否を返します。サブエージェントパネルのそのサブエージェントのトランスクリプトに入力して、自分で再開します。これにより停止がクリアされ、後の SendMessage 呼び出しが再度自動再開できます。
v2.1.205 以降、再開は同じ ID の下でエージェントの新しい実行を開始するため、既に失敗または完了していたサブエージェントはタスクリストと Agent SDK のタスクイベントで再度実行中として表示されます。v2.1.205 より前は、再開実行が動作している間、以前の失敗または完了ステータスを表示し続けていました。
v2.1.199 以降、SendMessage は、名前が会話の前半で到達したのと同じエージェントを引き続き参照していることを確認します。より新しいエージェントが名前を取得した場合(例えば、名前を再利用した再生成されたバックグラウンドエージェント)、Claude Code は送信を拒否し、エラーは名前が現在到達するエージェントを報告するため、Claude は再ターゲットできます。チェックは現在の会話にスコープされ、/clear でリセットされます。
v2.1.198 以降、サブエージェントは、それを起動したエージェントからのメッセージを通常のタスク指示として扱い、その権限設定内で機能します。2 つの制限は、メッセージの送信者に関係なく引き続き保持されます:保留中の権限プロンプトに対するエージェントメッセージからの承認はカウントされず、エージェントメッセージはサブエージェントの権限設定、CLAUDE.md、または設定を変更することはできません。権限システムまたはあなた自身のメッセージのみが承認を付与できます。
Claude にエージェント ID を明示的に参照したい場合は依頼することもできます。または、~/.claude/projects/{project}/{sessionId}/subagents/ のトランスクリプトファイルで ID を見つけることができます。各トランスクリプトは agent-{agentId}.jsonl として保存されます。
サブエージェントトランスクリプトはメイン会話から独立して永続化されます:
- メイン会話圧縮:メイン会話が圧縮されると、サブエージェントトランスクリプトは影響を受けません。別のファイルに保存されます。
- セッション永続性:サブエージェントトランスクリプトはセッション内で永続化されます。Claude Code を再起動した後、同じセッションを再開することでサブエージェントを再開できます。
- 自動クリーンアップ:トランスクリプトは
cleanupPeriodDays設定に基づいてクリーンアップされます(デフォルト:30 日)。
自動圧縮
サブエージェントは、メイン会話と同じロジックを使用した自動圧縮をサポートします。圧縮は同じ条件下でトリガーされ、CLAUDE_AUTOCOMPACT_PCT_OVERRIDE はサブエージェントにも適用されます。環境変数を参照してください。オーバーライドがいつ有効になるかについて。
圧縮イベントはサブエージェントトランスクリプトファイルにログされます:
preTokens 値は、圧縮が発生する前に使用されたトークン数を示します。
現在の会話をフォークする
フォークされたサブエージェントは Claude Code v2.1.117 以降が必要です。v2.1.161 以降では
/fork コマンドはデフォルトで有効になります。それより前のバージョンでは CLAUDE_CODE_FORK_SUBAGENT 環境変数を 1 に設定する必要があります。Claude 自体がフォークをスポーンすることは実験的であり、将来のリリースで変更される可能性があります。この機能は、段階的なロールアウトの一部として、インタラクティブセッションでも有効にすることができます。CLAUDE_CODE_FORK_SUBAGENT を 1 に設定して明示的に有効にするか、0 に設定して無効にします。この変数はインタラクティブモードおよび SDK または claude -p 経由で有効になります。
フォークモードを有効にすると、Claude Code が 2 つの方法で変更されます:
- Claude は、
forkサブエージェントタイプを明示的にリクエストすることでフォークをスポーンできます。サブエージェントタイプなしのスポーンは、汎用サブエージェントを使用し、Explore などの名前付きサブエージェントは以前と同じようにスポーンされます。 - すべてのサブエージェントスポーンは、バックグラウンドで実行されます。フォークか名前付きサブエージェントかに関わらず実行されます。
CLAUDE_CODE_DISABLE_BACKGROUND_TASKSを1に設定して、スポーンを同期的に保つことができます。
/fork の後に指示を続けて、フォークを自分で開始できます。変数が設定されているかどうかに関わらず実行できます。Claude Code はフォークに指示の最初の単語から名前を付けます。次の例は、メインセッションで実装を続ける間に、フォークが会話をドラフトテストケースに分岐させます:
実行中のフォークを観察して操作する
実行中のフォークはプロンプト入力の下のパネルに表示され、メインセッション用に 1 行、各フォーク用に 1 行があります。これらのキーを使用してパネルと対話します:
フォークまたはサブエージェントのトランスクリプトが開いている場合、フォローアップメッセージと skills はそのエージェントに送信されますが、組み込みコマンドはメイン会話で実行されたままです。v2.1.199 以降では、そのビューで
/model または /fast を入力すると、表示されているエージェントのモデルまたはファストモードではなく、メイン会話のモデルまたはファストモードを変更することを示す通知が表示されます。サイレントに実行される代わりに。
フォークと名前付きサブエージェントの違い
フォークはメインセッションがその時点で持っているすべてを継承します。名前付きサブエージェントは独自の定義から開始します。
フォークのシステムプロンプトとツール定義は親と同じであるため、最初のリクエストは親の prompt cache を再利用します。これにより、同じコンテキストが必要なタスクの場合、フォークは新しいサブエージェントをスポーンするよりも安価です。
Claude が Agent ツール経由でフォークをスポーンするときに、
isolation: "worktree" を渡すことができるため、フォークのファイル編集は、チェックアウトではなく、別の git worktree に書き込まれます。
制限事項
CLAUDE_CODE_FORK_SUBAGENT=1 を設定すると、インタラクティブセッション、非インタラクティブモード、および Agent SDK でフォークモードが有効になります。CLAUDE_CODE_FORK_SUBAGENT を 0 に設定するとフォークモードが無効になり、サーバー側のロールアウトを含むすべての場所でフォークモードが無効になります。フォークはさらにフォークをスポーンできません。
サブエージェントの例
これらの例は、サブエージェントを構築するための効果的なパターンを示しています。出発点として使用するか、Claude を使用してカスタマイズされたバージョンを生成します。コードレビュアー
コードを変更せずにレビューする読み取り専用サブエージェント。この例は、制限されたツールアクセス(Edit または Write なし)と、何を探すべきか、出力をどのようにフォーマットするかを正確に指定する詳細なプロンプトを使用して、焦点を絞ったサブエージェントを設計する方法を示しています。デバッガー
問題を分析して修正できるサブエージェント。コードレビュアーとは異なり、このサブエージェントはバグの修正にはコード変更が必要なため、Edit を含みます。プロンプトは診断から検証までの明確なワークフローを提供します。データサイエンティスト
データ分析作業向けのドメイン固有のサブエージェント。この例は、典型的なコーディングタスク以外の特化したワークフロー向けのサブエージェントを作成する方法を示しています。より有能な分析のためにmodel: sonnet を明示的に設定します。
データベースクエリバリデーター
Bash アクセスを許可しますが、読み取り専用 SQL クエリのみを許可するようにコマンドを検証するサブエージェント。この例は、tools フィールドが提供するよりも細かい制御が必要な場合に、PreToolUse hooks を使用して条件付き検証を行う方法を示しています。
command フィールドと一致する必要があります:
shell: powershell を追加します。PowerShell で hooks を実行するを参照してください。
hook は stdin を通じて JSON を受け取り、Bash コマンドは tool_input.command にあります。終了コード 2 は操作をブロックし、エラーメッセージを Claude にフィードバックします。終了コードと出力の詳細についてはHooksを参照し、完全な入力スキーマについてはHook 入力を参照してください。
次のステップ
サブエージェントを理解したので、これらの関連機能を探索してください:- プラグインでサブエージェントを配布することで、チームまたはプロジェクト全体でサブエージェントを共有します
- Claude Code をプログラムで実行することで、Agent SDK を使用して CI/CD と自動化を行います
- MCP サーバーを使用することで、サブエージェントに外部ツールとデータへのアクセスを提供します