首页 › tutorials › 自定义子代理:打造专家团队

概述

当单一 Claude 会话同时承担架构设计、写测试、查安全、写文档时,上下文很快会被搜索结果、日志和文件内容淹没,主线任务被迫中断。本教程教你用 Claude Code 的子代理(Subagents)机制,在 .claude/agents/ 下定义一组各司其职的"专家",让主会话像项目经理一样把子任务委派出去,各自在独立上下文窗口里工作,只把结论交回来。学完你将掌握:子代理的创建、frontmatter 全字段配置、工具围栏、模型分级、并行委派,并能落地一个由架构师、测试、安全三位专家组成的"代码审查团队"。适合已跑通 Claude Code 基础用法、想从单兵作战升级到团队协作的开发者。

前置条件


一、为什么单一 Agent 不够:子代理解决的三类痛点

主会话(main thread)是你和 Claude 对话的那个上下文窗口。它有一个硬约束:容量有限。一旦你让它在主线里跑 grep 全仓库、读十几个文件、跑测试看日志,这些中间产物就会挤占宝贵的上下文额度,把真正要解决的问题"挤出"记忆。

子代理正是为切断这种污染而设计。它有三个本质特征:

  1. 独立上下文窗口:子代理在自己独立的上下文里运行,搜索结果、日志、文件内容都留在它自己的窗口里,主会话只拿到它返回的摘要。
  2. 受限工具集:你可以规定某个子代理只能读不能写,或只能调用特定 MCP 服务器。
  3. 专属系统提示:子代理只接收你写的系统提示加上基本环境信息(工作目录等),不继承主会话的完整系统提示,因此可以高度专业化。
flowchart LR
    User([你]) -->|对话| Main[主会话<br/>项目经理]
    Main -->|委派研究| Exp[Explore 子代理<br/>Haiku·只读]
    Main -->|委派审查| Arch[架构师 子代理<br/>Opus]
    Main -->|委派测试| Test[测试 子代理<br/>Sonnet]
    Main -->|委派安全| Sec[安全 子代理<br/>Haiku]
    Exp -.只返回摘要.-> Main
    Arch -.只返回结论.-> Main
    Test -.只返回报告.-> Main
    Sec -.只返回清单.-> Main
    style Main fill:#ffe9b3,stroke:#b8860b,stroke-width:2px

Claude Code 内置了几个开箱即用的子代理,理解它们是写好自定义子代理的前提:

内置子代理 模型 工具 用途
Explore Haiku(快、低延迟) 只读(禁止 Write/Edit) 代码搜索、文件发现、代码库探索
Plan 继承主会话 只读 plan 模式下做研究、收集上下文
general-purpose 继承主会话 全部工具 需要既探索又修改的复杂多步任务

注意一个关键设计:Explore 和 Plan 会跳过你的 CLAUDE.md 和主会话的 git 状态,以保证研究既快又便宜;而其他自定义子代理都会加载这两者。这个差异在后面调优成本时很重要。


二、创建第一个子代理:两种姿势

姿势 A:用 /agents 命令(推荐新手)

在交互会话里输入:

/agents

切到 Library 标签 → Create new agent。你可以选 Generate with Claude,用自然语言描述需求,例如:

A code improvement agent that scans files and suggests improvements for readability, performance, and best practices.

Claude 会自动生成 name、description 和系统提示词。接着依次选择:工具(只读审查就只勾 Read-only tools)、模型(选 Sonnet 平衡能力与速度)、显示颜色、记忆范围(选 User scope 会让它在 ~/.claude/agent-memory/ 跨会话积累经验)。保存后立即生效,无需重启。

姿势 B:手写 Markdown 文件(推荐自动化、版本控制)

子代理就是一个带 YAML frontmatter 的 .md 文件。最简形态:

---
name: code-reviewer
description: Reviews code for quality and best practices
tools: Read, Glob, Grep
model: sonnet
---

You are a code reviewer. When invoked, analyze the code and provide
specific, actionable feedback on quality, security, and best practices.

文件放哪决定了它的作用域,优先级从高到低:

