掌握 Claude Code :优雅配置你的专属 Subagent

95 阅读7分钟

在 Claude Code 里创建 subagent,其实就是在写一个包含 YAML frontmatter 的标准 Markdown 文件。它最核心的配置信息,都定义在文件开头的 --- 块里。

这里是所有可用字段的对照表,我为你做了分类:

字段 (Field)是否必须 (Required)作用与解释 (Purpose & Explanation)
name✅ 必须子代理的唯一标识。需使用小写字母和连字符,如 code-reviewer,是调用它的ID。
description✅ 必须自动调度的“触发器”。用自然语言清晰描述代理的用途和何时使用,这是Claude Code决定是否委派任务的关键信息。
tools⚪️ 可选允许代理调用的工具白名单。不填则默认继承所有可用工具。
model⚪️ 可选指定代理使用的模型。可从 sonnet, opus, haiku 中选择,或填 inherit 继承主会话模型。
permissionMode⚪️ 可选代理的权限模式。控制代理在调用工具时的权限级别,可选 default, acceptEdits, bypassPermissions, plan
skills⚪️ 可选代理启动时自动加载的“技能”列表。将特定技能(如skill-name)注入代理,增强其能力。
color⚪️ 可选UI视觉标识。为代理在用户界面中指定一个颜色(如red, blue)。
System Prompt (正文)✅ 必须核心行为指令。定义了代理的角色、职责和工作流程,是整个subagent的大脑。

🔧 tools 字段详解

tools 字段是控制subagent能力的核心,通过限制工具能有效防止意外操作。

  • 作用:限制工具可有效防止意外写操作。
  • 常用工具有
    • Read:读取文件
    • Write:写入/创建文件
    • Edit:编辑文件
    • Bash:执行Shell命令
    • Glob:模式匹配搜索文件
    • Grep:文件内搜索代码

⚙️ permissionMode 字段详解

当你想精细控制subagent的操作权限时,可以通过设置 permissionMode 来实现。主要有以下几种模式:

  • default:需要主对话审批每个操作。
  • acceptEdits:自动接受文件修改,无需逐一确认。
  • bypassPermissions:完全自主,跳过所有权限检查。
  • plan:仅允许只读和浏览,用于规划和探索。

✍️ System Prompt(正文)编写

一个好的系统提示词通常包含:

  • 身份定义你是一名专注于XX领域的专家。
  • 核心职责:列出代理需要执行的任务清单。
  • 工作流程:描述代理被调用后应遵循的步骤。
  • 输出格式:指定报告或响应的结构,确保一致性。

实战模板

下面是一个功能齐全的代码审查代理模板:

---
name: code-reviewer
description: 审查提交的代码,主动评估代码质量、潜在问题和安全性。用于代码审查、安全审计和性能分析。
tools: Read, Grep, Glob
model: sonnet
permissionMode: default
---

# Code Reviewer Agent

## 角色
你是一位资深的代码审查专家,专注于确保代码的高质量、安全性和可维护性。

## 工作流程
1.  使用 `Glob` 工具定位目标文件。
2.  使用 `Read` 工具读取完整的代码内容。
3.  分析代码逻辑、性能瓶颈和安全隐患。
4.  生成一份结构化的审查报告。

## 报告格式
- **概要**:整体评价和主要发现。
- **问题列表**:按严重程度(高/中/低)列出具体问题、代码位置及修复建议。

这个模板中,我刻意使用了推荐的 GlobGrep 工具来定位和分析代码,你可以把它放在 .claude/agents/ 目录下(项目级)或 ~/.claude/agents/ 目录(用户级),Claude Code 就能自动识别了。

补充 skill 的字段做对比

在 Claude Code 中定义一个技能(Skill),核心文件是 SKILL.md。它的配置信息都写在文件开头的 YAML 前置元数据(Frontmatter)部分,下方是其可用且最新的字段清单:

字段必须说明
name技能的显示名称。如果省略,则使用目录名。只能使用小写字母、数字和连字符(最多64个字符)。
description推荐技能的功能及其使用时机。Claude 使用此来决定何时应用该技能。如果省略,则使用 Markdown 内容的第一段。请将关键用例放在前面:合并后的 descriptionwhen_to_use 文本在技能列表中会被截断至 1,536 个字符,以减少上下文占用。
when_to_use为 Claude 提供何时应调用技能的额外上下文,例如触发短语或示例请求。该内容会被附加到技能列表中的 description 后,并计入 1,536 个字符的限制。
argument-hint在自动补全过程中显示的提示,用于指示预期的参数。示例:[issue-number][filename] [format]
arguments用于技能内容中 $name 替换的命名位置参数。接受以空格分隔的字符串或 YAML 列表。名称按顺序映射到参数位置。
disable-model-invocation设置为 true 以防止 Claude 自动加载此技能。用于希望使用 /name 手动触发的操作流程。同时可防止该技能被预加载到子代理中。默认值:false
user-invocable设置为 false 以从 / 菜单中隐藏。用于用户不应直接调用的背景知识。默认值:true
allowed-tools当此技能激活时,Claude 无需询问许可即可使用的工具。接受以空格分隔的字符串或 YAML 列表。
model此技能激活时使用的模型。该覆盖设置仅对当前轮次的剩余部分有效,不会被保存到设置中;会话模型会在您的下一个提示词时恢复。接受与 /model 相同的值,或使用 inherit 保持当前激活的模型。
effort此技能激活时的努力程度。会覆盖会话的努力程度设置。默认值:继承自会话。可选值:lowmediumhighxhighmax;可用级别取决于所使用的模型。
context设置为 fork 以在分叉的子代理上下文中运行。
agent当设置了 context: fork 时,指定要使用的子代理类型。
hooks限定于此技能生命周期的钩子。配置格式请参见 技能和代理中的钩子
paths限制该技能激活条件的 Glob 模式。接受以逗号分隔的字符串或 YAML 列表。设置后,Claude 仅当处理的文件与模式匹配时才会自动加载该技能。使用与路径特定规则相同的格式。
shell在此技能中用于 !command 和 ! 块的 Shell。接受 bash(默认)或 powershell。设置 powershell 会在 Windows 上通过 PowerShell 运行内联 Shell 命令。需要设置 CLAUDE_CODE_USE_POWERSHELL_TOOL=1

🧐 字段详解与最佳实践

技能的设计精髓在于简洁和明确,下面是编写这些字段的一些核心思路:

  • description:准确性比长度更重要。 这是整个技能中最重要的字段,Claude 会根据它来判断是否调用你的技能。一个好的描述应该包含具体的触发词和使用场景,例如,"Apply Acme brand voice, colors, and structure to docs and slides; use this for branding, presentation, or style enforcement requests." 就比 "Brand guidelines" 有效得多。

  • user-invocable vs disable-model-invocation:控制两种调用入口。 这两个字段共同控制了技能的两个使用入口。通常,为了最灵活的使用,你会将 user-invocable 设为 truedisable-model-invocation 设为 false

✍️ 一个 代码审查 技能配置示例

---
name: code-reviewer
description: 审查提交的代码,主动评估代码质量、潜在问题和安全性。用于代码审查、安全审计和性能分析。
user-invocable: true
disable-model-invocation: false
allowed-tools: ["Read", "Grep", "Glob"]
argument-hint: [代码路径或变更]
---
# Code Reviewer Skill

## 角色
你是一位资深的代码审查专家...