Harness Engineering:给 AI Agent 套上缰绳
如果你已经在用 AI Agent 辅助开发,以下场景大概率似曾相识:
架构漂移失控 — Agent 不理解你的架构意图,生成的代码悄悄越过模块边界,service 层调了 controller 的工具类,循环依赖无声蔓延。你以为只是一个小功能,review 时发现依赖图已经面目全非。
技术债务指数级堆积 — 人写代码,技术债务是线性增长;Agent 写代码,技术债务是指数增长。Agent 不会主动清理上一轮遗留的废代码,反而会基于它继续构建,债务像滚雪球一样越积越大。
上下文黑洞 — Agent 无法访问你脑中的架构决策、团队约定、历史教训。它看不到的信息,对它来说等于不存在。结果就是同一个项目里出现三种日志规范、两套错误处理风格。
人工 QA 成为瓶颈 — 代码吞吐量上来了,一天能生成几十个 PR,但 review 的还是那几个人。生成速度远超人类审查能力,质量关口形同虚设。
文档代码脱节 — README 写的是上个月的架构,Agent 基于过时信息做决策,产出的代码与当前设计南辕北辙。
这些问题的共同根因是:我们有了强大的 Agent,却没有约束和引导它的系统。
OpenAI 近期发布了 Harness Engineering 一文,披露了他们如何让 Codex Agent 从零构建了一个完整的内部产品。核心方法论叫 Harness Engineering。
一个直观的类比:
- 马 — AI 模型(Codex),拥有强大的执行力
- 缰绳与马具(Harness) — 约束、反馈回路、文档、Linter、生命周期管理
- 骑手 — 工程师,提供方向和判断力
Harness 的本质是:约束 + 反馈回路 + 文档 + Linter + 生命周期管理。
工程师的核心职责从"写代码"转变为"设计让 Agent 高效工作的环境"。你不再是码农,你是 Agent 的架构师。
六大最佳实践
实践一:Context Engineering — 让 Agent "看见"你的架构
核心原则:Agent 无法在上下文中访问到的信息,对它来说等于不存在。
OpenAI 项目中散布着 88 个 AGENTS.md 文件,根文件定义全局默认规则,子目录文件覆盖本地规则。它不是一本大手册,而是一张导航地图。
渐进式披露(Progressive Disclosure):
项目根目录/
├── AGENTS.md ← 全局入口,精简,指向子目录
├── src/
│ ├── api/
│ │ └── AGENTS.md ← API 层的约定、依赖规则
│ ├── service/
│ │ └── AGENTS.md ← Service 层的约定
│ └── infra/
│ └── AGENTS.md ← 基础设施层规则
Agent 从根入口开始,按需深入到具体子目录获取局部上下文。不是一次性灌入 10 万字,而是按层级逐步展开。
机械化保鲜:
- Linter 和 CI 自动验证知识库的正确性和时效性
- "doc-gardening" Agent 定期扫描过时文档,自动发 PR 修复
- 文档不是写完就完了,而是被当作代码一样持续维护
落地建议:
- 在项目根目录建立 AGENTS.md(或 CLAUDE.md),写清架构分层、命名规范、模块边界