位置 作用域 优先级
托管设置(managed settings) 组织级 1(最高)
--agents CLI 参数 仅本次会话 2
.claude/agents/(项目内) 当前项目 3
~/.claude/agents/(用户级) 你的所有项目 4
插件的 agents/ 目录 插件启用处 5(最低)

实践建议:与具体代码库绑定的专家(如"本项目的领域规则审查员")放 .claude/agents/ 并提交进 git,让全团队共享;与个人习惯绑定的(如"我的 commit message 润色员")放 ~/.claude/agents/。

一个重要细节:子代理在会话启动时加载。如果你直接在磁盘上新建/编辑了文件,需要重启会话才能识别;而通过 /agents 界面创建的则会立即生效。

还有一个命令行姿势,适合自动化脚本里临时定义、不留盘的子代理:

claude --agents '{
  "code-reviewer": {
    "description": "Expert code reviewer. Use proactively after code changes.",
    "prompt": "You are a senior code reviewer. Focus on quality, security, and best practices.",
    "tools": ["Read", "Grep", "Glob", "Bash"],
    "model": "sonnet"
  },
  "debugger": {
    "description": "Debugging specialist for errors and test failures.",
    "prompt": "You are an expert debugger. Analyze errors, identify root causes, and provide fixes."
  }
}'

注意 JSON 形态下用 prompt(对应文件形态的 Markdown 正文)承载系统提示词。


三、frontmatter 全字段解析:把专家调到最佳状态

这是本教程最硬核的一节。下表是官方支持的完整字段,只有 name 和 description 必填:

字段 作用 取值要点
name 唯一标识,小写+连字符 hooks 里以 agent_type 收到此值;文件名不必与之一致
description 决定 Claude 何时委派给它 写清楚"什么时候该用我",是自动触发准确性的命脉
tools 允许使用的工具(白名单) 省略则继承主会话全部工具
disallowedTools 禁用的工具(黑名单) 会先于 tools 生效
model 使用的模型 sonnet/opus/haiku/fable/完整 ID(如 claude-opus-4-8)/inherit
permissionMode 权限模式 default/acceptEdits/auto/dontAsk/bypassPermissions/plan
maxTurns 最大轮数 防止失控的兜底
skills 启动时预加载的 Skills 完整内容注入,而非仅描述
mcpServers 该子代理专属的 MCP 服务器 内联定义或按名引用
hooks 该子代理作用域内的生命周期钩子
memory 持久记忆范围 user/project/local
background 是否总以后台任务运行 true/false
effort 思考强度 low/medium/high/xhigh/max,取决于模型
isolation 隔离模式 设为 worktree 则在临时 git worktree 中运行
color 显示颜色 red/blue/green/yellow/purple/orange/pink/cyan
initialPrompt 作为主线 agent 时的首条自动提交 经 --agent 或 agent 设置启动时

三个最容易被忽视、却极有价值的字段:

description 是自动委派的灵魂。 Claude 完全靠它判断"这个任务该不该交给这个子代理"。写得越具体、越能触发,越不容易误派。对比:

# ❌ 太模糊,容易和内置 Explore 抢活
description: Searches the codebase

# ✅ 具体、有边界,触发精准
description: Audits TypeScript code for missing error handling around async/await and Promise chains. Use after backend route handlers or API client code changes.

isolation: worktree 让并行专家不互相踩脚。 默认情况下子代理共享主会话的工作目录,多个专家同时改文件会冲突。设为 worktree 后,每个子代理拿到一份临时仓库副本(默认从你的 default branch 而非父会话 HEAD 分支),干完活若没改动会自动清理。

memory 让专家越用越聪明。 设为 project 后,子代理会在 .claude/agent-memory/ 跨会话积累洞见——比如"这个仓库习惯用 Zod 做校验"、"用户偏好函数式写法"。


四、工具围栏:给专家划定安全作业半径

工具控制有两条独立轴线,可以单独或组合使用。

白名单(tools)——只给最少必要工具:

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

这个研究员能读、能搜、能跑命令,但不能写、不能改。

黑名单(disallowedTools)——继承全部工具,只摘掉危险的:

---
name: no-writes
description: Inherits every tool except file writes
disallowedTools: Write, Edit
---

