メインコンテンツへスキップ
サブエージェントは、特定の種類のタスクを処理する特化した AI アシスタントです。各サブエージェントは、カスタムシステムプロンプト、特定のツールアクセス、および独立した権限を備えた独自のコンテキストウィンドウで実行されます。Claude がサブエージェントの説明に一致するタスクに遭遇すると、そのサブエージェントに委譲し、サブエージェントは独立して動作して結果を返します。
複数のエージェントが並行して動作し、互いに通信する必要がある場合は、代わりにエージェントチームを参照してください。サブエージェントは単一のセッション内で動作します。エージェントチームは別々のセッション間で調整します。
サブエージェントは以下に役立ちます:
  • コンテキストを保持する ことで、探索と実装をメインの会話から分離します
  • 制約を強制する ことで、サブエージェントが使用できるツールを制限します
  • 設定を再利用する ことで、ユーザーレベルのサブエージェントをプロジェクト全体で再利用します
  • 動作を特化させる ことで、特定のドメイン向けの焦点を絞ったシステムプロンプトを使用します
  • コストを制御する ことで、Haiku のような高速で安価なモデルにタスクをルーティングします
Claude は各サブエージェントの説明を使用して、タスクを委譲するかどうかを決定します。サブエージェントを作成するときは、Claude がいつそれを使用するかを知るように、明確な説明を書いてください。 Claude Code には、ExplorePlangeneral-purpose などのいくつかの組み込みサブエージェントが含まれています。特定のタスクを処理するカスタムサブエージェントを作成することもできます。このページでは、組み込みサブエージェント独自のサブエージェントを作成する方法完全な設定オプションサブエージェントを使用するためのパターン、およびサブエージェントの例について説明します。

組み込みサブエージェント

Claude Code には、Claude が適切なときに自動的に使用する組み込みサブエージェントが含まれています。各サブエージェントは、親の会話の権限を継承し、追加のツール制限があります。
コードベースの検索と分析に最適化された高速な読み取り専用エージェント。
  • モデル:Haiku(高速、低レイテンシ)
  • ツール:読み取り専用ツール(Write および Edit ツールへのアクセスは拒否)
  • 目的:ファイル検出、コード検索、コードベース探索
Claude は、変更を加えずにコードベースを検索または理解する必要があるときに Explore に委譲します。これにより、探索結果がメインの会話コンテキストから除外されます。Explore を呼び出すときに、Claude は徹底度レベルを指定します:ターゲット検索の場合は quick、バランスの取れた探索の場合は medium、包括的な分析の場合は very thorough
これらの組み込みサブエージェント以外に、カスタムプロンプト、ツール制限、権限モード、hooks、および skills を使用して独自のサブエージェントを作成できます。以下のセクションでは、開始方法とサブエージェントのカスタマイズ方法を示します。

クイックスタート:最初のサブエージェントを作成する

サブエージェントは YAML フロントマターを含む Markdown ファイルで定義されます。手動で作成することも、/agents コマンドを使用することもできます。 このチュートリアルでは、/agents コマンドを使用してユーザーレベルのサブエージェントを作成する手順を説明します。サブエージェントはコードをレビューし、コードベースの改善を提案します。
1

サブエージェントインターフェースを開く

Claude Code で、以下を実行します:
/agents
2

場所を選択する

Create new agent を選択し、Personal を選択します。これにより、サブエージェントが ~/.claude/agents/ に保存され、すべてのプロジェクトで利用可能になります。
3

Claude で生成する

Generate with Claude を選択します。プロンプトが表示されたら、サブエージェントを説明します:
A code improvement agent that scans files and suggests improvements
for readability, performance, and best practices. It should explain
each issue, show the current code, and provide an improved version.
Claude は識別子、説明、およびシステムプロンプトを生成します。
4

ツールを選択する

読み取り専用レビュアーの場合は、Read-only tools 以外のすべてを選択解除します。すべてのツールを選択したままにすると、サブエージェントはメイン会話で利用可能なすべてのツールを継承します。
5

モデルを選択する

サブエージェントが使用するモデルを選択します。このサンプルエージェントの場合は、Sonnet を選択します。これはコードパターンの分析のための機能と速度のバランスを取ります。
6

色を選択する

サブエージェントの背景色を選択します。これにより、UI でどのサブエージェントが実行されているかを識別するのに役立ちます。
7

メモリを設定する

User scope を選択して、サブエージェントに ~/.claude/agent-memory/永続メモリディレクトリを提供します。サブエージェントはこれを使用して、コードベースパターンや繰り返される問題など、会話全体で洞察を蓄積します。サブエージェントが学習を永続化しないようにする場合は、None を選択します。
8

保存して試す

設定概要を確認します。s または Enter を押して保存するか、e を押してエディターで保存して編集します。サブエージェントはすぐに利用可能になります。試してみます:
Use the code-improver agent to suggest improvements in this project
Claude は新しいサブエージェントに委譲し、コードベースをスキャンして改善提案を返します。
これで、マシン上のプロジェクトでコードベースを分析し、改善を提案するために使用できるサブエージェントができました。 Markdown ファイルとして手動でサブエージェントを作成したり、CLI フラグを使用して定義したり、プラグインを通じて配布したりすることもできます。以下のセクションでは、すべての設定オプションについて説明します。

