Vibe Coding → Agentic Coding → Harness Engineering

你可以把 Vibe Coding → Agentic Coding → Harness Engineering 看成 AI 编程正在发生的一次“抽象层级上移”。这并不是严格划分的三个历史阶段,而是三种越来越成熟的工作方式:

Vibe Coding 关注“让 AI 写代码”;Agentic Coding 关注“让 AI 自己做任务”;Harness Engineering 关注“怎样设计一个环境,让 AI 长时间、稳定、可验证地把任务做对”。

这也是为什么进入 2026 年以后,“Harness”这个词在 AI Coding 圈子里明显变得重要。OpenAI 已经直接使用 Harness Engineering 这个说法,Anthropic 也持续讨论 long-running agent 的 harness design。(OpenAI)

Vibe Coding → Agentic Coding → Harness Engineering

一、先从 Vibe Coding 说起

2025 年 2 月,Andrej Karpathy 提出 “Vibe Coding” 这个说法。他描述的是一种非常极端但很形象的 AI 编程方式:开发者主要用自然语言告诉 AI 自己想要什么,让 AI 生成和修改代码,人不再逐行编程,甚至不一定认真阅读每一段生成代码。(X (formerly Twitter))

例如你想做一个设备监测软件,以前可能是:

我要设计数据结构。
我要写 TCP 通信。
我要写 SQLite。
我要写 Qt UI。
我要实现数据曲线。
我要处理线程同步。

Vibe Coding 变成:

做一个 Windows 设备监测程序,左边显示设备列表,中间实时显示三轴振动曲线,后台 TCP 接收传感器数据并写入 SQLite。

AI 开始大量承担具体编码工作。

这带来一个巨大的变化:

开发者逐渐从“代码生产者”变成“需求描述者”。

但很快就出现第二个问题。

AI 可以很快生成 500 行、5000 行甚至几万行代码,但:

代码到底对不对?
有没有破坏旧功能?
数据库设计是不是乱了?
有没有重复实现?
架构是不是越来越差?
AI 下一次还记不记得为什么这样设计?
运行 2 小时以后,它还知道自己正在干什么吗?

于是问题从:

“AI 会不会写代码?”

逐渐变成:

“如何管理一个会写代码的 AI?”

Harness 就是在这个问题上出现的。


二、Harness 到底是什么?

“harness”这个英文单词原来的意思非常形象:马具、挽具、安全带、控制装置

一匹马很有力量。

但你不会简单地告诉马:

去北京。

然后希望它自己一路跑过去。

你需要缰绳、鞍具、路线、补给、道路、边界和骑手。

对于 AI Agent 来说也是一样。

可以用一个非常有用的关系理解:

Agent ≈ Model + Harness

Model 是“大脑”。

Harness 是围绕这个大脑的一整套:

工具、环境、上下文、记忆、任务循环、权限、验证、反馈、日志、恢复机制和工程规则。

OpenAI 对 Codex 的内部描述非常接近这个概念:Codex harness 提供核心的 agent loop 和 execution logic,负责协调用户、模型以及模型调用的工具。(OpenAI)

所以:

LLM 本身不是完整的 Coding Agent。

GPT、Claude 或其他模型只是其中的推理核心。

真正让它能够:

读代码 → 搜代码 → 修改文件 → 编译 → 测试 → 看错误 → 再修改 → 提交 PR

的是外面这一层 Harness。


三、Harness 最核心的东西,其实是一个循环

最简单的 Coding Agent 可以写成:

User
  ↓
Model
  ↓
决定下一步行动
  ↓
Tool
  ↓
执行
  ↓
获得结果
  ↓
Model
  ↓
继续行动
  ↓
...
  ↓
完成任务

例如:

用户:
修复登录失败的问题

        ↓

AI:
先寻找 authentication 相关代码

        ↓

grep / search

        ↓

发现 auth_service.py

        ↓

AI:
阅读代码

        ↓

read_file

        ↓

AI:
发现 token refresh 可能有问题

        ↓

运行测试

        ↓

pytest

        ↓

测试失败

        ↓

AI:
修改代码

        ↓

apply_patch

        ↓

再次测试

        ↓

测试通过

        ↓

git diff

        ↓

AI检查改动

        ↓

完成

这个循环叫 Agent Loop

OpenAI 在 Codex 技术说明里公开描述了这个机制:模型可以直接回答用户,也可以请求 tool call;工具执行结果被重新放回上下文,然后模型再次推理。这个循环一直持续到模型不再要求工具调用。(OpenAI)

但是:

Agent Loop 只是最基础的 Harness。

真正成熟的 Harness 要复杂得多。


四、一个完整 Coding Harness 通常有九个关键部分

可以把它理解成下面这一套系统:

  1. Agent Loop:控制“思考 → 行动 → 观察 → 再思考”的循环,并决定什么时候结束。
  2. Context Management:决定当前应该让模型看到哪些代码、文档、历史任务和工具结果,而不是简单把整个项目塞进 context window。OpenAI 的 Codex 会进行 context compaction;Anthropic 的长期 Agent 实验则发现,仅仅 compaction 并不能解决所有长任务问题,有些情况下需要直接 context reset,再依靠结构化 handoff 接续工作。(OpenAI)
  3. Tool System:向 Agent 提供文件读取、文件修改、shell、git、编译器、测试工具、浏览器、数据库以及 MCP 等能力。模型不是直接“操作电脑”,而是通过 Harness 暴露出来的工具行动。(OpenAI)
  4. Memory / State:保存“我做过什么”“现在做到哪里”“还有哪些任务”“为什么做这个决定”。Anthropic 的长期 Agent 实验甚至专门让 Agent 生成进度文件和 Git commit,使下一次 Agent session 可以恢复工作。(Anthropic)
  5. Planning:把“做一个完整应用”拆成 Feature、Task、Sprint、Acceptance Criteria。否则 Agent 很容易试图“一口气把项目写完”。Anthropic 在长期开发实验中观察到,这正是典型失败模式之一。(Anthropic)
  6. Verification:不是让 AI 自己说“我完成了”,而是要求它拿出证据,比如 build success、unit tests、integration tests、UI 操作结果、截图、日志、静态分析结果等。最新 Harness 研究也越来越强调:目标不是“得到 patch”,而是得到一个能够证明正确性的 patch。(arXiv)
  7. Evaluator / Reviewer:将“生成者”和“评审者”分开。Anthropic 的实验发现,让生成代码的 Agent 自己评价自己的成果容易过度乐观,因此采用 Planner / Generator / Evaluator 分工,让另一个 Agent 专门挑问题。(Anthropic)
  8. Sandbox / Permissions:Agent 可以运行 shell、修改文件甚至访问外部系统,因此必须规定哪些目录能写、网络能否访问、什么操作需要人工批准。Codex 的 Harness 会把 sandbox 和 permission 约束加入 Agent 的运行上下文。(OpenAI)
  9. Observability / Recovery:记录 Agent 做过什么、调用过什么工具、为什么失败、消耗了多少 token、在哪里陷入循环,并允许重试、回滚、重新规划或升级给人类。2026 年已经出现专门研究“自动改进 Harness”的工作,其核心之一就是提高 Harness 本身的可观测性。(arXiv)

因此,Harness 远远不是一个 Prompt。

它更像是:

AI 程序员的 IDE + 操作系统 + 项目经理 + 工作流程 + 权限系统 + 测试系统 + CI/CD + 记忆系统。


五、为什么单纯 Vibe Coding 不够?

这里是理解 Harness 最关键的一点。

假设你告诉 AI:

“给我的软件增加用户管理功能。”

Vibe Coding 很可能是:

Prompt
   ↓
AI写代码
   ↓
运行
   ↓
看起来能用
   ↓
继续下一个功能

这在 Demo、原型、个人项目里非常有效。

但到了大型项目,它可能产生一种危险的现象:

feature 1
   ↓
局部修改

feature 2
   ↓
局部修改

feature 3
   ↓
复制一些代码

feature 4
   ↓
再加 workaround

feature 5
   ↓
架构开始漂移

feature 20
   ↓
没人真正理解系统

尤其是 AI 有很强的局部合理性

它看到一个现有模式,很容易继续模仿这个模式。

即使这个模式本身并不好。

OpenAI 在一个高度 Agent 化的软件项目中公开描述过这个问题:Codex 会复制 repository 中已经存在的模式,包括并不理想的模式,因此长期运行会造成 drift。他们后来加入所谓“golden principles”和自动清理机制,让 Agent 持续发现架构偏差并提交重构 PR。(OpenAI)

这非常重要。

因为它意味着 AI Coding 出现了一个新的工程规律:

坏代码不仅会产生技术债,而且会成为 AI 下一轮生成代码的训练样本式“局部示范”。

于是坏结构会自我繁殖。

这就是为什么 Harness 必须控制整个系统,而不能只控制 Prompt。


六、Harness Engineering 真正改变的,是“代码库本身”

这一点我认为比工具调用更加值得注意。

过去软件项目主要是:

给人看的。

README 给人看。
Architecture 文档给人看。
代码结构给程序员看。

但进入 Agent Coding 后,一个 repository 必须越来越:

Agent-readable。

OpenAI 在自己的 agent-first 工程实践中明确提出了类似思路。他们没有把所有规则都塞进一个巨大的 AGENTS.md,而是把它做成类似“目录”,让 Agent 再逐级访问结构化知识库。原因之一是 context 是稀缺资源,一个巨大的说明文件反而会压缩真正任务和代码所占的上下文。(OpenAI)

例如一个 Agent-native repository 可能变成:

project/
│
├── AGENTS.md
│
├── ARCHITECTURE.md
│
├── README.md
│
├── docs/
│   ├── design/
│   ├── product/
│   ├── security/
│   ├── reliability/
│   ├── decisions/
│   └── plans/
│
├── src/
│
├── tests/
│
├── scripts/
│   ├── build.sh
│   ├── test.sh
│   └── verify.sh
│
└── .agent/
    ├── rules/
    ├── workflows/
    └── skills/

这时候 ARCHITECTURE.md 已经不仅仅是文档。

它实际上是:

AI 的世界模型。

tests/ 不再只是为了 CI。

它也是:

AI 的反馈信号。

AGENTS.md 不只是说明。

它实际上是:

Agent 的操作手册。

而 Git history 也不只是版本历史。

它逐渐成为:

Agent 的长期外部记忆。

OpenAI 的实践甚至把 execution plans、progress、decision logs、technical debt 等放进 repository 并版本化,从而减少 Agent 对聊天历史或“某个人脑子里的知识”的依赖。(OpenAI)

这其实是软件工程一个很深的变化。


七、Prompt Engineering、Context Engineering 和 Harness Engineering是什么关系?

这三个概念非常容易混淆。

可以把它们看成三个同心圆:

┌──────────────────────────────┐
│      Harness Engineering     │
│                              │
│   ┌──────────────────────┐   │
│   │ Context Engineering  │   │
│   │                      │   │
│   │  ┌───────────────┐   │   │
│   │  │ Prompt Eng.   │   │   │
│   │  └───────────────┘   │   │
│   │                      │   │
│   └──────────────────────┘   │
│                              │
└──────────────────────────────┘

Prompt Engineering

解决:

“我应该怎么跟模型说?”

例如:

你是一名高级C++工程师。
修改代码前先分析问题。
不要修改公共API。
完成后运行测试。

Context Engineering

解决:

“模型现在应该知道什么?”

例如:

不要给模型整个 300 万行代码库。

而是给它:

用户需求
+
ARCHITECTURE.md
+
相关模块
+
相关接口
+
最近错误日志
+
相关测试
+
Git diff

本质是:

选择和组织模型的工作记忆。


Harness Engineering

解决的问题更大:

“整个 AI 软件工程过程应该怎样运行?”

它不仅决定:

模型看什么,

还决定:

模型什么时候行动、
能调用什么工具、
怎么执行代码、
什么时候测试、
失败怎么办、
上下文满了怎么办、
谁负责检查、
能修改什么文件、
什么时候提交 Git、
什么情况下必须找人。

所以可以近似理解为:

Prompt Engineering
        ↓
控制一次推理

Context Engineering
        ↓
控制一次或一段推理所看到的信息

Harness Engineering
        ↓
控制整个 Agent 生命周期

八、Harness 的核心已经从“生成代码”变成“建立闭环”

如果让我只用一个词概括 Harness,我会选:

闭环

Vibe Coding 更像:

Human → AI → Code

成熟 Coding Agent 是:

              ┌─────────────┐
              │    Plan     │
              └──────┬──────┘
                     ↓
              ┌─────────────┐
              │  Implement  │
              └──────┬──────┘
                     ↓
              ┌─────────────┐
              │    Build    │
              └──────┬──────┘
                     ↓
              ┌─────────────┐
              │    Test     │
              └──────┬──────┘
                     ↓
              ┌─────────────┐
              │   Evaluate  │
              └──────┬──────┘
                     │
                 Fail│
                     ↓
                  Repair
                     │
                     └─────────→ Test
                     
                 Pass
                     ↓
                   Git
                     ↓
                   PR
                     ↓
                  Review

OpenAI 描述的一个成熟 agent-first repository 已经能够让 Codex 从一个 Prompt 开始,自行验证代码库状态、复现 bug、实现修复、验证修复、创建 PR、响应 review、处理 build failure,直到需要判断性决策时才升级给人。OpenAI 同时强调,这种能力高度依赖 repository 本身的 Harness 投资,并不能简单假定换一个普通项目也能达到同样效果。(OpenAI)

这一句特别关键。

不是:

“模型突然强到了这种程度。”

而是:

“模型 + Harness + 为 Agent 设计的代码库共同达到了这种程度。”


九、同一个模型,Harness 不同,能力可能差很多

这也是目前 Harness 研究最有意思的地方。

过去我们习惯比较:

GPT A vs GPT B
Claude A vs Claude B

以后很可能需要比较:

Model A + Harness X
Model A + Harness Y

因为 Agent 的实际能力并不只取决于模型。

Anthropic 在一项 long-running application 实验里,用相同起点比较单 Agent 和完整 Harness。完整 Harness 使用 Planner、Generator、Evaluator,并把任务拆成多个 sprint,运行时间和成本都大幅提高,但得到的应用完成度也明显更高。Anthropic 特别说明,这种 Harness 的代价可能非常大——他们展示的一个实验里,solo run 约 20 分钟、9 美元,而 full harness 约 6 小时、200 美元。这个数字只是一次实验,不应当视为普遍成本比例,但很好地说明了 Harness 是在用更多规划、验证和迭代换取质量。(Anthropic)

甚至已经出现“让 Agent 自动优化 Harness”的研究。2026 年的一项预印本报告称,对 tools、middleware、long-term memory 等 Harness 组件进行迭代优化,可以在冻结模型的情况下提高多个任务集和模型家族上的表现。这个方向目前仍属于快速发展的研究阶段,但它指向一个很值得注意的趋势:

未来优化 AI Coding 系统,未必一定需要训练一个更大的模型,也可能通过优化 Harness 获得显著收益。 (arXiv)


十、因此,“Harness”不等于 Agent Framework

这里也很容易误会。

LangGraph、Agent SDK、各种 workflow framework,可以帮助你实现 Harness。

但:

Framework ≠ Harness。

Framework 更像造车平台。

Harness 是你最后设计出来的整辆车及其驾驶控制系统。

类似:

LLM
GPT / Claude
        │
        ▼
Agent SDK / Framework
        │
        ▼
Harness
├─ Prompt
├─ Context
├─ Agent Loop
├─ Tool policy
├─ Memory
├─ Planner
├─ Evaluator
├─ Tests
├─ Sandbox
├─ Permissions
├─ Logging
├─ Retry
├─ Git workflow
└─ Human approval
        │
        ▼
Coding Agent

甚至 Claude Code、Codex CLI 本身都可以从这个意义上理解为已经实现好的 Coding Harness。Anthropic 直接称 Claude Code 是一个优秀的 harness;OpenAI 则把 Codex CLI 中负责 agent loop 和 execution logic 的部分称为 Codex harness。(Anthropic)


十一、Vibe Coding 与 Harness Engineering 的本质区别

我觉得最简单的区别是:

Vibe Coding 是“相信模型”。

Harness Engineering 是“设计一个系统,使你不必相信模型”。

比如 AI 说:

“Bug 已经修复。”

Vibe Coding:

好,看起来不错。

Harness:

Bug reproduction        PASS
Unit tests              328/328
Integration tests       47/47
Regression tests        PASS
Static analysis         PASS
Build                   PASS
UI automation           PASS
Git diff                reviewed
Architecture rules      PASS

然后系统才认为:

TASK COMPLETED

这就是很经典的工程思想:

不要依赖智能体自觉,而要依赖可验证机制。

2026 年的 Harness Engineering 研究也正在把 autonomous software engineering 的评价问题从“Agent 能不能生成一个 patch”转向“Model–Harness–Environment 整体能不能生成一个可验证、可追责、可维护的修改”。(arXiv)


十二、Harness 其实正在改变“程序员”这个职业

Vibe Coding 时代,人告诉 AI:

写什么代码。

Agent Coding 时代,人告诉 AI:

完成什么任务。

Harness Engineering 时代,人越来越多地告诉系统:

什么叫完成。

这是三个完全不同的抽象层。

传统编程
Human
↓
Code


Vibe Coding
Human
↓
Prompt
↓
AI
↓
Code


Agentic Coding
Human
↓
Task
↓
Agent
↓
Tools
↓
Code


Harness Engineering
Human
↓
Goal + Constraints + Acceptance Criteria
↓
Harness
↓
┌─────────────────────────┐
│ Planner                 │
│ Coding Agent            │
│ Tools                   │
│ Tests                   │
│ Evaluator               │
│ Memory                  │
│ Sandbox                 │
│ CI                      │
│ Git                     │
└─────────────────────────┘
↓
Verified Software

所以未来高级开发者很可能越来越少花时间亲自写:

for (...)
if (...)
class ...

而越来越多花时间定义:

Architecture、Interfaces、Constraints、Tests、Acceptance Criteria、Agent Rules、Tool Policies、Evaluation 和 Feedback Loops。

换句话说:

程序员正在从“写程序的人”,逐渐变成“设计 AI 如何写程序的人”。


十三、我认为 Harness 是比 Vibe Coding 更重要的一次变化

Vibe Coding 最吸引眼球,因为它让人第一次强烈感觉到:

“我不写代码也能做软件。”

但 Harness Engineering 的意义更深。

因为它回答的是另一个问题:

“如果 AI 写掉 90% 甚至 99% 的代码,那么剩下的人类软件工程到底是什么?”

答案正在逐渐出现:

不是 Prompt 写得更漂亮。

而是设计:

环境
+
知识
+
工具
+
权限
+
工作流
+
验证
+
反馈
+
架构约束
+
长期记忆

也就是:

Harness。

因此我更愿意把整个变化概括成一句话:

Vibe Coding 把“写代码”交给了 AI;Harness Engineering 则开始把“软件工程过程”本身编码化。

而这很可能才是 AI Coding 从“神奇 Demo”真正进入大型、长期、生产级软件开发的关键一步。OpenAI 和 Anthropic 2025–2026 年公开的工程实践已经相当清楚地体现了这一趋势:模型能力仍然重要,但真正决定 Agent 能否长期工作的,越来越是模型周围那套运行环境与工程系统。 (OpenAI)

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

Are you human? Please solve:Captcha