Skip to main content
Subagents 是專門的 AI 助手,用於處理特定類型的任務。當側面任務會用搜尋結果、日誌或檔案內容淹沒您的主要對話時,請使用一個 subagent,而您不會再次參考這些內容:subagent 在自己的上下文中執行該工作,並僅返回摘要。當您持續產生相同類型的工作者並使用相同指令時,定義自訂 subagent。 每個 subagent 在自己的 context window 中執行,具有自訂系統提示、特定工具存取和獨立權限。它也會傳送自己的請求,這些請求計入與您的主要對話相同的使用限制。當 Claude 遇到與 subagent 描述相符的任務時,它會委派給該 subagent,該 subagent 獨立工作並返回結果。若要在實踐中查看上下文節省,context window visualization 會逐步說明一個 subagent 在自己的獨立視窗中處理研究的工作階段。
Subagents 在單一工作階段內工作。若要執行許多獨立工作階段並行並從一個地方監控它們,請參閱 background agents。對於相互通訊的工作階段,請參閱 cross-session messaging。對於 Claude 產生和監督的協調團隊工作階段,請參閱 agent teams。
Subagents 可以幫助您:
  • 保留上下文,將探索和實現保持在主要對話之外
  • 強制執行約束,限制 subagent 可以使用的工具
  • 跨專案重複使用配置,使用使用者層級的 subagents
  • 專門化行為,針對特定領域使用專注的系統提示
  • 控制成本,將任務路由到更快、更便宜的模型,如 Haiku
Claude 使用每個 subagent 的描述來決定何時委派任務。當您建立 subagent 時,請寫一個清晰的描述,以便 Claude 知道何時使用它。 這些描述會佔用上下文,因此請保持簡短。當您的 subagents(除了內建的 subagents 外)的合併描述超過 15,000 個 tokens 時,Claude Code 會在啟動時顯示 警告,並顯示總 token 計數。修剪您的 subagents 的 description 欄位,並將詳細資訊移至每個 subagent 的系統提示中,該提示僅在該 subagent 執行時載入。

內建 subagents

Claude Code 包括內建 subagents,Claude 在適當時會自動使用。每個都繼承父對話的權限規則;大多數以受限的工具集執行。 Explore 和 Plan 啟動時不會載入您的 CLAUDE.md 檔案和 git status 快照,以保持研究快速且經濟高效。其他內建和自訂 subagent 都會載入兩者,除非您在自訂 subagent 的定義中設定 omitClaudeMd,使其啟動時不載入使用者、專案和本機 CLAUDE.md 檔案。如需了解到達 subagent 的完整詳細資訊,請參閱啟動時載入的內容。
一個快速、唯讀的代理,針對搜尋和分析程式碼庫進行最佳化。
  • 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 會維持使用主要對話的模型。
  • Tools:唯讀工具;Write 和 Edit 被拒絕
  • Purpose:檔案發現、程式碼搜尋、程式碼庫探索
一個名為 Explore 的使用者或專案 subagent 會覆寫內建的,並保留其自己的 model 欄位,因此定義一個具有 model: haiku 的 subagent,即可在較低成本的模型上執行探索。若要將單一模型強制套用至每個 subagent(包括 Explore),請參閱在一個模型上執行每個 subagent。當 Claude 需要搜尋或理解程式碼庫而不進行更改時,它會委派給 Explore。這樣可以將探索結果保持在主要對話上下文之外。當呼叫 Explore 時,Claude 指定一個徹底程度:quick 用於目標查詢,medium 用於平衡探索,或 very thorough 用於全面分析。
內建 subagents 在互動式工作階段中預設會被註冊。若要限制它們: 當工作階段沒有 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 目錄。
現在您有一個 subagent,可以在機器上的任何專案中使用它來分析程式碼庫並提出改進建議。 您也可以手動撰寫 subagent 檔案、透過 CLI 旗標定義它們,或透過外掛分發它們。以下部分涵蓋所有設定選項。
執行 /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 呼叫中定義多個子代理:
在非互動模式中,--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 在此不被接受,被忽略而不是拒絕。
有關 Claude Code 對無法載入的值所做的操作,以及跳過該檢查的旗標和環境變數,請參閱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 內部。
您也可以將 subagent 定義重複用作 agent team 的隊員:在要求 Claude 產生隊員時指定 subagent 類型,Claude Code 就會將該定義的部分內容套用到該隊員。將 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
frontmatter 定義子代理的中繼資料和設定。主體成為指導子代理行為的系統提示。子代理僅接收此系統提示加上基本環境詳細資訊(如工作目錄),而不是 Claude Code 系統提示。 在非互動模式中,傳遞 --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 內時,它拒絕命令,例如當命令名稱在執行時計算時。
重定向向量和形狀規則列在Claude Code 如何強制隔離下。PowerShell 命令僅獲得工作目錄檢查。 Monitor 命令經過與 Bash 命令相同的工作目錄和命令內容檢查。 當主對話本身在 worktree 中隔離執行時,Claude Code 對工作階段和它生成的每個子代理應用相同的檢查,包括沒有 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 檔案。