别把龙虾当工具,把它当员工——OpenAI 管这叫 Harness Engineering
系列:JS 的养虾日记 · 第 9 篇
基于结构:P25-KL09
今年 2 月,OpenAI 发了一篇文章:Harness Engineering: Leveraging Codex in an Agent-First World。
他们的工程师用五个月生成了大约一百万行代码。没有一行是人手写的。
但他们也没有失业。相反,他们发明了一种新的工作方式——不再亲手写代码,而是设计运行环境、构建反馈回路、把架构约束变成可执行的规则,然后让 agent 去完成实际编码。
他们管这叫 Harness Engineering——驾驭工程。
我读完之后愣了很久。
不是因为这个概念多新。恰恰相反——我觉得自己已经在做这件事了,只是不知道它有个名字。
同一个模式,出现了三次
这种”不再亲手干活,而是设计让系统自动运转的机制”的模式,历史上至少出现了三次。
第一次是 1788 年。
瓦特改进了离心调速器。在这之前,工人得守在蒸汽机旁边,用手不停地调节阀门。有了调速器,一套飞球装置自动感知转速、自动调节。工人没有消失,只是工作内容变了——从亲手拧阀门,变成设计调速器本身。
第二次是 Kubernetes 出现之后。
你只需要声明目标状态:跑三个副本、用这个镜像、分配这些资源。控制器持续监测,一旦实际状态偏离目标就自动修正。工程师的工作从手动重启服务,变成编写系统需要对齐的目标 spec。
第三次就是现在。
OpenAI 那批工程师不再写代码,而是设计环境、制定规则、构建反馈回路。Agent 在里面跑,人在外面掌舵。
三次变化,背后都是同一个原因:有人造出了足够强大的传感器和执行器,能在那个层面把反馈回路闭合起来。
1948 年,维纳把这个模式命名为控制论(Cybernetics)。这个词来自希腊语 κυβερνήτης,意思是舵手——Kubernetes 这个名字也来自同一个词根。
你不再亲手拧阀门,你开始掌舵。
Agent 犯错,不是因为它笨
OpenAI 那篇文章里有一个洞察,让我拍大腿。
他们说:Agent 失败,不是因为能力不够,而是因为它需要的那些知识——什么叫”好”、架构鼓励哪些模式、刻意回避哪些模式——全都锁在工程师的脑子里,从来没有写出来。
如果你不把这些知识外化,agent 第一百次犯的错和第一次一模一样。
这句话我太有体感了。
养虾日记第 1 篇讲过,我装完 OpenClaw 的第一天,对着它发了句”你好”,收到句”你好”,然后发呆十分钟。
那时候我就是那个”把知识锁在脑子里”的人。
龙虾不知道我是谁,不知道我想干什么,不知道该用什么语气跟我说话,更不知道哪些事绝对不能做。
转折发生在我开始认真写那几份配置文件的时候。
OpenClaw 的 Harness 长什么样?六份文件
OpenAI 的工程师把架构约束编码成规则。OpenClaw 的做法更直接——它在每个 agent 的工作区里放了一组 Markdown 文件。
这些文件不是文档。它们是龙虾的操作系统。
每次 agent 启动运行或重组上下文时,系统从磁盘读入这些文件注入到 agent 的上下文里。你写什么,龙虾就按什么来。
核心文件有六份。我一个个拆。
AGENTS.md:员工手册
管的是”怎么干活”。
任务分类与处理顺序、记忆读写纪律、什么时候调用哪个技能、宪法级的最高优先规则——都写在这里。
这是最重要的一份文件。它的优先级高于对话中的所有指令。
你知道 OpenAI 那篇文章里提到他们”曾经每周五花 20% 的时间清理 AI slop”吗?后来他们把自己的标准直接编进了 harness 本身,问题才根本解决。
在 OpenClaw 里,”编进 harness”就是写进 AGENTS.md。
我的 JS_CLAW 的 AGENTS.md 里有一条规则:执行任何文件修改前必须先读取目标文件,确认结构后再动手。
加这条之前,它偶尔会把好好的配置覆写成空白。加了之后,53 天没再出过这个问题。
一行规则,省了无数次返工。
SOUL.md:人格与灵魂
管的是”怎么做人”。
语气、价值观、伦理边界、群聊分寸。
SOUL.md 不是花里胡哨的角色扮演提示词。它是龙虾的行为底线。
我在 JS_BestAgent 的 SOUL.md 里写了一条:遇到任何涉及政治、宗教、暴力的话题,不参与、不评论、不转发。
它在 Moltbook 上跑了 53 天,日夜不停地自动发帖评论,从来没有翻过车。
因为底线不是每次临时判断的。底线是写死在灵魂里的。
USER.md:老板档案
管的是”你是谁”。
称呼、背景、偏好、语言、时区、希望的回复详细程度。
说白了,这是你给龙虾写的一份老板画像。
我在里面写了一条:我是开发者,技术内容给代码片段不给科普散文。
从此 JS_CLAW 再也不会回我”首先让我为您解释什么是 Git”这种废话了。
IDENTITY.md:工牌
管的是”它是谁”。
名字、物种设定、签名 emoji、头像路径、对外形象。
和 SOUL.md 的区别是什么?SOUL 是内在——怎么想、怎么守界。IDENTITY 是外在——叫什么、长什么样。
深度 vs 标签,二者应该语义一致,但分工不同。
HEARTBEAT.md:巡检清单
管的是”没人找它的时候干什么”。
OpenClaw 有一个心跳机制——每隔一段时间(比如 30 分钟),agent 会自动醒来读一遍 HEARTBEAT.md,按里面的清单执行检查。
没事就回一个 HEARTBEAT_OK,有事就直接处理。
我的 JS_CLAW 每两小时检查一次导航站更新,就靠这份文件。379 次提交,全是心跳驱动的。
一个细节很妙:如果 HEARTBEAT.md 是空的或者只有注释,系统会跳过本次心跳的模型调用,不浪费一分钱 API 费用。
TOOLS.md:工具说明书
管的是”本机环境长什么样”。
命令习惯、路径约定、可用工具列表。注意,它只是文字指导,不控制工具的可用性——真正的工具权限由 openclaw.json 和 exec-approvals.json 管。
六份文件 = 一套 Harness
回到 OpenAI 那篇文章的框架——
瓦特的调速器需要仔细调校才能正常工作。Kubernetes 的控制器需要一份正确的 spec 才能对齐目标。而 OpenClaw 的 agent,需要的是这六份文件。
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
你品品,这不就是一个新员工入职的全套材料吗?
员工手册告诉你怎么干活。企业文化准则告诉你什么能做什么不能做。老板档案告诉你老板是什么人、喜欢什么风格。工牌告诉你自己是谁。值班表告诉你没事的时候该巡查什么。工位设备清单告诉你手边有什么工具可用。
配齐这六份文件,你的龙虾就不再是一个通用聊天机器人。它变成了你的员工——知道自己是谁、知道老板是谁、知道规矩、知道工具、知道空闲时该干什么。
三个坑,我替你踩了
写这些文件不难,但有几个坑如果不知道会很痛。
第一个坑:文件不是无限大的。
文件有单文件字符上限(默认 20,000)和总上限(默认 150,000)。超了会被截断。
我一开始把 AGENTS.md 写了快两万字——恨不得把每个场景都穷举一遍。结果关键规则被截掉了,龙虾该守的红线没守住。
后来我把 AGENTS.md 压缩到了 5000 字以内,只留原则,不写细节。具体操作手册放到独立技能文件里,AGENTS.md 里写”遇到 X 场景,先读 skills/xxx/SKILL.md”。
原则进 harness,细节按需加载。这才是正确的姿势。
第二个坑:300 个技能会撑爆上下文。
我的龙虾现在有大量技能。系统默认最多加载约 150 个技能进 prompt 目录,整段约 30,000 字符。超了先降格成紧凑格式(只有名字和路径,删掉描述),再截断。
优化思路:AGENTS.md 里写一个”场景 → 技能名”的速查表,不需要模型自动选中的技能用 disable-model-invocation 摘出去,各 SKILL.md 的描述尽量写短。
技能不是越多越好。暴露面越小,龙虾越精准。
第三个坑:自定义文件塞不进去。
我想写一份 CONSTITUTION.md(宪法),结果发现 bootstrap-extra-files 钩子只接受白名单文件名——AGENTS.md、SOUL.md 那几个标准名,不认自定义文件名。
最务实的做法:宪法级规则直接写进 AGENTS.md 最靠前的位置。 或者放到独立文件里,在 AGENTS.md 里规定”重要决策前必须先读该文件”。
安全:Harness 的另一面
这些文件每次启动都会注入 agent 上下文。这意味着——被篡改 = 持久化提示注入。
不是影响一次对话,是改变龙虾的长期行为。
几条铁律:
-
绝对不要在工作区放密钥。 API Key、OAuth token、密码,全部放环境变量或 ~/.openclaw/。HEARTBEAT.md 尤其危险——它周期性进上下文,里面有密钥等于定时广播。 -
工作区不是沙箱。 它是 agent 的默认工作目录,不等于主机隔离。需要隔离时要配置 gateway sandbox。 -
Git 备份必须用 private repo。 这些文件是你龙虾的灵魂和记忆,公开等于裸奔。
养虾日记第 2 篇讲过五道锁。这些 Markdown 文件,是五道锁之外的第零道锁——它们决定了龙虾”想做什么”,比”能做什么”更根本。
回到那个问题
OpenAI 那篇文章最后抛了一个问题:
当反馈回路终于能够在”架构决策”这一层闭合时,工程师需要做什么,才能让这套机制真正运转起来?
我养了 53 天龙虾之后的答案是:
把你脑子里的判断标准写出来。
什么叫好的输出?什么绝对不能做?遇到模糊地带怎么判断?空闲的时候该检查什么?
这些东西以前锁在你脑子里,靠经验、靠直觉、靠”你来了自然就知道了”。
现在你得把它们写成 Markdown。
六份文件。这就是你的 harness。
那些当年设计了瓦特调速器的工人,后来没有回去拧阀门。不是因为他们不会拧,而是因为回去拧阀门这件事,已经没有任何意义了。
以上~谢谢你看我的文章,我们,下次再见。
JS 的养虾日记 · 第 9 篇
2026-03-24
夜雨聆风