サブエージェントは単一のセッション内で動作します。多くの独立したセッションを並行して実行し、1 つの場所から監視するには、バックグラウンドエージェントを参照してください。互いに通信するセッションについては、エージェントチームを参照してください。
- コンテキストを保持する ことで、探索と実装をメインの会話から分離します
- 制約を強制する ことで、サブエージェントが使用できるツールを制限します
- 設定を再利用する ことで、ユーザーレベルのサブエージェントをプロジェクト全体で再利用します
- 動作を特化させる ことで、特定のドメイン向けの焦点を絞ったシステムプロンプトを使用します
- コストを制御する ことで、Haiku のような高速で安価なモデルにタスクをルーティングします
組み込みサブエージェント
Claude Code には、Claude が適切なときに自動的に使用する組み込みサブエージェントが含まれています。各サブエージェントは、親の会話の権限を継承し、追加のツール制限があります。 Explore と Plan は CLAUDE.md ファイルと親セッションの git ステータスをスキップして、研究を高速かつ低コストに保ちます。その他すべての組み込みおよびカスタムサブエージェントは両方をロードします。サブエージェントに到達するものの完全な内訳については、スタートアップ時にロードされるものを参照してください。- Explore
- Plan
- General-purpose
- Other
コードベースの検索と分析に最適化された高速な読み取り専用エージェント。
- モデル:Haiku(高速、低レイテンシ)
- ツール:読み取り専用ツール(Write および Edit ツールへのアクセスは拒否)
- 目的:ファイル検出、コード検索、コードベース探索
permissions.deny に追加します。Claude がサブエージェントに委譲することを防ぐには、permissions.denyで Agent ツール自体を拒否します。非インタラクティブモードおよび Agent SDKでは、CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS=1を設定して、すべての組み込みタイプを削除し、独自のものだけを提供します。
これらの組み込みサブエージェント以外に、カスタムプロンプト、ツール制限、権限モード、hooks、および skills を使用して独自のサブエージェントを作成できます。以下のセクションでは、開始方法とサブエージェントのカスタマイズ方法を示します。
クイックスタート:最初のサブエージェントを作成する
サブエージェントは YAML フロントマターを含む Markdown ファイルで定義されます。手動で作成することも、/agents コマンドを使用することもできます。
このチュートリアルでは、/agents コマンドを使用してユーザーレベルのサブエージェントを作成する手順を説明します。サブエージェントはコードをレビューし、コードベースの改善を提案します。
場所を選択する
Library タブに切り替え、Create new agent を選択し、Personal を選択します。これにより、サブエージェントが
~/.claude/agents/ に保存され、すべてのプロジェクトで利用可能になります。Claude で生成する
Generate with Claude を選択します。プロンプトが表示されたら、サブエージェントを説明します:Claude は識別子、説明、およびシステムプロンプトを生成します。
ツールを選択する
読み取り専用レビュアーの場合は、Read-only tools 以外のすべてを選択解除します。すべてのツールを選択したままにすると、サブエージェントはメイン会話で利用可能なすべてのツールを継承します。
メモリを設定する
User scope を選択して、サブエージェントに
~/.claude/agent-memory/ の永続メモリディレクトリを提供します。サブエージェントはこれを使用して、コードベースパターンや繰り返される問題など、会話全体で洞察を蓄積します。サブエージェントが学習を永続化しないようにする場合は、None を選択します。サブエージェントを設定する
/agents コマンドを使用する
/agents コマンドは、サブエージェントを管理するためのタブ付きインターフェースを開きます。Running タブはライブおよび最近終了したサブエージェントをリストし、それらを開くまたは停止できます。Library タブでは以下を実行できます:
- すべての利用可能なサブエージェント(組み込み、ユーザー、プロジェクト、プラグイン)を表示する
- ガイド付きセットアップまたは Claude 生成を使用して新しいサブエージェントを作成する
- 既存のサブエージェント設定とツールアクセスを編集する
- カスタムサブエージェントを削除する
- 重複が存在する場合、どのサブエージェントがアクティブであるかを確認する
サブエージェントのスコープを選択する
サブエージェントは YAML フロントマターを含む Markdown ファイルです。スコープに応じて異なる場所に保存します。複数のサブエージェントが同じ名前を共有する場合、より高い優先度の場所が優先されます。
プロジェクトサブエージェント (
.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 つを保持し、警告なしに他を破棄します。
プラグイン 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 ファイルを配置し、プロジェクトおよびユーザーサブエージェントと同じフロントマター形式を使用します。管理定義は、同じ名前のプロジェクトおよびユーザーサブエージェントより優先されます。
プラグインサブエージェント は、インストールしたプラグインから提供されます。これらは、カスタムサブエージェントと一緒に /agents に表示されます。プラグインサブエージェントの作成の詳細については、プラグインコンポーネントリファレンスを参照してください。
セキュリティ上の理由から、プラグインサブエージェントは
hooks、mcpServers、または permissionMode フロントマターフィールドをサポートしていません。これらのフィールドはプラグインからエージェントを読み込むときに無視されます。これらが必要な場合は、エージェントファイルを .claude/agents/ または ~/.claude/agents/ にコピーしてください。また、settings.json または settings.local.json の permissions.allowにルールを追加することもできますが、これらのルールはプラグインサブエージェントだけでなく、セッション全体に適用されます。tools と model を使用し、定義の本体がチームメイトのシステムプロンプトに追加指示として追加されます。エージェントチームを参照して、どのフロントマターフィールドがこのパスに適用されるかを確認してください。
サブエージェントファイルを書く
サブエージェントファイルは、YAML フロントマターを使用して設定を行い、その後に Markdown でシステムプロンプトを続けます:サブエージェントはセッション開始時に読み込まれます。ディスク上でサブエージェントファイルを直接追加または編集する場合は、セッションを再起動してそれを読み込みます。
/agents インターフェースを通じて作成されたサブエージェントは、再起動なしで即座に有効になります。cd コマンドは Bash または PowerShell ツール呼び出し間で永続化されず、メイン会話の作業ディレクトリに影響しません。代わりにサブエージェントにリポジトリの分離されたコピーを提供するには、isolation: worktreeを設定します。
サポートされているフロントマターフィールド
以下のフィールドは YAML フロントマターで使用できます。name と description のみが必須です。
| フィールド | 必須 | 説明 |
|---|---|---|
name | はい | 小文字とハイフンを使用した一意の識別子。Hooksはこの値を agent_type として受け取ります。ファイル名は一致する必要はありません |
description | はい | Claude がこのサブエージェントに委譲する場合 |
tools | いいえ | サブエージェントが使用できるツール。省略した場合はすべてのツールを継承します。スキルをコンテキストにプリロードするには、tools にリストするのではなく skills フィールドを使用します |
disallowedTools | いいえ | 拒否するツール。継承または指定されたリストから削除 |
model | いいえ | 使用するモデル:sonnet、opus、haiku、fable、完全なモデル ID(例:claude-opus-4-8)、または inherit。デフォルトは inherit |
permissionMode | いいえ | 権限モード:default、acceptEdits、auto、dontAsk、bypassPermissions、または plan。プラグインサブエージェントでは無視されます |
maxTurns | いいえ | サブエージェントが停止する前の最大 agentic ターン数 |
skills | いいえ | スタートアップ時にサブエージェントのコンテキストにプリロードするスキル。完全なスキルコンテンツが注入されます。説明だけでなく、スキル全体が注入されます。サブエージェントは、Skill ツールを通じて、リストされていないプロジェクト、ユーザー、およびプラグインスキルを引き続き呼び出すことができます |
mcpServers | いいえ | このサブエージェントで利用可能なMCP サーバー。各エントリは、既に設定されたサーバーを参照するサーバー名(例:"slack")または、サーバー名をキーとし、完全なMCP サーバー設定を値とするインライン定義のいずれかです。プラグインサブエージェントでは無視されます |
hooks | いいえ | このサブエージェントにスコープされたライフサイクルフック。プラグインサブエージェントでは無視されます |
memory | いいえ | 永続メモリスコープ:user、project、または local。クロスセッション学習を有効にします |
background | いいえ | true に設定して、このサブエージェントを常にバックグラウンドタスクとして実行します。デフォルト:false |
effort | いいえ | このサブエージェントがアクティブな場合の努力レベル。セッション努力レベルをオーバーライドします。デフォルト:セッションから継承。オプション:low、medium、high、xhigh、max。利用可能なレベルはモデルに依存します |
isolation | いいえ | worktree に設定して、サブエージェントを一時的なgit worktreeで実行し、リポジトリの分離されたコピーを提供します。デフォルトではデフォルトブランチから分岐し、親セッションの HEAD ではなく、サブエージェントが変更を加えない場合、worktree は自動的にクリーンアップされます |
color | いいえ | タスクリストとトランスクリプトでサブエージェントの表示色。red、blue、green、yellow、purple、orange、pink、または cyan を受け入れます |
initialPrompt | いいえ | このエージェントがメインセッションエージェント(--agent または agent 設定を通じて)として実行される場合、最初のユーザーターンとして自動送信されます。コマンドおよびスキルが処理されます。ユーザーが提供するプロンプトの前に付加されます |
モデルを選択する
model フィールドは、サブエージェントが使用するAI モデルを制御します:
- モデルエイリアス:利用可能なエイリアスの 1 つを使用します:
sonnet、opus、haiku、またはfable - 完全なモデル ID:
claude-opus-4-8またはclaude-sonnet-4-6などの完全なモデル ID を使用します。--modelフラグと同じ値を受け入れます - inherit:メイン会話と同じモデルを使用します
- 省略:指定されていない場合、デフォルトは
inherit(メイン会話と同じモデルを使用)です
model パラメーターを渡すこともできます。Claude Code はサブエージェントのモデルを次の順序で解決します:
CLAUDE_CODE_SUBAGENT_MODEL環境変数(設定されている場合)- 呼び出しごとの
modelパラメーター - サブエージェント定義の
modelフロントマター - メイン会話のモデル
availableModels許可リストに対してチェックされます。除外されたモデルに解決される値は使用されず、サブエージェントは継承されたモデルで実行されます。
サブエージェント機能を制御する
ツールアクセス、権限モード、および条件付きルールを通じて、サブエージェントが実行できることを制御できます。利用可能なツール
サブエージェントは、デフォルトでメイン会話で利用可能な内部ツールと MCP ツールを継承します。以下のツールはメイン会話の UI またはセッション状態に依存し、tools フィールドにリストされている場合でも、サブエージェントでは利用できません:
AskUserQuestionEnterPlanModeExitPlanMode(サブエージェントのpermissionModeがplanの場合を除く)ScheduleWakeupWaitForMcpServers
tools フィールド(許可リスト)または disallowedTools フィールド(拒否リスト)を使用します。この例は tools を使用して、Read、Grep、Glob、および Bash のみを排他的に許可します。サブエージェントはファイルを編集したり、ファイルを書き込んだり、MCP ツールを使用したりできません:
disallowedTools を使用して、Write および Edit を除く、メイン会話からすべてのツールを継承します。サブエージェントは Bash、MCP ツール、およびその他すべてを保持します:
disallowedTools が最初に適用され、その後 tools が残りのプールに対して解決されます。両方にリストされているツールは削除されます。
両方のフィールドは、正確なツール名に加えて 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 フィールドは、サブエージェントが権限プロンプトをどのように処理するかを制御します。サブエージェントはメイン会話から権限コンテキストを継承しますが、モードをオーバーライドできます。ただし、以下で説明するように、親モードが優先される場合があります。
| モード | 動作 |
|---|---|
default | プロンプト付きの標準権限チェック |
acceptEdits | ファイル編集と作業ディレクトリまたは additionalDirectories 内のパスの一般的なファイルシステムコマンドを自動受け入れ |
auto | 自動モード:バックグラウンド分類器がコマンドと保護されたディレクトリ書き込みを確認 |
dontAsk | 権限プロンプトを自動拒否(明示的に許可されたツールは引き続き機能) |
bypassPermissions | すべての権限チェックをスキップ |
plan | プランモード(読み取り専用探索) |
bypassPermissions または acceptEdits を使用する場合、これが優先され、オーバーライドできません。親が自動モードを使用する場合、サブエージェントは自動モードを継承し、フロントマター内の permissionMode は無視されます:分類器は、親セッションと同じブロックおよび許可ルールを使用してサブエージェントのツール呼び出しを評価します。
スキルをサブエージェントにプリロードする
skills フィールドを使用して、スキルコンテンツをスタートアップ時にサブエージェントのコンテキストに注入します。これにより、実行中にスキルを検出して読み込む必要なく、サブエージェントにドメイン知識を提供します。
toolsリストから Skill を省略するか、disallowedTools に追加します。
disable-model-invocation: trueを設定するスキルをプリロードすることはできません。プリロードは Claude が呼び出すことができるスキルの同じセットから引き出されるためです。リストされたスキルが見つからないか無効な場合、Claude Code はそれをスキップし、デバッグログに警告をログします。
これはサブエージェントでスキルを実行するの逆です。サブエージェントの
skills を使用すると、サブエージェントはシステムプロンプトを制御し、スキルコンテンツを読み込みます。スキルの context: fork を使用すると、スキルコンテンツが指定したエージェントに注入されます。どちらも同じ基盤システムを使用します。永続メモリを有効にする
memory フィールドは、会話全体で存続する永続ディレクトリをサブエージェントに提供します。サブエージェントはこのディレクトリを使用して、コードベースパターン、デバッグの洞察、アーキテクチャの決定など、時間をかけて知識を構築します。
| スコープ | 場所 | 使用する場合 |
|---|---|---|
user | ~/.claude/agent-memory/<name-of-agent>/ | サブエージェントがすべてのプロジェクト全体で学習を記憶する必要がある場合 |
project | .claude/agent-memory/<name-of-agent>/ | サブエージェントの知識がプロジェクト固有で、バージョン管理を通じて共有可能な場合 |
local | .claude/agent-memory-local/<name-of-agent>/ | サブエージェントの知識がプロジェクト固有だが、バージョン管理にチェックインすべきでない場合 |
- サブエージェントのシステムプロンプトには、メモリディレクトリの読み取りと書き込みの指示が含まれます。
- サブエージェントのシステムプロンプトには、メモリディレクトリの
MEMORY.mdの最初の 200 行または 25KB(どちらか小さい方)も含まれ、MEMORY.mdがその制限を超える場合はキュレーションの指示が含まれます。 - Read、Write、および Edit ツールが自動的に有効になり、サブエージェントがメモリファイルを管理できるようになります。
-
projectは推奨されるデフォルトスコープです。バージョン管理を通じてサブエージェント知識を共有可能にします。サブエージェントの知識がプロジェクト全体で広く適用可能な場合はuserを使用するか、知識がバージョン管理にチェックインされるべきでない場合はlocalを使用します。 - サブエージェントに作業を開始する前にメモリを確認するよう依頼します:「このプルリクエストをレビューし、以前に見たパターンについてメモリを確認してください。」
- タスク完了後、サブエージェントにメモリを更新するよう依頼します:「完了したので、学習したことをメモリに保存してください。」時間をかけて、これはサブエージェントをより効果的にする知識ベースを構築します。
-
メモリ指示をサブエージェントの 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 | ツール名 | サブエージェントがツールを使用する前 |
PostToolUse | ツール名 | サブエージェントがツールを使用した後 |
Stop | (なし) | サブエージェントが終了する場合(実行時に SubagentStop に変換) |
PreToolUse hook で Bash コマンドを検証し、PostToolUse でファイル編集後にリンターを実行します:
Stop hooks は自動的に SubagentStop イベントに変換されます。
サブエージェントイベント用のプロジェクトレベル hooks
メインセッションでサブエージェントのライフサイクルイベントに応答する hooks をsettings.json で設定します。
| イベント | マッチャー入力 | 発火する場合 |
|---|---|---|
SubagentStart | エージェント型名 | サブエージェントが実行を開始する場合 |
SubagentStop | エージェント型名 | サブエージェントが完了する場合 |
db-agent サブエージェントが開始するときのみセットアップスクリプトを実行し、サブエージェントが停止するときにクリーンアップスクリプトを実行します:
サブエージェントを使用する
自動委譲を理解する
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 を押して実行中のタスクをバックグラウンドにする
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS 環境変数を 1 に設定します。環境変数を参照してください。
CLAUDE_CODE_FORK_SUBAGENTが 1 に設定されている場合、すべてのサブエージェント生成は background フィールドに関係なくバックグラウンドで実行されます。これらのバックグラウンドサブエージェントからの権限プロンプトは、上記で説明したようにメインセッションに表示されます。
一般的なパターン
大量操作を分離する
サブエージェントの最も効果的な用途の 1 つは、大量の出力を生成する操作を分離することです。テストの実行、ドキュメントの取得、またはログファイルの処理は、かなりのコンテキストを消費できます。これらをサブエージェントに委譲することで、詳細な出力はサブエージェントのコンテキストに留まり、関連する概要のみがメイン会話に返されます。並行研究を実行する
独立した調査の場合、複数のサブエージェントを生成して同時に動作させます:サブエージェントをチェーンする
マルチステップワークフローの場合、Claude にサブエージェントを順序立てて使用するよう依頼します。各サブエージェントはタスクを完了して結果を Claude に返し、Claude は関連するコンテキストを次のサブエージェントに渡します。サブエージェントとメイン会話の選択
メイン会話 を使用する場合:- タスクが頻繁なやり取りまたは反復的な改善が必要な場合
- 複数のフェーズが重要なコンテキストを共有する場合(計画 → 実装 → テスト)
- 迅速でターゲット化された変更を行う場合
- レイテンシが重要な場合。サブエージェントは新規に開始し、コンテキストを収集するのに時間がかかる場合があります
- タスクがメインコンテキストで不要な詳細な出力を生成する場合
- 特定のツール制限または権限を強制したい場合
- 作業が自己完結型で、概要を返すことができる場合
/btwを使用します。完全なコンテキストを表示しますが、ツールアクセスはなく、答えは履歴に追加されるのではなく破棄されます。
ネストされたサブエージェントを生成する
Claude Code v2.1.172 以降、サブエージェントは独自のサブエージェントを生成できます。委譲されたタスク自体が並行サブタスクに分割される場合、これを使用します。例えば、レビュアーサブエージェントが検出結果ごとに検証者をディスパッチする場合、中間出力がメイン会話に到達することはありません。トップレベルのサブエージェントの概要のみがあなたに返されます。 ネストされたサブエージェントは、トップレベルのものと同じ方法で設定され、同じスコープから解決されます。プロンプト入力の下のサブエージェントパネルは、完全なツリーを表示します:各行は子孫の(+N) カウントを表示し、行を開くとそのサブエージェントの直接の子が main へのパスとともに表示されます。/agentsの Running タブは、実行中のサブエージェントをフラットリストとして表示します。
深さは、各レベルがフォアグラウンドまたはバックグラウンドで実行されるかどうかに関係なく、メイン会話の下のサブエージェントレベルの数として数えられます。深さ 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フィールドで名前が付けられたスキルの完全なコンテンツ。組み込みエージェントはスキルをプリロードしません。
vendor/ ディレクトリを無視する」などのルールが必須の場合は、委譲時に Claude に与えるプロンプトで再度述べてください。
サブエージェントを再開する
各サブエージェント呼び出しは、新しいコンテキストで新しいインスタンスを作成します。最初からやり直すのではなく、既存のサブエージェントの作業を続けるには、Claude に再開するよう依頼します。 再開されたサブエージェントは、すべての前のツール呼び出し、結果、および推論を含む、完全な会話履歴を保持します。サブエージェントは、新規に開始するのではなく、停止した場所から正確に再開します。 サブエージェントが完了すると、Claude はエージェント ID を受け取ります。組み込みの Explore および Plan エージェントは 1 回限りで、エージェント ID を返さないため、再開できません。作業を続ける必要がある場合は、general-purpose またはカスタムサブエージェントを使用してください。Claude は SendMessage ツールを使用してエージェントの ID を to フィールドとして使用してサブエージェントを再開します。SendMessage ツールは、エージェントチームが有効になっている場合に常に利用可能です。shutdown_request および plan_approval_response などの構造化チームプロトコルメッセージには、エージェントチームが有効になっている必要があります。
サブエージェントを再開するには、Claude に前の作業を続けるよう依頼します:
SendMessage を受け取った場合、新しい Agent 呼び出しを必要とせずにバックグラウンドで自動再開します。
エージェント ID を明示的に参照したい場合は Claude に依頼することもできます。または、~/.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 行があります。これらのキーを使用してパネルと対話します:| キー | アクション |
|---|---|
↑ / ↓ | 行間を移動 |
Enter | 選択したフォークのトランスクリプトを開き、フォローアップメッセージを送信 |
x | 完了したフォークを閉じるか、実行中のフォークを停止 |
Esc | フォーカスをプロンプト入力に戻す |
フォークと名前付きサブエージェントの違い
フォークはメインセッションがその時点で持っているすべてを継承します。名前付きサブエージェントは独自の定義から開始します。| フォーク | 名前付きサブエージェント | |
|---|---|---|
| コンテキスト | 完全な会話履歴 | 渡すプロンプトを使用した新しいコンテキスト |
| システムプロンプトとツール | メインセッションと同じ | 定義ファイルから |
| モデル | メインセッションと同じ | サブエージェントの model フィールドから |
| 権限 | プロンプトがターミナルに表示 | バックグラウンド実行時にメインセッションに表示 |
| プロンプトキャッシュ | メインセッションと共有 | 別のキャッシュ |
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 サーバーを使用することで、サブエージェントに外部ツールとデータへのアクセスを提供します