Claude Code 自定義 subagent 實例:測試員、調試員、只讀調研員、只讀數據庫員怎麼寫

四個可直接改的 subagent 實例:跑測試的 test-runner、找根因的 debugger、只讀調研員、用 PreToolUse hook 限成只讀 SQL 的 db-reader;講 tools、disallowedTools、model、maxTurns 怎麼配,怎麼點名調用。

NNathaniel bigo··原創首發·AI 輔助撰寫
8 分鐘讀完
資料核對於 2026-11-05 · 依據官方文檔與公開資料整理 Plus 帳號
本文根據 Claude Code 官方《Create custom subagents》整理,資料核對於 2026-11-05。配圖為本站整理的示意圖,不是介面截圖。測試員和調試員的提示詞是本站自己擬的示例。本站(bigolab.com)不是 Anthropic 官方網站。

適用於誰

  • 已經看過 /guides/claude-code-subagents,知道子代理是什麼,但不知道具體怎麼寫的人;
  • 想讓「跑測試、查報錯」這類輸出很囉嗦的工作留在獨立上下文裏,不污染主對話的人;
  • 想給子代理加上硬性限制(比如只能讀數據庫)的人。

結論先說

  1. 子代理就是一個帶前置字段的 Markdown 文件,放在 .claude/agents/(當前項目)或 ~/.claude/agents/(你所有項目)。只有 name 和 description 是必填。
  2. description 決定會不會被自動調用:官方說 Claude 按它來判斷是否委派,加上「use proactively」這類措辭能促進自動調用。
  3. 權限靠 tools 收窄:只讀的角色只給 Read、Grep、Glob;官方寫明省略 tools 就繼承所有可用工具。
  4. 想攔截具體命令,用 hook 而不是 tools:官方明確說 disallowedTools: Bash(git push *) 這種帶參數的寫法會把整個 Bash 去掉,要攔具體命令需要 permissions.deny 規則或 PreToolUse hook。
  5. 子代理用的是同一份額度:官方寫明子代理請求計入與主對話相同的用量限制,所以別建太多、別讓它們跑太久。

四個示例的工具與用途

圖:本站根據 Claude Code 官方《Create custom subagents》 整理的示意圖

代碼審查員的寫法已經在 /guides/claude-code-subagents 裏給過,本文不重複,只補它沒有的角色。

一、測試員:test-runner

適用場景:跑完整測試輸出幾百行,你只想知道哪幾個失敗、為什麼。讓子代理去跑,只把摘要帶回主對話,這正是官方說子代理能「把冗長輸出留在主對話之外」的用法。

.claude/agents/test-runner.md:

markdown
---
name: test-runner
description: 運行測試並彙報結果。修改代碼後或用戶要求跑測試時主動使用(use proactively)。
tools: Read, Grep, Glob, Bash
model: sonnet
maxTurns: 15
---

你是測試執行員。被調用時:
1. 先用 Glob 和 Grep 找出與改動相關的測試文件
2. 運行相關測試(優先單個文件,其次全量),命令見項目的 CLAUDE.md
3. 只彙報:通過數、失敗數;每個失敗用例的名字、斷言資訊、最可能的原因
4. 不要修改任何文件,不要自己修復

輸出格式:先給一行總結,再列失敗項。

幾點說明:

  • tools 裏沒有 Edit 和 Write,所以它只能跑命令和讀文件,改不了代碼,這個「不要修改」就有了硬保證;
  • maxTurns: 15 是官方字段,限制它最多走多少個回合,到上限時輸出會被標記為部分結果,可以繼續;
  • model: sonnet 用別名固定模型。官方給出的解析順序是:調用時傳入的別名、frontmatter 的 model、環境變量 CLAUDE_CODE_SUBAGENT_MODEL、最後才是主對話的模型。

二、調試員:debugger

調試員要能改代碼,所以不寫 tools,讓它繼承全部工具:

markdown
---
name: debugger
description: 排查報錯和測試失敗的專家。遇到異常、堆棧或失敗的測試時主動使用。
---

你是調試專家。被調用時:
1. 先復現問題:讀報錯訊息和堆棧,找到出錯位置
2. 提出最多三個可能的原因,逐個用代碼或日誌驗證
3. 找到根因後做最小改動修復,再重新運行相關測試確認
4. 彙報:根因是什麼、改了哪裏、如何驗證

官方文檔裏有一個最簡的 debugger 示例用於 --agents 參數,只寫了說明和一句提示詞;上面這份更詳細的版本是本站擬的。什麼時候用它:問題需要「讀—猜—改—驗」反覆多輪,主對話的上下文不想被中間過程佔滿。如果只是想讓它給建議不改代碼,就改成只讀版本,見下一節。

三、只讀調研員

官方的 safe-researcher 示例原樣如下:

yaml
---
name: safe-researcher
description: Research agent with restricted capabilities
tools: Read, Grep, Glob, Bash
---