サブエージェントを設定する

/agents コマンドを使用する

/agents コマンドは、サブエージェントを管理するためのインタラクティブインターフェースを提供します。/agents を実行して以下を行います:
  • すべての利用可能なサブエージェント(組み込み、ユーザー、プロジェクト、プラグイン)を表示する
  • ガイド付きセットアップまたは Claude 生成を使用して新しいサブエージェントを作成する
  • 既存のサブエージェント設定とツールアクセスを編集する
  • カスタムサブエージェントを削除する
  • 重複が存在する場合、どのサブエージェントがアクティブであるかを確認する
これはサブエージェントを作成および管理するための推奨される方法です。手動作成または自動化の場合は、サブエージェントファイルを直接追加することもできます。 インタラクティブセッションを開始せずにコマンドラインからすべての設定されたサブエージェントをリストするには、claude agents を実行します。これにより、エージェントがソース別にグループ化され、より高い優先度の定義によってオーバーライドされているかどうかが示されます。

サブエージェントのスコープを選択する

サブエージェントは YAML フロントマターを含む Markdown ファイルです。スコープに応じて異なる場所に保存します。複数のサブエージェントが同じ名前を共有する場合、より高い優先度の場所が優先されます。
場所スコープ優先度作成方法
--agents CLI フラグ現在のセッション1(最高)Claude Code を起動するときに JSON を渡す
.claude/agents/現在のプロジェクト2インタラクティブまたは手動
~/.claude/agents/すべてのプロジェクト3インタラクティブまたは手動
プラグインの agents/ ディレクトリプラグインが有効な場所4(最低)プラグインでインストール
プロジェクトサブエージェント (.claude/agents/)は、コードベース固有のサブエージェントに最適です。バージョン管理にチェックインして、チームが協力して使用および改善できるようにします。 ユーザーサブエージェント (~/.claude/agents/)は、すべてのプロジェクトで利用可能な個人用サブエージェントです。 CLI で定義されたサブエージェント は、Claude Code を起動するときに JSON として渡されます。これらはそのセッションのみに存在し、ディスクに保存されないため、クイックテストまたは自動化スクリプトに役立ちます。単一の --agents 呼び出しで複数のサブエージェントを定義できます:
claude --agents '{
  "code-reviewer": {
    "description": "Expert code reviewer. Use proactively after code changes.",
    "prompt": "You are a senior code reviewer. Focus on code quality, security, and best practices.",
    "tools": ["Read", "Grep", "Glob", "Bash"],
    "model": "sonnet"
  },
  "debugger": {
    "description": "Debugging specialist for errors and test failures.",
    "prompt": "You are an expert debugger. Analyze errors, identify root causes, and provide fixes."
  }
}'
--agents フラグは、ファイルベースのサブエージェントと同じフロントマターフィールドを持つ JSON を受け入れます:descriptionprompttoolsdisallowedToolsmodelpermissionModemcpServershooksmaxTurnsskillsinitialPromptmemoryeffortbackground、および isolation。システムプロンプトには prompt を使用します。これはファイルベースのサブエージェントの markdown 本体と同等です。 プラグインサブエージェント は、インストールしたプラグインから提供されます。これらは、カスタムサブエージェントと一緒に /agents に表示されます。プラグインサブエージェントの作成の詳細については、プラグインコンポーネントリファレンスを参照してください。
セキュリティ上の理由から、プラグインサブエージェントは hooksmcpServers、または permissionMode フロントマターフィールドをサポートしていません。これらのフィールドはプラグインからエージェントを読み込むときに無視されます。これらが必要な場合は、エージェントファイルを .claude/agents/ または ~/.claude/agents/ にコピーしてください。また、settings.json または settings.local.jsonpermissions.allowにルールを追加することもできますが、これらのルールはプラグインサブエージェントだけでなく、セッション全体に適用されます。

サブエージェントファイルを書く

サブエージェントファイルは、YAML フロントマターを使用して設定を行い、その後に Markdown でシステムプロンプトを続けます:
サブエージェントはセッション開始時に読み込まれます。ファイルを手動で追加してサブエージェントを作成する場合は、セッションを再起動するか、/agents を使用してすぐに読み込みます。
---
name: code-reviewer
description: Reviews code for quality and best practices
tools: Read, Glob, Grep
model: sonnet
---

You are a code reviewer. When invoked, analyze the code and provide
specific, actionable feedback on quality, security, and best practices.
フロントマターはサブエージェントのメタデータと設定を定義します。本体はサブエージェントの動作をガイドするシステムプロンプトになります。サブエージェントは、このシステムプロンプト(作業ディレクトリなどの基本的な環境詳細を含む)のみを受け取り、完全な Claude Code システムプロンプトは受け取りません。

サポートされているフロントマターフィールド

