写了三个月 Agent Harness,我终于敢让 Claude Code 全自动写代码了

4 月 14 日
 fennu2333

我日常用 Claude Code 做项目开发。之前的工作流大概是这样的:Asana 上有个任务,我把描述复制出来贴给 Claude Code ,等它做完,再把总结贴回 Asana 。下一个任务,再来一遍。

干了几周我就崩溃了。我本质上变成了一个人肉 adapter ,在 Asana 和终端之间来回搬运文本。Agent 明明能自己干活,但它不知道该干什么,干完了也不知道去哪交差。这些上下文全锁在我脑子里,或者锁在 Asana 这种 Agent 根本没法用的工具里。

所以从 2 月开始我做了个开源项目 Chorus,想法很简单:给 Agent 一个它自己能用的任务管理器,让它自己领任务、做任务、交任务。

实际用起来大概是这样:

下面按时间线聊聊这三个月我踩了哪些坑,做了哪些决策,怎么一步步走到现在敢加上 /yolo 命令让 CC 自己跑全流程的。

v0.1 ( 2 月底):先让 Agent 自己看到活

第一版就是把管道跑通:Idea -> Proposal -> Task -> Execute -> Verify 。

工作流参考了 AWS 的 AI-DLC ( AI-Driven Development Lifecycle ),简单说就是不在现有流程上"加个 AI 助手",而是让 AI 来主导整个开发生命周期。

我在这基础上加了个"反转对话"的设计:人只负责抛一个粗糙的想法,PM Agent 主动提问把需求聊清楚,然后自己出方案、拆任务,审批通过后 Developer Agent 去领活干。

配合 Claude Code 的插件机制,我做了一个自动注入:每次打开 Claude Code ,插件会自动把当前项目里还有哪些活要干、哪些任务被分配给了你,直接塞进上下文。Agent 一进来就知道该干嘛,不用我再复制粘贴任务描述了。

但很快我就发现,"能看到活"和"能把活干好"之间的距离,比想象中远得多。

v0.4 ( 3 月中):Agent 太容易"自以为做完了"

跑了两周,最大的问题浮出来了:Agent 说"我做完了"这句话,可信度大概五成。

"代码写了但没测"、"主流程通了但边界没覆盖",这种情况隔三差五就来一次。Agent 不是故意偷懒,但它确实不会主动对着验收标准逐条检查。

所以 v0.4 加了两个机制:

验收标准 checklist。给每个 Task 加了独立的 AC ( Acceptance Criteria )列表。Agent 做完后必须逐条自检标记 pass/fail ,然后人或 Admin Agent 再逐条确认。

依赖强制执行。上游任务没验收通过,下游任务压根不会解锁。不是"建议你先做 A 再做 B",而是 B 的 API 直接不返回给你。

说白了就是不靠 Agent 自觉,靠环境约束。你没法指望 Agent 每次都"记得"检查验收标准,但你可以让它在没检查的情况下根本提交不了。

v0.6 ( 4 月初):让 Agent 审 Agent ,因为我又成了瓶颈

质量关卡加上了,但谁来执行验收?还是我。

Agent 出了 Proposal 我得看,Task 做完我得验,AC 逐条我得确认。工作量从"复制粘贴"换成了"逐条 review",但瓶颈还是卡在我一个人身上。

正好这段时间 Claude Code 源代码"开源"了,我仔细研究了一遍它的插件机制,发现 Claude Code 的插件可以定义独立的 agent 。这些 agent 有自己的 system prompt 、自己的上下文,跟执行开发任务的 agent 完全隔离。这就意味着我可以在插件里定义一个专门干 review 的 agent ,它完全没见过开发过程中的上下文,天然就是个旁观者视角来审查。

想明白这一点之后,v0.6 做了这个项目最关键的一个决定:让 Agent 审 Agent 。

在 Chorus 插件里定义了两个 reviewer agent:proposal-reviewer 审方案(接口设计对不对得上、任务拆分合不合理、AC 能不能测),task-reviewer 审代码(实现有没有满足 AC )。它们有各自的 system prompt 和审查规则,审查记录永久存档。审不过就打回,附上具体问题,Agent 自己改完再交。最多三轮,三轮还过不了才上报人类。