两条都设时,先按 disallowedTools 摘除,再在剩余集合里按 tools 取交集;同时出现在两边的一律删除。

MCP 工具也能按服务器粒度控制,写法是 mcp__<server> 或 mcp__<server>__*:

---
name: local-only
description: Inherits every tool except those from the github MCP server
disallowedTools: mcp__github
---

黑名单里写 mcp__* 可以一次性摘掉所有 MCP 工具。

还有一类需要特别留意——有些工具永远不可用于子代理,即使你写进 tools 也没用:AskUserQuestion、EnterPlanMode、ScheduleWakeup、WaitForMcpServers,以及(除非子代理处于 plan 模式的)ExitPlanMode。原因都是这些工具依赖主会话的 UI 或会话状态。

最后一个高级技巧:当一个 agent 通过 claude --agent 当作主线运行时,可以用 Agent(worker, researcher) 这种语法限制它只能再生成哪几种子代理,实现"协调员-工人"的层级编排。


五、模型分级:能力与成本的精密天平

模型选择是子代理区别于普通提示词工程的最大杠杆——你终于可以按任务难度给不同专家配不同档位的脑子。模型解析顺序为:

  1. 环境变量 CLAUDE_CODE_SUBAGENT_MODEL(若设置,全局覆盖)
  2. 单次调用的 model 参数
  3. 子代理定义里的 model 字段
  4. 主会话模型

实务上的黄金分配:

专家角色 推荐模型 理由
架构设计、复杂重构决策 Opus(opus 或 claude-opus-4-8) 需要最强推理
常规代码审查、写测试 Sonnet(sonnet) 能力与速度平衡
大范围搜索、模式匹配、格式校验 Haiku(haiku) 快、便宜,规模化扫库

一条经验法则:让 80% 的"杂活"跑在 Haiku 上,把 Opus 留给真正需要深思的 20%。 一个用 Haiku 扫全库找未捕获 Promise 的子代理,成本可能只有 Opus 版的十几分之一,而结果几乎一样好。


六、并行委派:让专家团队同时开工

子代理不是串行工具,Claude 会在一条消息里同时委派多个独立任务,让它们并发执行。这种"扇出(fan-out)"是把复杂工作切成可并行块的关键。

显式调用子代理有三种方式:

  1. 自然语言委派:Use the code-reviewer agent to review src/api/
  2. @-mention:在消息里 @code-reviewer 直接点名
  3. 作为主线启动:claude --agent code-reviewer,此时它成为主会话,可配合 initialPrompt 自动执行首条指令

并行委派的典型场景:当你下达"帮我全面体检这个 PR"时,Claude 会判断出架构审查、测试覆盖、安全扫描三者相互独立,于是在一条消息里同时派出三个子代理:

sequenceDiagram
    participant U as 你
    participant M as 主会话(协调员)
    participant A as 架构师 Opus
    participant T as 测试 Sonnet
    participant S as 安全 Haiku
    U->>M: 全面体检 PR #42
    M->>A: 审查模块边界与耦合
    M->>T: 评估测试覆盖率
    M->>S: 扫描注入与密钥泄漏
    par 三个专家并发工作(各自独立上下文/worktree)
        A-->>M: 架构报告
        T-->>M: 覆盖率缺口清单
        S-->>M: 安全风险清单
    end
    M->>U: 汇总三方结论 + 优先级建议

主会话收到的只是三条摘要,而不是三份完整的代码搜索结果——这就是上下文不被污染的全部魔法。


七、实战案例:落地一个"代码审查三专家团队"

下面我们把前面所有概念串起来,构建一个可直接用的项目级团队。在仓库根目录创建三个文件。

文件 1:.claude/agents/arch-reviewer.md —— 架构师,最强模型 + 写权限以便能给出可直接应用的补丁:

---
name: arch-reviewer
description: Reviews module boundaries, coupling, and design patterns in TypeScript/Go backends. Use after changes that touch multiple files or service layers.
model: claude-opus-4-8
tools: Read, Grep, Glob, Bash
effort: high
color: purple
memory: project
---