想「繼承全部工具但禁止寫文件」,官方給的另一種寫法是用黑名單:

yaml
---
name: no-writes
description: Inherits the available tools except file writes
disallowedTools: Write, Edit
---

兩種寫法的區別:白名單 tools 只給你列的;黑名單 disallowedTools 是先從繼承的全部工具裏去掉,如果同一個工具在兩處都出現,會被去掉。MCP 工具也一樣,官方寫法是 disallowedTools: mcp__github 去掉某個 MCP 伺服器的全部工具。

四、只讀數據庫員:用 hook 攔截寫操作

只放行 SELECT,是官方《子代理》頁給出的完整示例。子代理只給 Bash,再掛一個 PreToolUse hook:

yaml
---
name: db-reader
description: Execute read-only database queries
tools: Bash
hooks:
  PreToolUse:
    - matcher: "Bash"
      hooks:
        - type: command
          command: "./scripts/validate-readonly-query.sh"
---

校驗腳本(需要用 chmod +x 設為可執行,官方說明 macOS 和 Linux 上必須如此):

bash
#!/bin/bash
# ./scripts/validate-readonly-query.sh

INPUT=$(cat)
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty')

# Block SQL write operations (case-insensitive)
if echo "$COMMAND" | grep -iE '\b(INSERT|UPDATE|DELETE|DROP|CREATE|ALTER|TRUNCATE)\b' > /dev/null; then
  echo "Blocked: Only SELECT queries are allowed" >&2
  exit 2
fi

exit 0

關鍵點:腳本以退出碼 2 結束並把原因寫到 stderr,就會阻止這次工具調用;退出碼 0 放行。frontmatter 裏的 hook 只在這個子代理運行期間生效;對於放在項目裏的子代理文件,官方還說明需要先接受工作區信任對話框,hook 才會運行。hook 的基礎見 /guides/claude-code-hooks。

五、怎麼調用它們

寫子代理前的檢查清單

圖:本站根據 Claude Code 官方《Create custom subagents》 整理的示意圖

官方列了三種方式,由弱到強:

  1. 自然語言點名:例如「用 test-runner 子代理跑一下失敗的測試」,Claude 通常會委派;
  2. @ 提及:輸入 @ 選子代理,例如 @"code-reviewer (agent)" 看一下認證相關的改動。你的整條消息仍然交給 Claude,由它來寫給子代理的任務提示;
  3. 整個會話換成它:claude --agent code-reviewer,主線程會採用該子代理的工具限制和模型;在 .claude/settings.json 裏寫 "agent": "code-reviewer" 可設為項目預設,命令行參數優先於設定。

現在的 /agents 命令只提醒你讓 Claude 創建或直接編輯目錄,交互向導只在 v2.1.197 及更早版本里有。

如果你想讓測試員和調試員聯動,不必自己寫調度邏輯:官方說明子代理預設可以再啟動子代理,最多往下三層,可用環境變量 CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH 調整,設為 1 則禁用嵌套。

常見問題

Q:子代理沒有被自動調用?

先看 description 是否寫清了觸發場景;再用「用 xxx 子代理……」明確點名試一次。名字以 name 字段為準,不是文件名。

Q:子代理 vs 技能 vs hook 怎麼選?

需要獨立上下文、隔離冗長輸出用子代理;固定流程用技能;硬性攔截用 hook,對比見 /guides/skill-vs-mcp-vs-subagent-vs-hook。

Q:會不會很費額度?

會。每個子代理都有自己的上下文窗口和調用,並計入同一份用量。需要更多額度可以了解 Claude Code 訂閱方案;同時給每個子代理設 maxTurns 和便宜的 model。

參考資料

  • Claude Code 官方:Create custom subagents — https://code.claude.com/docs/en/sub-agents

Nathaniel 的更多內容

  1. 01

    Claude Personal Finance 是什麼:連銀行帳戶問花銷、怎麼開、只讀權限、誰能用、怎麼解除

    Claude 的 Personal Finance(beta)通過 Plaid 只讀連接你的銀行、信用卡、貸款和投資帳戶,在一頁裏看餘額和花銷並用自然語言提問。本文按官方幫助頁講誰能用(僅美國、Pro/Max/Ultra)、連接與解除步驟、Claude 能看什麼,以及它做不到的事。

    Claude0
  2. 02

    Claude Code 離開一小時回來對話被「壓縮」了:Idle compaction 是什麼、條件、怎麼關

    Claude Code 的 idle compaction 會在你離開約一小時後,把 200K token 以上的長對話先壓縮成摘要,下一條消息就不用重新處理整段歷史。本文按官方文檔講觸發條件、看到什麼提示、用 /config 或 idleCompaction 關閉、調閾值,以及恢復舊對話的用量警告。

    Claude0
  3. 03

    ChatGPT Computer History 是什麼:Mac 桌面端的活動記憶怎麼開、怎麼暫停和清除、誰能用

    Computer History 是 ChatGPT macOS 桌面應用裏預設關閉的可選功能,把你在應用和網站裏的活動整理成記憶和時間線,供 ChatGPT 與 Codex 引用。本文按官方文檔講怎麼開、記錄什麼不記錄什麼、怎麼暫停與清除、數據存哪、誰能用,以及提示注入風險。

    ChatGPTCodex0
  4. 04

    Codex 輸入框出現灰色建議:Composer predictions 是什麼、Tab 接受、怎麼關、誰能用

    Codex 桌面 App 的 Composer predictions(beta)會在 Codex 回完後,根據當前對話在輸入框裏給出下一條消息的建議,按 Tab 接受、不會自動發送。本文按官方幫助頁講誰能用、哪些線程支持、怎麼關、算不算額度,以及沒出現時怎麼查。

    ChatGPTCodex0
  5. 05

    ChatGPT 私隱中心(Privacy Center)在哪裏:私隱設定入口、三大分類和哪些套餐有

    ChatGPT 的 Privacy Center 把記憶、廣告、位置、臨時對話、鎖定對話、兩步驗證、模型改進、數據導出和刪號等入口集中到一頁。本文按官方幫助頁講怎麼打開、三大分類各有什麼、哪些套餐有,以及它不會替你改任何設定。

    ChatGPT0
  6. 06

    Claude Code 處理大倉庫:怎麼讓它只看需要的目錄(子目錄 CLAUDE.md、claudeMdExcludes、deny 規則)

    倉庫太大,Claude Code 總在讀無關文件、讀進別的包的規則?本文按官方大倉庫指南講:從哪個目錄啟動、子目錄 CLAUDE.md、claudeMdExcludes、Read 的 deny 規則、worktree.sparsePaths、additionalDirectories,以及一份合併後的配置示例。

    Claude0

同產品的其他教學

  1. 01

    Claude Code 在 CI 裏跑:從本機 claude -p 到 GitHub Actions 的完整例子(自動審 PR、控成本)

    一條線走完 Claude Code 的 CI 用法:先在本機用 claude --bare -p 配 --json-schema 跑通,再寫進 GitHub Actions 用 claude-code-action@v1 自動審 PR,最後加上 --max-turns、超時、並發限制來控成本,並附上常見故障的排查順序。

    Claude0
  2. 02

    Claude Code 的 CLAUDE.md 模板:前端、後端、數據分析各一份,附拆分與自檢方法

    直接拿去改的三份 CLAUDE.md 模板(前端、後端、數據分析),每份都控制在官方建議的 200 行以內;再講怎麼用 .claude/rules 的 paths 拆出專屬規則、用 @ 導入長文檔,以及用 /context all 和 /doctor prompt-audit 檢查是否生效。

    Claude0
  3. 03

    Claude Code 自己寫一個插件並發布到 marketplace:plugin.json、marketplace.json、validate 到團隊安裝的完整流程

    想把自己寫的 Skill、Hook 打包給團隊用?按 Claude Code 官方 Plugins 文檔,從目錄結構、plugin.json、claude plugin validate,到寫 marketplace.json、推到 Git、讓同事一條命令安裝,再到版本更新,走完一遍完整流程。

    Claude0
  4. 04

    Claude Code 寫一個會自動觸發的 Skill:從需求到觸發,用 description、when_to_use 和 paths 控制它什麼時候出場

    寫好的 Skill 總是不觸發,或者什麼都觸發?本文按 Claude Code 官方「Extend Claude with skills」走一遍完整實例:把「改數據庫遷移前先檢查」寫成一個會自動出場的 Skill,包含 description、when_to_use、paths、附帶腳本、觸發測試和評估。

    Claude0
  5. 05

    Claude Code 配 Sentry MCP 排查線上報錯:添加命令、瀏覽器授權、貼 issue 連結修 bug 和插件子智能體

    線上報錯只能手動複製堆棧給 Claude Code?Sentry 官方提供 MCP 服務,可以讓它直接讀 issue、堆棧和 trace。本文按 Claude Code 官方 MCP 文檔和 Sentry MCP 官方說明,講添加命令、/mcp 授權、典型排查流程、插件方式和自託管注意事項。

    Claude0
  6. 06

    Claude Code 配 Context7 MCP 查最新文檔:兩種安裝方式、use context7 怎麼寫、指定庫和版本

    Claude Code 寫出來的代碼用了舊版 API?Context7 是一個把庫的最新文檔餵給編程助手的 MCP 服務。本文按 Context7 官方倉庫和文檔,講兩種安裝方式、在 Claude Code 裏的添加命令、use context7 與 library ID 的寫法,以及使用時的注意事項。

    Claude0

0 條評論

登入 後參與評論

還沒有評論,來搶沙發~