这一步是转折点。之前不管自动化做到什么程度,最后总有个环节卡在我身上。现在接口对不对得上、标准满没满足、依赖有没有画反这些检查都有 reviewer 扛着了。等东西递到我手上的时候,已经被挑过一轮刺了,我只要做最终判断。

v0.6.1 (上周):/yolo ,全串起来了

到这一步,拼图终于凑齐了。Elaboration 把需求聊透,Proposal 把方案想清楚,Reviewer 把质量守住,全自动的前提条件都满足了。

/yolo 给项目加一个暗色模式,支持系统偏好自动切换

一句话进去,Agent 自己走完整条管道,中间不问你一句话。

Ctrl+C 随时能断,所有已创建的任务都持久化了,随时可以手动接管继续做。某个 Task 反复过不了审,流水线不会卡死,标记成需要人工介入然后继续推进其他 Task 。

实际用下来怎么样

不是每次都完美,复杂 feature 偶尔会在 Proposal 阶段跑偏,reviewer 能抓到一部分但不是全部。

但有两个变化很明显:

一是调试思路变了。之前出问题得从最终代码往回猜 Agent 哪步想歪了,现在直接翻 Elaboration 记录和 Proposal 审查历史就能定位到是哪个假设出了偏差。

二是我的时间释放出来了。之前大部分时间在逐条 review ,现在主要在想下一个 feature 做什么,reviewer 标记"需要人工介入"的时候才去看一眼。

中等复杂度的 feature ( 3-8 个 task ),成功率比我预期的高。Proposal 阶段方向对了,后面基本不出大问题。

用这套机制做的一个项目:GleanerDemo),一个纯前端的 GitHub repo 知识库渲染器,帮你缓存和渲染 GitHub repo 里的 Markdown 内容。起因是想有个地方整理知识,但 Obsidian 太重了,我只想要一个轻量的、用 Git 管理的方案。从需求到交付基本就是 /yolo 跑出来的。

Anthropic 发了差不多的功能

上周 Anthropic 发了两个东西挺有意思。Advisor Tool 让 Sonnet 干活时随时请教 Opus ,说白了就是模型级的 reviewer 。UltraPlan 让 Claude Code 先在云端出完整计划再执行,说白了就是 Proposal 机制。一个是"执行时有人看着",一个是"动手前先想清楚",跟我在 Chorus 里做的事情高度重合。

项目信息

开源,AGPL-3.0 ,Next.js + Prisma + PostgreSQL 。项目本身就是用 Chorus + Claude Code 开发的,吃自己狗粮。

有问题欢迎 Issues 或 Discussions 。

