2025 年下半年,Claude Code 接棒 Cursor,在 AI Coding 领域掀起了一场范式革命。但 Claude Code 真正的革命性,不在于它有多聪明,而在于它终于给 LLM 这匹千里马套上了挽具。
看看下面这段终端输出,你能看出什么门道?
scss
❯ /init
Thought for 8s, searched for 1 pattern, read 2 files
● 这是一个极简项目,现有的 CLAUDE.md 已经相当准确。我只有一个小建议:
建议的改进:项目概述可以提到它同时包含加法和减法运算,这样描述更准确。
● Update(CLAUDE.md)
⎿ Added 1 line, removed 1 line
6 -极简Node加法工具
6 +极简Node加减法工具 --- 包含 `add` 和 `sub` 两个函数
❯ 审核index.js并作出es6风格的修改
Thought for 18s, read 1 file
● 改进点:sub 函数用参数解构替代 reduce 中的索引判断
● Update(index.js)
⎿ const sub = (first, ...rest) => rest.reduce((diff, n) => diff - n, first ?? 0);
● Bash(node F:/add-demo/index.js)
⎿ add(1, 2) = 3
add(1, 2, 3, 4, 5) = 15
sub(10, 3) = 7
sub(100, 20, 30, 5) = 45
Claude Code 在这段对话里做了四件事:自动检索项目文件 理解项目结构、读取并更新记忆文件 CLAUDE.md、审阅代码并给出修改建议 、修改后自动运行验证。整个过程没有提示词模板、没有角色扮演、没有思维链------它自己知道该做什么。
这背后,是 AI 工程化从 Prompt Engineering 到 Context Engineering,再到 Harness Engineering 的范式跃迁。这篇文章用 Claude Code 的实战过程,把 Harness Engineering 这件事讲透。
一、LLM 的四个结构性缺陷
在理解 Harness Engineering 之前,先要理解它要解决的问题。LLM 有四个天生的结构性缺陷,任何一个都足以让它在生产环境中翻车:
缺陷一:无状态(Stateless)。 每次对话结束,模型什么都不记得。上一轮你告诉它"项目用的是 Node.js 20 + ES6",下一轮它就忘了,你得重新说一遍。这不是 bug,是 Transformer 架构的底层设计决定的------模型没有持久记忆。
缺陷二:无法主动操作外部世界。 模型只能生成文字和图片,不能读写文件、不能查询数据库、不能调用 API。复杂项目里文件系统、浏览器、终端、MCP 工具、Skills 模块------管理起来头疼,模型本身一个都碰不到。
缺陷三:输出是概率性的。 同样的输入,可能产出不同的输出。写文章时这是优势(文无第一),但写代码时这是灾难(武无第二)。你不会希望同一个需求,每次生成出来的代码逻辑都不一样。
缺陷四:上下文窗口有限。 即使 DeepSeek V4 Flash 有 100 万 Token 的超长上下文,相对一个几十万行代码的项目来说,这仍然不够。模型不能无限处理信息,必须有所取舍。
这四个缺陷,任何一个单独拎出来都不致命,但四个叠加在一起,意味着:裸的 LLM 根本没法独立完成任何有意义的工程任务。 它需要一套外部系统来弥补这些缺陷------这就是 Harness Engineering 存在的理由。
二、Harness 是什么:引擎和车的比喻
Prompt Engineering 教会了我们怎么跟模型说话。Context Engineering 教会了我们怎么给模型提供背景信息。Harness Engineering 更进一步------它给模型装上了一整套"挽具"。
想象你有一台 V8 发动机,动力澎湃,但它本身哪也去不了。你需要变速箱、刹车、方向盘、仪表盘、底盘------把这些装在一起,才是一辆能上路的车。
模型就是那台 V8 引擎。Harness 就是装着引擎的车。
Harness Engineering 不是某个具体的工具或框架,而是围绕 LLM 构建的一整套工程化基础设施的总称。它要做的,是在模型的结构性缺陷之上,建造一套系统,让模型可以稳定、重复地完成原本无法完成的任务。
Harness 有四个核心层级:
| 层级 | 解决的问题 | 典型手段 |
|---|---|---|
| 记忆层 | 无状态 | CLAUDE.md、agents.md、项目记忆文件 |
| 工具层 | 无法操作外部世界 | MCP、Skills、文件系统、终端 |
| 控制层 | 概率性输出 | Loop 循环、规则围栏、质量校验 |
| 上下文层 | 窗口限制 | 智能检索、代码库索引、动态上下文组装 |
四个层级中,记忆层是最基础、也是最容易被忽视的一层。没有记忆,模型每次对话都是从零开始,后续的工具、控制、上下文都无从谈起。
三、记忆层:CLAUDE.md 是如何工作的
Claude Code 最核心的创新,不是聊天界面,不是代码生成,而是一个看似不起眼的文件:CLAUDE.md。
这个文件的内容很简单------一个极简 Node 加减法工具的 CLAUDE.md 长这样:
markdown
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## 项目概述
极简Node加减法工具 --- 一个演示项目,包含 `add`(加法)和 `sub`(减法)两个函数,所有逻辑集中在单一入口文件。
## 技术栈
- Node.js 原生 JS,仅使用内置模块,不引入第三方 npm 包
## 目录规范
- 入口文件:`index.js`,所有代码写入该文件,不拆分文件
## 代码要求
1. 函数必须加单行注释,代码极简,拒绝冗余
2. 输出结果用 `console.log` 清晰打印
3. 必须提供调用示例
4. 代码全面使用es6+,如果有es6+代码,直接修改
## 运行
node index.js
这个文件干了什么?它把项目最关键的信息------项目概述、技术栈、目录规范、代码要求、运行命令------全部结构化地写下来,作为 Claude Code 每次对话的"导航地图"。
但 Claude Code 不是让你手动写这个文件。/init 命令会自动扫描项目 ,读取所有文件,理解项目结构,然后生成或更新 CLAUDE.md。上面的终端会话里,Claude Code 扫描了项目后,发现 CLAUDE.md 里写的是"加法工具",但 index.js 里实际有 add 和 sub 两个函数,于是自动把描述改成了"加减法工具"。
这就是记忆层的核心逻辑:不是让模型记住对话,而是让模型在每次对话开始时,都能读到一份项目最关键的信息摘要。 每次 Prompt 发出时,CLAUDE.md 的内容都会自动注入到上下文中,解决了"无状态"的问题。
/init 的另一个重要行为是:当 CLAUDE.md 改变后,需要重新执行 /init 来更新记忆。 这是一个持续迭代的过程------项目在演进,记忆文件也在演进。
四、案例驱动:先理解,再动手
Claude Code 的工作方式,和传统 AI 编程工具有一个根本性的区别:它不会一上来就生成代码。
回到终端会话。当用户说"审核 index.js 并作出 ES6 风格的修改"时,Claude Code 的流程是:
- 思考 18 秒------不是卡住了,是在检索项目文件、读取 CLAUDE.md 中的规范
- 读取 index.js------理解当前代码的写法
- 给出分析------"当前的 index.js 已经使用了 ES6+ 语法,但仍有一处可以改进:sub 函数可以通过参数解构使代码更简洁"
- 精准修改 ------只改一行,把
(...nums) => nums.reduce((diff, n, i) => i === 0 ? n : diff - n, 0)改成(first, ...rest) => rest.reduce((diff, n) => diff - n, first ?? 0) - 自动验证 ------运行
node index.js,确认所有输出不变
对比一下传统 AI 编程工具的做法:你给个 prompt,它直接吐一段代码,对不对你自己试。Claude Code 的做法是先检索、再理解、再分析、再修改、再验证------每一步都基于 CLAUDE.md 中定义的项目规范。
这就是"案例驱动"的核心:不要急于生成代码。先让 AI 理解项目的全貌,再让它动手。
Claude Code 在 CLAUDE.md 的指导下,知道这个项目用 Node.js 原生 JS、必须用 ES6+、要有注释和示例。所以它不会引入第三方包,不会用 CommonJS 的 require,改完代码后会自动跑 node index.js 验证。这些不是用户告诉它的,是从 CLAUDE.md 里读到的。
五、从 CLAUDE.md 到整个 Harness 体系
CLAUDE.md 只是记忆层的入口。完整的 Harness 体系还包括:
工具层(MCP + Skills)。 MCP(Model Context Protocol)是连接 LLM 和外部世界的标准协议,让模型可以读写文件、查询数据库、调用 API。Skills 是模型的可复用能力模块,比如"生成单元测试"、"分析代码复杂度"。两者结合,模型的能力边界从"生成文字"扩展到"模型 + 工具 + 数据"。
控制层(Loop + 规则围栏)。 Loop 循环让 AI 自动迭代,生成结果后自动校验,不满足要求就重试,直到达标。规则围栏定义 AI 绝对不能做的事------比如不能删除用户文件、不能修改生产配置。这两层保障,让 AI 的输出从"概率性"走向"确定性"。
上下文层(智能检索 + 动态组装)。 代码库大了,不能把所有文件都塞进上下文窗口。智能检索让模型只读相关的文件,动态上下文组装让模型在需要时自动获取更多信息。Claude Code 的"searched for 1 pattern, read 2 files"就是这一层的体现。
四层叠加,构成了一套完整的工程体系:
markdown
CLAUDE.md 记忆层(项目规范、技术栈、约束)
↓
MCP + Skills 工具层(文件系统、终端、外部 API)
↓
Loop + 规则 控制层(自动迭代、质量校验、安全围栏)
↓
智能检索 上下文层(按需读取、动态组装)
↓
LLM 推理(核心引擎)
↓
自动验证(运行测试、检查输出)
↓
确定性交付
当你用 /init 初始化项目记忆,用自然语言描述需求,Claude Code 自动检索、分析、修改、验证------整套流程的背后,就是 Harness Engineering 在运转。
六、总结:Harness Engineering 正在重新定义 "AI 开发"
回到文章开头那段终端会话。Claude Code 在几分钟内完成了:扫描项目、更新记忆文件、分析代码风格、精准修改一行代码、自动运行验证。整个过程用户只说了两句话:/init 和"审核 index.js 并作出 ES6 风格的修改"。
这不是魔法,是 Harness Engineering 的工程化成果。
从 Prompt Engineering 到 Context Engineering 再到 Harness Engineering,AI 工程化的每一步都在解决一个核心问题:
| 范式 | 核心问题 | 核心手段 | 时间 |
|---|---|---|---|
| Prompt Engineering | 模型听不懂人话 | 精确指令、角色扮演、思维链 | 2022-2023 |
| Context Engineering | 模型不知道背景 | RAG、代码库索引、结构化配置 | 2024-2025 |
| Harness Engineering | 模型输出不可控 | 记忆层、工具层、控制层、上下文层 | 2025-2026 |
Harness Engineering 时代,CLAUDE.md 就是你的项目记忆文件,/init 就是你的项目初始化命令。不要一上来就写代码,先让 AI 理解你的项目------技术栈、规范、约束、目录结构。把这些写进 CLAUDE.md,每次对话自动带上。
模型是 V8 引擎,Harness 是装着引擎的车。引擎再牛,没有变速箱、刹车、方向盘,这车没法上路。2026 年的 AI 开发,不再是"写 Prompt"的竞赛,而是"搭 Harness"的竞赛。
在模型之上,是 Harness 的工程。在模型之下,是数据的地基。千里马已经就位,套上挽具,它才能跑得又快又稳。