跳到主要内容

Sub-Agents 核心概念与应用价值

核心问题:上下文污染

与 Claude 协作常见痛点:

  • 跑测试 → 500 行日志
  • 搜索代码 → 200 行 grep 结果
  • 分析错误 → 一堆中间推理过程

这些信息对"当下执行"必要,但对"后续决策"是噪声。主对话线性追加,不会自动过期。

解决方案:子代理

子代理 = 专职小助手,带着自己的规则、工具权限、上下文窗口,完成某一类任务后只把"结果摘要"带回来

可以理解为是 把一个大脑拆成多个岗位角色,每个岗位只做一件事,并且有明确的权限边界。

核心价值(三件事)

价值解决的问题说明
隔离上下文污染执行完即丢弃,只把结论带回来
约束行为不可控工具权限边界,物理上做不到
复用经验无法沉淀放进版本控制,团队共享

隔离

是子代理最重要的价值。

主对话的上下文:
┌─────────────────────────────────────────┐
│ 用户:帮我分析一下这个 bug │
│ Claude:好的,让我看看... │
│ [子代理去执行,产生 500 行日志] │
│ [子代理返回:发现 3 个相关文件] │
│ Claude:我发现问题在这三个文件... │
└─────────────────────────────────────────┘

子代理的上下文(独立的,执行完就释放):
┌─────────────────────────────────────────┐
│ 任务:查找 bug 相关文件 │
│ [搜索输出 500 行日志] │
│ [分析过程...] │
│ 结论:3 个相关文件 │
└─────────────────────────────────────────┘

约束

子代理可以有精确的工具权限控制。

# 只读型子代理(代码审查)
tools: Read, Grep, Glob
# 它只能看,不能改任何东西

# 开发型子代理(bug 修复)
tools: Read, Write, Edit, Bash
# 它可以读写文件和执行命令

# 研究型子代理(技术调研)
tools: Read, WebFetch, WebSearch
# 它可以读本地文件和搜索网络

如果没有权限边界,Claude 可能在审查过程中顺手帮你“修”了一些它认为有问题的代码——这不是你想要的行为。有了子代理,你就可以创建一个 code-reviewer 角色,明确规定它只有 Read, Grep, Glob 权限。这样它再怎么想“插手”,也改不了任何东西。

复用、代理被定义成文件、放进版本控制后,好的使用方式就从一次性对话,变成了可共享、可迭代的工程资产。


子代理配置文件

---
name: code-reviewer
description: Review code for security issues and best practices.
tools: Read, Grep, Glob
model: sonnet
permissionMode: readOnly
skills:
- security-rules
---
# 系统提示词
你是一个代码审查专家...

关键字段

字段必填说明
name角色标识
description决定何时被调用(最重要设计点)
tools白名单:只能用这些工具
disallowedTools黑名单:排除这些工具
model模型选择
permissionMode权限模式:readOnly / plan / auto
skills预加载的 Skill
hooks生命周期 Hook

工具组合示例

# 只读型(审计/检查)
tools: [Read, Grep, Glob]

# 研究型(信息收集)
tools: [Read, Grep, Glob, WebFetch, WebSearch]

# 开发型(读写改)
tools: [Read, Write, Edit, Bash, Glob, Grep]

存放位置与优先级

项目级: ./claude/agents/*.md    # 仅当前项目可用
用户级: ~/.claude/agents/*.md # 所有项目可用

优先级:项目级 > 用户级


什么时候用子代理?

适合用

  • 高噪声输出任务(测试、日志、搜索)
  • 权限边界必须明确的任务(只读审查)
  • 可以并行展开的研究型任务
  • 可以拆成清晰阶段的流水线任务

不适合用

  • 需要频繁来回确认需求的任务
  • 各阶段高度耦合的任务
  • 非常简单的小任务

关键约束

子代理不能生成子代理(防止无限嵌套)

所有编排必须由主对话完成,调度中心只有一个:主对话本身


内置子代理

子代理用途模式
Explore代码搜索quick / medium / very thorough
Plan规划模式收集上下文,生成实施路径
General-purpose全能型处理复杂多步骤任务

创建子代理的三种方式

  1. 交互式/agents 向导
  2. 手写配置:直接创建 .claude/agents/xxx.md
  3. CLI 临时--agents 参数(仅当前会话有效)

运行模式

  • 前台:等待执行完成
  • 后台Ctrl+B 切换,适合长时间任务
  • 恢复Resume 继续之前的子代理,保留完整上下文

CLAUDE.md 继承优先级

子代理启动时加载:

  1. 全局 ~/.claude/CLAUDE.md
  2. 项目 ./CLAUDE.md
  3. 代理定义文件

优先级:代理定义文件 > 项目 CLAUDE.md > 全局 CLAUDE.md


最佳实践

  1. description 是最关键的设计点:决定何时被调用
  2. 遵循最小权限原则:能用 Read 就不给 Edit
  3. 子代理 Token 消耗增加 30-200%,但可用便宜模型省钱

本讲小结

子代理让 Claude "记得更少,但记得对"

  • 隔离 → 主对话保持清洁
  • 约束 → 工具权限边界
  • 复用 → 可版本化的配置
  • 并行 → 复杂任务同时推进

思考题

  1. 如果要设计一个"数据库查询分析器"子代理,你会配置哪些工具?
  2. 子代理配置放项目级 vs 用户级,各有什么优缺点?

参考来源极客时间 - Claude Code 工程化实战