以下のフィールドは YAML フロントマターで使用できます。namedescription のみが必須です。
フィールド必須説明
nameはい小文字とハイフンを使用した一意の識別子
descriptionはいClaude がこのサブエージェントに委譲する場合
toolsいいえサブエージェントが使用できるツール。省略した場合はすべてのツールを継承
disallowedToolsいいえ拒否するツール。継承または指定されたリストから削除
modelいいえ使用するモデルsonnetopushaiku、完全なモデル ID(例:claude-opus-4-6)、または inherit。デフォルトは inherit
permissionModeいいえ権限モードdefaultacceptEditsdontAskbypassPermissions、または plan
maxTurnsいいえサブエージェントが停止する前の最大エージェントターン数
skillsいいえスタートアップ時にサブエージェントのコンテキストに読み込むスキル。呼び出しのために利用可能にするだけでなく、完全なスキルコンテンツが注入されます。サブエージェントは親の会話からスキルを継承しません
mcpServersいいえこのサブエージェントで利用可能なMCP サーバー。各エントリは、既に設定されたサーバーを参照するサーバー名(例:"slack")または、サーバー名をキーとし、完全なMCP サーバー設定を値とするインライン定義のいずれかです
hooksいいえこのサブエージェントにスコープされたライフサイクルフック
memoryいいえ永続メモリスコープuserproject、または local。クロスセッション学習を有効にします
backgroundいいえtrue に設定して、このサブエージェントを常にバックグラウンドタスクとして実行します。デフォルト:false
effortいいえこのサブエージェントがアクティブな場合の努力レベル。セッション努力レベルをオーバーライドします。デフォルト:セッションから継承。オプション:lowmediumhighmax(Opus 4.6 のみ)
isolationいいえworktree に設定して、サブエージェントを一時的なgit worktreeで実行し、リポジトリの分離されたコピーを提供します。サブエージェントが変更を加えない場合、worktree は自動的にクリーンアップされます
initialPromptいいえこのエージェントがメインセッションエージェント(--agent または agent 設定を通じて)として実行される場合、最初のユーザーターンとして自動送信されます。コマンドおよびスキルが処理されます。ユーザーが提供するプロンプトの前に付加されます

モデルを選択する

model フィールドは、サブエージェントが使用するAI モデルを制御します:
  • モデルエイリアス:利用可能なエイリアスの 1 つを使用します:sonnetopus、または haiku
  • 完全なモデル IDclaude-opus-4-6 または claude-sonnet-4-6 などの完全なモデル ID を使用します。--model フラグと同じ値を受け入れます
  • inherit:メイン会話と同じモデルを使用します
  • 省略:指定されていない場合、デフォルトは inherit(メイン会話と同じモデルを使用)です
Claude がサブエージェントを呼び出すときに、その特定の呼び出しに対して model パラメーターを渡すこともできます。Claude Code はサブエージェントのモデルを次の順序で解決します:
  1. CLAUDE_CODE_SUBAGENT_MODEL環境変数(設定されている場合)
  2. 呼び出しごとの model パラメーター
  3. サブエージェント定義の model フロントマター
  4. メイン会話のモデル

サブエージェント機能を制御する

ツールアクセス、権限モード、および条件付きルールを通じて、サブエージェントが実行できることを制御できます。

利用可能なツール

サブエージェントは、Claude Code の内部ツールのいずれかを使用できます。デフォルトでは、サブエージェントは MCP ツールを含む、メイン会話からすべてのツールを継承します。 ツールを制限するには、tools フィールド(許可リスト)または disallowedTools フィールド(拒否リスト)を使用します。この例は tools を使用して、Read、Grep、Glob、および Bash のみを排他的に許可します。サブエージェントはファイルを編集したり、ファイルを書き込んだり、MCP ツールを使用したりできません:
---
name: safe-researcher
description: Research agent with restricted capabilities
tools: Read, Grep, Glob, Bash
---
この例は disallowedTools を使用して、Write および Edit を除く、メイン会話からすべてのツールを継承します。サブエージェントは Bash、MCP ツール、およびその他すべてを保持します:
---
name: no-writes
description: Inherits every tool except file writes
disallowedTools: Write, Edit
---
両方が設定されている場合、disallowedTools が最初に適用され、その後 tools が残りのプールに対して解決されます。両方にリストされているツールは削除されます。

生成できるサブエージェントを制限する

エージェントが claude --agent でメインスレッドとして実行される場合、Agent ツールを使用してサブエージェントを生成できます。生成できるサブエージェントの種類を制限するには、tools フィールドで Agent(agent_type) 構文を使用します。
バージョン 2.1.63 では、Task ツールが Agent に名前変更されました。設定とエージェント定義の既存の Task(...) 参照は引き続きエイリアスとして機能します。
---
name: coordinator
description: Coordinates work across specialized agents
tools: Agent(worker, researcher), Read, Bash
---
これは許可リストです:workerresearcher サブエージェントのみを生成できます。エージェントが他の種類を生成しようとすると、リクエストは失敗し、エージェントはプロンプトで許可されたタイプのみを表示します。特定のエージェントをブロックしながら他のすべてを許可するには、代わりにpermissions.denyを使用します。 制限なしでサブエージェントを生成できるようにするには、括弧なしで Agent を使用します:
tools: Agent, Read, Bash
Agenttools リストから完全に省略されている場合、エージェントはサブエージェントを生成できません。この制限は、claude --agent でメインスレッドとして実行されるエージェントにのみ適用されます。サブエージェントは他のサブエージェントを生成できないため、Agent(agent_type) はサブエージェント定義では効果がありません。

