首页 › tutorials › 造子代理团队:让任务自动委派

造子代理团队:让 Claude Code 自动派活

概述

本教程教你用 Claude Code 的子代理(subagents)机制,打造一支会自动接活的 AI 开发团队。读完你将掌握:子代理文件的写法、description 描述工程(如何让 Claude 在合适的时机自动把任务派给某个代理)、工具沙箱与权限隔离、三种调用方式的区别、并行与链式协作,以及持久记忆。适合已经用过 Claude Code、想从"一个人指挥一个 Claude"升级到"一个协调者调度一支代理团队"的开发者。

前置条件


一、先搞懂:为什么是"自动委派"而不是"手动调用"

很多人的用法是:对着主对话一个 Claude 说到黑。这种"单代理"模式有三个天然瓶颈——上下文会被搜索结果、测试日志、文件内容撑爆;Claude 开始遗忘;性能退化。

子代理解决了这个问题。它是一个跑在独立上下文窗口里的专职 AI,有自己专属的系统提示、专属的工具白名单、专属的模型选择。它干完活,只把结论摘要返回主对话,那些冗长的中间过程留在它自己的上下文里,从不污染你的主会话。

Claude Code 自带三个内置子代理:

子代理 模型 工具 用途
Explore Haiku(快) 只读,Write/Edit 被禁 代码搜索、文件发现、代码库探索
Plan 继承主对话 只读 计划模式里收集上下文
general-purpose 继承主对话 全部工具 复杂多步、需探索+修改的任务

关键的反直觉点来了:Claude 会根据子代理的 description 字段,自动决定什么时候把活派给它——你不需要每次手动喊"用 XX 代理"。这就是本教程的核心:把 description 写好,让一支代理团队在你的项目里各司其职、自动接活。

何时该用子代理,何时不该用


二、创建你的第一个子代理文件

子代理本质是带 YAML frontmatter 的 Markdown 文件。有两种创建方式。

方式 A:用 /agents 命令(推荐新手)

在 Claude Code 交互界面输入:

/agents

切到 Library 标签 → Create new agent → 选 Personal(存到 ~/.claude/agents/,所有项目可用)或 Project(存到 .claude/agents/,随仓库走、团队共享)。选 Generate with Claude,用一句话描述你要的代理,Claude 会帮你生成标识符、描述和系统提示。

方式 B:手写 Markdown 文件(推荐进阶)

这是本教程的主线,因为它最透明、最可控。在项目根目录创建 .claude/agents/code-reviewer.md:

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

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

frontmatter 定义元数据,Markdown 正文成为系统提示。子代理只会收到这个系统提示加基础环境信息(工作目录等),而不是完整的 Claude Code 系统提示——这是它上下文干净的根本原因。

预期结果:重启会话后(磁盘上直接改文件需要重启,/agents 界面创建则即时生效),在 /agents 的 Library 里能看到 code-reviewer。

常见问题: - 文件改了不生效? 直接编辑磁盘文件需重启会话;用 /agents 改则即时生效。 - 名字报重复? name 必须全树唯一。v2.1.196 起,/doctor 会报告同作用域重名。


三、description 描述工程:让委派自动发生

这是本教程的核心章节。Claude 是否把任务自动派给某个子代理,主要看三样东西:你这次请求里的任务描述、子代理的 description 字段、当前上下文。

3.1 三种 description 写法,效果天差地别

写法一(平庸,几乎不会自动触发):

description: Reviews code

写法二(合格):

description: Expert code reviewer. Reviews code for quality and security.

写法三(精准,会主动接活):

description: Expert code review specialist. Proactively reviews code for quality,
  security, and maintainability. Use immediately after writing or modifying code.

差别在第几处?触发词和触发时机。官方明确建议:为了鼓励主动委派,在 description 里加入 "use proactively"、"use immediately after ..." 这类短语。Claude 读到这些词,才会在合适的场景主动派活,而不是等你点名。

3.2 description 的四个黄金要素

  1. 身份:这个代理是什么专家(Expert code review specialist)
  2. 职责:它具体做什么(reviews code for quality, security, maintainability)
  3. 触发时机:什么时候该派给它(Use immediately after writing or modifying code)
  4. 边界:什么时候不该派给它(隐含在职责描述里)

3.3 多代理冲突:谁来接活?

当你有多个 description 重叠的代理时,Claude 会自己仲裁。但你可以用作用域优先级显式控制。Claude Code 扫描子代理有 5 级优先级(高到低):

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

同名时,高优先级覆盖低优先级。所以团队规范代理放 .claude/agents/(进版本库),个人偏好放 ~/.claude/agents/,组织强制规则走 managed settings。

常见问题: - 代理从不被自动触发? 八成是 description 太笼统、缺触发词。补上 "use proactively" 和明确场景。 - 代理被误触发(抢了别的代理的活)? 收窄职责描述,加边界;或调整作用域,用更高优先级的精确定义覆盖。


四、工具沙箱:给代理最小权限

子代理默认继承主会话的所有内部工具和 MCP 工具。但生产环境里,你绝不希望一个"只读审查"代理能改文件。有四道闸门。

4.1 白名单 tools(只给必要的)

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

这个代理只能读、搜、跑命令,不能 Edit/Write。

4.2 黑名单 disallowedTools(继承全部,只禁某几个)

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

两者都设时,先应用 disallowedTools,再用 tools 在剩余池里收口。还能按 MCP 服务器批量收:disallowedTools: mcp__github 会干掉 github MCP 服务器的全部工具。

注意有些工具子代理永远拿不到,即使写进 tools:AskUserQuestion、EnterPlanMode、ExitPlanMode(除非 permissionMode: plan)、ScheduleWakeup、WaitForMcpServers——它们依赖主会话的 UI 或会话状态。

4.3 permissionMode:六种权限模式

permissionMode 控制子代理怎么处理权限提示:

模式 行为
default 标准提示
acceptEdits 自动接受工作目录内的文件编辑
auto 后台分类器审查命令和受保护目录写入
dontAsk 自动拒绝(显式放行的工具仍可用)
bypassPermissions 跳过所有提示(慎用!)
plan 计划模式,只读探索

注意:父会话若是 bypassPermissions 或 acceptEdits,优先级更高,子代理无法覆盖。

4.4 hooks 做条件验证(最细粒度)

当你需要"允许某个工具的某些操作、禁掉另一些"时,用 PreToolUse hook。下面这个代理能跑 Bash,但只允许只读 SQL:

---
name: db-reader
description: Execute read-only database queries. Use when analyzing data or reports.
tools: Bash
hooks:
  PreToolUse:
    - matcher: "Bash"
      hooks:
        - type: command
          command: "./scripts/validate-readonly-query.sh"
---

配套校验脚本(读取 stdin 的 JSON,发现写操作就 exit 2 阻断):

#!/bin/bash
# ./scripts/validate-readonly-query.sh
INPUT=$(cat)
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty')
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   # exit code 2 = 阻断并把 stderr 反馈给 Claude
fi
exit 0

记住:chmod +x 让脚本可执行。这套"白名单+黑名单+模式+hook"四件套,就是你造最小权限沙箱的全部武器。


五、三种调用方式:从自动到强制

自动委派是默认行为,但它"不强求"。当你想更确定时,有三档 escalation。

方式一:自然语言(最轻)

Use the code-reviewer subagent to look at my recent changes

没有特殊语法,在 prompt 里点名即可。Claude 通常会委派,但保留判断权。

方式二:@-mention(强制单次)

@"code-reviewer (agent)" look at the auth changes

输入 @ 从候选里挑,或在 v2.1.196+ 手敲 @agent-code-reviewer。保证那个代理一定为这个任务跑一次,选择权不交给 Claude。

方式三:--agent(整个会话级)

claude --agent code-reviewer

整个会话的主线程直接变成那个子代理:用它的系统提示(替换默认 Claude Code 系统提示)、它的工具限制、它的模型。想给项目设默认代理,写进 .claude/settings.json:

{ "agent": "code-reviewer" }

CLI 参数会覆盖该设置。这是把一个项目彻底变成"专职审查工作台"的捷径。


六、并行与链式:让代理团队协作

6.1 并行研究(独立任务同时跑)

Research the authentication, database, and API modules in parallel using separate subagents

Claude 为每个模块各派一个子代理,同时探索,各自独立上下文,最后由 Claude 综合结论。当研究路径互不依赖时效果最好。

6.2 链式协作(顺序流水线)

Use the code-reviewer subagent to find performance issues,
then use the optimizer subagent to fix them

前一个的输出作为后一个的输入。每个代理完成后把结果交回 Claude,Claude 再把相关上下文传给下一个。

6.3 嵌套子代理(树形分工,v2.1.172+)

一个子代理还能派自己的子代理。典型场景:一个审查代理对每条发现各派一个验证代理,中间产物从不进入你的主对话,只有顶层代理的摘要返回给你。

约束:深度上限固定为 5 层——depth 5 的代理拿不到 Agent 工具,无法再派。要阻止某个代理派生,从它的 tools 里去掉 Agent,或加进 disallowedTools。

想限定某个作为主线程的代理(claude --agent)能派哪些子代理,用 Agent(type1, type2) 白名单语法:

---
name: coordinator
description: Coordinates work across specialized agents
tools: Agent(worker, researcher), Read, Bash
---

6.4 前台 vs 后台

v2.1.186 起,后台子代理遇到需权限的工具调用时,提示会浮到主会话、标明是哪个代理在问。设 CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1 可彻底关闭后台功能。


七、持久记忆:让代理越用越聪明

给代理开 memory,它就有了跨会话的知识库,能积累代码库模式、调试经验、架构决策。

---
name: code-reviewer
description: Reviews code for quality and best practices
memory: project
---
You are a code reviewer. As you review code, update your agent memory with
patterns, conventions, and recurring issues you discover.

三个作用域:

作用域 位置 适用
user ~/.claude/agent-memory/<name>/ 跨所有项目积累
project .claude/agent-memory/<name>/ 项目专属、可随版本库共享(推荐默认)
local .claude/agent-memory-local/<name>/ 项目专属但不入库

开启后,系统提示会自动注入记忆目录里 MEMORY.md 的前 200 行(或 25KB),且 Read/Write/Edit 会自动启用以便代理管理记忆文件。用法:让它开工前"查记忆"、收工后"存经验",日积月累就是机构知识库。


八、实战案例:代码质量守卫团队

把前面所有招式串起来。目标:为一个真实代码库搭一支 3 人代理团队,自动守卫代码质量。

步骤 1:创建三个代理文件

.claude/agents/code-reviewer.md(只读审查,写完代码自动接手):

---
name: code-reviewer
description: Expert code review specialist. Proactively reviews code for quality,
  security, and maintainability. Use immediately after writing or modifying code.
tools: Read, Grep, Glob, Bash
model: inherit
memory: project
color: green
---

You are a senior code reviewer ensuring high standards. When invoked:
1. Run git diff to see recent changes
2. Focus on modified files
3. Begin review immediately
Review checklist: 命名清晰、无重复代码、错误处理到位、无泄露密钥、输入校验、测试覆盖。
按优先级输出:Critical(必修) / Warning(应修) / Suggestion(可选)。
每条问题给出具体修复示例。Review 后把发现的模式存入 agent memory。

.claude/agents/optimizer.md(可编辑,性能问题自动接手修复):

---
name: optimizer
description: Performance optimization specialist. Use proactively when code review
  or profiling surfaces performance issues. Diagnoses and applies minimal fixes.
tools: Read, Edit, Bash, Grep, Glob
model: sonnet
color: orange
---

You are an expert in performance. When invoked:
1. 复现并量化性能问题(benchmark/profiler)
2. 定位瓶颈
3. 实施最小修复
4. 用 benchmark 验证改善
每次给出:根因、证据、改动、前后对比数据。

.claude/agents/test-guard.md(隔离测试噪音,后台友好):

---
name: test-guard
description: Test runner that executes the suite and reports only failures with
  error messages. Use proactively after code changes to keep the build green.
tools: Bash, Read
model: haiku
background: true
color: blue
---

You run the project's test suite. When invoked:
1. 执行测试命令
2. 只报告失败的测试及其错误信息
3. 不把通过的测试细节带回来
保持主会话上下文干净。

步骤 2:观察自动委派

写完一段代码后,直接说:

我刚改完了 auth 模块

你不需要点名 code-reviewer。因为它的 description 里有 "Use immediately after writing or modifying code",Claude 会自动把审查派给它。改完跑测试时,test-guard 因为 background: true 在后台跑,主会话不被阻塞。

步骤 3:链式 + 并行编排

先用 code-reviewer 审查最近改动,把它发现的性能问题交给 optimizer 修复;
同时用 test-guard 跑一遍测试,只汇报失败项。

这条指令触发:code-reviewer(前台)→ optimizer(链式接手)并行 test-guard(后台)。三个代理各用各的模型(审查继承、优化用 sonnet、测试用便宜的 haiku)和工具集,互不污染主上下文。

步骤 4:会话级专职模式

想整场会话只做代码审查:

claude --agent code-reviewer

此后整个会话就是审查专家,系统提示、工具、模型全换成它的。

预期效果:主会话上下文长期保持清爽;代码质量、性能、测试三道防线各司其职;代理还能靠 memory: project 把审查经验沉淀进版本库,团队共享。


九、整体工作流程

flowchart TD
    U[用户发起任务] --> MAIN[主会话 / Claude 协调者]
    MAIN --> DEC{读取子代理 description<br/>决定委派}
    DEC -->|自动| SA1[code-reviewer<br/>只读·审查]
    DEC -->|自动| SA2[optimizer<br/>可编辑·修复]
    DEC -->|后台| SA3[test-guard<br/>跑测试·只报失败]
    SA1 -->|发现性能问题| SA2
    SA1 -.链式.-> SA2
    SA2 --> NEST[嵌套子代理<br/>逐项验证修复]
    SA1 --> MEM[(project memory<br/>积累审查经验)]
    SA2 --> MEM
    SA1 -->|仅返回摘要| MAIN
    SA2 -->|仅返回摘要| MAIN
    SA3 -->|仅返回失败项| MAIN
    MAIN --> R[综合结论交付用户]

    classDef agent fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px;
    classDef main fill:#fff3e0,stroke:#e65100,stroke-width:2px;
    classDef mem fill:#e3f2fd,stroke:#1565c0,stroke-width:2px;
    class SA1,SA2,SA3,NEST agent;
    class MAIN,R main;
    class MEM mem;

主会话只做协调与综合,所有重活(读 diff、改代码、跑测试)都在隔离的子代理上下文里发生,只有摘要回流,这是上下文经济学的核心。


十、常见问题速查

问题 原因 解决
代理从不自动触发 description 太笼统、缺触发词 加 "use proactively" + 明确场景
磁盘改文件不生效 需重启会话 用 /agents 改,即时生效;或重启
同名代理冲突 多作用域重名 /doctor 查重;用高优先级作用域覆盖
后台代理权限总被拒 v2.1.186 前后台自动拒提示 升级版本;提示会浮到主会话
Explore/Plan 不能续跑 一次性代理,无 agent ID 改用 general-purpose 或自定义代理
想恢复之前的子代理 新调用是新实例 用 SendMessage 按 agent ID 续跑
嵌套到第 5 层派不动 深度硬上限 拆分任务,减少嵌套层数

恢复子代理的细节:每次调用是全新实例。要续跑,直接对 Claude 说 "continue that code review",它用 SendMessage 按代理 ID 续跑并保留完整历史。转录文件在 ~/.claude/projects/{project}/{sessionId}/subagents/agent-{agentId}.jsonl。


延伸阅读


训练营适用性评估

参考来源

  1. Create custom subagents — Claude Code Docs — 官方子代理权威文档,涵盖 frontmatter 全字段、作用域优先级、内置代理、示例
  2. Run agents in parallel — Claude Code Docs — 子代理/agent view/agent teams/dynamic workflows 四种并行方式的官方对比
  3. Claude Code Subagents and Multi-Agent Orchestration Guide — 上下文隔离与多代理编排的深度实践指南
  4. Subagents in Claude Code: Delegating without losing control — 委派模式与控制力平衡的实战教程
  5. Claude Code Subagents: Parallelize Development with Custom AI Agents — 用自定义子代理并行化开发的工作流案例

[!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学通信知识星球海报-扫码加入