這個單元解決什麼問題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]):2.1 內建 Subagent
Explore 與 Plan 有個特殊設計:它們跳過
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]:
Claude Code 會遞迴掃描
.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 必填,其餘選填。完整欄位:
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]:1
CLAUDE_CODE_SUBAGENT_MODEL 環境變數
最高優先序,可在啟動環境統一指定所有 Subagent 的模型,覆寫一切。
2
該次叫用的 model 參數
呼叫端在叫用時傳入的 model 參數,優先於 frontmatter。
3
Subagent frontmatter model
Subagent 檔案內宣告的
model 欄位。model: inherit(預設)等同跟主對話用同模型。4
主對話的模型
以上都未指定時,fallback 到主對話當前使用的模型。
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 細節
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 操作模式:
判斷清單
- 這個 Subagent 會寫檔或動外部狀態嗎?否,不需要 worktree。
- 同一批平行跑的 Subagent 會寫入重疊路徑嗎?是,需要 worktree。
- Subagent 會處理不可信內容(外部文件、隨機 PR)嗎?是,worktree 作為爆炸半徑隔離。
6. 與 Skill 的配合:程序 vs 容器
這是 Subagent 與 Skill 最容易混淆的地方。澄清它們的分工: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):命名澄清
- 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。