【harness 之 agent 长程工作流。】
harness 其实有一个主要的目的,那就是怎么让 agent 可以稳定的长时间工作。哪怕是因为网络断了,或者切换 session 会话了,那么也可以成功的续上接着做。
而一个最简单的实现是,通过 4 个文件来串起来一个工作流。我们先假设,你需要实现一个从 0 到 1 的应用,它可能包括十几个功能,需要 agent 至少要干一长段时间才能完成的。
先初始化代码仓库(这个是 agent 能看到的全部),然后需要使用 claude code 的 plan 模式,先聊好功能需求(人要参与),最终得到第一个文件 feature-list.json, 里面包括了所有功能和验证的步骤和状态。
然后就需要开始编写 agent 的入口文件 AGENTS.md (或 Claude.md), 这里要把它当做是一个路由和中心流程控制文件。之前我们也聊过这个文件可以包含简短的架构,技术栈等,这里为了讲解长程工作流,那么会忽略这些基础部分。
所以 AGENTS.md 会是一个地图,制定工作流然后把其他文件串起来。开头需要先指明有几个文件,分别做什么的。
1. feature-list.json:功能需求的唯一来源。
2. progress.md: 会话进度以及当前验证的状态。
3. hands-off.md: 较长会话需要的摘要,说明整体都做到什么程度了。接下来要做什么。
罗列完必要文件,那么就是定义工作流。
1. 读取 progress.md, 了解最新状态和进度,下一步是什么。
2. 读取 feature-list.json , 选择最高优先级,且 status 不等于 passing 的功能进行开发和测试。
3. 使用 git log 来查看最近的 5 次提交。
4. 开发任何功能前,保证 smoke test 都跑过。如果有测试失败的,先修复错误再继续开发新功能。
定义完工作流,那就是收尾,什么时候更新这些文件。对于 progress.md 文件,实际上就是记录每个会话的历史,都做了什么,验证了什么。能给 Agent 一个完整的历史上下文。
而对于 hands-off.md 文件,它更像是对于 feature-list.json 和 progress.md 文件的汇总摘要,然后要递交给 subagent 的时候,subagent 要接着开发新功能的场景。
而且一个有用的技巧就是,这些文件,一开始可以只给模板,就是定义好要填写什么内容和字段,Agent 会自己理解后来进行填空。
而最后的结尾指令,还是需要写在 AGENTS.md 文件中,指示 agent 进行文件的更新。
1. 每一项功能完成后,都需要更新 featurel-list.json, 同时更新 progress.md
2. 同时使用 git commit 进行功能的提交。