OpenAI写出了一个100万行的软件,而人类亲手写的代码是0行。秘诀?把代码交给代理,但把代理工作的环境本身设计好。
这是什么?
Harness本意是控制马匹的装备——缰绳、马鞍、马嚼,一整套把强大却任性的动物引导到正确方向的工具。AI编码代理需要的,正是同样的东西。
Harness Engineering(马具工程)是设计AI代理工作环境、约束和反馈循环的全新工程领域。 如果说Prompt Engineering(提示词工程)关注的是"让代理做什么",那么Harness Engineering关注的就是"让代理在什么环境下工作"。
Philipp Schmid(前Hugging Face)把它比作一台计算机——如果模型是CPU、上下文窗口是RAM,那么harness就是操作系统(OS)。它管理上下文,处理启动序列(提示词、钩子),提供标准驱动(工具调用)。
为什么现在火起来了?OpenAI Codex团队5个月内用代理写了超过100万行代码,3名工程师平均每天合并3.5个PR。人做的不是写代码,而是设计harness。 LangChain也保持模型不变,只换harness,就把基准测试排名从Top 30冲到了Top 5。
重点:三个概念的区分
提示词工程 = 在单次交互中写出有效的指令
上下文工程 = 优化模型看到的信息
马具工程 = 设计代理系统的整体(环境、约束、反馈、生命周期)
马具的组成要素——Commands、Skills、Hooks
@_petercha的vibe coding术语整理系列把这些组成要素讲得非常清楚。 以Claude Code为例,看看构成harness的三大核心工具。
有什么不同?
没有harness直接用代理是什么体验,大家应该都见过。要么朝着错误方向狂奔,要么反复犯同样的错,要么上下文一长就忘了最初的指令。模型再强,没有harness也白搭。
| 不用harness直接用代理 | 应用harness | |
|---|---|---|
| 方向性 | 依赖提示词,频繁跑偏 | 用约束和反馈自动纠偏 |
| 质量一致性 | 每次结果都不一样 | 用架构规则+linter强制约束 |
| 长任务 | 超过50步就开始漂移 | 压缩上下文、用subagent分散 |
| 团队协作 | 每人各搞各的 | 共享harness让全队保持一致 |
| 可扩展性 | 需要人持续介入 | 自主运行→人只做review |
NxCode的整理指出,马具工程的三大核心轴是这些。
- 上下文工程(Context Engineering)
让代理在正确时点看到正确信息。把AGENTS.md当成"目录"而非百科全书,详细文档分散到结构化的docs/目录里。 - 架构约束
不是"写好代码",而是用机制强制好代码的结构。依赖方向、命名规则、文件大小限制都通过linter和CI来验证。 - 熵管理
AI生成的代码会随时间漂移。要定期跑一个"清理代理",扫描文档一致性、模式违反、冗余代码。
三大实战马具框架对比
理论说够了,看看现在就能用的开源harness框架对比。
| 框架 | 核心理念 | GitHub Stars | 支持的代理 |
|---|---|---|---|
| Superpowers | 基于TDD的自主开发工作流 | 76.5K | Claude Code、Codex、Cursor、OpenCode |
| Oh-my-claudecode | Teams优先的多代理编排 | 9.2K | Claude Code(+Codex、OpenCode变体) |
| Ouroboros | 用苏格拉底式提问提取意图、防止代理震荡 | 1.1K | Claude Code |
Superpowers是Jesse Vincent做的代理式技能框架。 最酷的一点是它强制TDD(测试驱动开发)——代理在写代码前必须先写测试,遵循红灯→绿灯→重构的循环。安装后,代理会自动完成头脑风暴→设计→规划→subagent执行→代码评审→分支收尾的全套工作流。
Oh-my-claudecode是韩国开发者Heo Yeachan打造的框架,21个专业代理(代码审查员、调试器、架构师等)像团队一样协作。 它包含针对Claude Code的oh-my-claudecode、针对Codex的oh-my-codex,以及针对OpenCode的oh-my-openagent,形成了一整个家族。
Ouroboros是Q00做的框架,信奉"Stop prompting. Start specifying.(别再写提示词,开始写规格)"的理念。 它通过苏格拉底式提问挖出用户的真实意图,并用模糊度(Ambiguity Score)和代理震荡(Oscillation)的数值跟踪,防止代理迷路。
上手指南
- 先把CLAUDE.md(或AGENTS.md)整理好
把项目的架构、编码规则、目录结构在100行内整理清楚。是目录,不是百科全书。 - 用Hooks设置确定性规则
在.claude/settings.json里加上PostToolUse钩子自动lint、Stop钩子在任务完成时通知,先试一试。 - 装一个harness框架试试
Claude Code用户只要一行/plugin install superpowers就行,TDD工作流会自动应用。 - 逐步加约束
别一开始就想造一个完美的harness。从基础lint开始,看到模式后再加架构约束,需要的时候再引入subagent。
注意:过度设计的陷阱
Philschmid的核心建议——"Build to Delete(为删除而构建)"。模型进步很快,2024年需要复杂流水线才能解决的功能,到2026年可能一句提示词就搞定了。控制流设计过度,下一次模型升级时整个系统就会崩。



