Subagents 在單一工作階段內工作。若要執行許多獨立工作階段並行並從一個地方監控它們,請參閱 background agents。對於相互通訊的工作階段,請參閱 cross-session messaging。對於 Claude 產生和監督的協調團隊工作階段,請參閱 agent teams。
- 保留上下文,將探索和實現保持在主要對話之外
- 強制執行約束,限制 subagent 可以使用的工具
- 跨專案重複使用配置,使用使用者層級的 subagents
- 專門化行為,針對特定領域使用專注的系統提示
- 控制成本,將任務路由到更快、更便宜的模型,如 Haiku
description 欄位,並將詳細資訊移至每個 subagent 的系統提示中,該提示僅在該 subagent 執行時載入。
內建 subagents
Claude Code 包括內建 subagents,Claude 在適當時會自動使用。每個都繼承父對話的權限規則;大多數以受限的工具集執行。 Explore 和 Plan 啟動時不會載入您的 CLAUDE.md 檔案和 git status 快照,以保持研究快速且經濟高效。其他內建和自訂 subagent 都會載入兩者,除非您在自訂 subagent 的定義中設定omitClaudeMd,使其啟動時不載入使用者、專案和本機 CLAUDE.md 檔案。如需了解到達 subagent 的完整詳細資訊,請參閱啟動時載入的內容。
- Explore
- Plan
- General-purpose
- Other
一個快速、唯讀的代理,針對搜尋和分析程式碼庫進行最佳化。
- Model:主要對話的模型。當主要對話在 Fable 上執行時,Explore 的模型取決於您的連線方式:
- 使用 Claude 訂閱、Anthropic Console 帳戶,或透過
ANTHROPIC_BASE_URL連線的 LLM 閘道時,Explore 會在opus別名所解析的 Opus 模型上執行。 - 在 Amazon Bedrock、Google Cloud 的 Agent Platform、Microsoft Foundry、AWS 上的 Claude Platform 或 Claude apps 閘道上,Explore 會維持使用主要對話的模型。
- 使用 Claude 訂閱、Anthropic Console 帳戶,或透過
- Tools:唯讀工具;Write 和 Edit 被拒絕
- Purpose:檔案發現、程式碼搜尋、程式碼庫探索
Explore 的使用者或專案 subagent 會覆寫內建的,並保留其自己的 model 欄位,因此定義一個具有 model: haiku 的 subagent,即可在較低成本的模型上執行探索。若要將單一模型強制套用至每個 subagent(包括 Explore),請參閱在一個模型上執行每個 subagent。當 Claude 需要搜尋或理解程式碼庫而不進行更改時,它會委派給 Explore。這樣可以將探索結果保持在主要對話上下文之外。當呼叫 Explore 時,Claude 指定一個徹底程度:quick 用於目標查詢,medium 用於平衡探索,或 very thorough 用於全面分析。- 若要封鎖特定的內建類型,請將其新增至
permissions.deny,如停用特定 subagents 中所示。 - 若要防止 Claude 委派給任何 subagent,請使用
permissions.deny拒絕Agent工具本身。 - 若要僅移除內建的
Explore和Plansubagents,請設定CLAUDE_CODE_DISABLE_EXPLORE_PLAN_AGENTS=1。Claude 會直接讀取和探索檔案,而不是委派給它們。需要 Claude Code v2.1.198 或更新版本。 - 在非互動式模式和 Agent SDK 中,設定
CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS=1以移除所有內建類型,並僅提供您自己的。
general-purpose subagent 可回退時,省略 subagent_type 的 Agent 工具呼叫會失敗,並出現 subagent_type is required 錯誤。
除了這些內建 subagents 之外,您可以建立自己的 subagents,具有自訂提示、工具限制、權限模式、hooks 和 skills。以下部分展示如何開始和自訂 subagents。
快速入門:建立您的第一個 subagent
Subagents 是具有 YAML frontmatter 的 Markdown 檔案。若要建立一個,請要求 Claude 為您撰寫,或 自行撰寫檔案。 本逐步指南建立一個使用者層級的 subagent,用於審查程式碼並提出改進建議。1
要求 Claude 建立 subagent
在 Claude Code 中,描述您想要的 subagent 及其儲存位置:Claude 會撰寫包含
name、description、tools 清單、model 和系統提示詞的檔案。2
檢查檔案
開啟 因為檔案位於
~/.claude/agents/code-improver.md 並確認 frontmatter 符合您的要求。結果如下所示:~/.claude/agents/,所以 subagent 在您機器上的每個專案中都可用。若要改為將其範圍限制在一個專案,請將其移至該專案的 .claude/agents/ 目錄。選擇 subagent 範圍 比較了兩者。3
試試看
要求 Claude 委派給新的 subagent:Claude 委派給您的新 subagent,它掃描程式碼庫並返回改進建議。在逐字稿中,委派會顯示為工具呼叫列,顯示 subagent 的名稱,後面跟著簡短的工作描述,例如
code-improver(Suggest code improvements)。如果 Claude 找不到新的 subagent,請重新啟動 Claude Code 並再試一次。這只在 ~/.claude/agents/ 在工作階段開始前不存在時發生,因為執行中的工作階段不會偵測到新建立的 agents 目錄。執行
/agents 會列印提醒,請您詢問 Claude 或直接編輯 .claude/agents/ 和 ~/.claude/agents/。
在 Claude Code v2.1.197 及更早版本上,/agents 開啟一個互動式精靈,其中包含列出即時 subagents 的 Running 標籤和用於建立、編輯和刪除它們的 Library 標籤。設定子代理
子代理的檔案位置決定了誰可以使用它,其 frontmatter 決定了它可以做什麼。本節涵蓋子代理檔案的位置以及它們支援的每個欄位。選擇子代理範圍
根據範圍將子代理檔案儲存在不同位置。當多個子代理共享相同名稱時,Claude Code 會使用來自優先級較高位置的子代理。
專案子代理(
.claude/agents/)最適合特定於程式碼庫的子代理。將它們簽入版本控制,以便您的團隊可以協作使用和改進它們。
專案子代理是透過從目前工作目錄向上走來發現的,因此會掃描該處和儲存庫根目錄之間的每個 .claude/agents/。當這些巢狀目錄中的多個定義相同的 name 時,Claude Code 會使用最接近工作目錄的定義。
當您使用 --add-dir 或 /add-dir 新增目錄時,Claude Code 也會載入其 .claude/agents/ 資料夾,以及您的專案子代理。請參閱其他目錄以了解哪些其他設定類型從 --add-dir 載入。若要在不使用 --add-dir 的情況下跨專案共享子代理,請使用 ~/.claude/agents/ 或 plugin。
使用者子代理(~/.claude/agents/)是在您的所有專案中可用的個人子代理。
Claude Code 會遞迴掃描 .claude/agents/ 和 ~/.claude/agents/,因此您可以將定義組織到子資料夾中,例如 agents/review/ 或 agents/research/。子目錄路徑不會影響子代理的識別或叫用方式,因為身份僅來自 name frontmatter 欄位。
在整個樹中保持 name 值唯一:如果同一 .claude/agents/ 目錄下(包括其子資料夾)的兩個檔案宣告相同的名稱,Claude Code 只會載入其中一個,由檔案系統讀取順序選擇,而不是依文件記載的優先順序。在巢狀專案目錄之間,則如上所述,最接近工作目錄的定義優先。/doctor 設定檢查會報告同一目錄中共享名稱的檔案,並建議重新命名或移除其餘檔案,只保留一個。
Plugin agents/ 目錄也會遞迴掃描。與專案和使用者範圍不同,plugin 的 agents/ 目錄內的子資料夾成為範圍識別碼的一部分:plugin my-plugin 中位於 agents/review/security.md 的檔案註冊為 my-plugin:review:security。
CLI 定義的子代理在啟動 Claude Code 時作為 JSON 傳遞。它們僅存在於該工作階段,不會儲存到磁碟,使其適合快速測試或自動化指令碼。您可以在單個 --agents 呼叫中定義多個子代理:
- macOS, Linux, WSL
- Windows PowerShell
--agents 也接受保存相同物件的 JSON 檔案的路徑,用於定義太大而無法在命令列上傳遞的情況。例如,claude -p --agents ./agents.json "Review my changes" 從該檔案讀取定義。在互動工作階段中,Claude Code 拒絕檔案路徑。檔案形式需要 Claude Code v2.1.281 或更新版本。
JSON 中的每個頂級鍵是代理的名稱,其值是該代理的定義。不要以 - 開頭的名稱。定義採用這些欄位:
prompt:代理的系統提示,等同於檔案型子代理中的 markdown 主體。prompt可能為空。如果您使用--agent選擇一個具有空prompt且沒有memory欄位的代理作為工作階段的代理,工作階段的系統提示保持不變。空prompt需要 Claude Code v2.1.281 或更新版本。- Frontmatter 欄位:
description、tools、disallowedTools、model、permissionMode、mcpServers、hooks、maxTurns、autoCompactWindow、skills、initialPrompt、memory、effort、background、omitClaudeMd和isolation。 - 忽略的欄位:
color和experimental在此不被接受,被忽略而不是拒絕。
Invalid --agents configuration。
受管子代理由組織管理員部署。將 markdown 檔案放在受管設定目錄內的 .claude/agents/ 中,使用與專案和使用者子代理相同的 frontmatter 格式。受管定義優先於具有相同名稱的專案和使用者子代理。
Plugin 子代理來自您已安裝的 plugins。它們會自動與您的自訂子代理一起載入,並在 @-mention 預輸入中以其範圍名稱出現。有關建立 plugin 子代理的詳細資訊,請參閱 plugin 元件參考。
基於安全考量,外掛 subagent 不支援
hooks、mcpServers 或 permissionMode frontmatter 欄位。從外掛載入 agent 時,這些欄位會被忽略。如果您需要它們,請將 agent 檔案複製到 .claude/agents/ 或 ~/.claude/agents/。您也可以在 settings.json 或 settings.local.json 中將規則新增到 permissions.allow,但這些規則會套用於整個工作階段,而不僅是外掛 subagent。如果您是該外掛的作者,請改為將 hook 放在外掛的 hooks/hooks.json 中,並將 MCP 伺服器放在其 .mcp.json 中一併發布。只要外掛處於啟用狀態,它們就會套用,而不僅限於 subagent 內部。編寫子代理檔案
子代理檔案使用 YAML frontmatter 進行設定,後面是 Markdown 中的系統提示:Claude Code 監視
~/.claude/agents/ 和 .claude/agents/。當您在磁碟上新增或編輯子代理檔案,或要求 Claude 為您編寫一個時,Claude Code 會在幾秒內偵測到變更,下一次委派會使用更新的定義,無需重新啟動。三種情況仍需要重新啟動:- 監視程式僅涵蓋工作階段開始時存在的目錄,因此在新
agents目錄中建立範圍的第一個代理檔案後,重新啟動以載入它。 - Claude Code 不監視透過
--add-dir或/add-dir新增的目錄內的.claude/agents/,因此在那裡新增或編輯子代理後,重新啟動以載入變更。 - 使用
--disable-slash-commands啟動的工作階段根本不監視這些目錄。
.claude/agents/code-reviewer.md
--append-subagent-system-prompt 以將您的文字附加到每個子代理的系統提示末尾,包括巢狀子代理,除了分叉子代理,它重複使用對話自己的提示。需要 Claude Code v2.1.205 或更新版本。如果您的文字太長而無法在命令列上傳遞,請將其儲存到檔案並改為使用 --append-subagent-system-prompt-file 傳遞路徑。檔案旗標需要 Claude Code v2.1.261 或更新版本。
子代理在主對話的目前工作目錄中啟動。在子代理內,cd 命令不會在 Bash 或 PowerShell 工具呼叫之間持續,也不會影響主對話的工作目錄。若要改為給子代理儲存庫的隔離副本,請設定 isolation: worktree。
具有 isolation: worktree 的 subagent 會在其 worktree 內執行其 Bash 和 PowerShell 命令。若命令的工作目錄改為解析到您的主簽出(例如因為 worktree 目錄在 subagent 執行期間被移除),該命令會失敗並出現錯誤。
此工作目錄檢查涵蓋包含您啟動 Claude Code 的目錄的整個儲存庫。當您的工作階段在其自己的連結 worktree 中執行時,檢查也涵蓋該 worktree 連結的主簽出。在 v2.1.210 之前,檢查僅涵蓋啟動目錄本身。其工作目錄解析到同一儲存庫中其他位置的命令(例如,當您從 monorepo 子目錄啟動 Claude Code 時的儲存庫根目錄)在那裡執行,而不是失敗。
對於 Bash 命令,Claude Code 也以兩種方式檢查命令本身:
- 它阻止將 git 重定向到主簽出的命令。
- 當它無法從命令文字驗證命令執行的任何 git 都保留在 worktree 內時,它拒絕命令,例如當命令名稱在執行時計算時。
isolation: worktree 的子代理;請參閱Claude Code 如何強制隔離。
Frontmatter 參考
使用 YAML frontmatter 在檔案頂部的--- 標記之間設定子代理,並在結束 --- 之後將其系統提示寫為 Markdown。只有 name 和 description 是必需的。
多字欄位名稱使用 camelCase,例如 maxTurns 和 disallowedTools,必須與表格完全相符:Claude Code 會忽略它無法識別的欄位而不報告錯誤。
- 若要找出已載入之 subagent 中拼錯的欄位,請在 shell 中執行
claude --debug,並在位於~/.claude/debug/<session-id>.txt的除錯日誌中搜尋does not recognize or apply。除錯日誌會列出 subagent 檔案中最多五個 Claude Code 無法識別的頂層欄位,並在有相近的支援欄位時提供可能想要的名稱。需要 Claude Code v2.1.296 或更新版本。 - 若要找出 subagent 檔案未載入的原因,請參閱Claude Code 跳過的 subagent 檔案。