You are a principal software architect. When invoked:
1. Map the affected modules and their dependencies.
2. Flag tight coupling, circular dependencies, and leaky abstractions.
3. Propose the minimal refactor that preserves behavior.
Return a prioritized list: each item has severity, location (file:line),
problem, and a concrete fix. Do not edit files unless explicitly asked.

文件 2:.claude/agents/test-auditor.md —— 测试审计员,中档模型,worktree 隔离以便它能安全地实际跑测试:

---
name: test-auditor
description: Evaluates test coverage and quality for changed code. Runs the suite and reports gaps.
model: sonnet
tools: Read, Grep, Glob, Bash
disallowedTools: Edit
isolation: worktree
maxTurns: 25
color: green
---

You are a test engineer. When invoked:
1. Identify changed functions/classes from git diff.
2. Run the test suite (`npm test` or equivalent).
3. List untested branches and brittle tests.
Return a coverage gap report. Never commit changes.

文件 3:.claude/agents/security-scanner.md —— 安全扫描员,便宜模型扫全库 + 专属安全 MCP:

---
name: security-scanner
description: Scans for injection, hardcoded secrets, and unsafe deserialization across the repo.
model: haiku
tools: Read, Grep, Glob
mcpServers:
  - github
color: red
---

You are an application security analyst. Scan for:
- SQL/command injection and unsafe eval
- Hardcoded secrets and API keys
- Path traversal and unsafe deserialization
Return a risk list with file:line and remediation. Read-only.

三个文件就位后,重启会话让 Claude Code 加载它们。然后在主会话里下达:

我刚合并了 feat/payment 的改动,请用 arch-reviewer、test-auditor、security-scanner
三个专家并行体检,最后给我一份按严重程度排序的整改清单。

预期结果:Claude 会判断这三项审查相互独立,于是一条消息里同时派出三位专家。架构师用 Opus 在共享目录做推理;测试审计员在独立 worktree 里实际 npm test 拿到真实覆盖率;安全扫描员用 Haiku 快速扫全库。约一两分钟后,你收到一份汇总清单,主会话上下文依然清爽。

把 .claude/agents/ 提交进 git,全团队 git pull 后就能复用同一套专家,这是从"个人工具"升级到"团队资产"的关键一步。


八、常见问题与排坑

子代理没被自动触发? 九成是 description 写得太宽泛,和内置 Explore 撞车。把它改得足够具体——写明触发条件、限定语言/场景。

多个专家改同一文件冲突? 给会改文件的子代理加 isolation: worktree,各自在临时副本上工作。

改动文件后子代理没更新? 直接编辑磁盘文件需要重启会话才生效;用 /agents 界面改则即时生效。

插件子代理的 hooks 不生效? 出于安全,来自插件的子代理会忽略 hooks、mcpServers、permissionMode 三个字段。需要时把文件复制到 .claude/agents/ 下。

想完全屏蔽某个内置子代理? 在 permissions.deny 里加 Agent(屏蔽所有)或具体类型,或设置环境变量 CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS=1。

子代理成本失控? 检查是否该用 Haiku 的搜索型任务误配了 Opus;用 maxTurns 给长任务兜底;用 disallowedTools 防止意外的 MCP 调用。


九、延伸阅读

下一步进阶方向:把本教程的三专家团队与 hooks 结合,让 PostToolUse 在每次提交后自动触发这套审查流水线;或进一步探索 Agent Teams,让多个会话之间通过共享任务列表真正"对话"协作。


十、训练营适用性评估


参考来源

  1. Create custom subagents — Claude Code Docs — 官方子代理权威文档,frontmatter 全字段表、scope 优先级、工具围栏的出处
  2. Run agents in parallel — Claude Code Docs — subagent / agent view / agent teams 三种并行机制对比
  3. Orchestrate teams of Claude Code sessions — Claude Code Docs — Agent Teams 多会话协作编排(实验特性)
  4. Claude Code Subagents Guide 2026: Parallel Agents — 子代理隔离上下文模型与并行实践详解
  5. Claude Code Subagents and Multi-Agent Orchestration Guide — 多代理编排与委派模式的工程化经验

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入