为纪念 35 周年:《Terminator 2: Judgment Day》将在全球影院重映
2026-07-13
2026-07-17 0
通过前面两篇文章,harness 已经能正常使用且产生工程的项目画像。

这次我们要让每一项任务,有明确的边界、能被正确执行、最后留下可复用的证据。
笔者把 OpenSpec 和 omx(oh-my-codex 的运行时编排)接入到 cow-harness。从而达到 Harness 管项目边界,OpenSpec 管任务的拆分和梳理,omx 管已经批准任务的执行。
让 AI 运行过程更加的健壮!
开源地址:OpenSpec · omx · cow-harness
AI 能读懂仓库,不等于它能持续把需求做对。一个新的需求还会带来另一组问题:为什么要改、改到哪里、哪些行为不能被破坏、做到什么算完成?
如果这些信息只散在聊天记录里,前面做过的判断很容易消失。
所以,不把 Harness 当成一个只会塞提示词的文件夹,而是更像项目的工作秩序:
| 层 | 放在哪里 | 它负责什么 | 它不负责什么 |
|---|---|---|---|
| Harness | .ai-harness/ 与项目入口 | 项目画像、模块边界、任务路由、验证门禁 | 不保存每一次需求的详细方案 |
| OpenSpec | openspec/changes/ | 一次变更的动机、行为规格、任务与验收 | 不复制项目画像,也不直接替你写代码 |
| omx | 运行时执行链路 | 把已经批准的任务拆开、执行、回收结果 | 不越过规格决定需求范围 |
| 运行证据 | .ai-runtime-artifacts/ | 执行日志、独立决策、评审与非 OpenSpec 验证记录 | 不重复保存 change 内已有的事实 |
项目画像 .ai-harness/
↓ 识别稳定事实与正确子项目
OpenSpec change
↓ 规格、任务、人工确认
omx 或当前 Agent
↓ 执行、测试、验证
变更归档 + 运行证据
↓ 回流为下一次任务可读取的项目上下文
OpenSpec 真正约束的是:有行为边界的变更
| 任务情况 | 该走哪条路 |
|---|---|
| 文档、拼写、纯配置、机械修改、无契约的局部缺陷 | 直接处理,运行最接近的验证 |
| 新能力、架构、跨模块、外部 API、数据模型、安全、复杂 UI 行为 | 创建或继续当前业务项目里的 OpenSpec change |
| 已经在一个 change 中的后续工作 | 继续该 change,不能绕开它另起一条私有流程 |
注意,一旦进入 OpenSpec,流程会把需求逐层压实:
brainstorm
→ design(按需)
→ specs(必需)
→ tasks
→ human-review(按需)
→ apply
→ verify
→ retrospective
→ archive
当前 OpenSpec 的校验与归档流程,需要至少一份行为 delta spec 才能判断一项 change 是否完整;这正好让“改什么、怎么验收”有了明确落点。
OpenSpec 解决的是“做什么”;omx 解决的是“已经批准的事情,怎样执行得更可靠”。
两者的交接点非常明确:任务已经拆好并获得确认后,才允许进入执行。
在 cow-harness 的路由中,Agent 会先读取当前 change 的动态指令:
openspec instructions apply --change --json
这一步会让执行方拿到当前 change 的任务、规格和验证要求,再决定采用哪种执行方式:
这次改造 cow-harness,我们实际做了四件事
domain-init 固定为 Harness 的 Git submodule。初始化时,AI 不再只看目录,而是会按领域初始化流程识别前端、后端、客户端、测试等项目规则,并把结果写进项目自己的 .ai-harness/。cow-harness/ 演进。openspec init --tools none 初始化项目根目录的 OpenSpec,合并 schema,并生成 .ai-harness/openspec-context.md。business-project/
├── cow-harness/ # Git submodule:通用框架与初始化流程
├── .ai-harness/ # 该项目的长期画像
│ ├── project.profile.md
│ ├── context-map.md
│ ├── verification.md
│ └── openspec-context.md
├── openspec/ # 该项目自己的规格与变更
│ ├── changes/
│ ├── specs/
│ └── schemas/cow-harness/
└── .ai-runtime-artifacts/ # 非 OpenSpec 的执行与验证证据
OpenSpec 和 omx 在真实项目里,它们解决的是一套标准的研发流程,可靠性更高。
这也是 cow-harness 开源出来的原因,它不只是一个示例模板,而是把全栈项目路由、领域初始化、项目画像、OpenSpec 变更和验证门禁组织到一起的一套可迁移基建。
| 项目现场 | 只靠对话推进 | 接入 OpenSpec 和 omx 之后 |
|---|---|---|
| 需求变更 | 需求、方案与验收混在上下文里,时间一长就只剩代码结果 | 变更动机、行为规格与任务留在同一个 change,可以回看和继续 |
| 代码评审 | 主要看 diff,很难确认是否覆盖了原本要解决的问题 | 可以把实现、规格和验证放在一起核对 |
| 长任务或多人协作 | 前一轮的判断依赖记忆,任务交接容易失焦 | 项目画像、change 与运行证据各有位置,接手的人知道先读什么 |
| 多任务实现 | 容易把可并行和强依赖任务混在一起,执行结果也难回收 | 先由 tasks 明确依赖,再由 omx 按适合的执行方式推进并回收验证 |
OpenSpec 最直接的价值,是把“我以为要这么做”变成“我们约定要做到这里”。
是让评审从结果导向变成闭环导向。
omx 的价值,则是让“任务列表”不再只是文档最后的几行字。
两者放在一起,才能避免两种极端。
真正值得沉淀的,不是某一个框架的文件格式,而是这套工作方式。
Harness 不是为了限制 AI,而是为了让 AI 真正参与软件生产。
诚然,随着大模型能力越来越强,Harness 这类约束看起来没那么“刚需”了。 今天的新一代模型,已经能在较长上下文里完成方案、开发、修改和纠错;我们当然不该为了流程而流程。
但 Harness 的价值,从来不只是约束模型,而是逼着我们把经验变成方法流程:需求怎么拆、规格怎么验、测试怎样对应,埋点、灰度、发布和回滚又该由谁守住。
模型是会越来越强大,但这些判断点不会自动长出来。 所以,我们更应该主动参与,把这些方法教给 AI 去执行。
接下来笔者会继续基于 Harness,锚定一个场景。比如:把产品一句话需求,逐步串成可验证的方案、设计稿、开发任务和自动化测试;再让 AI 持续观察同类软件,把外部的需求提炼出来,反哺成下一轮迭代。
这是相对理想化的流程,但并不空想。先让 AI 读懂项目,再让每一次变更有规格、每一段执行有证据,我们就在把它从概念跑成现实。
关注我不迷路,我们继续把这条路跑通。开源地址:cow-harness