OpenAI Codex Harness Engineering: Agent-First 软件开发实验
OpenAI 团队在 5 个月内用 0 行手写代码构建了一个百万行级别的内部产品,3 名工程师驱动 Codex 完成约 1,500 个 PR(3.5 PR/人/天)。这个实验揭示了当 agent 成为主要的代码生产者时,工程工作的本质如何从"写代码"转变为"设计环境、制定意图和构建反馈循环"。
来源: OpenAI Engineering Blog — Ryan Lopopolo, 2026-02-11
Compiled Truth (可重写)
核心数据
| 指标 | 数值 |
|---|---|
| 代码行数 | ~1,000,000 |
| 手写代码行数 | 0 |
| PR 数量 | ~1,500 |
| 初始工程师数 | 3(后增至 7) |
| 吞吐量 | 3.5 PR/人/天(且随团队扩大而增加) |
| 开发时间 | 约 1/10 手写时间 |
| 单次 Codex 运行时长 | 最长 6+ 小时 |
关键设计决策
1. AGENTS.md 作为目录,而非百科全书
“一个巨大的 AGENTS.md” 方案失败了,原因:
- 上下文是稀缺资源:巨大的指令文件挤占了任务、代码和文档的空间
- 太多指导等于无指导:当一切都是"重要"的,agent 开始局部模式匹配
- 立即腐烂:单体手册变成过时规则的墓地
- 难以验证:单个 blob 不支持机械检查
替代方案:短 AGENTS.md(~100 行)作为目录,结构化 docs/ 目录作为知识库。
2. 渐进式披露(Progressive Disclosure)
AGENTS.md ← 入口,地图
ARCHITECTURE.md ← 顶层架构
docs/
├── design-docs/ ← 设计文档 + 核心信念
├── exec-plans/ ← 活跃/已完成计划 + 技术债追踪
├── generated/ ← 自动生成的文档(如 db-schema)
├── product-specs/ ← 产品规格
├── references/ ← 外部库的 llms.txt
├── DESIGN.md / FRONTEND.md / QUALITY_SCORE.md / ...
用 CI 和 linter 机械地验证知识库的时效性、交叉链接和结构正确性。一个"文档园艺"agent 定期扫描过时文档并开修复 PR。
3. Agent 可读性优先
“Agent 看不到的东西,对它来说就不存在。”
- Google Docs、Slack 讨论、人类头脑中的隐性知识 — 对 agent 来说不可见
- 所有知识必须编码进代码库(markdown、schema、可执行计划)
- 类比:就像给新入职的工程师做 onboarding
技术选择偏向"无聊"的技术 — 组合性好、API 稳定、训练集中有充分表示。有时让 agent 重新实现子集功能比处理不透明的上游库更便宜。
4. 机械执行架构约束
Types → Config → Repo → Service → Runtime → UI
↑
Providers(跨切面关注点的唯一入口)
- 每个业务域按固定分层,依赖方向严格验证
- 自定义 linter(Codex 自己写的!)和结构测试执行约束
- Lint 错误信息中注入修复指令到 agent 上下文
- 中心化执行边界,本地化允许自主
5. 垃圾回收(Garbage Collection)
Agent 会复制代码库中已有的模式——包括不理想的。解决方案:
- 编码"黄金原则"(如:共享工具包 > 手写帮助函数)
- 定期后台 Codex 任务扫描偏差、更新质量评级、开重构 PR
- 大多数重构 PR 可在 1 分钟内审阅并自动合并
- 技术债像高利贷:持续小额偿还远优于累积后大规模清理
6. 全栈 Agent 可观测性
- App 可按 git worktree 启动,每个变更一个隔离实例
- Chrome DevTools Protocol 集成:DOM 快照、截图、导航
- 本地可观测栈(LogQL/PromQL/TraceQL),随 worktree 创建/销毁
- Agent 可以验证"服务启动 < 800ms"、“关键路径无 span > 2s”
完全自主的端到端流程
单条 prompt 即可驱动 agent 完成:
- 验证代码库状态 → 2. 复现 bug → 3. 录制失败视频 → 4. 实现修复 → 5. 驱动 app 验证修复 → 6. 录制修复视频 → 7. 开 PR → 8. 响应审阅 → 9. 处理构建失败 → 10. 仅在需判断时升级给人 → 11. 合并
工程师角色转变
| 传统工程 | Harness Engineering |
|---|---|
| 写代码 | 设计环境 |
| Code review | 构建反馈循环 |
| Debug | 使能力和约束对 agent 可读且可执行 |
| 技术债管理 | 编码原则 + 自动化垃圾回收 |
| 文档维护 | 文档作为系统记录 + 自动园艺 |
Timeline (只追加)
- 2025-08: 项目启动,空 git 仓库的第一个 commit
- 2026-02-11: OpenAI 发布博客文章
- 2026-04-13: 整理进 KB,创建 wiki 页面