MCP サーバーをサブエージェントにスコープする

mcpServers フィールドを使用して、メイン会話で利用可能でないMCP サーバーへのアクセスをサブエージェントに付与します。ここで定義されたインラインサーバーは、サブエージェントの開始時に接続され、終了時に切断されます。文字列参照は親セッションの接続を共有します。 リスト内の各エントリは、インラインサーバー定義またはセッションで既に設定されている MCP サーバーを参照する文字列のいずれかです:
---
name: browser-tester
description: Tests features in a real browser using Playwright
mcpServers:
  # Inline definition: scoped to this subagent only
  - playwright:
      type: stdio
      command: npx
      args: ["-y", "@playwright/mcp@latest"]
  # Reference by name: reuses an already-configured server
  - github
---

Use the Playwright tools to navigate, screenshot, and interact with pages.
インライン定義は、.mcp.json サーバーエントリ(stdiohttpssews)と同じスキーマを使用し、サーバー名でキー付けされます。 MCP サーバーをメイン会話から完全に除外し、そのツール説明がコンテキストを消費するのを避けるには、.mcp.json ではなくここでインラインで定義します。サブエージェントはツールを取得します。親の会話は取得しません。

権限モード

permissionMode フィールドは、サブエージェントが権限プロンプトをどのように処理するかを制御します。サブエージェントはメイン会話から権限コンテキストを継承しますが、モードをオーバーライドできます。ただし、以下で説明するように、親モードが優先される場合があります。
モード動作
defaultプロンプト付きの標準権限チェック
acceptEditsファイル編集を自動受け入れ
dontAsk権限プロンプトを自動拒否(明示的に許可されたツールは引き続き機能)
bypassPermissionsすべての権限チェックをスキップ
planプランモード(読み取り専用探索)
bypassPermissions は注意して使用してください。権限プロンプトをスキップし、サブエージェントが承認なしで操作を実行できるようにします。.git.claude.vscode、および .idea ディレクトリへの書き込みは、.claude/commands.claude/agents、および .claude/skills を除き、確認を求めるプロンプトが表示されます。詳細については、権限モードを参照してください。
親が bypassPermissions を使用する場合、これが優先され、オーバーライドできません。親が自動モードを使用する場合、サブエージェントは自動モードを継承し、フロントマター内の permissionMode は無視されます:分類器は、親セッションと同じブロックおよび許可ルールを使用してサブエージェントのツール呼び出しを評価します。

スキルをサブエージェントにプリロードする

skills フィールドを使用して、スキルコンテンツをスタートアップ時にサブエージェントのコンテキストに注入します。これにより、実行中にスキルを検出して読み込む必要なく、サブエージェントにドメイン知識を提供します。
---
name: api-developer
description: Implement API endpoints following team conventions
skills:
  - api-conventions
  - error-handling-patterns
---

Implement API endpoints. Follow the conventions and patterns from the preloaded skills.
各スキルの完全なコンテンツがサブエージェントのコンテキストに注入され、呼び出しのために利用可能にするだけではありません。サブエージェントは親の会話からスキルを継承しません。明示的にリストする必要があります。
これはサブエージェントでスキルを実行するの逆です。サブエージェントの skills を使用すると、サブエージェントはシステムプロンプトを制御し、スキルコンテンツを読み込みます。スキルの context: fork を使用すると、スキルコンテンツが指定したエージェントに注入されます。どちらも同じ基盤システムを使用します。

永続メモリを有効にする

memory フィールドは、会話全体で存続する永続ディレクトリをサブエージェントに提供します。サブエージェントはこのディレクトリを使用して、コードベースパターン、デバッグの洞察、アーキテクチャの決定など、時間をかけて知識を構築します。
---
name: code-reviewer
description: Reviews code for quality and best practices
memory: user
---

You are a code reviewer. As you review code, update your agent memory with
patterns, conventions, and recurring issues you discover.
メモリがどの程度広く適用されるべきかに基づいて、スコープを選択します:
スコープ場所使用する場合
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 行も含まれ、MEMORY.md が 200 行を超える場合はキュレーションの指示が含まれます。
  • Read、Write、および Edit ツールが自動的に有効になり、サブエージェントがメモリファイルを管理できるようになります。
永続メモリのヒント
  • project は推奨されるデフォルトスコープです。バージョン管理を通じてサブエージェント知識を共有可能にします。サブエージェントの知識がプロジェクト全体で広く適用可能な場合は user を使用するか、知識がバージョン管理にチェックインされるべきでない場合は local を使用します。
  • サブエージェントに作業を開始する前にメモリを確認するよう依頼します:「このプルリクエストをレビューし、以前に見たパターンについてメモリを確認してください。」
  • タスク完了後、サブエージェントにメモリを更新するよう依頼します:「完了したので、学習したことをメモリに保存してください。」時間をかけて、これはサブエージェントをより効果的にする知識ベースを構築します。
  • メモリ指示をサブエージェントの markdown ファイルに直接含めて、独自の知識ベースを積極的に維持するようにします:
    Update your agent memory as you discover codepaths, patterns, library
    locations, and key architectural decisions. This builds up institutional
    knowledge across conversations. Write concise notes about what you found
    and where.
    

hooks を使用した条件付きルール

ツール使用をより動的に制御するには、PreToolUse hooks を使用して、操作が実行される前に検証します。これは、ツールの一部の操作を許可しながら他の操作をブロックする必要がある場合に役立ちます。 この例は、読み取り専用データベースクエリのみを許可するサブエージェントを作成します。PreToolUse hook は、各 Bash コマンドが実行される前に command で指定されたスクリプトを実行します:
---
name: db-reader
description: Execute read-only database queries
tools: Bash
hooks:
  PreToolUse:
    - matcher: "Bash"
      hooks:
        - type: command
          command: "./scripts/validate-readonly-query.sh"
---
Claude Code はhook 入力を JSON としてstdin を通じて hook コマンドに渡します。検証スクリプトはこの JSON を読み取り、Bash コマンドを抽出し、終了コード 2で書き込み操作をブロックします:
#!/bin/bash
# ./scripts/validate-readonly-query.sh

INPUT=$(cat)
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty')

# Block SQL write operations (case-insensitive)
if echo "$COMMAND" | grep -iE '\b(INSERT|UPDATE|DELETE|DROP|CREATE|ALTER|TRUNCATE)\b' > /dev/null; then
  echo "Blocked: Only SELECT queries are allowed" >&2
  exit 2
fi

exit 0
完全な入力スキーマについてはHook 入力を参照し、終了コードが動作に与える影響については終了コードを参照してください。

特定のサブエージェントを無効にする

設定deny 配列にサブエージェントを追加することで、Claude が特定のサブエージェントを使用するのを防ぐことができます。Agent(subagent-name) 形式を使用します。ここで subagent-name はサブエージェントの name フィールドと一致します。
{
  "permissions": {
    "deny": ["Agent(Explore)", "Agent(my-custom-agent)"]
  }
}
これは組み込みとカスタムの両方のサブエージェントで機能します。--disallowedTools CLI フラグを使用することもできます:
claude --disallowedTools "Agent(Explore)"
権限ルールの詳細については、権限ドキュメントを参照してください。

サブエージェント用の hooks を定義する

サブエージェントは、サブエージェントのライフサイクル中に実行されるhooksを定義できます。hooks を設定する方法は 2 つあります:
  1. サブエージェントのフロントマター内:そのサブエージェントがアクティブな間のみ実行される hooks を定義します
  2. settings.json:サブエージェントが開始または停止するときにメインセッションで実行される hooks を定義します

サブエージェントフロントマター内の hooks

サブエージェントの markdown ファイルで直接 hooks を定義します。これらの hooks は、その特定のサブエージェントがアクティブな間のみ実行され、終了時にクリーンアップされます。 すべてのhook イベントがサポートされています。サブエージェントの最も一般的なイベントは:
イベントマッチャー入力発火する場合
PreToolUseツール名サブエージェントがツールを使用する前
PostToolUseツール名サブエージェントがツールを使用した後
Stop(なし)サブエージェントが終了する場合(実行時に SubagentStop に変換)
この例は、PreToolUse hook で Bash コマンドを検証し、PostToolUse でファイル編集後にリンターを実行します:
---
name: code-reviewer
description: Review code changes with automatic linting
hooks:
  PreToolUse:
    - matcher: "Bash"
      hooks:
        - type: command
          command: "./scripts/validate-command.sh $TOOL_INPUT"
  PostToolUse:
    - matcher: "Edit|Write"
      hooks:
        - type: command
          command: "./scripts/run-linter.sh"
---
フロントマター内の Stop hooks は自動的に SubagentStop イベントに変換されます。

サブエージェントイベント用のプロジェクトレベル hooks

メインセッションでサブエージェントのライフサイクルイベントに応答する hooks を settings.json で設定します。
イベントマッチャー入力発火する場合
SubagentStartエージェント型名サブエージェントが実行を開始する場合
SubagentStopエージェント型名サブエージェントが完了する場合
両方のイベントは、名前でエージェント型をターゲットにするマッチャーをサポートします。この例は、db-agent サブエージェントが開始するときのみセットアップスクリプトを実行し、サブエージェントが停止するときにクリーンアップスクリプトを実行します:
{
  "hooks": {
    "SubagentStart": [
      {
        "matcher": "db-agent",
        "hooks": [
          { "type": "command", "command": "./scripts/setup-db-connection.sh" }
        ]
      }
    ],
    "SubagentStop": [
      {
        "hooks": [
          { "type": "command", "command": "./scripts/cleanup-db-connection.sh" }
        ]
      }
    ]
  }
}
完全な hook 設定形式については、Hooksを参照してください。

サブエージェントを使用する

自動委譲を理解する

Claude は、リクエスト内のタスク説明、サブエージェント設定の description フィールド、および現在のコンテキストに基づいて、タスクを自動的に委譲します。積極的な委譲を促進するには、サブエージェントの description フィールドに「use proactively」などのフレーズを含めます。

サブエージェントを明示的に呼び出す

