Claude Code + Spec-kit,组织四个 AI Agent 学会自己协作
本文记录了作者设计多智能体协作系统的9轮调试过程。作者构想了一个由4个Agent组成的流水线系统,通过Markdown文件传递任务,每个Agent负责不同节点(需求分析、规划、拆解、实现)。系统经历了脚本兼容性、路径定位、文件名错误、权限拦截、审批阻塞、输出显示、调用频率等多重问题,最终通过改用PowerShell脚本、修正路径变量、预授权工具、调整调度策略等方式逐一解决。
思想的来源
BandCompany是我设想的一家软甲公司,前面学了Spec-kit之后,我就想让4个Agent,每个Agent负责流程中的一个节点,通过md文件记录任务状态。我设计的流程是:人类提需求,AI负责写规格、做计划、拆任务、写代码。每个步骤都有对应的 Claude 命令。试着和Claude Code沟通了我的想法,并一步一步实现。
本文的主要内容是记录我的过程,对于AI产出的流程、代码,并没有过多涉及。只要掌握思想,以及合理的使用Claude Code的方法,你也可以创造出一个多智能体的协作流程。
设计主流程,然后交给Claude来实现
先设计了流程:四个 Agent 通过 Markdown 文件传递任务,一个做完写入下一个的队列,像流水线一样。然后Claude开始创建文件——prompt 文件、队列文件、子智能体注册表、通信协议、Agent 定义,一口气写了十几个。
第一轮:脚本跑不起来
写了启动脚本 start-all.cmd,用户跑了一下,直接报错——Windows 上应该用 PowerShell,不是 CMD。
全部推翻,用 .ps1 重写。
第二轮:参数不存在
PowerShell 版 start-all.ps1 用 Start-Process -WindowTitle 给窗口加标题,报错——这个参数压根不存在。改成 cmd /c start "标题" pwsh ...,借用 Windows 的 start 命令创建窗口。
第三轮:启动了,但 prompt 文件找不到
窗口弹出来了,但立刻报 Prompt file not found。start-agent.ps1 被 cmd /c start 启动后,$MyInvocation.MyCommand.Path 是空的,算不出自己的目录。加了 $PSScriptRoot fallback 才定位到文件。
接着发现 implement-prompt.md 和 implementer-prompt.md 差两个字母——Agent 名是 implementer,文件名只写了 implement。
第四轮:四个窗口都就绪了,提交任务
用户在 specify.md 里加了一行:
- [ ] 做一个公司官网,宣传我们的AI智能体产品
四个窗口开始轮询。
第五轮:日志说完成了,但什么都没发生
Specifier 窗口日志显示 Task completed,但 specs/ 目录里空空如也,队列文件里的任务原封不动。
claude -p 在非交互模式下,工具调用被权限系统静默拦截了。Claude 输出了文字说"我已创建规格",实际上什么文件都没写。
加了 --dangerously-skip-permissions。
第六轮:Claude 说"请批准"
Claude 终于开始执行工具了,但输出了这样一段话:
“我需要你的批准才能继续。正在挂起的操作是:创建 git 分支、创建规范目录、更新队列文件”
没有人在窗口前审批。Agent 在等一个不存在的人。
在 prompt 开头加了:“直接使用工具执行,不要请求批准”。同时创建了项目级 .claude/settings.json 预授权所有工具。
第七轮:窗口一片空白
Agent 确实在跑,但窗口里什么都看不到。用 Get-Content prompt.md | claude 这种 stdin 管道方式,claude 进入非交互模式,输出不显示在终端。
改成把 prompt 作为命令行参数传入:claude $Prompt。窗口里终于能看到工具调用的实时过程了。
第八轮:跑起来了,但太频繁
四个 Agent 同时以 30 秒间隔轮询,API 调用频率爆炸。启动瞬间四连发冲击服务器,空闲时空跑几百次。
第九轮:Cron 调度
从 Bash sleep 轮询改成 CronCreate 定时触发,四个 Agent 错开 10 分钟:Specifier 每小时整点,Planner 每小时 :10,Tasker :20,Implementer :30。每个 Agent 处理完后注册下一次触发,空闲时挂起不消耗调用。
现在的样子
.\agents\start-all.ps1 # 启动
.\agents\status.ps1 # 查看状态
.\agents\stop-all.ps1 # 停止
提交任务:编辑 agents\queue\specify.md,加一行 - [ ] 需求描述。
流程思想很简单——四个 Agent 通过文件队列接力,每个做完写入下一个的队列,错开时间执行,避免并发。但让这个简单流程真正跑起来,花了九轮调试。
踩过的坑
| 问题 | 原因 |
|---|---|
| CMD 脚本报错 | 应该用 PowerShell |
| Start-Process -WindowTitle 不存在 | 这个参数不存在 |
| 脚本找不到 prompt 文件 | cmd 启动下路径变量为空 |
| 文件名差两个字母 | implement vs implementer |
| 日志显示完成但实际没做 | claude -p 非交互模式工具被拦截 |
| Agent 输出"请批准" | 模型在请求不存在的人类审批者 |
| 窗口空白 | stdin 管道触发非交互模式 |
| API 调用爆炸 | 30 秒轮询 × 4 进程 |
更多推荐




所有评论(0)