——从OpenAI Symphony实验看Harness Engineering的范式革命
引言:那场震惊开发圈的5个月实验
2026年2月,OpenAI工程师Ryan Lopopolo发布了一篇看似平静但实则“炸穿整个开发圈”的博文。标题很克制——《在智能体优先的世界中利用Codex进行工程实践》。
文章披露了一个持续5个月的内部实验,数据如下:
| 指标 | 数据 |
|---|---|
| 核心工程师人数 | 3人(后扩展至7人) |
| 实验周期 | 5个月 |
| 代码总量 | 约100万行 |
| 人工手写代码 | 0行 |
| Pull Requests | 约1,500个 |
| 开发速度对比 | 约为传统手工编码的10倍 |
| 单次Agent最长运行时长 | 超过6小时 |
| 最终用户 | 数百名内部测试用户 |
最震撼的不是数字本身,而是那句看似轻描淡写的描述:
“整个项目没有一行代码是人类手写的。从应用逻辑、测试用例、CI配置、文档到监控大盘,全由Codex智能体完成。”
这篇文章出来后,整个行业分成了两派。一派惊呼“程序员要失业了”,另一派则开始认真追问一个更深刻的问题:当Agent一天能生成几百个PR时,工程师的价值到底在哪里?
答案不在“怎么让Agent写得更好”里,而在“怎么让Agent可靠地持续工作”里。这就是本文要展开的核心理念——Harness Engineering(驾驭工程)。
第一章:工程师角色的根本转变
传统工程师 vs Harness工程师:一场静悄悄的职业重构
当我们把“写代码”这件事交给Agent之后,工程师到底在做什么?OpenAI的3人团队给出了一个反直觉的答案:他们每天的工作不是写代码,而是构建让Agent能自主完成任务的基础设施。
让我们用一个对比表格来清晰呈现这种转变:
| 维度 | 传统工程师 | Harness工程师 |
|---|---|---|
| 核心价值 | 写代码的速度和质量 | 设计系统的能力 |
| 核心技能 | 编码能力、算法、框架熟练度 | 约束设计、反馈回路设计、控制系统设计 |
| 主要产出 | 代码 | Agent可靠运行的环境(Harness) |
| 工作方式 | 人写代码,AI辅助 | 人设计环境,Agent执行 |
| 瓶颈所在 | 人的编码速度和精力 | 环境设计的完备性和约束的有效性 |
| 技能进化方向 | 更深的语言/框架专精 | 更系统的架构设计、更严谨的规则编码 |
| 类比 | 马车夫(亲自驾车) | 高速公路设计师(修路、设护栏、建服务区) |
“人类掌舵,智能体执行”——Ryan Lopopolo的八个字
Ryan Lopopolo把整个Harness模式的理念浓缩成了八个字:人类掌舵,智能体执行。
这八个字背后是一套完整的方法论。当Agent遇到困难时,OpenAI的工程师不会想“我该怎么帮它写完这段代码”,而是追问一个更本质的问题:
“Agent缺乏什么能力?需要什么工具、什么抽象层、什么结构?”
然后由人类补充这些基础设施。
这就是Harness工程师的核心工作——不是帮Agent写代码,而是构建让Agent能自主完成任务的基础设施。
具体地说,工程师每天在做什么?
根据OpenAI实验的详细披露,3名工程师的日常工作内容包括:
- 设计仓库的知识结构:把
AGENTS.md从百科全书变成导航地图,确保Agent能按需获取正确信息 - 编码架构约束:把团队的“品味”写成自定义Linter规则,让违反架构规范的代码根本合不进主干
- 构建反馈闭环:让日志、指标、UI状态对Agent可读,Agent能自己查日志、自己跑测试、自己修复bug
- 运行“垃圾回收”:定期扫描代码库中的架构漂移,自动提交重构PR
- 优化工具链:当Agent反复在某个环节失败时,不是手动修代码,而是给Agent补充更好的工具或文档
用后端工程师熟悉的语言来说:传统工程师是“业务开发工程师”,Harness工程师是“平台工程师 + 架构师 + DevOps工程师”的融合体。
第二章:Ryan Lopopolo的关键追问
原话引用与精准解读
Ryan Lopopolo在文章中有一段话被反复引用,但很少有人真正理解它的深度:
“当Agent遇到困难时,我们将其视为一个信号:识别缺少什么——工具、护栏、文档——然后将其反馈到代码仓库中。”
这段话有几个层次值得拆解:
第一层:视角转换。 “Agent遇到困难”不是Agent的错,而是系统的信号。就像后端系统里的告警——告警本身不是问题,告警告诉我们系统哪里有缺陷。
第二层:识别缺失。 不是去“帮Agent完成任务”,而是去识别“完成这个任务需要什么能力”。这是根本性的思维转换——从“执行者思维”转换到“系统设计师思维”。
第三层:反馈到代码仓库。 这是最关键的一点——所有的改进都沉淀到代码仓库中,变成持久性的基础设施。就像你修复了一个线上bug,不是只修代码,而是同时加一个单元测试防止回归。
这不是“帮Agent写代码”
这里必须特别强调一个容易误解的点:
Harness Engineering不是“帮Agent写代码”,而是“构建让Agent能自主完成任务的基础设施”。
两者的区别类似于:
- 帮Agent写代码 = 你看到Agent写不出来,就自己上手写了(然后下次遇到同样问题还是不会)
- 构建基础设施 = 你看到Agent写不出来,就给它补充一个工具/一份文档/一条规则,然后它以后遇到类似问题都能自己解决
用后端类比:前者像在线上手动改数据修复问题,后者像加监控 + 告警 + 自动修复脚本。
第三章:信任债务(Trust Debt)——Agent时代的隐性冲击波
Cassie Kozyrkov的原始定义
前Google首席决策科学家Cassie Kozyrkov提出了一个让人背脊发凉的概念:信任债务(Trust Debt)。
她的原始定义是:
“AI就像一个极其听话但缺乏背景知识的实习生。它倾向于填补你指令中的空白,进行‘自信的即兴发挥’。如果你不审计它的假设,这些假设就会变成信任债务——目前看起来没问题,但在未来某个时刻会爆炸。”
信任债务的三大特性
信任债务这个概念之所以重要,是因为它有三个与传统技术债务相似但更隐蔽的特性:
特性一:不可见性
技术债务你至少知道它存在——你“故意”不写单元测试,你心里清楚“这里以后要还”。
信任债务你根本不知道它存在——Agent做了很多你没要求的决定,填补了很多你没意识到的假设空白。你看最终输出“看起来是对的”,就合入了。这些隐藏的假设就像地雷,不知道在哪里,但知道迟早会炸。
用后端类比:技术债务像“你知道这个接口没做参数校验”;信任债务像“这个ORM框架在某种边缘情况下会自动类型转换,你不知道,但它生产环境会炸”。
特性二:累积性
信任债务不会消失,只会累积。每次你“信任”Agent的输出而不审计它的假设,债务就增加一分。
更危险的是,Agent会复现代码仓库里已有的模式——包括那些基于错误假设的代码。一个错误的假设被写进代码库,Agent会在相邻模块里复制这个假设,信任债务呈指数级扩散。
用后端类比:就像代码库里有一个不规范的写法,新人来了照着写,老人看到了也“算了就这样吧”,技术债务越积越多。
特性三:爆发性
信任债务最危险的地方在于——平时完全看不出来,一旦爆炸就是系统性的。
Cassie Kozyrkov特别警告:
“信任债务的爆炸往往发生在最关键的时候——比如你基于Agent生成的代码做了架构决策,然后发现底层有一堆错误的假设。”
用后端类比:就像你一直不写单元测试,功能正常跑了半年,然后某次“小改动”引发了一连串莫名其妙的bug,你花了两周才发现根因是“有个隐藏的类型转换假设在所有地方都被违反了”。
信任债务 vs 技术债务:一个完整类比
| 维度 | 技术债务 | 信任债务 |
|---|---|---|
| 产生原因 | 故意走捷径,“以后再说” | 盲目信任Agent的隐含假设 |
| 可见性 | 可见(你知道自己走了捷径) | 不可见(你不知道Agent做了什么假设) |
| 累积方式 | 线性累积 | 指数级扩散(Agent复制错误模式) |
| 爆发时机 | 修改相关代码时 | 最不经意的时候(系统性失效) |
| 偿还方式 | 补测试、重构、补文档 | 审计Agent的假设、编码约束规则 |
| 预防方式 | 代码评审、静态分析、TDD | Harness(约束设计、反馈闭环、垃圾回收) |
核心结论:信任债务是技术债务在Agent时代的“升级版”——更隐蔽、更危险、更需要系统性的应对方案。而这个应对方案,就是Harness Engineering。
第四章:Harness三大组件的深度解读
Birgitta Böckeler在Martin Fowler网站上发布了一篇深度分析文章,把Harness Engineering归纳为了三大核心组件。这一节我们对每个组件做深度解读,并给出后端工程师熟悉的技术类比。
Context Engineering:为什么“地图式”文档比“百科全书式”文档有效
问题:为什么大模型指令文件越大越没用?
OpenAI团队最早踩了一个大坑——他们搞了一个超大的AGENTS.md文件,把所有给Agent的指令、规则、规范全写在里面,结果直接翻车。
Böckeler总结了大而全的指令文件的“四大原罪”:
- 上下文是稀缺资源:大文件会挤掉任务、代码和相关文档的空间,Agent要么错过关键约束,要么对着错误的规则优化
- 全是重点等于没有重点:指令太多,Agent只会做本地模式匹配,不会有意识地按规则导航
- 内容会快速腐烂:庞杂的手册很快就会变成陈旧规则的坟场,Agent根本分不清哪些规则还有效
- 无法验证:单个大文件没法做机械检查,规则和代码的漂移不可避免
解法:把AGENTS.md从百科全书变成导航地图
正确的做法是用渐进式披露(Progressive Disclosure)原则来组织知识:
repo/
├── AGENTS.md ← 地图(100行以内),只做导航
├── docs/
│ ├── architecture/ ← 整体架构设计
│ ├── domains/ ← 各业务域的详细文档
│ ├── plans/ ← 执行计划(版本控制的一等工件)
│ ├── specs/ ← 产品规格
│ └── runbooks/ ← 操作手册
AGENTS.md只做一件事:告诉Agent“你需要的XX信息,去XX文件里找”。
后端类比:这就像API文档的结构设计
后端工程师都熟悉Swagger/OpenAPI文档——你不会在一个页面里把所有API的细节全部列出来,而是有一个“目录页”,用户按需点进去看具体接口。
“百科全书式”文档 = 把所有东西塞进一个页面,用户(无论是人还是Agent)在里面疯狂搜索;而“地图式”文档 = 有清晰的层级结构,用户知道去哪里找,而且能确信找到的信息是最新的。
更进一步的实践:让文档可验证
OpenAI团队做得更彻底——他们建了一个“doc-gardening Agent”(文档园艺智能体),唯一工作就是扫描文档和代码之间的不一致,自动提交修复PR。
这就像后端项目里的集成测试——不仅代码要测试,文档也要“测试”,确保文档和代码保持一致。
Architectural Constraints:把“品味”编码成Linter规则
问题:Agent一天几百个PR,人工Code Review成为瓶颈
当Agent的吞吐量上来之后,最大的瓶颈不是“Agent写得够不够快”,而是“人能不能审得过来”。
人类的时间和注意力是固定的——你一天最多能审十几个PR,但Agent一天能生成几十个PR。人工Review成为整个流水线的瓶颈。
解法:把所有架构规则变成自定义Linter,机械化强制执行
OpenAI团队的核心做法是:把所有架构规则写成自定义Lint规则——任何违反规则的代码都过不了CI,无论人写的还是AI写的。
他们的层级依赖模型:
Types → Config → Repo → Service → Runtime → UI
每个业务域按这个层级组织,下层不能反向依赖上层。这条规则不是写在文档里靠人记的,是写成Linter规则,机械强制执行的。
后端类比:ArchUnit架构测试
Ja va后端工程师应该对ArchUnit不陌生。它允许你把架构约束写成单元测试:
@Test
public void layer_dependencies_are_respected() {
Ja vaClasses importedClasses = new ClassFileImporter().importPackages("com.myapp");
layeredArchitecture()
.layer("Controller").definedBy("..controller..")
.layer("Service").definedBy("..service..")
.layer("Persistence").definedBy("..persistence..")
.whereLayer("Controller").mayNotBeAccessedByAnyLayer()
.whereLayer("Service").mayOnlyBeAccessedByLayers("Controller")
.whereLayer("Persistence").mayOnlyBeAccessedByLayers("Service")
.check(importedClasses);
}
这个测试如果失败,CI就红,代码合不进去。
Harness Engineering做的就是把这种“架构即代码”的理念推到极致——不仅依赖方向要测试,连“Controller层不能写业务逻辑”、“所有公共API必须有入参校验”这些都写成机械可执行的规则。
更深刻的认知:用约束换自主
Böckeler在这点上有一个精妙的总结:
“为了获得更高的AI自主性,运行时必须受到更严格的约束。增加信任需要的不是更多自由,而是更多限制。”
这听起来矛盾,但逻辑是清晰的:
- 约束模糊 = Agent不知道边界在哪里 = Agent“自信地即兴发挥” = 信任债务累积
- 约束清晰且可执行 = Agent知道Exactly什么是允许的 = Agent可以在约束范围内高度自主 = 信任债务可控
用后端类比:高速公路上之所以能开到120码,是因为有护栏。没有护栏,你敢开80码都觉得危险。
Garbage Collection:为什么代码库需要“垃圾回收”?
问题:架构漂移(Architecture Drift)在Agent时代加速恶化
完全自主的Agent开发带来了一个新的问题:Agent会复现代码仓库里已有的模式,哪怕是不好的模式。
比如代码库里有一个地方写了不规范的代码(信任债务的产物),Agent在相邻模块工作时可能模仿这种写法,导致坏模式扩散。时间一长,整个代码库就会变成“AI残渣”的垃圾堆,架构完全漂移。
OpenAI团队一开始的解法是每周花20%的时间人工清理这些AI残渣——但很快就发现这个方法完全没有可扩展性。代码增长的速度远远超过了人工清理的速度。
解法:把“黄金原则”编码到代码仓库里,建立循环清理流程
OpenAI团队的“黄金原则”示例(注意这些都编码成了自动化检查):
- 优先使用共享的工具包,不允许在业务代码里手写重复的辅助函数
- 不允许“YOLO式”的探测数据,必须在边界处验证数据结构
- 所有业务代码必须遵循分层架构规则,不允许反向依赖
- 所有日志必须结构化,符合可观测性规范
基于这些原则,他们会定期运行一组后台Codex任务,扫描代码库中的偏差,更新质量评分,发起有针对性的重构PR。
后端类比:Ja va GC(垃圾回收)
这个机制就像JVM的垃圾回收:
| 维度 | Ja va GC | 代码库GC |
|---|---|---|
| 回收对象 | 不再被引用的对象 | 违反“黄金原则”的代码 |
| 触发方式 | JVM自动,分代回收 | 定期运行“清洁Agent” |
| 回收动作 | 释放内存 | 提交重构PR |
| 设计哲学 | 小额、高频、持续地释放内存 | 小额、高频、持续地偿还技术债务 |
| 核心理念 | “让开发者不用手动管理内存” | “让Agent自己纠正自己” |
Böckeler特别指出:
“技术债务就像高息贷款,小额高频地偿还,永远比让债务累积到爆炸再一次性痛苦解决要好得多。”
更进一步的实践:自修复闭环
Harness Engineering中的“垃圾回收”不只是定期清理,而是形成了自修复闭环:
- 代码变更发生
- 自动化检查(Linter、架构测试、文档一致性检查)运行
- 发现偏差 → 自动发起修复PR
- CI验证通过 → 自动合并
整个流程人类可以不介入。就像Ja va的G1 GC——你设置好参数,它在后台持续工作,保证内存使用始终在健康范围内。
第五章:从DevOps到AgentOps的自然延伸
DevOps的核心思想回顾
DevOps的核心是打破开发(Dev)和运维(Ops)之间的墙,通过自动化工具链实现:
- 持续集成(CI):代码频繁合入,自动化构建和测试
- 持续交付/部署(CD):自动化发布流程,频繁但安全地发布
- 基础设施即代码(IaC):环境配置版本化、可复现
- 监控与反馈:系统运行状态对团队透明,快速反馈
AgentOps:当“开发”的主体从人变成Agent
当Agent成为代码的主要生产者时,我们需要一套新的实践来应对新的挑战。这就是AgentOps。
| 维度 | DevOps | AgentOps |
|---|---|---|
| 核心目标 | 让“人写的代码”快速安全地上线 | 让“Agent写的代码”可靠可控地合入 |
| 新挑战 | 环境一致性、发布频率、监控告警 | 信任债务、架构漂移、上下文管理、Agent行为可观测 |
| 核心实践 | CI/CD、IaC、监控告警 | Harness(约束设计、反馈闭环、垃圾回收) |
| “呕吐”的对象 | 代码包、容器镜像 | Agent的推理过程、工具调用记录、决策日志 |
| 人类角色 | Dev和Ops的协作桥梁 | Harness设计师 + 最终审查者 |
AgentOps的核心组件(基于Harness三大组件的延伸)
- Agent可观测性:不仅观测应用运行状态,还要观测Agent本身的推理过程、工具调用、失败模式
- Agent上下文管理:确保Agent在跨会话、跨任务时有一致的“外部记忆”
- Agent输出验证:不仅跑测试,还要验证Agent的隐含假设(对抗信任债务)
- Agent行为约束:通过Linter、架构测试、代码审查Agent来约束Agent的输出
- Agent性能优化:通过Trace分析、A/B测试来优化Harness本身(LangChain的实践)
第六章:关键案例详细描述
OpenAI Symphony:百万行代码实验的具体做法
实验设置
OpenAI的Symphony实验有一个看似极端的铁律:不手动编写代码。哪怕是一行配置、一个工具函数,都必须由Codex生成,人类绝对不直接修改代码。
这个规则的重要意义在于——它倒逼团队找到了让Agent真正释放生产力的方法。如果允许“实在不行就人工写”,团队永远不会去深入思考“怎么让Agent能自主完成这件事”。
具体做法拆解
第一阶段(第1-4周):踩坑期
团队一开始进展比预期慢得多。不是Codex能力不行,而是环境的规范不够明确。Agent没有对应的工具、抽象层和规则约束,根本不知道该往哪个方向走。
这就像你请了一个能力很强的实习生,但不告诉他公司的代码规范、架构设计、部署流程——他能力再强也不知道该怎么下手。
第二阶段(第5-12周):Harness建设期
团队把主要精力从“让Agent写代码”转向“构建让Agent能写代码的环境”:
- 重构
AGENTS.md,从百科全书变成导航地图 - 编写自定义Linter规则,把架构约束机械化
- 接入可观测性堆栈(LogQL、PromQL、TraceQL),让Agent能自己查日志、查指标、查链路
- 接入Chrome DevTools协议,让Agent能自己操作浏览器验证UI
第三阶段(第13周以后):规模化期
一旦Harness建设完成,Agent开始高效产出。关键数据:
- 人均日均产出:3.5个PR
- 单次Agent最长连续工作时间:超过6小时(通常在人类睡觉的时候)
- 你晚上下班前提一个需求,第二天早上起来,代码已经写好、验证完毕、PR已经提交,就等你做最终确认
他们遇到了什么问题?
- Agent试图一次做完所有功能:上下文窗口耗尽,留下一堆半成品。解法:强制“每次只做一个功能”
- Agent过早宣布项目完成:实际还有很多隐藏的bug。解法:所有功能初始标记为“失败”,只能通过测试才能标记“通过”
- 代码库熵增:坏模式被Agent复制扩散。解法:定期运行“清洁Agent”扫描并修复架构漂移
Stripe Minions:每周1,300个PR的运作方式
背景
当大多数公司还在讨论“AI辅助编程”时,全球支付巨头Stripe已经悄悄迈入了无人值守编程(Unattended Coding)新阶段。
Stripe公布的数据:每周有超过1,300个合并的PR是完全由Minion(AI Agent)生成的,虽然经过人工审查,但其中没有一行是人类手写的。
Minions的具体运作方式
触发方式多样化:
- Slack触发:工程师在Slack线程里@Minion,Minion读取对话上下文,理解问题,然后独自去干活。一个典型的Minion运行“始于一条Slack消息,终于一个通过CI并准备好审查的PR,中间没有任何人类互动”。
- 工单触发:当CI系统检测到不稳定的测试(Flaky Test)时,自动创建一个工单,并附带一个按钮——“启动Minion修复它”。
- 定时任务触发:定期运行的代码质量扫描任务,自动发现并修复代码库中的问题。
核心技术设施:
- Devbox(基于AWS EC2的开发环境):
- 是“即用即抛”(Cattle, not pets)的
- 预热了一个巨大的Devbox池
- Minion需要干活时,10秒钟内就能分配到一个全新的、预装了所有代码和依赖的环境
- 在这个隔离的沙盒里,Minion拥有root权限,可以随意折腾
- Blueprints(蓝图):
- 一种混合工作流,像状态机
- 确定性节点(方块):比如“运行Linter”、“Git Push”——这些步骤是写死的代码,绝对执行
- AI袋里节点(云朵):比如“实现功能”、“修复CI错误”——这些步骤交给LLM去思考和决策
- 这种“三明治结构”(确定性代码夹着AI思考)既利用了AI的创造力,又保证了工程的严谨性
- Toolshed(内部MCP服务器):
- 里面有400多个工具
- Minion可以通过这些工具去查内部文档、看Jira票据、搜索代码、查看CI状态
CI策略(务实而克制):
Stripe的CI策略非常务实——“最多跑两轮”:
- Minion本地跑Linter和部分测试(毫秒级反馈)
- 推送到CI,如果有错误且有自动修复(Autofix),自动应用
- 如果还有错误,Minion尝试修复一次,再推一次
- 如果还不行?停止,交给人类
工程师的新角色
Minions的出现并没有让Stripe裁掉工程师,而是改变了工程师的工作内容:
- 定义问题:清晰地描述任务(Prompt Engineering)
- 制定规则:编写Rule文件和Blueprints,告诉AI什么是“好代码”
- 审查结果:拥有最终的决定权,判断AI的产出是否符合业务逻辑
用Stripe工程师的话说:
“你不再是一个‘代码打字员’(Coder),你变成了一个‘系统架构师’和‘代码审查者’。”
第七章:后端视角映射——让后端工程师“秒懂”的全景对照表
为了让后端工程师直观地理解Harness Engineering的价值,我们建立一个完整的视角映射:
| 传统后端概念 | Harness/AgentOps对应概念 | 说明 |
|---|---|---|
| 技术债务 | 信任债务(Trust Debt) | AI的隐含假设积累,更隐蔽更危险 |
| 架构评审/Code Review | 自动化架构约束(Linter + 架构测试) | 把“品味”编码成机器可执行的规则 |
| 定期重构 | 代码库垃圾回收(Garbage Collection Agent) | 定期扫描并修复架构漂移 |
| CI/CD流水线 | AgentOps流水线 | 不仅跑测试,还要验证Agent的隐含假设 |
| 应用监控(APM) | Agent可观测性 | 不仅观测应用,还要观测Agent的推理过程 |
| 单元测试/集成测试 | Agent输出验证 | 测试不仅验证功能,还要“测试”Agent是否遵守了约束 |
| 静态代码分析(SonarQube等) | 文档一致性检查(doc-gardening Agent) | 自动发现并修复文档与代码的不一致 |
| 容器/虚拟机(标准化环境) | Devbox(一次性开发环境) | Agent需要隔离的、可抛弃的标准化环境 |
| 超时/熔断/限流 | Agent行为约束(Blueprints) | 用确定性节点约束Agent的行为边界 |
| Ja va GC(垃圾回收) | 代码库GC(定期清洁Agent) | 小额高频偿还技术债务,防止架构漂移 |
结语:工程师的价值永远在“设计”而不是“执行”
回到文章开头的问题:当Agent一天生成几百个PR时,工程师的价值在哪里?
答案现在已经清晰了:
工程师的价值不在“写代码”(执行),而在“设计让代码能被正确生成的环境”(设计)。
这个转变不是降级,而是升级。就像:
- 从马车夫升级到汽车工程师
- 从砌砖工人升级到建筑师
- 从数据录入员升级到数据库架构师
Harness Engineering告诉我们一个深刻的道理:
在Agent时代,赢家不是那些“最能写代码”的人,而是那些“最能设计系统让Agent可靠工作”的人。
OpenAI用3个人5个月100万行代码证明了这件事的可行性。
Stripe用每周1,300个PR证明了这件事的可扩展性。
现在轮到你了——你是选择继续做一个“高级打字员”,还是选择升级为“Harness设计师”?
未来已来,只是分布尚不均匀。
参考文献:
- Ryan Lopopolo, Harness Engineering: Working with Codex in an Agent-First World, OpenAI, 2026.02.11
- Birgitta Böckeler, Harness Engineering, MartinFowler.com, 2026.02.17
- Cassie Kozyrkov, Harness Engineering: How to Supervise Code You Can't Read, Decision Intelligence, 2026.03.03
- Justin Young, Effective Harnesses for Long-Running Agents, Anthropic Engineering, 2025.11.26
- LangChain, Improving Deep Agents with Harness Engineering, LangChain Blog, 2026
- Stripe Engineering Team, Minions: Autonomous Coding Agents at Stripe, Stripe Blog, 2026.02