自動委譲では不十分な場合、サブエージェント自体をリクエストできます。3 つのパターンは、1 回限りの提案からセッション全体のデフォルトまでエスカレートします:
  • 自然言語:プロンプトでサブエージェントに名前を付けます。Claude は委譲するかどうかを決定します
  • @-mention:サブエージェントが 1 つのタスクで実行されることを保証します
  • セッション全体:セッション全体が --agent フラグまたは agent 設定を通じてそのサブエージェントのシステムプロンプト、ツール制限、およびモデルを使用します
自然言語の場合、特別な構文はありません。サブエージェントに名前を付けると、Claude は通常委譲します:
Use the test-runner subagent to fix failing tests
Have the code-reviewer subagent look at my recent changes
サブエージェントを @-mention します。 @ を入力し、タイプアヘッドからサブエージェントを選択します。ファイルを @-mention する方法と同じです。これにより、Claude の選択ではなく、特定のサブエージェントが実行されることが保証されます:
@"code-reviewer (agent)" look at the auth changes
完全なメッセージは引き続き Claude に送信され、Claude はあなたが何を尋ねたかに基づいてサブエージェントのタスクプロンプトを作成します。@-mention は Claude が呼び出すサブエージェントを制御し、受け取るプロンプトではありません。 有効なプラグインから提供されるサブエージェントは、タイプアヘッドに <plugin-name>:<agent-name> として表示されます。ピッカーを使用せずに手動で mention を入力することもできます:ローカルサブエージェントの場合は @agent-<name>、プラグインサブエージェントの場合は @agent-<plugin-name>:<agent-name> セッション全体をサブエージェントとして実行します。 --agent <name>を渡して、メインスレッド自体がそのサブエージェントのシステムプロンプト、ツール制限、およびモデルを採用するセッションを開始します:
claude --agent code-reviewer
サブエージェントのシステムプロンプトは、--system-promptと同じように、デフォルト Claude Code システムプロンプトを完全に置き換えます。CLAUDE.md ファイルとプロジェクトメモリは引き続き通常のメッセージフローを通じて読み込まれます。エージェント名は起動ヘッダーに @<name> として表示されるため、アクティブであることを確認できます。 これは組み込みとカスタムの両方のサブエージェントで機能し、セッションを再開するときに選択が保持されます。 プラグイン提供のサブエージェントの場合、スコープ付き名を渡します:claude --agent <plugin-name>:<agent-name> プロジェクト内のすべてのセッションのデフォルトにするには、.claude/settings.jsonagent を設定します:
{
  "agent": "code-reviewer"
}
両方が存在する場合、CLI フラグが設定をオーバーライドします。

サブエージェントをフォアグラウンドまたはバックグラウンドで実行する

サブエージェントは、フォアグラウンド(ブロッキング)またはバックグラウンド(並行)で実行できます:
  • フォアグラウンドサブエージェント は、完了するまでメイン会話をブロックします。権限プロンプトと明確化の質問(AskUserQuestionなど)はあなたに渡されます。
  • バックグラウンドサブエージェント は、作業を続ける間に並行して実行されます。起動前に、Claude Code はサブエージェントが必要とするツール権限をプロンプトし、必要な承認があることを確認します。実行開始後、サブエージェントはこれらの権限を継承し、事前に承認されていないものを自動拒否します。バックグラウンドサブエージェントが明確化の質問をする必要がある場合、そのツール呼び出しは失敗しますが、サブエージェントは続行します。
バックグラウンドサブエージェントが権限不足で失敗した場合、新しいフォアグラウンドサブエージェントを開始して同じタスクで再試行し、インタラクティブプロンプトを使用できます。 Claude は、タスクに基づいてサブエージェントをフォアグラウンドまたはバックグラウンドで実行するかどうかを決定します。また、以下を実行できます:
  • Claude に「run this in the background」と依頼する
  • Ctrl+B を押して実行中のタスクをバックグラウンドにする
すべてのバックグラウンドタスク機能を無効にするには、CLAUDE_CODE_DISABLE_BACKGROUND_TASKS 環境変数を 1 に設定します。環境変数を参照してください。

一般的なパターン

大量操作を分離する

サブエージェントの最も効果的な用途の 1 つは、大量の出力を生成する操作を分離することです。テストの実行、ドキュメントの取得、またはログファイルの処理は、かなりのコンテキストを消費できます。これらをサブエージェントに委譲することで、詳細な出力はサブエージェントのコンテキストに留まり、関連する概要のみがメイン会話に返されます。
Use a subagent to run the test suite and report only the failing tests with their error messages

並行研究を実行する

独立した調査の場合、複数のサブエージェントを生成して同時に動作させます:
Research the authentication, database, and API modules in parallel using separate subagents
各サブエージェントは独立して領域を探索し、Claude は結果を統合します。これは、研究パスが互いに依存しない場合に最適に機能します。
サブエージェントが完了すると、その結果がメイン会話に返されます。詳細な結果を返す多くのサブエージェントを実行すると、かなりのコンテキストを消費できます。
持続的な並列性が必要なタスクまたはコンテキストウィンドウを超えるタスクの場合、エージェントチームは各ワーカーに独立したコンテキストを提供します。

