サブエージェントは単一のセッション内で動作します。多くの独立したセッションを並行して実行し、1 つの場所から監視するには、バックグラウンドエージェントを参照してください。互いにメッセージを渡すセッションについては、クロスセッションメッセージングを参照してください。Claude が生成および監督する調整されたセッションのチームについては、エージェントチームを参照してください。
- コンテキストを保持する ことで、探索と実装をメインの会話から分離します
- 制約を強制する ことで、サブエージェントが使用できるツールを制限します
- 設定を再利用する ことで、ユーザーレベルのサブエージェントをプロジェクト全体で再利用します
- 動作を特化させる ことで、特定のドメイン向けの焦点を絞ったシステムプロンプトを使用します
- コストを制御する ことで、Haiku のような高速で安価なモデルにタスクをルーティングします
description フィールドをトリミングし、詳細を各サブエージェントのシステムプロンプトに移動します。システムプロンプトは、そのサブエージェントが実行される場合にのみロードされます。
組み込みサブエージェント
Claude Code には、Claude が必要に応じて自動的に使用する組み込みサブエージェントが含まれています。各サブエージェントは親の会話の権限を継承します。ほとんどは制限されたツールセットで実行されます。 Explore と Plan は、研究を高速かつ低コストに保つために、CLAUDE.md ファイルと git ステータススナップショットをスキップします。その他のすべての組み込みサブエージェントとカスタムサブエージェントは、その定義がomitClaudeMdフィールドを設定してユーザー、プロジェクト、およびローカル CLAUDE.md ファイルをスキップしない限り、両方を読み込みます。サブエージェントに到達するものの完全な内訳については、スタートアップ時に読み込まれるものを参照してください。
- Explore
- Plan
- General-purpose
- Other
コードベースの検索と分析に最適化された高速な読み取り専用エージェント。
- モデル: メイン会話から継承され、Claude API では Opus でキャップされます。つまり、Explore は、
CLAUDE_CODE_SUBAGENT_MODELを設定してすべてのサブエージェントを 1 つのモデルで実行しない限り、セッション用に既に選択したモデルより高価なモデルで実行されることはありません。 - ツール: 読み取り専用ツール。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を設定して、すべての組み込みタイプを削除し、独自のタイプのみを提供します。
subagent_type is requiredで失敗します。
これらの組み込みサブエージェント以外に、カスタムプロンプト、ツール制限、権限モード、フック、およびスキルを使用して独自のサブエージェントを作成できます。次のセクションでは、サブエージェントの使用を開始し、カスタマイズする方法を示します。
クイックスタート:最初のサブエージェントを作成する
サブエージェントは 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 は新しいサブエージェントに委譲し、コードベースをスキャンして改善提案を返します。トランスクリプトでは、委譲はツール呼び出し行として表示され、サブエージェント名の後に短いタスク説明が続きます(例:
code-improver(Suggest code improvements))。Claude が新しいサブエージェントを見つけられない場合は、Claude Code を再起動してもう一度試してください。これは ~/.claude/agents/ がセッション開始前に存在しなかった場合にのみ発生します。実行中のセッションは新しく作成された agents ディレクトリを検出しないためです。Claude Code v2.1.197 以前では、
/agents はライブサブエージェントを一覧表示する Running タブと、サブエージェントを作成、編集、削除するための Library タブを備えたインタラクティブウィザードを開きます。サブエージェントの設定
サブエージェントのファイルの場所によって、誰がそれを利用できるかが決まり、frontmatter によってそれが何をできるかが決まります。このセクションでは、サブエージェントファイルがどこに存在するか、およびサポートされるすべてのフィールドについて説明します。サブエージェントのスコープを選択する
スコープに応じて、サブエージェントファイルを異なる場所に保存します。複数のサブエージェントが同じ名前を共有する場合、Claude Code はより優先度の高い場所のものを使用します。
プロジェクトサブエージェント(
.claude/agents/)は、コードベースに固有のサブエージェントに最適です。バージョン管理にチェックインして、チームが協力して使用および改善できるようにします。
プロジェクトサブエージェントは現在の作業ディレクトリから上へ向かって検出されるため、そこからリポジトリルートまでのすべての .claude/agents/ がスキャンされます。これらのネストされたディレクトリの複数が同じ name を定義する場合、Claude Code は作業ディレクトリに最も近い定義を使用します。
--add-dir または /add-dir でディレクトリを追加すると、Claude Code はプロジェクトサブエージェントと一緒にその .claude/agents/ フォルダも読み込みます。追加ディレクトリを参照して、--add-dir から読み込む他の設定タイプを確認してください。--add-dir を使用せずにプロジェクト間でサブエージェントを共有するには、~/.claude/agents/ またはプラグインを使用します。
ユーザーサブエージェント(~/.claude/agents/)は、すべてのプロジェクトで利用可能な個人用サブエージェントです。
Claude Code は .claude/agents/ と ~/.claude/agents/ を再帰的にスキャンするため、agents/review/ や agents/research/ などのサブフォルダに定義を整理できます。サブディレクトリパスはサブエージェントの識別方法や呼び出し方法に影響しません。これは、ID が name frontmatter フィールドのみから来るためです。
name 値をツリー全体で一意に保ちます。同じ .claude/agents/ ディレクトリ内(サブフォルダを含む)の 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 として渡されます。これらはそのセッションのみに存在し、ディスクに保存されないため、クイックテストまたは自動化スクリプトに便利です。1 つの --agents 呼び出しで複数のサブエージェントを定義できます。
- macOS, Linux, WSL
- Windows PowerShell
--agents フラグは prompt フィールドと以下の frontmatter フィールドを含む JSON を受け入れます。description、tools、disallowedTools、model、permissionMode、mcpServers、hooks、maxTurns、skills、initialPrompt、memory、effort、background、omitClaudeMd、および isolation。システムプロンプトには prompt を使用します。これはファイルベースのサブエージェントのマークダウン本体と同等です。color と experimental はここでは受け入れられず、拒否されるのではなく無視されます。
JSON の各トップレベルキーはエージェントの名前です。名前を - で始めないでください。
Claude Code が読み込めない値で何をするか、およびそのチェックをスキップするフラグと環境変数については、Invalid --agents configurationを参照してください。
管理サブエージェントは組織管理者によってデプロイされます。管理設定ディレクトリ内の .claude/agents/ にマークダウンファイルを配置し、プロジェクトおよびユーザーサブエージェントと同じ frontmatter 形式を使用します。管理定義は同じ名前のプロジェクトおよびユーザーサブエージェントより優先されます。
プラグインサブエージェントは、インストールしたプラグインから来ます。これらはカスタムサブエージェントと一緒に自動的に読み込まれ、スコープ付き名の下の @-mention タイプアヘッドに表示されます。プラグインサブエージェント作成の詳細については、プラグインコンポーネントリファレンスを参照してください。
セキュリティ上の理由から、プラグインサブエージェントは
hooks、mcpServers、または permissionMode frontmatter フィールドをサポートしていません。これらのフィールドはプラグインからエージェントを読み込むときに無視されます。これらが必要な場合は、エージェントファイルを .claude/agents/ または ~/.claude/agents/ にコピーしてください。また、settings.json または settings.local.json の permissions.allow にルールを追加することもできますが、これらのルールはセッション全体に適用され、プラグインサブエージェントのみには適用されません。サブエージェントファイルを作成する
サブエージェントファイルは設定用の YAML frontmatter を使用し、その後にマークダウンのシステムプロンプトが続きます。Claude Code は
~/.claude/agents/ と .claude/agents/ を監視します。ディスク上のサブエージェントファイルを追加または編集するか、Claude にそれを作成するよう依頼すると、Claude Code は数秒以内に変更を検出し、次の委任は再起動なしで更新された定義を使用します。3 つのケースではまだ再起動が必要です。- ウォッチャーはセッション開始時に存在していたディレクトリのみをカバーするため、新しい
agentsディレクトリでスコープの最初のエージェントファイルを作成した後、再起動して読み込みます。 - Claude Code は
--add-dirまたは/add-dirで追加されたディレクトリ内の.claude/agents/を監視しないため、そこでサブエージェントを追加または編集した後、再起動して変更を読み込みます。 --disable-slash-commandsで開始されたセッションはこれらのディレクトリをまったく監視しません。
.claude/agents/code-reviewer.md
--append-subagent-system-promptを渡して、テキストをすべてのサブエージェント(ネストされたサブエージェントを含む)のシステムプロンプトの末尾に追加します。ただし、フォークされたサブエージェントは除きます。これは会話独自のプロンプトを再利用します。Claude Code v2.1.205 以降が必要です。テキストがコマンドラインで渡すには長すぎる場合は、ファイルに保存して --append-subagent-system-prompt-file でパスを渡してください。ファイルフラグには Claude Code v2.1.261 以降が必要です。
サブエージェントはメイン会話の現在の作業ディレクトリで開始します。サブエージェント内では、cd コマンドは Bash または PowerShell ツール呼び出し間で永続化されず、メイン会話の作業ディレクトリに影響しません。代わりにサブエージェントにリポジトリの分離されたコピーを与えるには、isolation: worktreeを設定します。
isolation: worktree を持つサブエージェントは、その worktree 内で Bash および PowerShell コマンドを実行します。作業ディレクトリがメインチェックアウトに解決されるコマンド(例えば、サブエージェント実行中に worktree ディレクトリが削除された場合)はエラーで失敗します。v2.1.203 より前では、そのようなコマンドはメインチェックアウトで実行できました。
この作業ディレクトリチェックは、Claude Code を起動したディレクトリを含むリポジトリ全体をカバーします。セッションがリンクされたworktreeで独自に実行される場合、チェックはその worktree がリンクされているメインチェックアウトもカバーします。v2.1.210 より前では、チェックは起動ディレクトリのみをカバーしていました。作業ディレクトリがリポジトリ内の他の場所(例えば、monorepo サブディレクトリから Claude Code を起動した場合のリポジトリルート)に解決されるコマンドは、失敗する代わりにそこで実行されました。
Bash コマンドの場合、Claude Code はコマンド自体を 2 つの方法でチェックします。
- git をメインチェックアウトにリダイレクトするコマンドをブロックします。
- コマンドテキストから、コマンドが実行する git がすべて worktree 内に留まることを確認できないコマンドを拒否します。例えば、コマンド名が実行時に計算される場合。
isolation: worktree なしのサブエージェントを含む)に同じチェックを適用します。Claude Code が分離を強制する方法を参照してください。
Frontmatter リファレンス
以下のフィールドは YAML frontmatter で使用できます。name と description のみが必須です。
複数単語のフィールド名は maxTurns や disallowedTools などの camelCase を使用し、テーブルと正確に一致する必要があります。Claude Code は認識しないフィールドを無視し、エラーを報告しません。サブエージェントファイルが読み込まれなかった理由を確認するには、Claude Code がスキップするサブエージェントファイルを参照してください。
cacheTtl を frontmatter のトップレベルではなく、experimental マップ内に書き込みます。
Claude Code がスキップするサブエージェントファイル
Claude Code は、frontmatter に以下の問題がある場合、プロジェクト、ユーザー、または管理agents ディレクトリ、または --add-dir で追加したディレクトリの下のファイルをセッションで報告せずにスキップします。
nameがない。Claude Code はファイルをエージェントの横に保持されたドキュメントとして扱います。- ファイルの最初の行ではない開き
---。Claude Code はファイルに frontmatter がないと読み取り、ドキュメントとして扱います。 -で始まるか:を含むname。Claude Code はファイルをスキップし、デバッグログにエラーを書き込みます。上記の表のname行を参照してください。nameがあるがdescriptionがない。Claude Code はファイルをスキップし、理由をデバッグログに書き込みます。- 解析されない YAML。Claude Code はファイルからフィールドを読み取らず、スキップして、解析エラーをデバッグログに書き込みます。
--debug で Claude Code を実行します。
frontmatter に name がない、または解析されないプラグインサブエージェントは、ファイル名の下で引き続き読み込まれます。
frontmatter が解析されない agents ディレクトリ内のファイルを見つけるには、例えば .claude/agents または ~/.claude/agents に対して claude plugin validate を実行します。Claude Code は名前を付けたディレクトリのみをチェックし、frontmatter が解析されるが name がないファイルにはフラグを立てません。Claude Code v2.1.233 以降が必要です。
モデルを選択する
model フィールドはサブエージェントが使用するモデルを制御します。
- モデルエイリアス。利用可能なエイリアスの 1 つを使用します。
sonnet、opus、haiku、またはfable - 完全なモデル ID。
claude-opus-5-5またはclaude-sonnet-5などの完全なモデル ID を使用します。--modelフラグと同じ値を受け入れます - inherit。メイン会話と同じモデルを使用します
model パラメータを渡すこともできます。Claude Code はサブエージェントのモデルをこの順序で解決します。
- 呼び出しごとの
modelパラメータ - サブエージェント定義の
modelfrontmatter。inheritはメイン会話のモデルを選択します CLAUDE_CODE_SUBAGENT_MODEL環境変数。モデルエイリアスまたはモデル ID に設定した場合- メイン会話のモデル
opus などのファミリエイリアスが、呼び出しごとのパラメータまたは frontmatter で、メイン会話のモデルの代わりにエイリアスが指すバージョンに解決されます。
- メイン会話のモデルがそのファミリに属する。サブエージェントはメイン会話の正確なモデル(
[1m]サフィックスを含む)で実行されるため、メイン会話と同じ拡張コンテキストウィンドウを取得します。 - Claude Code がメイン会話のモデルファミリを判断できない。Anthropic API 以外のプロバイダー上で。これは Claude Code がバッキングモデルに解決していないアプリケーション推論プロファイル ARNを持つ Amazon Bedrock で発生する可能性があります。このケースは
opusエイリアスのみをカバーし、ANTHROPIC_DEFAULT_OPUS_MODELを設定した場合は適用されません。opusはその後、設定したモデルに解決されるため。
CLAUDE_CODE_SUBAGENT_MODEL のエイリアスは、メイン会話のファミリに名前を付けた場合でも、常にエイリアスが指すバージョンに解決されます。
CLAUDE_CODE_SUBAGENT_MODEL を単独で設定しても、組み込みの Explore および Plan サブエージェントが実行されるモデルは変わりません。変更するには、すべてのサブエージェントを 1 つのモデルで実行を参照してください。
v2.1.251 より前では、CLAUDE_CODE_SUBAGENT_MODEL はこの順序で最初に来て、呼び出しごとのパラメータと frontmatter(model: inherit を含む)の両方をオーバーライドしました。
変数を inherit に設定することは、設定を解除するのと同じです。v2.1.196 より前では、その値はサブエージェントをメイン会話のモデルに強制し、他のソースを無視しました。
Claude Code は、呼び出しごとのパラメータ、frontmatter、および環境変数の値を組織の availableModels許可リストに対してチェックします。ブロックされた値の場合、別のモデルに置き換えます。
opusなどのファミリエイリアスがブロックされた場合、Claude Code はサブエージェントを許可リストが許可するそのファミリの最新バージョンで実行します。/modelと同じ置換ルールとプロバイダースコープに従います。v2.1.222 より前では、Claude Code はブロックされたファミリエイリアスについても継承されたモデルでサブエージェントを実行していました。- その他のブロックされた値の場合、その置換が動作しないプロバイダー、または許可リストがファミリのバージョンを許可しない場合、Claude Code は代わりに継承されたモデルでサブエージェントを実行します。
CLAUDE_CODE_SUBAGENT_MODELを設定した場合、Claude Code はそのモデルを最初に試します。これらの同じルールの下で。
/tasksを実行します。Claude Code はサブエージェントの行でモデルに名前を付け、サブエージェントの定義またはそれがフォークされたスキルが effortを設定する場合、努力レベルを追加します。Claude Code v2.1.242 以降が必要です。
呼び出しごとの model パラメータは、サブエージェントが再開または後続メッセージが送信される場合にも適用されるため、サブエージェントはそのモデルに留まります。v2.1.211 より前では、再開は呼び出しごとの値をドロップし、サブエージェントは定義の model フィールドまたはメイン会話のモデルに戻りました。
v2.1.198 以降、サブエージェントはメイン会話の拡張思考設定も継承します。セッションで思考がオンの場合、サブエージェントではオンになり、オフの場合、オフのままです。サブエージェントごとの思考設定はありません。v2.1.198 より前では、サブエージェントはメイン会話の設定に関係なく、拡張思考が無効で実行されていました。
すべてのサブエージェントを 1 つのモデルで実行する
CLAUDE_CODE_SUBAGENT_MODEL はデフォルトであるため、サブエージェントの定義または Claude が渡すモデルは引き続き優先されます。すべてのサブエージェント、チームメイト、およびワークフローエージェントに 1 つのモデルを適用するには、CLAUDE_CODE_SUBAGENT_MODEL_FORCE を 1 に設定します。Claude Code v2.1.257 以降が必要です。
- 両方の変数を設定した場合、サブエージェントは
CLAUDE_CODE_SUBAGENT_MODELのモデルで実行されます。 CLAUDE_CODE_SUBAGENT_MODEL_FORCEのみを設定した場合、サブエージェントはメイン会話のモデルで実行されます。
env ブロックで両方の変数を設定します。
/tasksを実行します。サブエージェントの行は、実行されるモデルを示します。
CLAUDE_CODE_SUBAGENT_MODEL_FORCE がオンの場合、Claude Code は組み込みの Explore および Plan サブエージェントを含むすべてのサブエージェント定義の model フィールドを無視し、Claude はサブエージェント開始時にモデルを渡すことができません。2 種類のサブエージェントはメイン会話のモデルで引き続き実行されます。
- フォーク
model: inheritを持つサブエージェントで実行されるスキル
CLAUDE_CODE_SUBAGENT_MODEL_FORCE のみを設定した場合、組み込みの Explore サブエージェントはモデルキャップを保持します。
サブエージェント機能を制御する
ツールアクセス、権限モード、および条件付きルールを通じて、サブエージェントが何をできるかを制御できます。利用可能なツール
サブエージェントは、メイン会話で利用可能な組み込みツールと MCP ツールを継承しますが、2 つのフィルタで絞られます。最初のフィルタはすべてのサブエージェントから短いツールリストを削除し、2 番目のフィルタはバックグラウンドで実行されるサブエージェント(デフォルト)の組み込みツールセットを削減します。macOS、Linux、および WSL では、メイン会話にない場合、サブエージェントは Glob および Grep ツールを受け取ることもできます。Glob ツール動作で説明されています。フォークは両方のフィルタをスキップし、メイン会話の正確なツールプールを受け取ります。最初のフィルタは、tools フィールドにリストされている場合でも、これらのツールを削除します。
Agent。サブエージェントが深さ制限にある場合。フォークではツールはリストされたままですが、代わりにエラーを返しますAskUserQuestionEndConversation。メイン会話のみを終了できます。EndConversation ツール動作を参照してくださいEnterPlanModeExitPlanMode。サブエージェントのpermissionModeがplanでない限りScheduleWakeupWaitForMcpServersWorkflow
Agent と ExitPlanMode を除き、これらはサブエージェントが実行される場所に関係なく最初のフィルタの条件に従います。バックグラウンドサブエージェントはすべての MCP ツールを保持しますが、これらの組み込みツールのみです。Read、Grep、Glob、LSP、Bash、PowerShell、Edit、Write、NotebookEdit、WebFetch、WebSearch、TodoWrite、Skill、ToolSearch、EnterWorktree、ExitWorktree、Monitor、TaskStop、SendMessage、および Artifact。それを報告するサブエージェント用の SubagentHandback。Claude Code はバックグラウンドサブエージェントから他のすべての組み込みツールを削除します。継承またはリストされているかどうかに関わらず、tools フィールドで。同じ定義はフォアグラウンドとバックグラウンドで異なるツールに解決できます。削除は、tools リストが何も解決しない場合を除き、エラーを報告しません。
v2.1.280 より前では、バックグラウンドサブエージェントは LSP を使用できませんでした。
ListAgentsは、他の組み込みツールと同様にこれらのフィルタに従います。フォアグラウンドサブエージェントは、クロスセッションメッセージングが有効なセッションで継承し、バックグラウンドサブエージェントは保持しません。
エージェントチームのチームメイトは、さらにタスクツールと cron ツールを保持します。TaskCreate、TaskGet、TaskList、TaskUpdate、CronCreate、CronDelete、および CronList。
Task ツールのないセッションでは、Claude Code はサブエージェントにもタスクツールを提供しません。サブエージェントが異なるモデルを実行する場合でも。インプロセスチームメイトはセッションと同じ方法に従いますが、チームメイトが独自の分割ペインで実行される場合、別の Claude Code プロセスとして実行されるため、独自のモデルが決定します。
ツールを制限するには、tools フィールドを許可リストとして、または disallowedTools フィールドを拒否リストとして使用します。この例は tools を使用して、Read、Grep、Glob、および Bash のみを許可します。サブエージェントはファイルを編集、書き込み、または MCP ツールを使用することはできません。
disallowedTools を使用して、Write と Edit を除く利用可能なツールを継承します。サブエージェントは Bash、MCP ツール、およびプールの残りを保持します。
disallowedTools が最初に適用され、次に tools が残りのプールに対して解決されます。両方にリストされているツールは削除されます。
tools リスト内の何もツールに解決されない場合(例えば、すべてのエントリが誤字であるか、サブエージェントで利用できないツールに名前を付けている場合)、Claude Code は通常、サブエージェントの起動を拒否し、Agent ツールは解決されないエントリに名前を付けるエラーを返します。Agent would be spawned with zero toolsを参照してください。メッセージと各エントリを修正する方法。v2.1.208 より前では、そのサブエージェントはツールなしで起動し、空または混乱した結果を返す可能性があります。
両方のフィールドは、正確なツール名に加えて MCP サーバーレベルのパターンを受け入れます。mcp__<server> または mcp__<server>__* は、名前付きサーバーからすべてのツールを付与または削除します。disallowedTools では、mcp__* はすべての MCP ツールをすべてのサーバーから削除します。この例は、github MCP サーバーからすべてのツールを削除しながら、他のサーバーのツールとプール内の組み込みツールを保持します。
disallowedTools エントリに Bash(git push *) などの指定子がある場合、マッチングコマンドのみではなく、ツール全体をサブエージェントから削除します。Bash を保持し、特定のコマンドをブロックするには、設定に Bash 拒否ルール(Bash(git push *) など)を permissions.deny に追加します。ルールはメイン会話とサブエージェントに適用されます。
スポーンできるサブエージェントを制限する
エージェントがclaude --agent でメインスレッドとして実行される場合、Agent ツールを使用してサブエージェントをスポーンできます。スポーンできるサブエージェントタイプを制限するには、tools フィールドで Agent(agent_type) 構文を使用します。
バージョン 2.1.63 では、Task ツールが Agent に名前変更されました。設定とエージェント定義の既存の
Task(...) 参照は引き続きエイリアスとして機能します。worker と researcher サブエージェントのみをスポーンできます。エージェントが他のタイプをスポーンしようとすると、リクエストは失敗し、エージェントはプロンプトで許可されたタイプのみを見ます。特定のエージェントをブロックしながら他のすべてを許可するには、代わりに permissions.denyを使用します。
制限なしでサブエージェントをスポーンできるようにするには、括弧なしで Agent を使用します。
tools リストから Agent を完全に省略した場合、エージェントは Agent ツールでサブエージェントをスポーンできません。
Agent(agent_type) 許可リスト構文は、claude --agent でメインスレッドとして実行されるエージェントにのみ適用されます。サブエージェント定義では、tools に Agent をリストするとそのサブエージェントが深さ制限を許可する限り独自のサブエージェントをスポーンできますが、括弧内のタイプリストは無視されます。
MCP サーバーをサブエージェントにスコープする
mcpServers フィールドを使用して、メイン会話で利用できないMCPサーバーへのアクセスをサブエージェントに与えます。ここで定義されたインラインサーバーは、サブエージェント開始時に接続され、エージェントファイルのフォルダの信頼ルールの対象となり、終了時に切断されます。文字列参照は親セッションの接続を共有します。
mcpServers フィールドは、エージェントファイルが実行できる両方のコンテキストに適用されます。- Agent ツールまたは @-mention を通じてスポーンされたサブエージェント
--agentまたはagent設定で起動されたメインセッション
.mcp.jsonおよび設定ファイルのサーバーと一緒に起動時に接続され、エージェントファイルのフォルダの信頼ルールの下にあります。/mcp では、以前に使用したリモート(HTTP または SSE)サーバーは cached ステータスを代わりに表示できます。Claude Code は Claude が最初にそのツールの 1 つを呼び出すときに接続します。.mcp.json サーバーエントリと同じスキーマを使用し、サーバー名でキー付けされ、stdio、http、sse、および ws タイプをサポートします。
MCP サーバーをメイン会話から完全に除外し、そのツール説明がコンテキストを消費するのを避けるには、.mcp.json ではなくここでインラインで定義します。サブエージェントはツールを取得します。親会話は取得しません。
Claude Code は、プロジェクトの .claude/agents/ ディレクトリ、または --add-dir ディレクトリの .claude/agents/ にあるエージェントファイルからインラインサーバーを読み込みます。エージェントファイルが来たフォルダを信頼した後のみです。v2.1.238 より前では、Claude Code はこれらのサーバーを信頼チェックなしで読み込みました。
- カウントされない信頼。親フォルダの信頼、および
-pまたは SDK セッションが設定ファイルのフックに対して取得する自動信頼 - それまで。Claude Code はそのエージェントファイル内のすべてのインラインサーバーをスキップし、
~/.claude.jsonの正確なprojects["<path>"].hasTrustDialogAcceptedキーをデバッグログに書き込みます --add-dirディレクトリ。信頼されたワークスペースのリポジトリの外側のディレクトリは、その.claude/agents/ファイルがワークスペースの信頼を継承しないため、独自の信頼エントリが必要です
- 既に設定されているサーバーを参照する名前
~/.claude/agents/のエージェントファイル、--agentsまたは SDKagentsオプションで渡すもの、または管理設定が提供するもの内のインラインサーバー
--strict-mcp-config は --agents または SDK agents オプション経由でインラインで渡すサーバーをフィルタリングしません。これらは明示的な呼び出し元入力であるため。
権限モード
permissionMode を設定して、サブエージェントが実行される権限モードを選択します。モードの設定値を使用するため、Manual モードは default です。設定を解除した場合、サブエージェントはメイン会話のモードを継承します。これは Pro、Max、および Team プランで自動モードとして開始されます。設定または組織が変更しない限り。
メイン会話の権限モードは、Claude Code が設定した値を使用するかどうかを決定します。
- メイン会話が
bypassPermissions、acceptEdits、または自動モードにある場合、サブエージェントはそのモードで実行され、Claude Code は設定したpermissionModeを無視します。自動モードでは、分類器はメイン会話のブロックおよび許可ルールでサブエージェントのツール呼び出しを評価します。サブエージェントが終了すると、分類器はその作業と最終レポートもレビューしてから、レポートが配信されます。自動モードがサブエージェントを処理する方法を参照してください。 - メイン会話が
default、dontAsk、またはplanモードにある場合、サブエージェントは設定した権限モードで実行されます。ただしbypassPermissionsを除きます。bypassPermissionsを宣言するサブエージェントはメイン会話のモードを保持します。bypassPermissions例外には Claude Code v2.1.267 以降が必要です。
permissionMode はこれらの値を受け入れ、default のエイリアスとして manual を受け入れます。
スキルをサブエージェントにプリロードする
skills フィールドを使用して、スキルコンテンツをサブエージェントのコンテキストに起動時に注入します。これにより、実行中にスキルを発見して読み込む必要なく、サブエージェントにドメイン知識を提供します。
toolsリストから Skill を省略するか、disallowedTools に追加します。
disable-model-invocation: trueを設定するスキルはプリロードできません。プリロードは Claude が呼び出すことができるスキルの同じセットから描画するため。これには、バンドルされた /verify スキルが含まれます。実行できるのはあなただけなので、プリロードすることもできません。
リストされたスキルが見つからないか無効な場合(例えば、組織のポリシーによって)、Claude Code はスキップし、デバッグログに警告をログします。
これはスキルをサブエージェントで実行するの逆です。サブエージェント内の
skills を使用すると、サブエージェントはシステムプロンプトを制御し、スキルコンテンツを読み込みます。スキル内の context: fork を使用すると、スキルコンテンツが指定したエージェントに注入されます。どちらの場合も、サブエージェントは会話履歴なしで開始されます。永続メモリを有効にする
memory フィールドはサブエージェントに、会話全体で存続する永続ディレクトリを提供します。サブエージェントはこのディレクトリを使用して、コードベースパターン、デバッグインサイト、アーキテクチャ決定などの知識を時間をかけて構築します。
サブエージェントメモリは自動メモリの一部です。自動メモリをオフにした場合、
autoMemoryEnabled 設定または CLAUDE_CODE_DISABLE_AUTO_MEMORY を使用すると、memory フィールドは効果がなく、サブエージェントはメモリ指示またはメモリツールアクセスなしで起動されます。以下で説明します。
メモリが有効な場合。
- サブエージェントのシステムプロンプトには、メモリディレクトリへの読み取りと書き込みの指示が含まれます。
- サブエージェントのシステムプロンプトには、メモリディレクトリの
MEMORY.mdの最初の 200 行または 25KB(どちらか先)も含まれます。その制限を超える場合はMEMORY.mdをキュレートする指示付き。 - Read、Write、および Edit ツールは自動的に有効になり、サブエージェントはメモリファイルを管理できます。
-
projectは推奨されるデフォルトスコープです。サブエージェント知識をバージョン管理経由で共有可能にします。 - サブエージェントに作業開始前にメモリを確認するよう依頼します。「このプルリクエストをレビューし、以前に見たパターンについてメモリを確認してください。」
- タスク完了後にメモリを更新するようサブエージェントに依頼します。「完了したので、学習したことをメモリに保存してください。」時間をかけて、これはサブエージェントをより効果的にする知識ベースを構築します。
-
メモリ指示をサブエージェントのマークダウンファイルに直接含めて、積極的にメモリを維持します。
フックを使用した条件付きルール
ツール使用をより動的に制御するには、PreToolUse フックを使用して、実行前に操作を検証します。これは、ツールの一部の操作を許可しながら他をブロックする必要がある場合に便利です。
この例は、読み取り専用データベースクエリのみを許可するサブエージェントを作成します。PreToolUse フックは、各 Bash コマンド実行前に command で指定されたスクリプトを実行します。
UPDATE ステートメントを実行するよう依頼します。スクリプトは終了コード 2 で終了し、Claude Code はコマンドをブロックし、サブエージェントは Blocked: Only SELECT queries are allowed メッセージを見ます。
完全な入力スキーマについてはフック入力を、終了コードが動作に影響する方法については終了コードを参照してください。Windows では、PowerShell でフックスクリプトを作成し、PowerShell でフックを実行に示すように、フックエントリに shell: powershell を追加します。
特定のサブエージェントを無効にする
設定のdeny 配列にサブエージェントを追加して、Claude が特定のサブエージェントを使用するのを防ぐことができます。Agent(subagent-name) 形式を使用します。ここで subagent-name はサブエージェントの name フィールドと一致します。
--disallowedTools CLI フラグを使用することもできます。
サブエージェント用のフックを定義する
サブエージェントはサブエージェントのライフサイクル中に実行されるフックを定義できます。フックを設定する 2 つの方法があります。- サブエージェントの frontmatter で。そのサブエージェントがアクティブな間のみ実行されるフックを定義
settings.jsonで。セッション全体のフック。サブエージェント内でも発火します。PreToolUseおよびPostToolUseなどのツールイベントはメイン会話と同じ方法でサブエージェントのツール呼び出しに対して発火し、SubagentStartおよびSubagentStopはサブエージェント開始時および終了時に発火します
settings.json の PreToolUse フックはサブエージェントが使用するすべてのツールの前にも実行されます。
サブエージェント frontmatter のフック
サブエージェントのマークダウンファイルでフックを直接定義します。これらのフックはその特定のサブエージェントがアクティブな間のみ実行され、終了時にクリーンアップされます。Frontmatter フックは、Agent ツールまたは @-mention を通じてサブエージェントとしてスポーンされた場合、および
--agentまたは agent 設定経由でメインセッションとして実行される場合に発火します。メインセッションの場合、settings.jsonで定義されたフックと一緒に実行されます。~/.claude/agents/ のユーザーレベルサブエージェントからのフックと --agents で渡す定義は、このステップなしで実行されます。--add-dir で信頼されたワークスペースのリポジトリの外側からフォルダを追加した場合、そのフォルダを個別に信頼します。その .claude/agents/ フックはワークスペースの付与を継承しません。
フォルダを信頼するまで、サブエージェントは引き続き実行されますが、Claude Code は frontmatter フックをスキップし、フォルダを信頼する方法を説明するエラーをデバッグログにログします。これは設定ファイルのフックのルールより厳しいです。親フォルダの信頼は十分ではなく、-p セッションは信頼されたとしてカウントされません。フォルダを信頼する前に実行されるものは 2 つを比較します。v2.1.218 より前では、frontmatter フックは信頼していないフォルダから実行でき、非対話型セッションを含めて実行できました。
すべてのフックイベントがサポートされています。サブエージェントの最も一般的なイベントは。
この例は
PreToolUse フックで Bash コマンドを検証し、PostToolUse でファイル編集後にリンターを実行します。
Stop フックは自動的に SubagentStop イベントに変換されます。
サブエージェントイベント用のプロジェクトレベルフック
メインセッションでサブエージェントライフサイクルイベントに応答するフックをsettings.json で設定します。
両方のイベントは、名前でエージェントタイプをターゲットするマッチャーをサポートします。マッチャー値は、プロジェクトレベルおよびユーザーレベルサブエージェントの frontmatter
name、またはプラグインサブエージェントの my-plugin:db-agent などのプラグインスコープ識別子です。スコープ付き名にはコロンが含まれるため、アンカーなし正規表現として評価されます。^my-plugin:db-agent$ のように ^ と $ でアンカーして、そのエージェントのみをマッチします。
この例は、db-agent サブエージェント開始時のみセットアップスクリプトを実行し、サブエージェント停止時にクリーンアップスクリプトを実行します。
db-agent)は Claude Code v2.1.195 以降で正確にマッチします。以前のバージョンではアンカーなし正規表現として評価され、prod-db-agent などそれを含むエージェントタイプについても発火します。これらのバージョンでは ^db-agent$ としてアンカーします。
完全なフック設定形式についてはフックを参照してください。
サブエージェントを使用する
自動委譲を理解する
Claude は、リクエスト内のタスク説明、サブエージェント設定のdescription フィールド、および現在のコンテキストに基づいて、タスクを自動的に委譲します。プロアクティブな委譲を促進するには、サブエージェントの説明フィールドに「use proactively」などのフレーズを含めてください。
説明は簡潔に保ってください。サブエージェントの説明の合計が 15,000 トークンの制限 を超えると、Claude Code は起動時に警告を表示しますが、すべてのサブエージェントは読み込まれます。
サブエージェントが プラグイン に含まれている場合、現実的なプロンプトで Claude がそれに確実に委譲するかどうかを測定できます。1 つずつチェックする代わりに、claude plugin eval は各プロンプトをプラグインの有無で実行し、結果をスコアリングします。
サブエージェントを明示的に呼び出す
自動委譲では不十分な場合、サブエージェントを自分で要求できます。3 つのパターンは、1 回限りの提案からセッション全体のデフォルトまでエスカレートします。- 自然言語: プロンプトでサブエージェントに名前を付けます。Claude が委譲するかどうかを決定します
- @-mention: サブエージェントが 1 つのタスクで実行されることを保証します
- セッション全体: セッション全体が
--agentフラグまたはagent設定を介して、そのサブエージェントのシステムプロンプト、ツール制限、およびモデルを使用します
@ を入力し、ファイルを @-mention するのと同じ方法で、タイプアヘッドからサブエージェントを選択します。これにより、Claude に選択を任せるのではなく、特定のサブエージェントが実行されることが保証されます。
my-plugin:code-reviewer や my-plugin:review:security などのスコープ付き名でタイプアヘッドに表示されます。プラグインが エージェントをサブフォルダに整理 する場合です。セッションで現在実行されている名前付きバックグラウンドサブエージェントもタイプアヘッドに表示され、名前の横にステータスが表示されます。
ピッカーを使用せずに手動でメンションを入力することもできます。ローカルサブエージェントの場合は @agent-<name>、プラグインサブエージェントの場合は @agent- の後にスコープ付き名を入力します。例えば @agent-my-plugin:code-reviewer です。このフォームを入力している間、タイプアヘッドはエージェントではなくファイルマッチを表示します。エージェントメンションは送信時に解決されます。
セッション全体をサブエージェントとして実行します。 --agent <name> を渡して、メインスレッド自体がそのサブエージェントのシステムプロンプト、ツール制限、およびモデルを引き継ぐセッションを開始します。
--system-prompt と同じ方法で、デフォルトの Claude Code システムプロンプトを完全に置き換えます。CLAUDE.md ファイルとプロジェクトメモリは、エージェントの定義が omitClaudeMd を設定している場合でも、通常のメッセージフローを通じて読み込まれます。
エージェント名は起動ヘッダーに @<name> として表示されるため、アクティブであることを確認できます。
これは組み込みおよびカスタムサブエージェントで機能し、セッションを再開するときに選択が保持されます。Claude Code はエージェントのツール制限とモデルを会話とともに復元します。セッションを再開するときにエージェントが存在しなくなった場合、セッションはデフォルトツールで続行され、エージェントに名前を付ける警告 が表示されます。どちらの場合のシステムプロンプトについては、再開された会話でのシステムプロンプトフラグ を参照してください。
プラグインが提供するサブエージェントの場合、エージェント名のみを渡すことができ、Claude Code がそれを見つけます。
agents/ ディレクトリのサブフォルダに配置する場合、スコープ付き名にサブフォルダを含めます。例えば claude --agent my-plugin:review:security です。
プロジェクト内のすべてのセッションのデフォルトにするには、.claude/settings.json で agent を設定します。
サブエージェントをフォアグラウンドまたはバックグラウンドで実行する
サブエージェントはフォアグラウンドまたはバックグラウンドで実行できます。- フォアグラウンドサブエージェント は、完了するまでメイン会話をブロックします。権限プロンプトは発生時にあなたに渡されます。
- バックグラウンドサブエージェント は、作業を続行しながら同時に実行されます。バックグラウンドサブエージェントが権限が必要なツール呼び出しに達すると、Claude Code はメインセッションでプロンプトを表示し、要求しているサブエージェントに名前を付けます。承認してサブエージェントを続行させるか、Esc を押してそのツール呼び出しのみを拒否し、サブエージェントを停止しません。
- インプロセス エージェントチーム チームメイトがサブエージェントを生成した場合、Claude Code はそれをフォアグラウンドで実行します。Claude Code は、定義が
background: trueを設定するチームメイトのサブエージェントを生成することを拒否し、エラーを返します。フォークモード がオフで、バックグラウンドタスクをオフ にしていない場合、チームメイトがrun_in_background: trueを設定すると、Claude Code もエラーで拒否します。 CLAUDE_CODE_DISABLE_BACKGROUND_TASKSを1に設定した場合、Claude Code はすべての種類のセッションでサブエージェントをフォアグラウンドで実行し、フォークモードがオンかどうかに関わらず実行します。- フォークモード がオンの場合(インタラクティブセッションではデフォルト)、Claude Code はサブエージェントをバックグラウンドで実行し、フォークおよび非フォークサブエージェントの両方を実行し、Claude はフォアグラウンドを要求できません。
- フォークモードがオフの場合、Claude はデフォルトでサブエージェントをバックグラウンドで実行し、結果が必要な場合はフォアグラウンドで実行します。フォークモードは 非インタラクティブモード で
-pを使用する場合と、Agent SDK でオンにしない限りオフです。特定のサブエージェントを Claude が結果を必要とする場合でもバックグラウンドに保つには、そのフロントマターbackgroundフィールドをtrueに設定します。
context: fork を持つスキルの場合、フォークモードがオンかどうかに関わらず、Claude Code は サブエージェントでスキルを実行 のルールに従います。
バックグラウンドサブエージェントは、会話フォークと 再開 されたフォアグラウンドサブエージェントを除き、フォアグラウンドサブエージェントより小さい 組み込みツールセット で実行されます。
バックグラウンドサブエージェントはメインセッションのすべての権限プロンプトを表示します。セッションの残り期間の付与など、1 つのツール呼び出しを超えて続く選択でこれらのプロンプトの 1 つに答える場合、Claude Code はメイン会話を含むセッション全体にあなたの答えを適用します。
バックグラウンドサブエージェントは、バックグラウンド Bash または PowerShell コマンド を ターンの終了後も実行し続ける ことができます。そのコマンドが終了すると、Claude Code はサブエージェントに通知を送信します。
バックグラウンドサブエージェントの結果は、後のターンで完了通知として Claude に到達します。Claude は、その通知を受け取る前にサブエージェントの結果を報告し、最初に進捗について尋ねた場合、サブエージェントがまだ実行中であることを報告します。v2.1.211 より前では、Claude は完了していないバックグラウンドサブエージェントの結果を報告することがありました。
これを自分で操作することもできます。
- フォークモードがオフの場合、Claude にタスクをバックグラウンドまたはフォアグラウンドで実行するよう依頼します
- Ctrl+B を押して、実行中のタスクをバックグラウンドにします
- サブエージェントが正常に完了すると、Claude Code はその行をすぐに削除し、スクリーンリーダーモード を除き、フッターに「
/tasksでサブエージェントを表示」を 30 秒間表示します。その 30 秒間に/tasksを実行し、サブエージェントでEnterを押してそのトランスクリプトを開きます。v2.1.232 より前では、Claude Code はサブエージェントが完了した後、失敗したものと同じ 30 秒間行を保持し、フッターヒントを表示しませんでした。 - サブエージェントが失敗するか、停止すると、Claude Code は 30 秒間その行を保持します。行をすぐにクリアするには、それを選択して
xを押します。
/tasks にリストされたままで、完了とマークされ、実行中の作業の下にソートされ、フッターヒントと同じ 30 秒間です。その詳細ビューはサブエージェントが完了したときに開いたままです。失敗するか停止したサブエージェントはリストを離れます。v2.1.208 より前では、完了したサブエージェントは完了した瞬間にリストを離れ、その詳細ビューが閉じられました。
サブエージェント名
Claude は Agent ツール呼び出しでname パラメータを渡すことでサブエージェントに名前を付けることができ、最初にあなたに尋ねることなく自分で行うことができます。名前はサブエージェントをアドレス可能にします。Claude は メッセージを送信するか、完了後に名前で再開 できます。
エージェントチーム が有効なインタラクティブセッションでは、メイン会話から Claude が生成する name を持つサブエージェントは、呼び出しが フォーク であるか、呼び出しで isolation を渡さない限り、チームメイトとして起動します。サブエージェントのフロントマターの isolation 値はそれを防ぎません。チームメイトはメインセッションの作業ディレクトリで実行されます。Claude がエージェントチームを開始する方法 を参照してください。
サブエージェント内の API エラー
何かが サブエージェントの応答をストリーム中に切断 し、部分的な応答にテキストが含まれているがツール呼び出しがない場合、Claude Code はサブエージェントに実行を続行するよう促し、実行を終了しません。これはインタラクティブセッションでも発生します。実行は、これらの継続が使い果たされた場合にのみエラーで終了します。 v2.1.199 以降、実行が API エラー(使用制限や繰り返されるサーバーエラーなど)で終了するサブエージェントは、エラーテキストをサブエージェントの検出結果のように返すのではなく、その失敗を Claude に報告します。Claude が受け取るものは、サブエージェントが実行された場所によって異なります。- フォアグラウンド: レート制限、オーバーロード、またはサーバーエラーがテキスト出力を既に生成したサブエージェントを切断した場合、Agent ツールはその部分出力を、サブエージェントが切断され、タスクを完了しなかったというメモとともに返します。何も生成しなかった、またはその唯一の出力がツール呼び出しだったサブエージェントは、
Agent terminated early due to an API errorで失敗し、その後にエラーの詳細が続きます。v2.1.199 では、ツール呼び出しのみの形状を切断したレート制限、オーバーロード、またはサーバーエラーは、切断メモのみを含む空の部分結果を返しました。 - バックグラウンド: サブエージェントは失敗とマークされ、Claude が受け取るメッセージは終了時に API エラーに名前を付け、サブエージェントの最後の出力を含むため、部分的な作業は失われません。
サブエージェント出力スキャン
Claude Code は、Claude がそれを読む前に、各サブエージェントの最終レポートをスキャンします。サブエージェントはファイル、ウェブページ、またはコマンド出力を読んだ可能性があり、これらのソースからのテキストはメイン会話を対象とした指示を含むことができます。スキャンは何も削除または言い換えません。レポートで気付く可能性のある 2 種類の変更を行います。- バックスラッシュ挿入: スキャンは、Claude Code 独自の出力を模倣するテキスト(
<system-reminder>タグやHuman:またはAssistant:で始まる行など)にバックスラッシュを挿入し、模倣が会話の一部として誤解されるのではなく、通常のテキストとして読まれるようにします。 - マーカー行: スキャンは、
<system-reminder>のようなタグを模倣するか、bypassPermissionsや--dangerously-skip-permissionsなどの権限設定に言及するレポートの場合、[harness: subagent output matched instruction-shaped pattern(s):で始まる行を先頭に追加します。権限設定の言及はマーカー行を取得しますが、テキスト自体は書かれたままです。
サブエージェント出力スキャンには Claude Code v2.1.210 以降が必要です。
一般的なパターン
大量の操作を分離する
サブエージェントの最も効果的な用途の 1 つは、大量の出力を生成する操作を分離することです。テストの実行、ドキュメントの取得、またはログファイルの処理は、かなりのコンテキストを消費できます。これらをサブエージェントに委譲することで、詳細な出力はサブエージェントのコンテキストに留まり、関連する概要のみがメイン会話に返されます。並列研究を実行する
独立した調査の場合、複数のサブエージェントを生成して同時に作業させます。サブエージェントをチェーンする
マルチステップワークフローの場合、Claude にサブエージェントを順序で使用するよう依頼します。各サブエージェントはタスクを完了し、結果を Claude に返します。Claude は関連するコンテキストを次のサブエージェントに渡します。サブエージェントとメイン会話の選択
メイン会話 を使用する場合:- タスクは頻繁なやり取りまたは反復的な改善が必要です
- 計画、実装、テストなど、複数のフェーズが重要なコンテキストを共有します
- 迅速でターゲットを絞った変更を行っています
- レイテンシが重要です。フォーク ではないサブエージェントは新規に開始し、コンテキストを収集するのに時間がかかる場合があります
- タスクはメインコンテキストで必要のない詳細な出力を生成します
- 特定のツール制限または権限を適用したいです
- 作業は自己完結型で、概要を返すことができます
/btw を使用してください。フルコンテキストが表示されますが、ツールアクセスはなく、答えは履歴に追加されません。
サブエージェントが独自のサブエージェントを生成できるようにする
デフォルトでは、サブエージェントは独自のサブエージェントを生成でき、メイン会話の下に最大 3 層です。深さの制限では、Claude Code は フォーク を除くすべてのサブエージェントからAgent ツールを保留するため、制限時のサブエージェントは委譲された作業を自分で行い、1 つの概要を返します。制限時のフォークは継承されたツールリストに Agent を保持しますが、ツールはエラーを返す代わりに生成します。
ネストされたサブエージェントは、委譲されたタスクが並列サブタスクに分割される場合に適しています。例えば、検出結果ごとに検証者を派遣するレビュアーサブエージェント。インタラクティブセッションでは、中間出力はメイン会話に到達しません。トップレベルのサブエージェントの概要のみがあなたに返されます。サブエージェントがバックグラウンドサブエージェントを起動する場合、それは完了する前に結果を待ちます。非インタラクティブモード と Agent SDK では、起動するサブエージェントは待たないため、ネストされたバックグラウンドサブエージェントがランチャーの終了後に完了すると、メイン会話に報告されます。
制限を変更するには、CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH をメイン会話の下に必要なサブエージェント層の数に設定します。例えば、settings.json のこのエントリは、ネストを 2 層に制限します。
1 を設定します。
ネストされたサブエージェントはトップレベルのサブエージェントと同じ方法で設定され、同じ スコープ から解決されます。読み取り専用のままにするレビュアーなど、1 つのサブエージェントが生成されないようにするには、その tools リストから Agent を省略するか、disallowedTools に追加します。
Claude Code は、プロンプト入力の下のサブエージェントパネルにネストされたサブエージェントをツリーとして表示し、パネル内に子孫がまだいる各行を (+N) 個数でマークします。行を開いて、そのサブエージェントの兄弟と直接の子を main へのパスとともに表示します。
以前のバージョンは異なるデフォルトを使用していました。
- v2.1.172 から v2.1.216: サブエージェントはデフォルトでネストでき、最大 5 層深く、制限は変更できませんでした。
- v2.1.217 から v2.1.218: 制限はデフォルトで 1 でしたので、サブエージェントは上げない限り独自に生成できませんでした。v2.1.219 はデフォルトを 3 に上げました。
同時実行サブエージェント制限
2 つの制限がサブエージェント使用を制御し、それぞれ独自の変数があります。これは Claude が多くのサブエージェントが実行されている間に、より多くのサブエージェントを生成するのを停止し、深さ制限 はサブエージェントがどの程度深くネストするかを制限します。セッション全体で Claude が生成できるサブエージェントの総数に制限はありません。 デフォルトでは、セッションで 20 個のサブエージェントが実行されている場合、Agent ツールで別のサブエージェントを生成しようとするとConcurrent subagent limit reached で失敗し、エラーは Claude に再試行しないよう指示します。実行中の数が制限を下回ると、生成が再び成功します。制限を変更するには、CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS を任意の正の整数に設定します。ultracode がアクティブなセッションは除外されます。制限はそこで適用されません。Claude Code v2.1.217 以降が必要です。
制限は Claude が Agent ツールで生成するサブエージェントのみをブロックしますが、他の実行は同じスロットを占有します。
/subtaskで開始するインセッションフォークは、実行中にスロットを取得し、制限によってブロックされることはありません。- 再開 済みのサブエージェントは、既に完了したスロットを取得し、制限をチェックせずに新しいスロットを取得するため、再開は実行中の数を制限を超えて押すことができます。
サブエージェントコンテキストを管理する
起動時に読み込まれるもの
各サブエージェントは新しい、分離されたコンテキストウィンドウで開始されます。会話履歴、既に呼び出したスキル、または Claude が既に読んだファイルは表示されません。Claude はタスクを要約する委譲メッセージを作成し、サブエージェントはそこから作業します。例外は フォーク で、親会話を継承し、新規に開始しません。 非フォークサブエージェントの初期コンテキストには以下が含まれます。- システムプロンプト: エージェント独自のプロンプトと Claude Code が追加する環境詳細。Claude Code システムプロンプトではありません。カスタムサブエージェントは マークダウン本体 または
promptフィールドで定義します。組み込みエージェントは事前定義されたプロンプトを持ちます。 - タスクメッセージ: Claude が作業を引き継ぐときに作成する委譲プロンプト。
- CLAUDE.md ファイル: メイン会話が読み込む CLAUDE.md 階層 のすべてのレベル。
~/.claude/CLAUDE.md、プロジェクトルール、CLAUDE.local.md、管理ポリシーファイル、および AGENTS.md ファイル を含みます。組み込みの Explore および Plan エージェントはこれをスキップします。定義がomitClaudeMdを設定するサブエージェントは、管理ポリシーファイルのみを読み込むか、定義が 管理設定 から来る場合は何も読み込みません。 - Git ステータス: 親セッションの開始時に取得されたスナップショット。作業ディレクトリが Git リポジトリでない場合、または
includeGitInstructionsがfalseの場合は不在です。Explore および Plan はそれをスキップします。 - 事前読み込みスキル: エージェントの
skillsフィールド に名前が付いているスキルの完全なコンテンツ。組み込みエージェントはスキルを事前読み込みしません。 - 兄弟名簿:
mainとセッション内のすべての他の名前付きエージェントをリストするシステムリマインダー。各エージェントはSendMessageの有効なto値です。Claude Code v2.1.206 以降が必要です。名簿は、サブエージェントのツールにSendMessageが含まれ、少なくとも 1 つの他のエージェントに名前がある場合にのみ表示されます。Claude が生成時に名前を付けたか、エージェントチーム チームメイトとして実行されるかに関わらず。これはサブエージェントが開始するときに取得されたスナップショットであるため、後で名前が付けられたエージェントは表示されません。
omitClaudeMd: true を設定するか、--agents JSON を設定します。
メイン会話は、これらのサブエージェントの結果を読むときに完全な CLAUDE.md を持っているため、ほとんどのルールはサブエージェント自体に到達する必要はありません。ルールが必要な場合(「vendor/ ディレクトリを無視する」など)、委譲時に Claude に与えるプロンプトで再度述べてください。
サブエージェントが git ステータスを受け取るかどうかは変更できません。Explore および Plan のみがそれをスキップします。
いくつかのメイン会話状態は非フォークサブエージェントに到達しません。
- 出力スタイル: サブエージェントは独自のシステムプロンプトを実行するため、出力スタイル はその応答を形成しません。フォーク を除きます。
- 自動メモリ: メイン会話の 自動メモリ は読み込まれません。サブエージェントに独自の永続的なメモリを与えるには、
memoryフィールド を使用します。 - コンテキストウィンドウサイズ: サブエージェントのコンテキストウィンドウは、親のモデルではなく、独自のモデルによってサイズ設定されます。より小さいウィンドウを持つモデルに委譲すると、そのサブエージェントはより小さいウィンドウを取得します。
サブエージェントを再開する
各サブエージェント呼び出しは、以前のものを続行するのではなく、新しいインスタンスを作成します。既存のサブエージェントの作業を続行するのではなく、新規に開始するには、Claude にそれを再開するよう依頼します。 再開されたサブエージェントは、すべての前のツール呼び出し、結果、および推論を含む、完全な会話履歴を保持します。サブエージェントが 独自のバックグラウンドサブエージェント を生成した場合、その履歴には、実行中に配信された結果が含まれます。サブエージェントは新規に開始するのではなく、停止した場所から正確に再開されます。- サブエージェントが完了すると、Claude はそのエージェント ID を受け取ります。
- 組み込みの Explore および Plan エージェントは 1 回限りで、エージェント ID を返さないため、Claude はそれらを再開できません。作業を続行する必要がある場合は、
general-purposeまたはカスタムサブエージェントを使用してください。 - サブエージェントが
maxTurns制限で停止すると、Claude Code は返された出力を部分的としてマークします。エージェント ID を返すサブエージェントの場合、Claude Code は、Claude がサブエージェントにメッセージを送信して停止した場所から続行できることを結果に記載します。
SendMessage ツールを使用し、エージェントの ID または名前を to フィールドとして使用して、それを再開します。SendMessage は エージェントチーム が有効になっている必要はありません。shutdown_request や plan_approval_response などの構造化されたチームプロトコルメッセージのみが必要です。サブエージェントとチームメイトを超えて、クロスセッションメッセージングが有効なセッションでは、Claude は同じツールを使用して 他の Claude Code セッション にメッセージを送信でき、このマシンまたは それを超えて です。
サブエージェントを再開するには、Claude に前の作業を続行するよう依頼してください。
SendMessage ツールでメッセージを送信すると、サブエージェントは新しい Agent 呼び出しなしでバックグラウンドで再開されます。同じことが、Claude が TaskStop ツールで停止したサブエージェントに適用され、停止した実行が終了した後です。再開された実行は、サブエージェントが最初に実行された場所から ツールセット を保持し、元の実行が温めた プロンプトキャッシュ を読み続けることができます。
SendMessage ツールを持つサブエージェントはそのメッセージも送信できます。インタラクティブセッションでは、再開されたエージェントはメインセッションではなく、それを再開したサブエージェントに報告します。そのサブエージェントは、独自の作業を完了する前に結果を待ちます。サブエージェントが、独自のランチャーなど、報告するエージェントにメッセージを送信する場合、Claude Code はそのエージェントを結果をリダイレクトせずに再開します。
自分で停止したサブエージェント(/tasks の x または SDK stop_task リクエスト)は自動的に再開されません。Claude がメッセージを送信する場合、メッセージは拒否され、Claude はエージェントがキャンセルされたことが通知されます。
そのサブエージェントの行がサブエージェントパネルにまだある 間、そのトランスクリプトに入力して、自分で再開します。その後、Claude からのメッセージは再び自動的に再開できます。
再開は同じ ID の下でエージェントの新しい実行を開始するため、既に失敗または完了したサブエージェントはタスクリストと Agent SDK のタスクイベントで再び実行中として表示されます。v2.1.205 より前では、再開された実行が機能している間、以前の失敗または完了ステータスを表示し続けました。
v2.1.199 以降、SendMessage は名前が会話の前半で到達したのと同じエージェントを参照していることを確認します。新しいエージェントが名前を取得した場合(例えば、名前を再利用した再生成されたバックグラウンドエージェント)、Claude Code は送信を拒否し、エラーは名前が現在到達するエージェントを報告するため、Claude は再ターゲットできます。以前のエージェントにアクセスするには、まだ実行中の場合、Claude がそのエージェントを生成したときに受け取ったエージェント ID でアドレスします。チェックは現在の会話にスコープされ、/clear でリセットされます。
v2.1.198 以降、サブエージェントは、それを起動したエージェントからのメッセージを通常のタスク方向として扱い、タスク中のコース修正を含め、独自の権限設定内で機能します。2 つの制限は、メッセージを送信したエージェントに関わらず保持されます。エージェントメッセージは、保留中の権限プロンプトの承認としてカウントされず、エージェントメッセージはサブエージェントの権限設定、CLAUDE.md、または設定を変更できません。権限システムまたは独自のメッセージのみが承認を付与できます。
エージェント ID を明示的に参照したい場合は Claude に要求することもできます。または、~/.claude/projects/{project}/{sessionId}/subagents/ のトランスクリプトファイルで ID を見つけます。各トランスクリプトは agent-{agentId}.jsonl として保存されます。
サブエージェントトランスクリプトはメイン会話とは独立に永続化されます。
- メイン会話圧縮: メイン会話が圧縮されると、サブエージェントトランスクリプトは影響を受けません。別々のファイルに保存されます。
- セッション永続化: サブエージェントトランスクリプトはセッション内で永続化されます。Claude Code を再起動して同じセッションを再開することで、サブエージェントを再開 できます。
- 自動クリーンアップ: Claude Code は、
cleanupPeriodDays保持期間(デフォルトは 30 日)の後、サブエージェントトランスクリプトを削除し、保持スイープルール に従います。
自動圧縮
サブエージェントは、メイン会話と同じロジックを使用して自動圧縮をサポートします。圧縮は同じ条件下でトリガーされ、CLAUDE_AUTOCOMPACT_PCT_OVERRIDE はサブエージェントにも適用されます。環境変数がいつ有効になるかについては、環境変数 を参照してください。
圧縮イベントはサブエージェントトランスクリプトファイルに記録されます。
preTokens 値は、圧縮が発生する前に使用されたトークン数を示します。
現在の会話をフォークする
フォークされたサブエージェントは
/subtask で実行され、Claude Code v2.1.212 以降が必要です。エージェントビューがオフになっている場合、/subtask は利用できず、/fork がフォークされたサブエージェントを開始します。それ以外の場合、/fork はセッション全体を新しいバックグラウンドセッションにコピーします。fork サブエージェントタイプをリクエストすることでフォークを開始します。これを制御するのはフォークモードで、インタラクティブセッションではデフォルトでオンになっています。
/subtask の後にタスクを続けることで、フォークモードがオンかどうかに関わらず、自分でフォークを開始できます。v2.1.161 から v2.1.211 ではコマンドは /fork です。Claude Code はフォークにタスクの最初の単語から名前を付けます。次の例は、メインセッションで実装を続ける間に、会話をドラフトテストケースにフォークします:
実行中のフォークを観察して操作する
実行中のフォークはプロンプト入力の下のパネルに表示され、メインセッション用に 1 行、各フォーク用に 1 行があります。 フォークが正常に完了すると、Claude Code はその行を削除します。Claude Code は失敗したフォークまたは停止したフォークの行を 30 秒間保持します。これは他のバックグラウンドサブエージェントと同じです。v2.1.232 より前では、Claude Code は完了したフォークの行も 30 秒間保持していました。 これらのキーを使用してパネルと対話します:
フォークまたはサブエージェントのトランスクリプトが開いている場合、フォローアップメッセージとスキルはそのエージェントに送信されますが、組み込みコマンドはメイン会話で実行されたままです。v2.1.199 以降では、そのビューで
/model または /fast を入力すると、表示されているエージェントのモデルまたはファストモードではなく、メイン会話のモデルまたはファストモードを変更することを示す通知が表示されます。サイレントに実行される代わりに。
フォークと他のサブエージェントの違い
フォークはメインセッションがその時点で持っているすべてを継承します。他のサブエージェントはその定義から開始します。
フォークのシステムプロンプトとツール定義は親と同じであるため、最初のリクエストは親のプロンプトキャッシュを再利用します。これにより、同じコンテキストが必要なタスクの場合、フォークは新しいサブエージェントをスポーンするよりも安価です。
Claude が Agent ツール経由でフォークをスポーンするときに、
isolation: "worktree" を渡すことができるため、フォークのファイル編集は、チェックアウトではなく、別の git worktree に書き込まれます。フォークはさらにフォークをスポーンできません。
フォークモードをオンまたはオフにする
Claude Code はインタラクティブセッションではフォークモードをデフォルトでオンにし、非インタラクティブモード(-p 付き)および Agent SDK ではデフォルトでオフにします。インタラクティブデフォルトには Claude Code v2.1.232 以降が必要です。それより前のバージョンでは、CLAUDE_CODE_FORK_SUBAGENT を 1 に設定してフォークモードをオンにします。
フォークモードがオンであることは、Claude Code が Agent ツールを処理する方法からわかります:
- Claude は
forkサブエージェントタイプをリクエストすることでフォークをスポーンできます。Claude がタイプをリクエストしない場合、セッションがまだそのタイプを持っていれば汎用サブエージェントを取得します。Explore などの定義から生成されたサブエージェントは通常通り機能します。 - Claude Code は Claude がスポーンするサブエージェント(フォークと非フォークサブエージェント両方)をバックグラウンドで実行します。ただしフォアグラウンドに留まるケースは除きます。Claude Code は Agent ツールの
run_in_backgroundパラメータも削除するため、Claude はフォアグラウンドをリクエストできません。
CLAUDE_CODE_FORK_SUBAGENT環境変数を設定してデフォルトをオーバーライドします:
1は非インタラクティブモードおよび Agent SDK でもフォークモードをオンにします0はすべての種類のセッションでフォークモードをオフにします
Agent(fork) ルールでfork サブエージェントタイプを拒否します。Claude Code は Claude がスポーンするサブエージェントをバックグラウンドで実行し続けます。ただし同じフォアグラウンドに留まるケースは除きます。
サブエージェントの例
これらの例は、サブエージェントを構築するための効果的なパターンを示しています。出発点として使用するか、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 入力を参照してください。
システムプロンプトはサブエージェントに書き込みリクエストを拒否するよう指示するため、hook はバックストップです。サブエージェントが書き込みを試みた場合、Claude Code はコマンドをブロックし、サブエージェントは Blocked: Write operations not allowed. Use SELECT queries only. メッセージを表示します。
次のステップ
サブエージェントを理解したので、これらの関連機能を探索してください:- プラグインでサブエージェントを配布することで、チームまたはプロジェクト全体でサブエージェントを共有します
- Claude Code をプログラムで実行することで、Agent SDK を使用して CI/CD と自動化を行います
- MCP サーバーを使用することで、サブエージェントに外部ツールとデータへのアクセスを提供します