第 16 章 | 编写 agent 文件
💡 进群学习加 wx: agentupdate
(申请发送: agentupdate)
(申请发送: agentupdate)
第 16 章:编写 agent 文件
学习目标
写出真的能被 main Claude 找到并 dispatch 的 agent 文件。
文件结构
flowchart TB
File[".claude/agents/<name>.md"] --> FM["frontmatter
(name/description/tools/model)"]
File --> Body["system prompt
(角色定义 + 工作流 + 约束)"]
FM --> N["name: 唯一标识"]
FM --> Desc["description: 何时被调用"]
FM --> Tools["tools: 允许使用的工具"]
FM --> Model["model: opus / sonnet / haiku"]
style FM fill:#fff9c4
style Body fill:#c8e6c9Frontmatter 字段详解
---
name: developer
description: Implements one group of tasks from the active OpenSpec change's tasks.md. Also fixes issues when sent back from tester or reviewer.
tools: Read, Edit, Write, Bash, Grep, Glob
model: sonnet
---
| 字段 | 作用 | 写法关键 |
|---|---|---|
name |
唯一标识 | 用 kebab-case,跟文件名匹配 |
description |
决定何时被调用 | 写得具体——main Claude 通过这个判断要不要 dispatch |
tools |
限制工具集 | 不写 = 全部;写了就只有列出的可用 |
model |
用哪个模型 | sonnet(默认)/ opus(深度)/ haiku(琐碎) |
description 的关键作用
main Claude 看 description 决定"现在要不要派这个 agent 出来"。所以:
❌ "Helps with development"
→ 太宽,啥都派 → 浪费 dispatch
✅ "Implements one group of tasks from active OpenSpec change's tasks.md.
Also fixes issues when sent back from tester (test failures) or
reviewer (rejection)."
→ 具体说"什么场景调我" → 派得准
写 description 公式:<做什么> + <什么时候被叫>。
system prompt 写作要点
四段式:
flowchart TB
SP["system prompt"] --> S1["1. 你是谁
(身份 + 边界)"]
SP --> S2["2. 你的输入
(briefing 会给什么)"]
SP --> S3["3. 你的工作流
(步骤 + 约束)"]
SP --> S4["4. 你的输出格式
(报告 schema)"]
style SP fill:#fff9c4实例:developer.md 解剖
---
name: developer
description: Implements one group of tasks ...
tools: Read, Edit, Write, Bash, Grep, Glob
model: sonnet
---
# 你是 doc2video 的实现工程师
[1. 身份 + 边界]
你的工作:把调度者指定的一组 OpenSpec 任务变成可运行的代码。
[2. 输入]
## 输入(调度者会在 prompt 里给)
- active change 路径
- 组号 + 组名
- 该组所有 - [ ] 任务原文
- 必读文件:design.md / spec.md
- 上一轮反馈(仅当回炉)
[3. 工作流]
## 工作流程
1. 读完必读文件
2. 理解任务范围
3. 实现
4. 本地验证
5. 提交
[3-bis. 严格约束 = 反模式列表]
## 严格约束
- 不写测试(tester 的事)
- 不改规约(specs/ design.md proposal.md 禁动)
- 不擅自扩大范围
- 不自动修复命令报错(design D6)
[4. 输出]
## 完成时回报(结构化)
\`\`\`
## Developer Report — Group N
**Status:** done | blocked
...
\`\`\`
→ 4 段式让 agent 知道做什么、不做什么、怎么报告。
测试 agent 是否好用
写完一个新 agent,手动 dispatch 一次看产出:
你: 用 developer agent 实现 group 1
↓
观察:
- 它读了哪些文件?(看 Read 调用)
- 它改了哪些文件?(git diff)
- 报告格式对吗?(看输出)
- 越界了吗?(改了不该改的?)
如果有任何不对,改 agent 文件而不是教它一次次 —— system prompt 是它的 DNA,每次 dispatch 都重新读。
反模式
❌ description 写得像广告 ("超强实现 agent")
❌ system prompt 没有"严格约束"段
❌ 没有结构化输出格式(main Claude 不知道怎么解析)
❌ 把整个 CLAUDE.md 复制进 agent prompt(重复 + 维护噩梦)
❌ 给 agent 它不该有的工具(如 reviewer 给 Edit)
工具集的常见配方
| 角色 | 推荐工具 |
|---|---|
| developer | Read, Edit, Write, Bash, Grep, Glob |
| tester | 同上(要写测试 + 跑 pytest) |
| e2e-tester | Read, Bash, Grep, Glob, Write(不给 Edit,只能写 report) |
| reviewer | Read, Bash, Grep, Glob, Write(同上) |
| architect | 同 reviewer |
→ 工具不是越多越好——少 = 行为可预测。
你现在能做什么
- 写一份能被 main Claude 找到的 agent 文件
- 用 4 段式 system prompt 写清职责
- 通过 dispatch 测试验证 agent 行为
下一章给每个角色配模型——成本与能力的最佳点。