サブエージェントをチェーンする

マルチステップワークフローの場合、Claude にサブエージェントを順序立てて使用するよう依頼します。各サブエージェントはタスクを完了して結果を Claude に返し、Claude は関連するコンテキストを次のサブエージェントに渡します。
Use the code-reviewer subagent to find performance issues, then use the optimizer subagent to fix them

サブエージェントとメイン会話の選択

メイン会話 を使用する場合:
  • タスクが頻繁なやり取りまたは反復的な改善が必要な場合
  • 複数のフェーズが重要なコンテキストを共有する場合(計画 → 実装 → テスト)
  • 迅速でターゲット化された変更を行う場合
  • レイテンシが重要な場合。サブエージェントは新規に開始し、コンテキストを収集するのに時間がかかる場合があります
サブエージェント を使用する場合:
  • タスクがメインコンテキストで不要な詳細な出力を生成する場合
  • 特定のツール制限または権限を強制したい場合
  • 作業が自己完結型で、概要を返すことができる場合
代わりにスキルを検討してください。メイン会話コンテキストで実行される再利用可能なプロンプトまたはワークフローが必要な場合、分離されたサブエージェントコンテキストではなく。 会話に既にあるものについての簡単な質問の場合は、サブエージェントの代わりに/btwを使用します。完全なコンテキストを表示しますが、ツールアクセスはなく、答えは履歴に追加されるのではなく破棄されます。
サブエージェントは他のサブエージェントを生成できません。ワークフローがネストされた委譲を必要とする場合は、スキルを使用するか、メイン会話からサブエージェントをチェーンします。

サブエージェントコンテキストを管理する

サブエージェントを再開する

各サブエージェント呼び出しは、新しいコンテキストで新しいインスタンスを作成します。最初からやり直すのではなく、既存のサブエージェントの作業を続けるには、Claude に再開するよう依頼します。 再開されたサブエージェントは、すべての前のツール呼び出し、結果、および推論を含む、完全な会話履歴を保持します。サブエージェントは、新規に開始するのではなく、停止した場所から正確に再開します。 サブエージェントが完了すると、Claude はエージェント ID を受け取ります。Claude は SendMessage ツールを使用してエージェントの ID を to フィールドとして使用してサブエージェントを再開します。サブエージェントを再開するには、Claude に前の作業を続けるよう依頼します:
Use the code-reviewer subagent to review the authentication module
[Agent completes]

Continue that code review and now analyze the authorization logic
[Claude resumes the subagent with full context from previous conversation]
停止したサブエージェントが SendMessage を受け取った場合、新しい Agent 呼び出しを必要とせずにバックグラウンドで自動再開します。 エージェント ID を明示的に参照したい場合は Claude に依頼することもできます。または、~/.claude/projects/{project}/{sessionId}/subagents/ のトランスクリプトファイルで ID を見つけることができます。各トランスクリプトは agent-{agentId}.jsonl として保存されます。 サブエージェントトランスクリプトはメイン会話から独立して永続化されます:
  • メイン会話圧縮:メイン会話が圧縮されると、サブエージェントトランスクリプトは影響を受けません。別のファイルに保存されます。
  • セッション永続性:サブエージェントトランスクリプトはセッション内で永続化されます。Claude Code を再起動した後、同じセッションを再開することでサブエージェントを再開できます。
  • 自動クリーンアップ:トランスクリプトは cleanupPeriodDays 設定に基づいてクリーンアップされます(デフォルト:30 日)。

自動圧縮

サブエージェントは、メイン会話と同じロジックを使用した自動圧縮をサポートします。デフォルトでは、自動圧縮は約 95% の容量でトリガーされます。圧縮を早期にトリガーするには、CLAUDE_AUTOCOMPACT_PCT_OVERRIDE をより低いパーセンテージ(例:50)に設定します。詳細については、環境変数を参照してください。 圧縮イベントはサブエージェントトランスクリプトファイルにログされます:
{
  "type": "system",
  "subtype": "compact_boundary",
  "compactMetadata": {
    "trigger": "auto",
    "preTokens": 167189
  }
}
preTokens 値は、圧縮が発生する前に使用されたトークン数を示します。

サブエージェントの例

これらの例は、サブエージェントを構築するための効果的なパターンを示しています。出発点として使用するか、Claude を使用してカスタマイズされたバージョンを生成します。
ベストプラクティス:
  • 焦点を絞ったサブエージェントを設計する: 各サブエージェントは 1 つの特定のタスクに優れている必要があります
  • 詳細な説明を書く: Claude は説明を使用して委譲するかどうかを決定します
  • ツールアクセスを制限する: セキュリティと焦点のために必要な権限のみを付与します
  • バージョン管理にチェックインする: プロジェクトサブエージェントをチームと共有します

コードレビュアー

コードを変更せずにレビューする読み取り専用サブエージェント。この例は、制限されたツールアクセス(Edit または Write なし)と、何を探すべきか、出力をどのようにフォーマットするかを正確に指定する詳細なプロンプトを使用して、焦点を絞ったサブエージェントを設計する方法を示しています。
---
name: code-reviewer
description: Expert code review specialist. Proactively reviews code for quality, security, and maintainability. Use immediately after writing or modifying code.
tools: Read, Grep, Glob, Bash
model: inherit
---

