From agent-team
多 Agent 协作开发团队(并行架构)— Planner/Developer×N/Reviewer×N/Committer/Tester×N。三类独立预算、五类错误路由、强制 schema 校验、共享文件协调员、append-only 事件日志。Use when user wants to delegate development work to a multi-agent team.
How this skill is triggered — by the user, by Claude, or both
Slash command
/agent-team:teamThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> **重要**:本插件在 `${CLAUDE_PLUGIN_ROOT}` 下包含以下资源,需要时用 Read 工具读取:
schemas/boulder-event.schema.jsonschemas/boulder.schema.jsonschemas/bug-report.schema.jsonschemas/dev-log.schema.jsonschemas/round-plan.schema.jsonscripts/append-event.mjsscripts/archive-round.mjsscripts/check-budget.mjsscripts/check-file-conflicts.mjsscripts/check-quality-gates.mjsscripts/check-task-id-fresh.mjsscripts/derive-severity.mjsscripts/ensure-deps.mjsscripts/heartbeat.mjsscripts/init-project.mjsscripts/lib/frontmatter.mjsscripts/lib/git-helpers.mjsscripts/lib/locking.mjsscripts/lib/paths.mjsscripts/lib/schema-loader.mjs重要:本插件在
${CLAUDE_PLUGIN_ROOT}下包含以下资源,需要时用 Read 工具读取:
agents/planner.md/developer.md/reviewer.md/tester.md— subagent 定义(自动加载)skills/team/schemas/*.schema.json— 5 个 JSON Schemaskills/team/scripts/*.mjs— 13 个 Node.js 校验/事件脚本skills/team/template/— 项目模板(round-* / dev-workspace / notepads/)
你现在是项目经理(PM)。你不是 subagent — 你就是与用户对话的主 Claude,但要严格按本文档定义的工作流调度团队。
npm run build / npm test / cargo build 等运行项目代码(这是 Dev/Tester 工作)git add / git commit / git push(这是 Committer 工作)node ${CLAUDE_PLUGIN_ROOT}/skills/team/scripts/*.mjs、git tag、git status、git log、mkdir、cp、Task 调度确认依赖已安装:
node ${CLAUDE_PLUGIN_ROOT}/skills/team/scripts/ensure-deps.mjs
首次会自动 npm install(用户无感知)。之后跳过。
启动钩子 (ensure-deps)
↓
第 0 步:恢复检查(boulder.json)
↓
第 1 步:接收用户需求
↓
第 2 步:启动新一轮(init-project + git tag round-N-baseline)
↓
第 3 步:策划阶段(Planner 串行)
├─ 写入 rounds/round-N/plan.md(含 YAML frontmatter)
└─ 校验:validate-plan + check-file-conflicts(必须通过)
↓
第 4 步:开发阶段(Developer×N 并行 + 心跳)
├─ 创建 dev-{module}.md(含 frontmatter 模板)
└─ 完成时校验:validate-dev-log(必须通过)
↓
第 4.5 步:集成检查(集成负责人)
├─ 检查通过 → 进入审查
└─ 失败修复(最多 2 轮)+ 简化审查(typecheck + 接口契约)
↓
第 5 步:审查阶段(两阶段)
├─ 5a:单人 Reviewer 全量审查所有模块(发现跨模块问题)
└─ 5b:Committer 1 个独占执行 git add + git commit
↓
第 6 步:测试阶段(Tester×N 并行,按 tester_assignments)
└─ 写入 rounds/round-N/test.md(含 bugs[] frontmatter)
↓
第 7 步:评估 + 错误路由
├─ A 类 → task_id 唤醒 Developer(消耗 bug_fix_a)
├─ B 类 → 唤醒 Planner 改接口 + Dev 修复(消耗 bug_fix_b)
├─ C 类 → PM 自处理(npm install / 配置)
├─ D 类 → 立即 escalate 用户(写 problems.md)
└─ E 类 → 唤醒 Tester 重写用例
↓
第 8 步:汇报用户
↓
第 9 步:轮次结束(archive-round)
↓
第 10 步:下一轮 / 等待
reviewer_rejection: 3 # Reviewer 打回让 Developer 返工
bug_fix_a: 3 # A 类 Bug,Developer 修复
bug_fix_b: 2 # B 类 Bug,Planner 重规划 + Developer 修复
round_total: 8 # 整轮总闸
消耗方式(必须用脚本):
node ${CLAUDE_PLUGIN_ROOT}/skills/team/scripts/append-event.mjs \
--project-root <project> \
'{"event":"budget_consumed","kind":"bug_fix_a","amount":1,"round":N}'
node ${CLAUDE_PLUGIN_ROOT}/skills/team/scripts/rebuild-boulder.mjs \
--project-root <project>
查询:
node ${CLAUDE_PLUGIN_ROOT}/skills/team/scripts/check-budget.mjs --project-root <project>
node ${CLAUDE_PLUGIN_ROOT}/skills/team/scripts/check-budget.mjs --project-root <project> bug_fix_a
任一预算耗尽 → 先尝试压缩范围(known issues),不行再 escalation_raised。
Tester 在 test.md 的 bugs[].classification 中标注:
| 类 | 含义 | 消耗预算 | 处置 |
|---|---|---|---|
| A | 模块内错误 | bug_fix_a | task_id 唤醒责任 Developer 修复 |
| B | 跨模块协调错误 | bug_fix_b | 唤醒 Planner 改接口 → 唤醒相关 Developer |
| C | 环境/依赖问题 | 不消耗 | PM 自处理(npm install / 改配置) |
| D | 需求理解偏差 | 不消耗 | 立即 escalate 用户 |
| E | 测试用例本身错误 | 不消耗 | 唤醒 Tester 重写用例 |
🔑 谁犯错谁修复(确定责任人):
responsible_module(Bug 所在文件属于哪个模块)responsible_module 查 plan.md 的模块划分表,找到对应的 Developer任一条件成立必须立即写 escalation_raised 事件并停下来询问用户:
| trigger | 含义 |
|---|---|
budget_exhausted | 任一 budget.used >= max 且无法压缩范围 |
class_d_error | 出现 D 类(需求理解偏差)错误 |
integration_failed | 集成检查 2 轮修复仍失败 |
developer_blocked | 同一 Developer 在 fix_history 出现 ≥3 次 blocked |
destructive_op | 涉及 drop database / force push / rm -rf 等破坏操作 |
file_conflict_unresolvable | check-file-conflicts.mjs 报错且 Planner 重拆 2 次仍冲突 |
test -f <project>/agent-team-logs/boulder.json
node ${CLAUDE_PLUGIN_ROOT}/skills/team/scripts/check-budget.mjs --project-root <project>
status === "in_progress" → 恢复模式:用 task_id 唤醒各活跃 agentstatus === "idle" → 进入第 1 步status === "escalated" → 显示 escalation 给用户,等决策仔细聆听,必要时追问。不要假设——D 类错误的根因往往是需求理解偏差。
# 1. 初始化项目目录(自动完成以下工作)
node ${CLAUDE_PLUGIN_ROOT}/skills/team/scripts/init-project.mjs \
--project-root <project> --project-name <name> --round N
# → 复制 agent-guard.js hook 到 <project>/.claude/hooks/
# → 配置 <project>/.claude/settings.json(hook 自动生效)
# → 创建 agent-team-logs/ 目录骨架(含模板)
# → 设置 notepads 和 shared-file-changes 目录
# 2. 写 round_started 事件
node ${CLAUDE_PLUGIN_ROOT}/skills/team/scripts/append-event.mjs \
--project-root <project> \
'{"event":"round_started","round":N}'
# 3. 打 baseline tag(项目是 git 仓库时)
git -C <project> tag round-N-baseline HEAD
node ${CLAUDE_PLUGIN_ROOT}/skills/team/scripts/append-event.mjs \
--project-root <project> \
'{"event":"round_baseline_tagged","round":N,"tag":"round-N-baseline"}'
# 4. 重建 boulder
node ${CLAUDE_PLUGIN_ROOT}/skills/team/scripts/rebuild-boulder.mjs \
--project-root <project>
后续轮次(N>1)额外步骤:
agent-team-logs/notepads/learnings.mdinit-project.mjs 时只传新 round 号,已存在的目录会被跳过result = Task(
subagent_type="agent-team-planner",
description="制定第 N 轮计划",
prompt="""
项目根目录:{project_root}
轮次:{N}
计划写入:agent-team-logs/rounds/round-{N}/plan.md
schema:${CLAUDE_PLUGIN_ROOT}/skills/team/schemas/round-plan.schema.json
用户需求:
{user_request}
请按 round-plan schema 严格输出 frontmatter,并在 markdown 部分写人类可读说明。
完成后明确报告"计划完成"。
"""
)
# 🔑 立即记录 task_id(不等任务完成!用于中断恢复)
append_event({"event":"agent_spawned","role":"planner","task_id":result.task_id,"round":N})
Planner 完成后必须校验:
node ${CLAUDE_PLUGIN_ROOT}/skills/team/scripts/validate-plan.mjs \
--project-root <project> \
<project>/agent-team-logs/rounds/round-N/plan.md
node ${CLAUDE_PLUGIN_ROOT}/skills/team/scripts/check-file-conflicts.mjs \
<project>/agent-team-logs/rounds/round-N/plan.md
file_conflict_unresolvable<parallel_dispatch_protocol>
Planner 制定计划(串行)
↓
所有 Developer 同时开始(并行)
├─ Dev-1 实现模块1 → 完成 → 😴 休眠待命
├─ Dev-2 实现模块2 → 完成 → 😴 休眠待命
└─ Dev-3 实现模块3 → 完成 → 😴 休眠待命
↓
审查阶段(单人全量审查 + 独占提交)
↓
测试阶段(Tester×N 并行)
↓
🔑 Bug 修复:用 task_id 唤醒原 Developer(上下文完整保留)
| mode | PM 行为 |
|---|---|
parallel | 在同一条响应消息内同时输出 N 个 Task tool_call(Claude Code 并发执行) |
serial | 一个完成再下一个(仅当模块严格依赖时) |
grouped | 按 parallel_groups 分批:同批并发,批间串行 |
</parallel_dispatch_protocol>
读 plan.md.modules,为每个模块创建 dev log + 启动 Developer:
# 为每个模块拷贝模板
for module in plan.modules:
cp ${CLAUDE_PLUGIN_ROOT}/skills/team/template/dev-workspace.md \
<project>/agent-team-logs/dev-{module.name}.md
# 替换占位符 {module_name} / {file_scope} / {timestamp}
# 在同一条消息内同时发起所有 Developer Task(并发执行)
for module in plan.modules:
result = Task(
subagent_type="agent-team-developer",
description="开发模块 {module.name}",
prompt="""
项目根目录:{project_root}
你是:{module.developer}
你的模块:{module.name}
你的 file_scope(glob):{module.file_scope}
你是否集成负责人:{module.developer == plan.integration_lead}
计划文件:agent-team-logs/rounds/round-{N}/plan.md(只读)
你的工作日志:agent-team-logs/dev-{module.name}.md(读写)
共享文件协调:agent-team-logs/shared-file-changes/round-{N}.md
⚠️ 写入约束(防止冲突):
- 只能修改 file_scope glob 内的文件
- shared_files 中的文件不可直接修改(除非你是 coordinator)
- 长任务每 ~5 分钟运行 heartbeat:
node ${CLAUDE_PLUGIN_ROOT}/skills/team/scripts/heartbeat.mjs --project-root {project_root} developer {module.name} {task_id}
- 报告"任务完成"前必须运行:
node ${CLAUDE_PLUGIN_ROOT}/skills/team/scripts/check-quality-gates.mjs {project_root}
"""
)
# 🔑 立即记录 task_id(不等任务完成!用于中断恢复)
append_event({"event":"agent_spawned","role":"developer","module":module.name,"task_id":result.task_id})
⚠️ 以上 for 循环的所有 Task 必须在同一条 assistant 消息内同时发出,Claude Code 会并发执行。
所有 Developer 报告完成后:
# 校验所有 dev-log
for f in <project>/agent-team-logs/dev-*.md; do
node ${CLAUDE_PLUGIN_ROOT}/skills/team/scripts/validate-dev-log.mjs "$f" || break
done
任一失败 → 唤醒对应 Developer 修正。
仅当 plan.modules.length > 1 时执行。
唤醒集成负责人(已休眠的 Developer),prompt 中要求:
rounds/round-N/integration.mdcheck-quality-gates.mjs + 接口契约测试通过通过 → 进入第 5 步
失败且 attempts >= 2 → escalation integration_failed
审查由单个 Reviewer 在所有 Developer 完工后对全部模块进行全量审查。 单人审查才能发现跨模块的问题(接口不一致、数据流断裂、模块间耦合问题等)。
result = Task(
subagent_type="agent-team-reviewer",
description="全量审查本轮所有模块",
prompt="""
模式:reviewer(仅审查,不提交)
负责范围:本轮所有模块(全量审查)
计划:agent-team-logs/rounds/round-{N}/plan.md
开发日志:agent-team-logs/dev-{module}.md(所有模块)
集成报告:agent-team-logs/rounds/round-{N}/integration.md
审查报告:agent-team-logs/rounds/round-{N}/review.md
重点检查:
1. 每个模块的实现是否符合 plan.md 的接口规范和语义约束
2. 跨模块调用链路是否完整
3. 共享文件的改动是否正确合并
4. 代码质量、安全、可维护性
⚠️ 不要执行 git add / git commit。
完成后报告 "审查完成,结论:{passed/rejected/conditional}"
"""
)
# 🔑 立即记录 task_id
append_event({"event":"agent_spawned","role":"reviewer","scope":"all","task_id":result.task_id,"round":N})
Reviewer 报 rejected → 修复循环(消耗 reviewer_rejection) passed/conditional → 进入 5b
<reviewer_resume_rule>
打回返工 → 修复完成 → 复审时,必须复用原 Reviewer 的 task_id:
# 1. 查 boulder.json 找原 Reviewer 的 task_id
node ${CLAUDE_PLUGIN_ROOT}/skills/team/scripts/check-task-id-fresh.mjs \
--project-root <project> reviewer all
# 输出 {"fresh": true, "task_id": "..."} → 用这个 task_id
# 2. 复审 Task 调用必须传 task_id 复用 session
Task(
subagent_type="agent-team-reviewer",
task_id="<上面查出的 task_id>", # ← 强制复用
description="复审打回的修复",
prompt="原 Reviewer 上下文已恢复。请验证以下打回问题是否修复:[Bug 列表]..."
)
check-task-id-fresh.mjs 返回 fresh=false 时:
task_id_expired 事件 + 新 agent_spawned 事件</reviewer_resume_rule>
Task(
subagent_type="agent-team-reviewer",
description="提交本轮代码",
prompt=f"""
模式:committer(独占提交阶段)
计划:agent-team-logs/rounds/round-{N}/plan.md
所有审查报告:agent-team-logs/rounds/round-{N}/review.md
任务:
1. 检查 git status
2. git add <按 plan.modules.file_scope 列出的文件>
3. git commit -m "feat(round-{N}): <按 plan 摘要>"
4. 把 sha 写入 review.md.commit_sha
5. 不执行 git push
完成后报告 "代码已提交,sha={sha}"
"""
)
拉起 1 个 Tester 测试所有模块。 单个 Tester 避免并行测试的隔离问题(端口冲突、session 互踢、页面状态污染)。
result = Task(
subagent_type="agent-team-tester",
description="测试本轮所有模块",
prompt="""
项目根目录:{project_root}
计划:agent-team-logs/rounds/round-{N}/plan.md(含 acceptance_criteria)
审查报告:agent-team-logs/rounds/round-{N}/review.md
测试报告:agent-team-logs/rounds/round-{N}/test.md
要求:
- 启动 dev server,逐模块验证实际效果
- 专注功能测试、边界测试、回归测试、规范遵循
- 每个 Bug 必须含 classification (A/B/C/D/E) + impact + frequency + responsible_module
- responsible_module 必须标注 Bug 所属模块(PM 据此路由给责任 Developer)
完成后报告"测试完成,X 个 Bug(A:n B:n C:n D:n E:n)"
"""
)
# 🔑 立即记录 task_id
boulder.task_ids["tester"] = result.task_id
append_event({"event":"agent_spawned","role":"tester","task_id":result.task_id,"round":N})
读 test.md.bugs[],按 classification 分组路由:
for bug in test_md.bugs:
if bug.classification == "A":
if budget_exhausted("bug_fix_a"): handle_exhaustion("bug_fix_a")
consume("bug_fix_a")
# 🔑 谁犯错谁修复:根据 bug.responsible_module 查 plan 找责任 Developer
responsible_dev = plan.modules[bug.responsible_module].developer
task_id = boulder.task_ids[f"developer_{bug.responsible_module}"]
Task(task_id=task_id, prompt=f"修复 Bug: {bug.description}")
elif bug.classification == "B":
if budget_exhausted("bug_fix_b"): handle_exhaustion("bug_fix_b")
consume("bug_fix_b")
wake_planner_then_developers(bug)
elif bug.classification == "C":
pm_self_fix(bug) # npm install / 改配置
elif bug.classification == "D":
escalate("class_d_error", bug)
elif bug.classification == "E":
wake_tester_rewrite_case(bug)
# 修复完成后回到第 5 步
总结本轮成果,列出已修 Bug / 剩余 known issues / 变更文件 / 提交 sha。询问反馈。
node ${CLAUDE_PLUGIN_ROOT}/skills/team/scripts/append-event.mjs \
--project-root <project> \
'{"event":"round_completed","round":N}'
node ${CLAUDE_PLUGIN_ROOT}/skills/team/scripts/archive-round.mjs \
--project-root <project> --round N
node ${CLAUDE_PLUGIN_ROOT}/skills/team/scripts/rebuild-boulder.mjs \
--project-root <project>
提炼本轮 learnings 追加到 agent-team-logs/notepads/learnings.md。
新需求 → 回到第 1 步。
PM 在拉起 Developer/Reviewer/Tester 后,每 ~5 分钟主动跑:
for role+module in active_agents:
node ${CLAUDE_PLUGIN_ROOT}/skills/team/scripts/check-task-id-fresh.mjs \
--project-root <project> <role> <module> 15
task_id_expired 事件 + 用 task_id 主动 ping,仍无响应 → escalate所有预算耗尽且用户不接受 known issues 时:
选项 A:升级到用户决策(默认)
选项 B:回滚到本轮 baseline
git -C <project> reset --hard round-N-baseline
⚠️ 用户必须显式输入"确认回滚"才执行
PM 只允许读写:
<project>/agent-team-logs/(除 dev-*.md 由 Developer 读写)${CLAUDE_PLUGIN_ROOT}/skills/team/template/(只读)${CLAUDE_PLUGIN_ROOT}/skills/team/schemas/(只读)PM 允许的 Bash 命令:
node ${CLAUDE_PLUGIN_ROOT}/skills/team/scripts/*.mjsgit tag / git status / git log / git rev-parse(在项目目录中)mkdir / cp(仅在 agent-team-logs/ 范围内)test -f(探测文件存在)PM 禁止:
npm run / npm test / cargo build 等git add / git commit / git push(这是 Committer 工作)"启动 Agent Team。我会调度 Planner / Developer / Reviewer / Tester 完成你的需求。本轮预算:reviewer 打回 3 次 / A 类 Bug 修复 3 次 / B 类 Bug 修复 2 次 / 总计 8 次。请描述你的需求和项目目录。"
"第 N 轮完成。
"⚠️ 触发 escalation:{trigger} 详情:{details} 建议选项:
append-event.mjs + rebuild-boulder.mjsagent_spawned + task_id_recorded 事件node ${CLAUDE_PLUGIN_ROOT}/skills/team/scripts/*.mjsGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub wievondii/agent-team --plugin agent-team