Claude Codeのサブエージェントを作る — 作成ナレッジとメリット・デメリット
Claude Codeのサブエージェントを .claude/agents/ で自作するときの最小単位・YAML仕様・メリット/デメリット・作成判断軸・失敗パターンを解説します。
この記事で扱うこと
Claude Codeにはビルトインのサブエージェント(Explore / Plan / general-purpose 等)に加えて、.claude/agents/ 配下にMarkdownファイルを置くだけで独自のサブエージェントを定義できる仕組みがあります。code-reviewer・db-reader・data-scientistのように、専門領域を担うエージェントを自分で作って運用に組み込めます。
本記事は、サブエージェントの作り方・作る理由・作らないほうがよいケースをまとめた作成ガイドです。並列で動かす活用パターンについてはサブエージェント完全活用 — Taskツールで作る並列開発パターンを、複数セッションを束ねるUIについてはClaude Codeのagent view — 複数セッションを束ねる常駐プロセス設計を参照してください。
サブエージェントを自作するメリット
.claude/agents/ に独自定義を置くと、ビルトインの汎用エージェントでは取りにくい5つの効果が得られます。
| メリット | 説明 |
|---|---|
| コンテキスト分離 | 説明サブエージェントは独自のコンテキストウィンドウで動き、メイン会話には要約だけが返る。長大なファイル走査やログ解析でメイン残量を温存できる |
| 役割の固定 | 説明システムプロンプトを記事執筆・コードレビュー・DBクエリ等に特化できる。「毎回同じ指示をペーストする」運用を1ファイルにまとめられる |
| ツール制限の徹底 | 説明tools で許可リスト、disallowedTools で禁止リスト、Agent(agent_type) で他エージェント呼び出しの範囲も指定可能。レビュー専任エージェントからWriteを奪う等の安全設計が機械的に効く |
| コスト最適化 | 説明model: haiku のように軽量モデルへルーティングできる。判定や調査だけの作業をOpusでなくHaikuに流せば、累計トークン消費を抑えられる |
| 再利用と共有 | 説明~/.claude/agents/ に置けば全プロジェクト共通、.claude/agents/ ならプロジェクト単位、plugin 配下なら配布も可能。チーム標準のレビューエージェントをgit管理で共有できる |
「主な指示を毎回ペーストしている」「読みたくない調査ログでメイン文脈が埋まっている」のどちらかが当てはまれば、サブエージェント化の効果が出やすい場面です。
サブエージェントを自作するデメリット・コスト
メリットの裏返しとして、運用上の負担も発生します。
- メンテナンスコスト:システムプロンプトが詳細であるほど、Claude本体や周辺機能(Skills / MCP)のアップデートに追随するメンテが必要になる
- デバッグの難しさ:メインに返るのは要約だけなので、サブエージェント内部で何が起きたかを追うにはtranscriptファイル(
~/.claude/projects/{project}/{sessionId}/subagents/agent-{agentId}.jsonl)を直接読みに行く必要がある - 過剰な特化の罠:狭く作りすぎると「結局メインで自分でやった方が早い」状態になり、呼び出されなくなる
- 委任の境界の歪み:メインから見るとブラックボックスなので、「途中で軌道修正したい」「経過を見たい」用途とは相性が悪い
- 権限設計の責任:
bypassPermissionsを不用意に付けるとサブエージェント側で.git/.claude等への書き込みが通る。自由度と安全性のトレードオフを毎回意識する必要がある
公式は「Subagents work within a single session」「Subagents cannot spawn other subagents」と明示しています。1セッション内の専門ワーカーであり、無制限に階層化できる仕組みではありません。
作成の最小単位
/agents コマンド経由(推奨)
最も手早いのはClaude Code内で /agents を実行してUIから作成する方法です。タブ式のインターフェースで Library から「Create new agent」を選び、Generate with Claude で説明文を渡すと、識別子・description・システムプロンプトの雛形が自動生成されます。ツール許可・モデル・色・メモリスコープを順に選んでいくだけで完成し、編集も /agents の中から続けて行えます。/agents 経由で作ったサブエージェントはセッション再起動なしで即時利用可能です。
手書きで作る
.claude/agents/<name>.md を直接書く場合は「YAMLフロントマター + システムプロンプト本文」のMarkdownファイル1つで完結します。最小例:
---
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.必須は name と description の2つだけ。あとは省略するとデフォルトに従います(model は inherit、tools はメインから全継承)。手書きで作成・編集した場合はセッション再起動が必要(/agents UI経由なら即時反映)。
セッション全体をサブエージェント化する(--agent)
委任ではなく「そのセッション全体をサブエージェントとして起動する」モードもあります。
claude --agent code-reviewerこのとき、サブエージェント定義のシステムプロンプトがClaude Codeのデフォルトシステムプロンプトに置き換わり、tools / model 制限もセッション全体に適用されます。プロジェクトのデフォルトとして固定したい場合は .claude/settings.json に {"agent": "code-reviewer"} を書きます(CLIフラグの方が優先)。プラグイン提供のサブエージェントを使う場合は claude --agent <plugin-name>:<agent-name> のようにスコープ付き名を指定します。
スコープと優先順位
ファイル配置でスコープが決まり、同名で衝突すると優先度の高い場所が勝ちます。
| 配置場所 | スコープ | 優先度 | 主な用途 |
|---|---|---|---|
| 管理設定(Managed) | スコープ組織全体 | 優先度1(最強) | 主な用途企業ポリシー配信 |
--agents CLIフラグ | スコープそのセッション限定 | 優先度2 | 主な用途スクリプト / CIから一時定義 |
.claude/agents/ | スコーププロジェクト単位 | 優先度3 | 主な用途コードベース固有の専門エージェント、git共有 |
~/.claude/agents/ | スコープ全プロジェクト | 優先度4 | 主な用途個人用ツールチェイン |
プラグイン agents/ | スコーププラグイン有効箇所 | 優先度5(最弱) | 主な用途配布・再利用 |
プロジェクト用のサブエージェントは .claude/agents/ に置いてgit管理するのがチーム共有の基本形です。--add-dir で追加したディレクトリはファイルアクセスは付与されるがagentsは走査されないので、別プロジェクトのサブエージェントを呼び出したい場合は ~/.claude/agents/ かplugin経由を選びます。
プラグイン経由で配布する場合の制約:Plugin由来のサブエージェントは hooks / mcpServers / permissionMode フィールドが無視されます(セキュリティ仕様)。これらを使いたければ、プラグイン提供のファイルを .claude/agents/ か ~/.claude/agents/ にコピーするか、permissions.allow を settings.json 側で明示する必要があります。
フロントマター仕様(全フィールド)
公式が定義しているフロントマターを一覧で示します。name と description 以外はすべて任意。
| フィールド | 用途 | 値の例 |
|---|---|---|
name | 用途一意な識別子(小文字とハイフン) | 値の例code-reviewer |
description | 用途Claudeが委任タイミングを判断する説明文 | 値の例Reviews code for quality... |
tools | 用途許可ツール(省略時は全継承) | 値の例Read, Glob, Grep |
disallowedTools | 用途禁止ツール(継承後にここで削除) | 値の例Write, Edit |
model | 用途使用モデル | 値の例sonnet / opus / haiku / claude-opus-4-7 / inherit |
permissionMode | 用途権限モード | 値の例default / acceptEdits / auto / dontAsk / bypassPermissions / plan |
maxTurns | 用途最大エージェントターン数 | 値の例20 |
skills | 用途起動時にcontextへ注入するSkill一覧 | 値の例[api-conventions, error-handling] |
mcpServers | 用途このエージェント専用のMCPサーバ | 値の例inline定義or既設サーバ名参照 |
hooks | 用途このサブエージェント限定のライフサイクルhook | 値の例PreToolUse / PostToolUse / Stop |
memory | 用途永続メモリのスコープ | 値の例user / project / local |
background | 用途常にバックグラウンド実行するか | 値の例true |
effort | 用途エージェント有効中のeffortレベル | 値の例low / medium / high / xhigh / max |
isolation | 用途編集をgit worktreeに隔離するか | 値の例worktree |
color | 用途UI上の表示色 | 値の例red / blue / green 等 |
initialPrompt | 用途--agent で起動時に自動投入される最初のプロンプト | 値の例テキスト |
特に効くフィールドを4つだけ深掘りします。
ツール許可と禁止の併用(tools / disallowedTools)
両方指定すると disallowedTools が先に適用され、その後 tools の許可リストで絞られます。例:tools: Read, Bash + disallowedTools: Write, Edit で「ReadとBashは使えるが書き込み系は禁止」という設計が可能。Bash のような単一ツールの内部コマンド単位の細粒度制御(例:rm だけ禁止)はsubagent定義ではなく permissions.deny 側で扱います。
Agent(worker, researcher) のような書き方は「claude --agent でメインスレッドとして起動したエージェントが、どのサブエージェント型をspawnできるか」を絞る用途です。通常のsubagent定義の tools フィールドに書いても効果はありません(公式に「Subagents cannot spawn other subagents」と明示されており、サブエージェントは他のサブエージェントを呼べないため)。
model の解決順序
サブエージェントのmodelは次の優先順位で解決されます:
CLAUDE_CODE_SUBAGENT_MODEL環境変数- 呼び出し時のper-invocation
modelパラメータ - サブエージェント定義の
modelフロントマター - メイン会話のモデル(デフォルト)
「定義ではHaikuなのにテスト時だけSonnetで動かしたい」場合は環境変数を一時的に上書きするのが手軽です。
memory で永続化された知識を持たせる
memory: project を指定すると .claude/agent-memory/<name>/ に「会話を跨いで保持される知識」を蓄積できます。レビュー専任エージェントなら「過去に見つけたバグのパターン」や「このプロジェクトの命名規則」を MEMORY.md に蓄積し、次回起動時に冒頭200行(または25KB)が自動でcontextに注入されます。
| スコープ | 場所 | 共有範囲 |
|---|---|---|
user | 場所~/.claude/agent-memory/<name>/ | 共有範囲全プロジェクト共通の個人知識 |
project | 場所.claude/agent-memory/<name>/ | 共有範囲プロジェクト固有、git共有 |
local | 場所.claude/agent-memory-local/<name>/ | 共有範囲プロジェクト固有、gitに乗せない |
project が推奨のデフォルト。チームで共有したい知識はgitに乗せ、個人スクラッチパッドは local を選びます。
isolation: worktree で踏み合いを防ぐ
並列実行する複数のサブエージェントが同じファイルを編集すると衝突します。isolation: worktree を指定すると、起動時に一時的なgit worktreeに作業領域が切り替わり、編集差分は隔離された状態でメインに返ります。サブエージェントが何も変更しなければworktreeは自動削除されます。claude --bg でバックグラウンド実行するagent view経由の運用とも整合する設計です。
作成すべき / 作成すべきでない判断軸
サブエージェント化の効果は「反復性 × コンテキスト浪費」で見ると判断しやすくなります。
| 条件 | 自作する価値 |
|---|---|
| 同じ指示を3回以上ペーストしている | 自作する価値◎ 即座に作る |
| 1回の作業で大量ファイル走査が発生する | 自作する価値◎ コンテキスト分離が効く |
| ツール許可を厳格にしたい(レビュー専任でWriteを禁止する等) | 自作する価値◎ 機械的に制限できる |
| Haikuで十分な単純判定 / 分類 | 自作する価値○ コスト削減 |
| 進行を逐次見ながら調整したい対話的作業 | 自作する価値× メイン会話で進めたほうが速い |
| 分岐が多すぎる総合タスク | 自作する価値× 専門化できず破綻する |
| 1回限りの調査 | 自作する価値× 都度プロンプトで十分 |
| 他のサブエージェントを呼び出す必要がある | 自作する価値× ネスト不可。メイン会話でチェーンする |
「毎回同じワーカーを同じ指示で起動している」が自作の最大シグナルです。公式も Define a custom subagent when you keep spawning the same kind of worker with the same instructions. と明示しています。
失敗パターンと回避策
1. description が抽象的すぎて呼ばれない
description: General helper のような汎用説明だと、Claudeが委任タイミングを判断できません。「いつ使うか」を具体的に書き、Use proactively after code changes. のような誘発フレーズを入れると自動委任が起きやすくなります。
2. システムプロンプトが長大すぎる
サブエージェントは独立contextで動きますが、システムプロンプト自体がそのまま入力に乗ります。1,000行を超えるとサブエージェント側でcontext圧迫が起きます。500行を上限の目安に、詳細な参照資料は skills で外部化するか、Memoryに蓄積する設計が安全です。
3. bypassPermissions 乱用
ツール承認を全部スキップする bypassPermissions は便利ですが、.git / .claude / .vscode 等への書き込みも通ります。利用するときは「信頼済みの作業領域に閉じている」「isolation: worktree併用」の2条件を意識します。
なお、親(メイン会話)が bypassPermissions / acceptEdits を有効化していると、子サブエージェントの permissionMode 指定は無視されて親モードが継承されます。親が auto モードの場合も、子の permissionMode は効かず、ツール呼び出しは親の分類器でチェックされます。サブエージェント側で「安全側に倒したい」と思っても、親モードが緩いと意図通りには絞れない仕様です。
4. 中身が見えない箱で挙動を追えない
サブエージェントの応答だけ見て「何かおかしい」と感じても、transcriptを読まないと因果を追えません。デバッグのために以下を運用に組み込みます:
~/.claude/projects/{project}/{sessionId}/subagents/agent-{agentId}.jsonlを時々開くStophookで結果を集計ファイルに追記しておく- 失敗時に「再現用の最小プロンプト」をメインから渡してチェックする
5. 別サブエージェントとの責務重複
「コードレビュー」「コードの品質判定」「コードの改善提案」のように似た役割を別ファイルで持ってしまうと、Claudeが委任先を判断できず精度が落ちます。1つのサブエージェントに1つの焦点を徹底し、責務が増えてきたら専門ごとに分割するのが運用上のセオリーです。
関連機能との使い分け
サブエージェントは「セッション内で動く専門ワーカー」ですが、似た目的の機能が他にもあります。
| 機能 | 範囲 | 主な役割 | 代表例 |
|---|---|---|---|
| サブエージェント(本記事) | 範囲単一セッション内 | 主な役割専門領域への委譲、context分離 | 代表例code-reviewer / db-reader |
agent view(claude agents) | 範囲複数セッション横断UI | 主な役割並列ジョブの一覧管理 | 代表例機能Aと機能Bを並走 |
| Agent teams | 範囲単一セッション内 | 主な役割複数子エージェントの協調 | 代表例Planner ↔ Reviewerの対話 |
| Skills | 範囲メイン会話context内 | 主な役割手順書・チェックリスト・参照知識の再利用 | 代表例/commit / /deploy |
| CLAUDE.md | 範囲メイン会話context内 | 主な役割固定の前提情報・コーディング規則 | 代表例プロジェクト方針 |
「自走させたい / contextを汚したくない / 権限を制限したい」ならサブエージェント、「毎回同じ手順を呼びたい」ならSkills、「常に効いている前提情報を持たせたい」ならCLAUDE.md、という棲み分けが基本です。Skillsとサブエージェントの細かい使い分けは別記事Skillsの作成・運用ガイドで扱います。
まとめ
自作サブエージェントのROIは「反復性が高い / 出力が長い / 権限を絞りたい / コストを下げたい」のいずれかに該当するかで決まります。
- 最小単位は
.claude/agents/<name>.mdのYAMLフロントマター + システムプロンプト - スコープはManaged > CLI > project > user > pluginの優先順位
- 効くフィールドは
tools/model/memory/isolation - 「同じ指示を毎回ペースト」「メイン会話のcontextを浪費」が最大の作成シグナル
- 失敗パターン(曖昧なdescription / 長すぎるプロンプト / bypassPermissions乱用 / 責務重複)を意識すれば運用負荷は下げられる
「並列で何本も走らせる活用編」はTaskツールで作る並列開発パターン、「複数セッションを横断管理するUI」はagent view記事で扱っています。サブエージェントとSkillsのどちらを作るべきかはSkills作成・運用ガイドも合わせて読むと判断軸が立ちやすくなります。
関連する記事
Claude Code をもっと見る →Claude Code Sub-agents完全ガイド — 独立コンテキストと並列実行の設計判断
ダイナミックワークフローとは — Claude Codeが数百のサブエージェントを並列で束ねる新機能の仕組みと使い方
Claude Codeベストプラクティス — Anthropicが示す自走エージェントの設計原則と運用パターン
Claude Codeプラグイン(Plugins)完全ガイド — /pluginの使い方・マーケットプレイス・自作と配布
Claude Code Skillsの作り方と使い分け — 最小単位・運用ROI・他レイヤ比較
Claude Codeのサブエージェント完全活用 — Taskツールで作る並列開発パターン