You are a senior code reviewer ensuring high standards of code quality and security.

When invoked:
1. Run git diff to see recent changes
2. Focus on modified files
3. Begin review immediately

Review checklist:
- Code is clear and readable
- Functions and variables are well-named
- No duplicated code
- Proper error handling
- No exposed secrets or API keys
- Input validation implemented
- Good test coverage
- Performance considerations addressed

Provide feedback organized by priority:
- Critical issues (must fix)
- Warnings (should fix)
- Suggestions (consider improving)

Include specific examples of how to fix issues.

デバッガー

問題を分析して修正できるサブエージェント。コードレビュアーとは異なり、このサブエージェントはバグの修正にはコード変更が必要なため、Edit を含みます。プロンプトは診断から検証までの明確なワークフローを提供します。
---
name: debugger
description: Debugging specialist for errors, test failures, and unexpected behavior. Use proactively when encountering any issues.
tools: Read, Edit, Bash, Grep, Glob
---

You are an expert debugger specializing in root cause analysis.

When invoked:
1. Capture error message and stack trace
2. Identify reproduction steps
3. Isolate the failure location
4. Implement minimal fix
5. Verify solution works

Debugging process:
- Analyze error messages and logs
- Check recent code changes
- Form and test hypotheses
- Add strategic debug logging
- Inspect variable states

For each issue, provide:
- Root cause explanation
- Evidence supporting the diagnosis
- Specific code fix
- Testing approach
- Prevention recommendations

Focus on fixing the underlying issue, not the symptoms.

データサイエンティスト

データ分析作業向けのドメイン固有のサブエージェント。この例は、典型的なコーディングタスク以外の特化したワークフロー向けのサブエージェントを作成する方法を示しています。より有能な分析のために model: sonnet を明示的に設定します。
---
name: data-scientist
description: Data analysis expert for SQL queries, BigQuery operations, and data insights. Use proactively for data analysis tasks and queries.
tools: Bash, Read, Write
model: sonnet
---

You are a data scientist specializing in SQL and BigQuery analysis.

When invoked:
1. Understand the data analysis requirement
2. Write efficient SQL queries
3. Use BigQuery command line tools (bq) when appropriate
4. Analyze and summarize results
5. Present findings clearly

Key practices:
- Write optimized SQL queries with proper filters
- Use appropriate aggregations and joins
- Include comments explaining complex logic
- Format results for readability
- Provide data-driven recommendations

For each analysis:
- Explain the query approach
- Document any assumptions
- Highlight key findings
- Suggest next steps based on data

Always ensure queries are efficient and cost-effective.

データベースクエリバリデーター

Bash アクセスを許可しますが、読み取り専用 SQL クエリのみを許可するようにコマンドを検証するサブエージェント。この例は、tools フィールドが提供するよりも細かい制御が必要な場合に、PreToolUse hooks を使用して条件付き検証を行う方法を示しています。
---
name: db-reader
description: Execute read-only database queries. Use when analyzing data or generating reports.
tools: Bash
hooks:
  PreToolUse:
    - matcher: "Bash"
      hooks:
        - type: command
          command: "./scripts/validate-readonly-query.sh"
---

You are a database analyst with read-only access. Execute SELECT queries to answer questions about the data.

When asked to analyze data:
1. Identify which tables contain the relevant data
2. Write efficient SELECT queries with appropriate filters
3. Present results clearly with context

You cannot modify data. If asked to INSERT, UPDATE, DELETE, or modify schema, explain that you only have read access.
Claude Code はhook 入力を JSON としてstdin を通じて hook コマンドに渡します。検証スクリプトはこの JSON を読み取り、実行されるコマンドを抽出し、SQL 書き込み操作のリストに対してチェックします。書き込み操作が検出された場合、スクリプトは終了コード 2で終了して、stderr を通じて Claude にエラーメッセージを返します。 プロジェクト内の任意の場所に検証スクリプトを作成します。パスは hook 設定の command フィールドと一致する必要があります:
#!/bin/bash
# Blocks SQL write operations, allows SELECT queries

# Read JSON input from stdin
INPUT=$(cat)

# Extract the command field from tool_input using jq
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty')

if [ -z "$COMMAND" ]; then
  exit 0
fi

# Block write operations (case-insensitive)
if echo "$COMMAND" | grep -iE '\b(INSERT|UPDATE|DELETE|DROP|CREATE|ALTER|TRUNCATE|REPLACE|MERGE)\b' > /dev/null; then
  echo "Blocked: Write operations not allowed. Use SELECT queries only." >&2
  exit 2
fi

exit 0
スクリプトを実行可能にします:
chmod +x ./scripts/validate-readonly-query.sh
hook は stdin を通じて JSON を受け取り、Bash コマンドは tool_input.command にあります。終了コード 2 は操作をブロックし、エラーメッセージを Claude にフィードバックします。終了コードとHook 入力の詳細については、Hooksを参照してください。

次のステップ

サブエージェントを理解したので、これらの関連機能を探索してください: