Claude Code 子代理生成器

描述一个你想要交办出去的、定义清晰的单一任务——审查 PR 中的安全漏洞、编写单元测试、研究某个功能在代码库中的实现方式——即可获得一个完整的 .claude/agents/<名称>.md 文件,可直接放入 Claude Code 使用。AI 负责撰写内容;在你编辑时,名称、YAML frontmatter 和工具白名单都会对照真实的子代理规则进行检查,持有可写工具的只读型描述会被自动标记出来。

1. 描述你想委派的工作

用日常语言描述即可。想一想一项定义清晰、你愿意放心交给专家处理、只需阅读其结果摘要的工作 —— 这正是子代理擅长的事。

或从以下示例开始

你的 .claude/agents/<name>.md 将在此显示,完全可编辑,输入时名称和描述会根据真实的子代理约束进行检查。

一个子代理文件里到底有什么

一个子代理就是一个 Markdown 文件:上面是 YAML frontmatter,下面是 Markdown 正文。正文不是提示或附加内容——它是子代理的完整系统提示词,在该子代理运行期间会取代 Claude Code 的默认提示词。它还会在自己独立的上下文窗口中启动,不携带当前对话的任何内容,所以它需要知道的一切都必须写在这段正文里。

frontmatter 中只有两个字段是必填的。name 只能使用小写字母和连字符,不含冒号,并且在你所有子代理中必须唯一——它既是文件名,也是你手动调用该子代理的方式。description 是最值得反复捉摸的字段,因为它是 Claude 在决定哪个子代理应该接下任务时唯一会读取的文字。两个描述含稊的子代理会互相奢夺对方的工作。

其余字段都是可选的,这个构建工具会把它们每一个都真正写进文件:tools(逗号分隔的允许列表——留空则继承全部工具)、disallowedTools(拒绝列表)、model(sonnet、opus、haiku、fable、完整的模型 ID,或 inherit)、permissionMode、maxTurns(在停止并返回部分输出之前允许的代理轮次上限)、skills(预先加载到其上下文中的技能名称),以及仅用于显示的 color。

利用这个列表,你能做的最有价值的一件事就是让 tools 保持精简。一个只拥有 Read, Glob, Grep 的代码审查者,无论对话怎样发展,在“帮忙”时都无法重写你的分支。这个工具会将允许列表与你的描述所说的子代理用途进行交叉核对,并标记出某个本应只读的任务却被不知为何赋予了 Write、Edit 或 Bash 的情况。

常见问题

Claude Code 子代理到底是什么?

子代理是一个在自己独立的上下文窗口中运行、拥有不同系统提示词的专门 Claude 实例,因此你可以把一个定义清晰的子任务交给它,只拿回摘要结果。它由 .claude/agents/<名称>.md 下的单个 Markdown 文件定义:顶部是包含名称和描述的 YAML frontmatter,正文则成为该子代理完整的系统提示词。由于它在隔离的上下文中工作,它所进行的那些冗长而杂乱的探索——读取五十个文件、运行各种搜索、追查各种死胡同——永远不会进入你的主对话,只有它的最终报告会。这种隔离正是关键所在:它让你的主上下文保持干净,也让你可以把一项范围狭窄、误用起来很危险的任务,交给同样范围狭窄的一组工具。

Claude Code 的代理和技能有什么区别?

技能会把指令加载进你已经在进行的对话中;子代理则会开启一个全新的独立对话。当一个技能被触发时,它 SKILL.md 的正文会被加入 Claude 当前的上下文,Claude 仍以自身的身份继续工作,保留它原本知道的一切。当一个子代理被触发时,Claude 会生成一个带有空白上下文和不同系统提示词的独立实例,该实例独立工作,只有它的最终消息会返回。因此,当你想教会 Claude 做某件之后要在这里完成的事情时——比如某种风格规范、一份检查清单、一个发布流程——就用技能;当你想让工作在别处完成、自己只要结论时——比如一次你不想塞满上下文的大规模搜索,或者一次你希望由完全无法编辑你文件的东西来执行的审查——就用子代理。斜杠命令则是第三种更简单的东西:一个通过输入 /名称 触发、内联运行的已保存提示词,没有隔离,也没有独立身份。

我该如何在 Claude Code 中创建一个子代理?

用 mkdir -p .claude/agents 创建文件夹,在里面保存一个以该子代理命名的 Markdown 文件,然后重新加载 Claude Code。该文件至少需要包含 name(仅限小写字母和连字符,不能有冒号,且必须唯一)和 description(Claude 应在何时委派给它)的 YAML frontmatter,随后是充当其系统提示词的正文。把它放在仓库内的 .claude/agents/ 下,即可提交到 git 并与团队共享;或者放在你主目录下的 ~/.claude/agents/ 中,使其在你所有项目中保持个人专属。如果两者存在同名文件,在该仓库内项目级的那个会优先生效。这个生成器会替你写好整个文件,并显示你所选范围对应的确切路径和 mkdir 命令。

为什么工具白名单如此重要?

因为它是限制子代理能做什么的唯一硬性边界。如果省略 tools,子代理会继承主对话拥有的一切,包括 MCP 工具——对一个值得信赖的助手来说没问题,但对一个全部工作只是查看并汇报的子代理来说则是不必要的风险。一个只拥有 Read、Glob、Grep 的安全审查者在物理上无法修改你的工作目录;而拥有 Bash 和 Write 的同一个审查者则可以。经验法则是最小权限:只授予完成任务所需的最少权限,只有当子代理确实需要修改文件时才添加 Write 和 Edit,只有当它确实需要运行类似测试套件的东西时才添加 Bash。这个构建工具会双向标记不匹配的情况——审查类描述却持有写入类工具,或修复类描述却没有任何写入手段。

Claude 如何决定使用哪个子代理?

它会把任务与每个子代理的描述进行匹配,因此那段描述文字就是你的路由表。像「审查代码」这样的描述无法给 Claude 提供任何区分依据,结果要么被用于所有情况,要么完全不被使用。应改为写明具体的触发条件:「审查改动的代码中的安全漏洞——注入、缺失授权、不安全的反序列化、泄露的密钥。在任何涉及身份验证或输入处理的改动之后主动使用,以及每当用户要求进行安全审查时使用。」说「主动使用」会鼓励自动委派;你也总是可以通过按名称请求某个子代理来覆盖它——「使用 security-code-reviewer 子代理检查这个 diff」。在多个子代理有所重叠的多代理配置中,描述需要在它们之间划出清晰的边界,这也是为什么当你的描述读起来过于笼统或漏掉「何时使用」部分时,这个生成器会实时发出警告。

与这个工具搭配的还有两个:Claude Skill Generator 会写一个 SKILL.md,把指令加载到你当前所在的对话中;AI Slash Command Generator 则会写出单文件的 /command 版本。

相关工具