8588 次点击
所在节点    程序员
49 条回复
r6cb
4 月 14 日
@firefox12 #20 就用你现在这个 gpt 账号在 codex cli 里面登录啊
firefox12
4 月 14 日
@r6cb 我这个好像免费账号 对话用的 也可以吗?
hymxm
4 月 14 日
跟 multica 有点像,类似的还有 slock
teaguexiao
4 月 14 日
"Agent 审 Agent" 这个设计挑到最核心的点了,隔离上下文的 reviewer 天然有旁观者角度,比让同一个 agent 自我审查靠谱多了。居然还参考了 AWS AI-DLC ,做云的看到这个是真的親切。
drbuglu
4 月 14 日
项目很有意思,提了个小 PR 把进度条的 closed task 计数修了(#157 )。代码读下来还发现几个可以改的地方,后续有空接着提。
fennu2333
4 月 14 日
@drbuglu 感谢👍 最近都在做大功能 issue 都没顾得上修哈哈
Edwardlyz
4 月 14 日
我也自己做了类似的想法,发现前端不如 multica ,专业性不如 claude-code 配合各种 hook 和工作流,最后扔一边了
drbuglu
4 月 14 日
@fennu2333 顺手把 #12 也修了,task reassign 一直报错是因为后端只认 open 状态,前端又放行了 assigned ,对不上。
期待后续的大功能。跑在远端服务器上还挺好的。
shm7
4 月 14 日
参考 https://maxlv.net/blog/porting-mihomo-to-rust-with-claude/
多角色的 agent 体系已经有很多了,很快就能完全串起来了。
saltbo
4 月 14 日
我的 agent-kanban 跟你这个差不多,你说的这些坑我也踩了。目前跑的还行,我正在用它重写我几年前开源的 zpan 。踩了不少坑,目前发现还是 system prompt 靠谱,我本来想让 agent 自己去读贡献者文档,然后发现很多时候不会严格遵循贡献者文档里要求的验收标准。


https://github.com/saltbo/agent-kanban
autojunjie
4 月 15 日
实践的经验永远是最有阅读价值的,感谢感谢
Reminders
4 月 15 日
请教一下,这个和直接使用 claude code 开发有什么不同的地方。
fennu2333
4 月 15 日
@Reminders 我的理解是这样的,CC 本身也是一种 Harness ,他解决的问题是怎么让 LLM 帮你写代码,写了提示词和工具约束 LLM 去遵循一定的软件开发套路。而 Chorus 这一层 Harness 是在 CC 外面给了一套环境,一个更固定的流程和约束:必须把和用户讨论的结果记录在案,必须在每个任务完成时固定启动一个 Agent 去 review 等等。包括前面楼层 @hymxm 提到的 multica 等工具也是一样的,如果把 LLM 比作一个人,那么 LLM + CC 等于 教会这个人按照规范写代码变成 AI SDE, LLM + CC + Chorus 等于把这个 AI SDE 放到一个工作环境里去执行开发工作
cutchop
4 月 15 日
建议始终使用最顶尖的模型,以后模型的能力越强,harness 需要做的越少
Reminders
4 月 15 日
@fennu2333 #33 这个过程是不是特别适合在 gitlab / github 中,天然就有 issue 、proposal 、task kanban 等。
fennu2333
4 月 15 日
@Reminders 我一开始试过 gh ,也试过在 linear 这样的任务管理工具上做,我写过一个 cc 插件直接把这一套流程跑在 linear 上,结果还是一般。我总结下来不管 gh 还是 linear 都提供了环境,但是不提供约束和反馈,比如有一个 kanban 给 agent 用,但是没约束他 task 和 task 的上下游关系,或者某个 task 他的完成标准一定要启动一个 review agent 从第三方的角度去审查等等。所以我自己做的时候就特别关注给 agent friendly 的反馈。比如在 Chorus 上 Agent 想要标记某个任务为完成,Chorus 给他的报错信息特别具体,“你不能这么做因为 xxx 项目的校验还没有完成” 或者 “上游 xxx 任务还没有完成,你应该先去做 xxx” 等,帮你把这些 drive 流程的 PE 藏在了各个环节里来解决 Agent 做着做着忘的问题
nullEDYT
4 月 15 日
我的理解 AI CODE 最终的状态应该是 LLM 大模型一运行 就能根据项目提供的文件 就形成了完美的上下文 再去套一层类似 CC 的概念 感觉不太得劲
callmecaiyuyu
4 月 16 日
看起来很不错,有点想体验玩玩,但不知道后面 Chorus 更新迭代方便不?怕玩一半后面更新又要重来了
fennu2333
4 月 16 日
@callmecaiyuyu 哈哈我也是被 OpenClaw 更新摧残得不行,Chorus 开发的时候是最大努力做向后兼容,程序员的职业操守😂
9684xtpa
4 月 16 日
这种对于复杂需求还是很难做到,可是在大公司,都是在复杂需求里做迭代,让 AI 纯自动化去做这种,目前是不可能的,可能经过一段时间的使用迭代标准化,后续部分内容就可以让 AI 自己去做了

但是强如定制化的非标准流程或者说是一些埋坑式定制化逻辑,你让 AI 去做去维护,我目前认为他还是做不到,这类需求我都不敢让 AI 去做

必须承认,AI 的存在,对于很多工具系统,很多已经很成熟的非强业务系统,绝对是降维打击

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1205752

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX