這個單元解決什麼問題Subagent 是擁有獨立 context window 的子任務執行容器,可指定模型、收斂工具權限、必要時用 git worktree 物理隔離,最終只把結論回傳給主流程。Claude Code v2.1 起採「兩層」結構:內建子代理(Explore、Plan、general-purpose 自動叫用)加自訂子代理(你寫 Markdown frontmatter 定義)。本單元講如何從零寫一個可用的 Subagent、如何選模型與最小權限、何時用
isolation: worktree 隔離平行衝突,以及釐清它與 Skill 的分工。學習目標
- 說出 Claude Code v2.1 起「兩層 Subagent」結構:內建(Explore、Plan、general-purpose)與自訂(Markdown 檔),以及各自適用的場景。
- 寫出正確的 Subagent frontmatter,含
model、tools、permissionMode、skills、isolation等欄位,並說明各欄位的取值依據。 - 判斷一個子任務該用哪個模型、給哪些工具、何時需要
isolation: worktree、要不要預載skills、是否需要permissionMode。 - 說明 Subagent 與 Skill 的分工:Skill 是程序,Subagent 是執行容器;Skill 用
context: fork把同一段程序丟到 Subagent 內執行,Subagent 用skills:預載程序到自己的 context。 - 能在主流程 prompt 中正確叫用 Subagent(描述觸發或
@-mention 顯式叫用),並取回結論。
1. Subagent 是什麼
Subagent 是一個有獨立 context window、可指定模型與工具組合的子任務執行單元。主對話把工作丟進去,Subagent 在自己的 context 內跑完整個任務,最後只回傳結論給主對話(截至 2026-06 依官方 subagents 章節 [1])。 它解決的核心問題:把會把主對話 context 灌爆的副作用,關進獨立的 context 裡。把 200 個檔案掃過一次找出所有 deprecated import、跑大量 grep 蒐集資訊、執行 10 分鐘的測試並回傳失敗摘要。如果這些都在主對話做,幾萬 token 就被搜尋結果灌掉,模型在後面輪次還要付 attention 成本去掃過它們。Subagent 在自己 context 內做完,把摘要丟回來,主對話只需要付一次摘要的成本。 兩個關鍵事實先記住:- Subagent 不能 spawn 另一個 Subagent(無巢狀)。需要分工時由主對話平行叫用多個 Subagent,或用 agent team(見 04-11)。
- Subagent 的 system prompt 是你寫的 frontmatter 後的 Markdown body,不是 Claude Code 的完整 system prompt。你給的指令品質直接決定 Subagent 的行為。
2. 兩層結構:內建 + 自訂
Claude Code v2.1 起 Subagent 採「兩層」結構([1]):| 層 | 內容 | 觸發方式 | 用途 |
|---|---|---|---|
| 內建 | Explore、Plan、general-purpose,外加 statusline-setup、claude-code-guide 等輔助 | 模型依任務語意自動叫用,使用者不直接面對 | 探索、規劃、複雜多步任務 |
| 自訂 | 你寫的 Markdown 檔,存於 ~/.claude/agents/、.claude/agents/、plugin agents/、managed settings 或 claude --agents CLI | 模型依 description 自動叫用、或主對話用 @subagent-name 顯式叫用 | 特定領域的專用工作者 |
2.1 內建 Subagent
| 名稱 | 模型 | 工具 | 用途 |
|---|---|---|---|
| Explore | Haiku(快速、低延遲) | 唯讀工具(Write / Edit 拒絕) | 檔案搜尋、codebase 探索 |
| Plan | 繼承主對話 | 唯讀工具 | plan mode 下的研究(避免無限巢狀) |
| general-purpose | 繼承主對話 | 全部工具 | 探索加修改混合的複雜多步任務 |
| statusline-setup | Sonnet | (輔助) | 跑 /statusline 設定狀態列時 |
| claude-code-guide | Haiku | (輔助) | 回答 Claude Code 本身功能問題 |
CLAUDE.md 與父 session 的 git status,讓研究保持快速、便宜。其他內建與全部自訂 Subagent 都會載入 CLAUDE.md [1]。
叫用 Explore 時可以指定徹底程度(thoroughness level):quick(目標式查詢)、medium(平衡)、very thorough(全面分析)。
2.2 自訂 Subagent 與內建的差別
自訂 Subagent 的本體是一個 Markdown 檔,包含 YAML frontmatter(設定)與 body(system prompt)。可以建在多個 scope,scope 決定它在哪些 session 可用與優先序。 最重要的設計差異:- 內建 Subagent 跑唯讀任務為主(Plan、Explore),
general-purpose是唯一可寫的內建。 - 自訂 Subagent 完全由你決定:可唯讀、可寫、可指定模型、可預載 Skill、可用 worktree 隔離。
3. 放置位置與優先序
自訂 Subagent 可放在五個 scope,優先序高到低 [1]:| 位置 | 範疇 | 優先序 | 建立方式 |
|---|---|---|---|
| Managed settings | 組織全機器 | 1(最高) | 管理者部署 |
--agents CLI flag | 當前 session | 2 | 啟動 Claude Code 時傳 JSON |
.claude/agents/ | 當前專案(進版控) | 3 | 互動式或手動 |
~/.claude/agents/ | 你所有專案 | 4 | 互動式或手動 |
Plugin agents/ 目錄 | Plugin 啟用範圍內 | 5(最低) | 隨 plugin 安裝 |
.claude/agents/ 與 ~/.claude/agents/,所以可以分子目錄組織(agents/review/、agents/research/)。目錄路徑不影響 Subagent 識別,識別只看 frontmatter 的 name 欄位。同一 scope 內若兩個檔案宣告同名 name,Claude Code 會保留其中一個、丟掉另一個且不警告 [1]。
Plugin 的 agents/ 也遞迴掃描,但子目錄會變成 scoped identifier 的一部分:my-plugin/agents/review/security.md 在 plugin my-plugin 內識別為 my-plugin:review:security [1]。
4. frontmatter 完整參考
Subagent 檔案格式(截至 2026-06,依官方 subagents 章節 [1]):name 與 description 必填,其餘選填。完整欄位:
| 欄位 | 必填 | 用途 |
|---|---|---|
name | 是 | 唯一識別(小寫字母與連字符)。SubagentStart hook 收到的 agent_type 是這個值 [1] |
description | 是 | 模型判斷何時委派給這個 Subagent 的依據 |
tools | 否 | Subagent 可用工具的白名單。省略時繼承全部工具。若要預載 Skill,用 skills 欄位,不要把 Skill 列在 tools 內 [1] |
disallowedTools | 否 | 黑名單,從繼承或指定清單中移除 |
model | 否 | sonnet / opus / haiku / 完整模型 ID / inherit(預設) |
permissionMode | 否 | default / acceptEdits / auto / dontAsk / bypassPermissions / plan |
maxTurns | 否 | Subagent 在此輪 agentic turn 數上限 |
skills | 否 | 預載 Skill 名稱清單到 Subagent context;full content 注入 |
mcpServers | 否 | 此 Subagent 專用的 MCP servers,可 inline 或 reference 已連線的 server |
hooks | 否 | 此 Subagent 生命週期專屬 hooks |
memory | 否 | 持久化記憶範圍:user / project / local |
background | 否 | 預設背景模式 false;設 true 一律以 background task 跑 |
effort | 否 | 覆寫 session effort:low / medium / high / xhigh / max |
isolation | 否 | 設 worktree 在暫時 git worktree 跑 Subagent |
color | 否 | UI 顯示色:red / blue / green / yellow / purple / orange / pink / cyan |
initialPrompt | 否 | 當此 agent 作為主 session 跑(--agent 或 agent 設定)時的第一句 user turn |
v2.1.63 起
Task 改為 Agent在 v2.1.63,Task tool 改命名為 Agent([1])。舊的 Task(...) 在 settings 與 agent 定義中仍可作為 alias 用。tools: Agent(worker, researcher) 是新語法,限制此 Subagent 可 spawn 哪些類型。4.1 model 解析順序
當 Claude 叫用 Subagent 時,模型依下列順序解析 [1]:
重複性高、結構明確的子任務用便宜模型(Haiku),推理要求高的留給 Sonnet / Opus。這是 Subagent 最直接的省錢切入點。
4.2 工具白名單 vs 黑名單
tools 給白名單、disallowedTools 給黑名單。兩個都設時,先套黑名單,再從剩下的套白名單 [1]。
白名單範例(嚴格限制):
4.3 限制可 spawn 的 Subagent 類型
當 agent 作為主 thread 跑(claude --agent),可 spawn 其他 Subagent。用 tools: Agent(worker, researcher) 限定可 spawn 哪些類型 [1]:
worker 與 researcher。想允許任何類型用 tools: Agent, Read, Bash(不加括號)。完全不列 Agent 時,該 agent 不能 spawn 任何 Subagent。這個限制只對主 thread agent 生效;Subagent 本身不能 spawn 任何 Subagent(無巢狀),所以 Agent(agent_type) 在 Subagent frontmatter 內無作用 [1]。
4.4 permissionMode 細節
| 模式 | 行為 |
|---|---|
default | 標準權限檢查與 prompt |
acceptEdits | 自動接受工作目錄與 additionalDirectories 內的檔案編輯 |
auto | Auto mode:背景 classifier 審查指令與受保護目錄寫入 |
dontAsk | 自動拒絕權限 prompt(顯式允許的工具仍可用) |
bypassPermissions | 跳過所有權限 prompt |
plan | Plan mode(唯讀探索) |
4.5 skills:預載 Skill 內容到 Subagent
disable-model-invocation: true 的 Skill,因為預載與模型可叫用共用同一組 Skill 集。若列出的 Skill 缺失或停用,Claude Code 跳過並在 debug log 寫 warning [1]。
4.6 isolation: worktree
isolation: worktree 讓 Subagent 在暫時的 git worktree 內跑,給它 repo 的一個隔離複本(從預設分支 fork,不是父 session 的 HEAD)[1]。
- Subagent 啟動時自動建一個暫時 worktree。
- Subagent 的寫入只發生在這個 worktree,不影響主工作目錄。
- 若 Subagent 沒做任何改動,worktree 自動清除 [1]。
- 若有改動,你需要決定合併、保留、丟棄。
5. 唯讀 vs 可寫、worktree 隔離何時用
判準只有一個:這個 Subagent 會不會改檔案或外部狀態?| 類型 | 任務 | 工具 | worktree |
|---|---|---|---|
| 唯讀 | 搜尋、review、summarize、analyze | Read、Glob、Grep,禁用 Write / Edit | 不需要 |
| 可寫(無平行衝突) | 重構、文件生成、單檔修改 | 包含 Write / Edit | 不需要(同一 Subagent 自己) |
| 可寫(多 Subagent 平行) | 多個 Subagent 同時改不同檔案 | 包含 Write / Edit | 需要,每個 Subagent 各自 worktree |
| 不可信輸入 | 處理外部文件、URL、PR 內容 | 最小集 | 強烈建議(隔離爆炸半徑) |
判斷清單
- 這個 Subagent 會寫檔或動外部狀態嗎?否,不需要 worktree。
- 同一批平行跑的 Subagent 會寫入重疊路徑嗎?是,需要 worktree。
- Subagent 會處理不可信內容(外部文件、隨機 PR)嗎?是,worktree 作為爆炸半徑隔離。
6. 與 Skill 的配合:程序 vs 容器
這是 Subagent 與 Skill 最容易混淆的地方。澄清它們的分工:| 維度 | Skill | Subagent |
|---|---|---|
| 本質 | 程序定義(步驟、判準、格式) | 執行容器(context、模型、工具、隔離) |
| 載入時機 | 模型判斷語意相關時叫用 | 模型依 description 委派,或 @-mention |
| 誰執行 | 當前對話的 Claude(主對話或 Subagent) | Subagent 自己 |
| 可重入 | 同一個 Skill 在不同對話重複用 | 同一個 Subagent 定義可被多個 session 委派 |
| 適合 | 「這個流程要這樣跑」 | 「這個任務丟到獨立 context 跑」 |
6.1 三種典型配合
只用 Skill:程序在主對話跑,沒隔離需求。例:「依這個寫作風格重寫文件」。 只用 Subagent:子任務程序簡單到寫在 Subagent 描述裡即可,沒複用需求。例:「搜尋 codebase 找所有用到 deprecated API 的地方」。 Skill + Subagent 搭配:兩條路徑。 路徑 A:Subagent 預載 Skill(skills: [...])
context: fork 丟到 Subagent
7. 叫用 Subagent
7.1 自動叫用
Claude 讀 Subagent 的description,當任務語意匹配時自動委派。寫好 description 是觸發的關鍵。
觸發描述寫法對照太泛,會誤觸:太窄,會漏觸:剛好:
7.2 顯式叫用:@-mention
主對話用 @subagent-name 顯式叫用。例:「用 @code-reviewer 看看這個 PR 改了什麼」。
Plugin 內的 Subagent 用 namespaced 識別:@my-plugin:review:security [1]。
7.3 背景模式
background: true 讓 Subagent 一律以 background task 跑,可與主對話並行;Subagent 完成時 Claude Code 會通知主對話 [1]。
8. 工具對照
各家工具對「獨立 context 子代理」的對應機制差異顯著(截至 2026-06):| 概念 | Anthropic Claude(主範本) | OpenAI Codex | Google Antigravity | GitHub Copilot CLI | Cursor(短提) |
|---|---|---|---|---|---|
| 自訂 Subagent 格式 | Markdown frontmatter 檔 | ~/.codex/agents/*.toml(個人)/ .codex/agents/*.toml(專案)加 config.toml 的 [agents] 全域參數,必填 name/description/developer_instructions [6] | .agents/agents/*.md frontmatter [需確認原始出處] | 不適用主流程(CLI 為單代理) | .cursor/agents/ 與內建 Subagent [需確認原始出處] |
| 內建子代理 | Explore(Haiku 唯讀)、Plan(繼承 唯讀)、general-purpose(繼承 全工具) | 系統層 provider agent | 系統層 sub-agent | 不適用 | Composer、Background Agent 等 [需確認原始出處] |
| 指定模型 | model: sonnet/opus/haiku/inherit/<id> | 設定式 | 設定式 | 設定式 | 設定式 |
| 工具收斂 | tools 白名單 + disallowedTools 黑名單 | 設定式 | 設定式 | 工具白名單 / 黑名單 | 設定式 |
| 隔離機制 | isolation: worktree | 環境層 | 環境層 | 環境層 | 環境層 |
| 預載 Skill | skills: [...] frontmatter | 不適用 | 設定式 | 不適用 | 不適用 |
| 權限模式 | permissionMode: default/acceptEdits/auto/dontAsk/bypassPermissions/plan | 設定式 | 設定式 | 設定式 | 設定式 |
| 持久化記憶 | memory: user/project/local | 不適用 | Memory 機制 | 不適用 | 不適用 |
| 顯式叫用 | @subagent-name | /agent 指令 | 設定式 | 設定式 | @agent |
命名澄清
- Claude Code 的 Subagent 工具名:v2.1.63 起從
Task改為Agent(舊Task(...)仍可作 alias)([1])。tools: Agent(worker, researcher)限制可 spawn 類型是 v2.1 後的標準寫法。 - OpenAI Codex 的 Subagent 已對官方查證 [6]:
config.toml的[agents]定全域參數(max_threads/max_depth/job_max_runtime_seconds),各角色為~/.codex/agents/*.toml(個人)或.codex/agents/*.toml(專案)。它沒有~/.codex/prompts/*.md,也沒有codex.md,持久指令走AGENTS.md。Antigravity、Cursor 的對應機制仍以各家當前文件為準,標「需確認原始出處」項目待查證。 - GitHub Copilot CLI 截至 2026-06 為單代理模型,不在 Subagent 概念下提供一等公民機制;雲端 coding agent 是另一條路線。
- Cursor 為第三方 IDE(Anysphere),本 Playbook 僅短提一欄。
9. 動手做
30 分鐘練習
- 寫唯讀 Subagent:建
~/.claude/agents/api-explorer.md,frontmatter 給tools: Read, Glob, Grep、model: haiku,body 寫「掃描src/api/下的端點、回報每個的 method、路徑、認證需求」。用/agents確認它出現在 Library。 - 寫可寫 Subagent:建
.claude/agents/doc-fixer.md,frontmatter 給tools: Read, Edit, Grep、model: haiku、permissionMode: acceptEdits,body 寫「把所有.md內的TODO換成連結到 issues 的錨點」。在同一專案下用@doc-fixer顯式叫用。 - 隔離測試:用
isolation: worktree寫一個 Subagent,讓它改一個檔;觀察 worktree 自動建立、Subagent 改完後 worktree 還在、與主工作目錄的差異。沒改動時應自動清除。 - Skill + Subagent:寫一個 Skill 用
context: fork與agent: Explore;叫用 Skill 觀察它在獨立 context 跑,結果摘要回傳主對話。 - 預載 Skill:寫一個 Subagent 用
skills: [api-conventions],啟動 session 後觀察 Skill 內容是否已在 Subagent context(從 Subagent 內問「你看到 api-conventions 嗎」驗證)。
10. 常見誤區
自我檢核
自我檢核
- 你能說出 Claude Code v2.1 Subagent 的兩層結構,以及內建三個(Explore、Plan、general-purpose)各自的模型與工具預設嗎?
- 你能寫出一個 frontmatter 完整、
description觸發精準的 Subagent 嗎? - 你能對手邊一個真實子任務說清楚:它的
model選擇依據、tools最小集、是否需要isolation: worktree、permissionMode該不該用哪個,以及它有沒有用skills預載 Skill? - 你能分清 Subagent 與 Skill 的關係嗎?什麼時候該只用其中一個、什麼時候該搭配?
來源與延伸閱讀
事實主張依官方文件,快變動項標註截至 2026-05。-
[1] Anthropic, “Create custom subagents,” code.claude.com, 2026. (含兩層結構、frontmatter 完整參考、
isolation: worktree、skills預載、memory持久化、v2.1.63Task改為Agent命名) https://code.claude.com/docs/en/subagents (截至 2026-06) -
[2] Anthropic, “Extend Claude with skills,” code.claude.com, 2026. (含 Skill 與 Subagent 透過
context: fork與skills:預載的兩條配合路徑) https://code.claude.com/docs/en/skills (截至 2026-06) -
[3] Anthropic, “Plugins reference,” code.claude.com, 2026. (Plugin Subagent 限制
hooks/mcpServers/permissionMode三欄位) https://code.claude.com/docs/en/plugins-reference (截至 2026-06) -
[4] Anthropic, “Worktrees,” code.claude.com, 2026. (
isolation: worktree機制與 base branch 預設行為) https://code.claude.com/docs/en/worktrees (截至 2026-06) - [5] Agent Skills Open Standard, “Agent Skills,” 2026. (Skill 與 Subagent 互通的開放標準) https://agentskills.io (截至 2026-06)
-
[6] OpenAI, “Subagents,” developers.openai.com/codex, 2026. (
config.toml的[agents]全域參數max_threads/max_depth/job_max_runtime_seconds;獨立 agent TOML 於~/.codex/agents/(個人)與.codex/agents/(專案),必填name/description/developer_instructions,選填model/sandbox_mode/mcp_servers;無prompts/*.md與codex.md,持久指令用AGENTS.md) https://developers.openai.com/codex/subagents (截至 2026-06)
CLAUDE.md與 rules 見 04-1 CLAUDE.md 與記憶檔 與 04-2 rules。- Skill 與 frontmatter 見 04-4 Skill。
- Hook 確定性強制見 04-6 Hooks。
- 上下文隔離概念見 01-4 上下文工程。
- Agent Teams 與多代理編排見 04-11 Agent Teams 與 Sub Agent。