Subagents
让不同专家处理不同任务——上下文隔离、角色专精、并行协作
一个助手又写代码又做审查,结果两头都不靠谱角色混乱
你有没有发现,让 Claude 同时做实现和审查,两边质量都下降?
上下文膨胀
你让 Claude 先实现一个功能,再审查一遍。它既知道自己的实现意图,又要假装从外部视角审查。审查变成了走过场——它很难对自己的代码说"这里有问题"。
目标冲突
一个会话里既要"写新功能"又要"跑测试"又要"生成文档"。Claude 的注意力被分散,每个任务的输出质量都不如单独做。
安全风险
审查员不应该有写权限。但在同一个会话里,它既能读代码也能改代码——你没法约束它"只看不改"。
什么是 Subagent
定义 → 白话 → 核心特性
Subagent是专门处理某类任务的独立 AI 助手,拥有隔离的上下文、自己的提示词和受限的工具权限。
说白了,它就是一个"被分配了特定角色的同事"——你让它做代码审查,它就只做审查,不带实现的想法进来,也改不了任何文件。
上下文隔离
主 Agent 上下文约 50K token,每个 Subagent 获得干净的独立上下文(约 20K token)。它看不到主会话的对话历史,只接收任务描述,完成后只返回结果——中间过程不污染主上下文。
单一职责
一个 agent 只做一件事。审查员不做实现,实现者不做审查。
最小权限
精确控制每个 agent 能用哪些工具。审查型 agent 只给 Read、Grep、Glob,不给 Edit 和 Write。
并行执行
多个 agent 可以同时处理不同任务。安全审查和质量审查可以并行跑,最后汇总。
配置字段
角色卡 frontmatter 中的每个字段都有明确用途
| 字段 | 必填 | 说明 |
|---|---|---|
name | ✅ | agent 名称,也是文件调用的标识符 |
description | ✅ | 一句话说明"什么时候该调用它"——主 Agent 靠这个决定是否分派 |
tools | ✅ | 允许使用的工具列表。控制权限的核心字段 |
model | 可选 | 指定模型。默认 inherit(继承主 Agent),可设 sonnet/opus/haiku |
prompt | 可选 | 任务提示词。也可以直接写在 markdown 正文中 |
context | 可选 | 上下文策略——控制 agent 能看到多少信息 |
# frontmatter 示例
---
name: data-scientist
description: 数据分析专家,擅长 SQL 和 BigQuery
tools: Bash, Read, Write
model: sonnet # 用 Sonnet 更快更省钱
---
# markdown 正文 = agent 的 system prompt
# Data Scientist Agent
你是一名专注于 SQL 和 BigQuery 分析的数据科学家……
description 决定"何时触发",tools 决定"能做什么"。写错了前者,agent 永远不会被调用;写错了后者,agent 要么干不了活,要么权限过大。
设计原则
设计一个角色卡,需要回答四个问题
1. 单一职责
每个 agent 只负责一个领域。不要让"审查员"同时负责测试。如果两个职责都需要,做两个 agent。
2. 可验证产物
每个 agent 的输出应该有明确的格式和验收标准。这样主 agent 才能汇总多个角色的结果。
3. 最小权限
审查型 agent 只需只读工具(Read、Grep、Glob),不要给写权限。实现型 agent 需要编辑权限,但要限制作用范围。
4. 清晰红线
明确列出"绝对不能做的事"。比如审查员不能改代码,实现者不能删测试。
.claude/agents/(团队共享),用户级 ~/.claude/agents/(个人专用)。
tools: Bash(npm *), Bash(mvn *),只允许特定前缀的命令——这样实现者能跑测试,但没法执行 rm -rf。
角色卡示例
一个 code-reviewer 角色卡长什么样
# 文件:.claude/agents/code-reviewer.md
---
name: code-reviewer
description: 审查代码质量、安全性和可维护性
tools: Read, Grep, Glob
---
# Code Reviewer
你是一名资深代码审查专家。
## 职责
审查代码变更,发现潜在问题并提供改进建议。
## 审查维度
1. **代码质量**:命名、结构、可读性、复杂度
2. **安全性**:输入验证、权限、敏感数据处理
3. **可维护性**:耦合度、扩展性、文档完整度
## 工具权限
- ✅ Read:读取源码
- ✅ Grep:搜索模式
- ✅ Glob:查找文件
- ❌ Edit/Write:只读,不能修改代码
- ❌ Bash:不执行命令
## 输出格式
按严重程度分类:🔴 高危 | 🟡 中等 | 🟢 建议
每条包含:文件路径、行号、问题描述、修复建议
## 红线
- 不修改任何文件
- 不执行任何命令
- 只报告发现,不做决策
model: inherit(继承主 Agent 的模型)。你也可以指定 model: sonnet 为特定角色选模型——比如数据分析 agent 用 Sonnet 更快,审查 agent 用 Opus 更准。
本仓角色一览
看看不同类型的 agent 各自解决什么问题
Code Reviewer 只读
工具:Read, Grep, Glob
审查代码质量、命名规范、结构可读性、耦合度和可维护性。输出按严重程度分类(高/中/建议),每条包含文件路径、行号、问题描述和修复建议。
Secure Reviewer 只读
工具:Read, Grep(最小权限集)
专注安全漏洞:硬编码密钥、SQL 注入、命令注入、XSS、API key 泄露、PII 处理。按 OWASP 分类,每条包含 Severity、漏洞类型、影响和修复方案。
Debugger 读写
工具:Read, Edit, Bash, Grep, Glob
排错流程:分析错误 → 检查最近变更 → 提出假设 → 隔离故障 → 最小修复 → 验证。输出包含根因、证据、修复内容、回归检查。
Test Engineer 读写
工具:Read, Write, Bash, Grep
编写单元测试、集成测试、边界情况测试。遵循项目现有框架(Jest/pytest 等),目标 80%+ 覆盖率,关键路径 100%。
Documentation Writer 读写
工具:Read, Write, Grep
生成 API 文档、用户指南、架构文档和 Changelog。基于实际代码验证准确性,包含参数说明、返回值、错误码和可运行的示例。
Implementation Agent 全权限
工具:Read, Write, Edit, Bash, Grep, Glob
端到端功能实现:理解需求 → 分析代码库 → 制定方案 → 逐步实现 → 边做边测 → 清理重构。红线:不删测试、每次改动不超过 5 个文件、不改配置。
Data Scientist 读写
工具:Bash, Read, Write | 模型:sonnet
SQL 查询、BigQuery 操作、数据洞察。支持探索性分析、统计分析和报告生成。输出包含目标、查询、结果、洞察和建议。
Clean Code Reviewer 只读
工具:Read, Grep, Glob, Bash
按 Clean Code 原则(Robert C. Martin)审查:命名、函数长度、SOLID、DRY/KISS/YAGNI、坏味道。四级严重度:Critical(50 行+函数)→ Low(轻微可读性)。
安装方式
把角色卡放到正确的位置,Claude 就能自动发现
# 方法 1:安装单个角色到项目
$ cp 04-subagents/code-reviewer.md .claude/agents/
# 方法 2:安装全部角色到项目
$ mkdir -p .claude/agents
$ cp 04-subagents/*.md .claude/agents/
# 方法 3:安装到个人目录(跨项目通用)
$ mkdir -p ~/.claude/agents
$ cp 04-subagents/debugger.md ~/.claude/agents/
| 位置 | 作用域 | 共享方式 | 适合放什么 |
|---|---|---|---|
.claude/agents/ | 当前项目 | Git 同步 | 团队审查流程、项目专属角色 |
~/.claude/agents/ | 所有项目 | 不共享 | 个人调试、跨项目通用角色 |
# 在 REPL 中直接管理
$ /agents
# 通过 CLI 查看所有可用 agent
$ claude agents
验证安装
- 运行
/agents,检查对应 agent 是否出现在列表中 - 试着让 Claude 委派一个简单任务,观察是否自动分派
- 直接说"用 code-reviewer 审查这段代码"来手动指定
文件结构 (点击文件名查看角色定义)
.claude/agents/
├── clean-code-reviewer.md
├── code-reviewer.md
├── data-scientist.md
├── debugger.md
├── documentation-writer.md
├── implementation-agent.md
├── secure-reviewer.md
└── test-engineer.md
何时该用
不是所有任务都需要 Subagent——有时直接在主会话做更高效
| 场景 | 该用吗 | 原因 |
|---|---|---|
| 多步骤复杂功能 | 用 | 分离关注点,防止上下文污染 |
| 并行任务执行 | 用 | 每个 subagent 有独立上下文,互不干扰 |
| 需要权限隔离 | 用 | 审查员只读、实现者可写,角色分离更安全 |
| 长时间分析任务 | 用 | 防止主上下文耗尽 |
| 快速代码审查 | 不必 | 开销不值得,直接在主会话做更快 |
| 单一步骤任务 | 不必 | 只增加延迟,没有收益 |
调用方式
四种方式让 Subagent 开始工作
自动委派
主 Agent 根据 description 字段自动判断。你只需正常描述任务,它会自己找到合适的 agent。
用户: "审查这段代码的安全性"
# 主 Agent 自动选择 secure-reviewer
显式指定
直接说出 agent 名称,跳过自动匹配。
用户: "用 code-reviewer 审查 src/auth.ts"
# 直接调用指定角色
@ 提及调用
在对话中通过 @agent-name 方式引用。
用户: "@debugger 这个空指针异常怎么修?"
# 直接唤起 debugger 角色
会话级固定
在整个会话中固定使用某个 agent。适合长时间专注某一领域。
$ claude --agent code-reviewer
# 整个会话都用 code-reviewer
串联协作
多个 agent 依次接力,前一个的输出是后一个的输入
并行不是唯一的协作方式。有些任务天然是串行的——代码写完才该审查,审查完才该补测试,测试通过才该写文档。
# 串联工作流:实现 → 审查 → 测试 → 文档
用户: "给登录模块加上 OAuth2 支持"
主 Agent 编排:
1. implementation-agent → 实现 OAuth2 登录流程
输出: 修改了 4 个文件,新增 auth/oauth2.ts
2. code-reviewer → 审查实现质量
输出: 🟡 2 个中等问题(错误处理不完整、缺少 token 刷新)
3. test-engineer → 为 OAuth2 模块生成测试
输出: 新增 12 个测试用例,覆盖率 92%
4. documentation-writer → 更新 API 文档
输出: 更新了 auth.md,新增 OAuth2 配置指南
设计要点
- 每个 agent 的输出格式要标准化,方便下一个 agent 解析
- 前一步发现问题可以中断链路,让主 Agent 决定是修还是继续
- 串联链路不宜超过 4-5 个环节,否则延迟和 token 消耗会失控
何时用串联 vs 并行
- 有依赖关系 → 串联(实现完了才能审查)
- 互相独立 → 并行(安全审查和质量审查同时跑)
- 混合场景 → 先并行收集,再串联处理(并行审查后,串联通往文档更新)
Agent Teams
实验功能——多个 agent 围绕一个共同目标协作
普通 Subagent 是"主 Agent 逐个分派"。Agent Teams 更进一步:多个 agent 并行推进大任务,共享中间结果。
普通 Subagent
主 Agent 逐个分派任务,每个 agent 独立完成后返回。
主 Agent
├── 分派 → code-reviewer → 返回
├── 分派 → test-engineer → 返回
└── 汇总
Agent Teams
多个 agent 并行协作,可以共享中间发现。
主 Agent 编排
├── 前端 Agent ──┐
├── 后端 Agent ──┤ 共享中间结果
└── 测试 Agent ──┘
↓
统一交付
团队配置要点
- 角色定义要清楚——每个角色的职责边界和输出格式都要明确
- 任务边界要明确——不要让多个 agent 做重复工作
- 计划审批流程——如果是 plan 驱动,团队会先审计划再执行
交互能力
- 显示模式:终端或图形界面,选择适合你的显示方式
- 导航:可以在 team 中切换角色、查看状态和读取消息
- Hook 事件:一些 hook 可以在 team 生命周期中触发(启动/完成/失败)
export CLAUDE_AGENT_TEAMS=1 或在 settings.json 中设置 {"agentTeams": {"enabled": true}}。复杂团队需要更多配置,建议从简单场景开始尝试。
分派与汇总
触发 → 分派 → 并行执行 → 汇总结果
# 场景:审查一个 PR
用户: "审查当前 PR"
主 Agent 分派:
├── secure-reviewer → 扫描安全漏洞
├── code-reviewer → 检查代码质量
└── test-engineer → 验证测试覆盖
并行执行中...
汇总:
✅ 安全: 未发现关键漏洞
⚠️ 质量: 3 个中等问题(命名不规范 ×2,方法过长 ×1)
❌ 测试: 覆盖率不足 (45%),关键路径缺少测试
Subagent 生命周期
从创建到结束,一个 subagent 经历五个阶段:
1. 创建 → 加载角色卡,初始化隔离上下文
2. 分配 → 主 Agent 传入任务描述和必要信息
3. 执行 → 在隔离上下文中独立运行,调用工具
4. 返回 → 输出结构化结果,汇总到主会话
5. 结束 → 上下文销毁,或挂起等待恢复
可恢复的 Agent
某些 subagent 可以先启动、之后再恢复——适合长任务接力。比如一个耗时的大规模重构,你可以今天做到一半,明天恢复继续。
结合后台执行,你可以:启动 agent → 去做别的事 → 回来检查进度 → 继续或结束。
后台与隔离
让 agent 在后台跑,用 worktree 隔离文件变更
后台执行
Subagent 可以作为后台任务运行,不阻塞主会话。你继续做别的事,它跑完了会通知你。
# 场景:后台跑安全扫描
用户: "后台扫描一下整个代码库的安全问题"
主 Agent: 已启动 secure-reviewer 后台任务
你可以继续其他工作...
[通知] secure-reviewer 完成:
发现 3 个中等安全问题
已生成报告 → .claude/reports/security.md
在支持快捷键的界面中,可以用快捷键查看或切换后台 agent。
# 关闭后台任务(settings.json)
{
"agents": {
"background": false
}
}
# 设为 false 后,所有 agent 都在前台阻塞执行
Worktree 隔离
为 agent 分配独立的 Git worktree,文件变更互不污染。
# 没有隔离时
implementation-agent 修改了 src/auth.ts
→ 主会话的文件也被改了
→ 其他 agent 看到的是被修改后的版本
# 使用 worktree 隔离
implementation-agent → worktree A
code-reviewer → 主分支(只读)
→ 互不干扰,安全审查看到的是原始版本
上下文管理
子上下文越小越快——别把所有信息都塞进去
每个 Subagent 获得独立的上下文窗口(约 20K token),但这个空间不是无限大的。上下文越大,推理越慢、准确性越低。
保持子上下文精简
- 只传递任务所需的最少信息——不要把整个对话历史都丢进去
- 用
context字段控制 agent 能看到多少信息 - 让每个 agent 只负责自己的事,不要"什么都想知道"
性能考虑
- 过多的上下文会拖慢推理速度并降低准确性
- 如果发现 agent 输出质量下降,先检查是不是塞了太多无关信息
- 子上下文尽量控制在 5K token 以内,把空间留给结果
Subagent 的持久记忆
Subagent 可以拥有自己的 memory 范围,让它在各自职责内跨会话保持一致。记忆不会和主会话完全混在一起——subagent 在自己的上下文中读取对应的记忆文件。
| 记忆范围 | 位置 | 适合场景 |
|---|---|---|
| 项目级 | .claude/memory/ | 团队共享的项目约定、架构决策 |
| 用户级 | ~/.claude/memory/ | 个人偏好、跨项目通用经验 |
| 子目录级 | 子目录下的 .claude/ | 模块级别的专属知识 |
内置角色
Claude Code 自带的 Subagent,不需要配置直接可用
| 角色 | 触发场景 | 特点 |
|---|---|---|
| Planning | 需要先做架构设计再动手 | 生成实现计划,不写代码。适合复杂任务的拆分 |
| Explore | 需要搜索和理解代码库 | 快速只读搜索,适合定位文件和符号。不做代码审查或分析 |
| Claude Code Guide | 用户问"怎么用 Claude Code" | 回答 CLI、API、SDK 相关问题,能查阅官方文档 |
| Statusline | 配置状态栏显示 | 管理 IDE 底部状态栏的配置 |
限制与安全
控制谁能被启动,以及在插件分发场景下的安全边界
限制可启动的 Agent
你可以限制 Claude 只能 spawn 某些 subagent,降低风险。
# settings.json 示例
{
"agents": {
"allowList": ["code-reviewer", "secure-reviewer"],
"denyList": ["implementation-agent"]
}
}
# 只允许审查类 agent,禁止高风险自动化
适用场景:CI/CD 管道中只允许只读审查,生产环境禁止自动修改代码。
插件分发安全
插件分发的 subagent 要特别注意:
- 权限范围:检查 tools 字段,确保没有超出预期的权限
- 边界条件:第三方 agent 的 prompt 可能包含你不知道的指令
- 最小信任:对插件提供的 agent 采用与自定义 agent 相同的审查标准
与 Skill 配合
Skill 定义"怎么做",Subagent 定义"谁来做"
| 对比 | Skills | Subagents |
|---|---|---|
| 角色 | 提供方法与模板 | 执行任务的角色 |
| 上下文 | 在主会话中加载 | 在隔离上下文中运行 |
| 触发方式 | 自动匹配或手动调用 | 由主 Agent 分派 |
| 适合场景 | 标准化输出结构 | 需要隔离的专门任务 |
典型搭配:你做了一个 code-review Skill(审查步骤 + 审查模板),然后创建一个 code-reviewer Subagent(只读权限、审查专精)。Agent 执行时引用 Skill 的模板来格式化输出。
排错指南
角色重叠
症状:两个 agent 做了同样的分析,结果冲突,token 白白浪费。
修复:检查每个 agent 的职责边界。code-reviewer 看代码质量,secure-reviewer 看安全漏洞——维度不重叠。
权限过大
症状:审查型 agent 拿到了 Edit 权限,审查过程中顺手"修"了代码。
修复:审查型角色的 tools 字段只保留 Read、Grep、Glob。需要修改时让主 agent 另派实现型 agent。
输出格式不统一
症状:不同 agent 的输出格式各异,主 agent 无法汇总。
修复:在 Skill 的模板中定义统一的输出格式,所有 agent 执行时都引用同一个模板。
重复劳动
症状:多个 agent 各自读同一份文件做类似分析。
修复:让主 agent 先做一次预分析(提取关键信息),再分派给不同角色,避免重复读取。
动手练习
为你的团队设计 2 个角色:一个负责实现,一个负责审查
- 每个角色卡包含:职责、工具权限、输出格式、红线
- 两个角色的职责不重叠
- 审查型角色必须是只读权限
- 输出格式可以被主 agent 汇总
参考答案
实现者
---
name: implementer
description: 实现功能和修复代码
tools: Read, Edit, Write, Bash
---
# Implementer
## 职责
根据需求实现功能、修复 bug。
## 工具权限
- ✅ Read/Edit/Write: 读写代码
- ✅ Bash(npm *, mvn *): 构建测试
## 输出格式
1. 修改文件清单
2. 每个修改的原因
3. 运行测试的结果
## 红线
- 不删除现有测试
- 每次修改不超过 5 个文件
- 不修改配置文件
审查者
---
name: quality-reviewer
description: 审查代码质量和测试覆盖
tools: Read, Grep, Glob
---
# Quality Reviewer
## 职责
审查代码质量,检查测试覆盖。
## 工具权限
- ✅ Read/Grep/Glob: 只读
- ❌ Edit/Write/Bash: 无
## 输出格式
按严重程度分类:
🔴 高 | 🟡 中 | 🟢 低
每条:文件、行号、问题、建议
## 红线
- 不修改任何文件
- 只报告,不做决策
- 不评价设计方向
本章回顾
到这里,你已经能
- 说清 Subagent 解决什么问题(上下文隔离、角色专精)
- 设计角色边界和权限(单一职责 + 最小权限)
- 用串联或并行方式组织多角色协作
- 利用后台执行和 Worktree 隔离管理复杂任务
- 控制上下文大小、限制可启动的 agent 范围
- 理解内置角色、Agent Teams 与 Skill 的配合