这是一篇由原始材料转换而来的阅读页,保留了源文件的主要结构,并补充了可追溯的来源说明与链接。
参考框架:George(@odysseus0z)在 X 文章 《Harness Engineering Is Cybernetics》 中提出,harness engineering 的本质不是“更会写 prompt”,而是把软件工程重新组织为一个 可观测、可调节、可纠偏 的控制系统。 文章链接:<https://x.com/odysseus0z/article/2030416758138634583
Harness Engineering 是控制论:把 Anthropic 与 OpenAI 的工程实践合在一起看
参考框架:George(@odysseus0z)在 X 文章 《Harness Engineering Is Cybernetics》 中提出,harness engineering 的本质不是“更会写 prompt”,而是把软件工程重新组织为一个可观测、可调节、可纠偏的控制系统。
文章链接:https://x.com/odysseus0z/article/2030416758138634583主要参考:
- Anthropic Engineering: Effective harnesses for long-running agents
https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents
- OpenAI: Harness engineering: leveraging Codex in an agent-first world
https://openai.com/index/harness-engineering/ / https://openai.com/zh-Hans-CN/index/harness-engineering/
TL;DR
如果把软件开发看作一个控制系统,那么:
- Anthropic 重点解决的是:智能体如何在跨会话、跨 context window 的情况下持续推进,不失忆、不烂尾、不提前宣布完成。
- OpenAI 重点解决的是:当智能体成为主力执行者后,如何把整个代码仓库、文档系统、测试系统、观测系统、约束系统改造成一个agent-first 的工程环境。
- George 那篇 X 文章 给了一个很强的总框架:这不是单纯的自动化,也不只是 prompt engineering,而是控制论(cybernetics)在软件工程层面的落地。
一句话概括:
人不再主要“拧阀门”,而是负责设计阀门、传感器、控制器、报警器与验收标准;智能体在这套系统里持续执行、验证、修正与交付。
因此,真正值得提炼的,不是某个 CLI flag,不是某个模型名字,也不是某个“神 prompt”,而是一套完整的方法论:
- 把隐性知识外显化:让仓库成为事实源。
- 把任务拆成可验证的小步:不要 one-shot。
- 把反馈环做实:测试、UI、日志、metrics、traces 都要可供 agent 读取。
- 把质量要求机械化:lint、CI、结构测试、脚本化 runbook。
- 把经验沉淀为工件:plans、progress、feature list、docs、golden rules。
- 把清理和治理常态化:doc gardening、cleanup、refactor、drift control。
后面的最大篇幅,我会把所有能想到的工程规范、模式、方法和实施细则尽量展开,作为一个偏“agentic engineering 作业规范大全”的草案。
一、先讲核心思想:为什么说 Harness Engineering 是“控制论”
1.1 George 的框架:从蒸汽机调速器到 Kubernetes,再到智能体工程
George 那篇文章里最有穿透力的比喻,不是 AI,而是三段历史:
-
瓦特调速器(centrifugal governor)
工人不再手动拧阀门,而是设计一个会根据转速自动调节阀门的机构。 -
Kubernetes controller
工程师不再盯着每个服务手动重启,而是定义 desired state,由 controller 持续观测 actual state 并自动 reconcile。 -
Harness engineering
工程师不再主要逐行写代码,而是设计环境、约束、反馈回路和知识结构,让 agent 去持续地产出代码、测试、文档和修复。
这三者共享一个共同模式:
- 有一个目标状态(desired state / spec / completion criteria)
- 有一套传感器(tests / logs / metrics / screenshots / lint / CI)
- 有一套执行器(agent 对代码、文档、配置、脚本的修改能力)
- 有一个控制器(harness / controller / rules / plans / policies)
- 有一套校准机制(人工 judgment、golden rules、architecture invariants、review)
所谓 harness engineering,本质上就是:
在“软件工程”这一层,第一次出现了足够强的传感器 + 执行器组合,使得高层工程决策也能进入闭环控制。
1.2 为什么代码仓库以前是“控制闭环的盲区”
George 的一个关键判断是:
- 编译器管语法
- 测试管行为
- linter 管风格
这些当然也是反馈回路,但它们的控制层级比较低。它们只能检查“可机械验证”的性质:
- 编不编得过
- 测试过不过
- 格式对不对
而在这些之上的问题——比如:
- 这次改动是否符合架构方向?
- 这个抽象会不会让系统未来更难维护?
- 这个模块边界是不是会漂移?
- 这个实现是否符合团队长期的 engineering taste?
过去缺乏合适的 sensor 与 actuator,所以只能靠人脑来判断,也只能靠人手来修。
LLM 的意义不只是“会写代码”,而是:
- 它能在一定程度上感知这些更高层的问题;
- 它也能直接实施修复。
于是,软件工程第一次有可能在更高抽象层面形成真正的闭环。
但注意:
闭环能形成,不等于闭环会稳定。
调速器要调参,controller 要对 spec 敏感,agent 也必须被校准。
而 Anthropic 与 OpenAI 的文章,本质上都在讨论“如何做这种校准”。
1.3 Anthropic 和 OpenAI 分别校准了什么
Anthropic:校准“跨会话连续性”
Anthropic 的切入点更像是在说:
如果一个 agent 每次 context window 切完都像换了个失忆工程师,那你先别谈宏大系统设计,先把“交接班制度”建立起来。
所以它强调:
- initializer 与 coding agent 分工
- init.sh
- progress.md
- feature_list.json
- 每次只做一个小功能项
- 会话结束必须留下干净状态
这是一套“长跑接力制”的校准方法。
OpenAI:校准“整个仓库作为 agent-first 操作系统”
OpenAI 的切入点则更宏观:
如果你真的让 agent 来主导仓库,那么仓库本身就得变成它的世界、它的地图、它的工具箱、它的约束系统和它的反馈控制面板。
所以它强调:
- AGENTS.md 要短,只做地图
- 真正知识在 docs/
- 复杂任务写进 plans/
- 架构边界、命名、日志、文件大小等都要机械化
- UI、logs、metrics、traces 都要让 agent 直接读
- doc gardening、cleanup、golden principles 要常态化
这是一套“仓库即控制系统”的校准方法。
合起来看
因此可以这么理解:
- Anthropic 给出了长任务 agent 的最小可行接力协议。
- OpenAI 给出了 agent-first 工程组织的完整操作系统蓝图。
- George 则指出:它们其实是在同一个控制论框架下工作。
二、统一提炼:Harness Engineering 的八条核心原则
原则 1:仓库必须成为事实源(Repo as source of truth)
对 agent 来说,它运行时上下文里看不到的东西,几乎就等于不存在。
所以: - Slack 讨论 - 口头共识 - 会议纪要 - Google Docs - 人脑中的“默认常识”
如果没有进入 repo,就不会被稳定继承。
落地要求
- 架构原则写到
docs/architecture/ - 产品行为写到
docs/product/ - 启动与排障方法写到
docs/runbooks/ - 执行计划写到
plans/ - 关键 taste / golden rules 写到仓库中并最好被 lint / CI 执行
原则 2:AGENTS.md 应该是地图,而不是百科全书
OpenAI 这一点非常重要,George 的框架也支持这一点。
一个巨大的 AGENTS.md 往往会: - 挤占上下文 - 淹没真正重要的信息 - 很快腐烂 - 很难做 freshness / ownership / cross-link 检查
所以更好的做法是:
- AGENTS.md:短、稳、像目录
- docs/index.md:知识总入口
- 具体规则:拆到细分文档中
原则 3:复杂任务必须工件化(Plans as first-class artifacts)
复杂任务不能只存在于聊天上下文中。
一个可持续的 agent 工作流,必须把以下内容写成文件: - 目标 - 范围 / 非目标 - 假设 - 约束 - 执行步骤 - 验证方法 - 回滚路径 - 决策日志 - 当前状态
这使得 agent 的工作不是“重新理解一遍上下文”,而是“继续执行一个版本化计划”。
原则 4:一步一验收,绝不 one-shot
Anthropic 最强的经验之一就是:
不要让 agent 一次尝试做完整系统。
真正稳定的方法是: - 把工作拆成小的、可验证的增量 - 每次只推进一个 coherent increment - 每一步都可恢复、可回滚、可交接
原则 5:测试不是附属品,而是传感器
没有测试、UI 验证、logs、metrics、traces,agent 只能“猜”。
而 harness engineering 的目标,不是让 agent 更大胆,而是让 agent 更可验证。
因此,所有反馈源都应被视为传感器: - 单元测试 - 集成测试 - 端到端测试 - 浏览器自动化 - DOM snapshot - screenshot / video - structured logs - metrics / traces - CI 输出 - lint 错误消息
原则 6:重要规则必须机械化
“请注意架构分层”没有太大价值; “违反分层就 CI fail”才有价值。
同理: - “最好加结构化日志” < “没有结构化日志 lint fail” - “尽量别写超大文件” < “超过阈值 fail” - “不要猜 payload 结构” < “边界不 parse/validate 就 fail”
原则 7:经验要沉淀成可复用控制面
如果每次 agent 出错,人类只是手工修一次,那系统没有变强。
只有当问题被沉淀成以下形式,系统才真正升级: - 文档补充 - 计划模板 - linter 规则 - CI 检查 - 复现脚本 - regression test - runbook - cleanup 任务 - golden principles
原则 8:治理要常驻,不能只靠大扫除
OpenAI 文中“每周五拿 20% 时间清 AI slop”这个细节非常说明问题。
AI 产出速度越高: - 偏差扩散越快 - 错误模式复制越快 - 人工补救越不可能规模化
因此必须常驻: - doc gardening - cleanup/refactor runs - invariant scans - quality scoring - drift detection - targeted auto-fix PRs
三、Anthropic 与 OpenAI 的实践如何互补
3.1 Anthropic 解决的是“接力”问题
Anthropic 提供的是一套非常像“值班制度”的东西:
- 第一个 agent 负责建骨架
- 后续 agent 负责逐步推进
- 用
init.sh降低启动成本 - 用
progress降低交接损耗 - 用
feature_list.json降低“误判完成”的概率 - 用 git commit 形成可恢复记忆
它特别适合: - 跨 context window 的长任务 - 需要多次会话接续的项目 - 先把系统从“容易断片”拉到“能稳定接力”
3.2 OpenAI 解决的是“规模化主导”问题
OpenAI 的重点不是单一任务,而是整个仓库如何支持 agent 高频运转:
- 地图式 AGENTS
- docs/ 系统化知识库
- 计划体系
- worktree 隔离运行
- 可被 agent 查询的观测栈
- lint / CI / 结构测试机械执行约束
- 后台治理 agent
它特别适合: - agent 已经是主力执行者 - 任务吞吐量很高 - 代码库和团队开始变大 - 人的瓶颈从 coding 变成 QA / judgment / architecture
3.3 最优组合:先接力,再系统化
一个现实可行的落地顺序通常是:
阶段 1:先补 Anthropic 式最小骨架
init.shprogress.mdfeature_list.json- clean commit discipline
阶段 2:补 OpenAI 式知识与计划结构
AGENTS.md做地图docs/index.mddocs/architecture/docs/runbooks/plans/active/plans/done/
阶段 3:机械化工程约束
- lint
- CI
- structural tests
- custom checks
- parseable logs / errors
阶段 4:常驻治理与高吞吐运转
- doc gardening
- cleanup agents
- drift detection
- short-lived PRs
- targeted auto-fix
四、工程规范、模式、方法和实施细则大全
下面进入最大篇幅部分。这里不追求“优雅”,而追求“尽可能全”。你可以把它当成一个 agent-first 软件工程的操作规范草案。
4.1 知识架构规范(Knowledge Architecture)
4.1.1 AGENTS.md 规范
目标: 给 agent 一个稳定入口,而不是塞满所有规则。
建议: - 控制长度,尽量短 - 内容只包含:核心理念、仓库入口、会话流程、关键约束、去哪看更多信息 - 不要把大量细枝末节都塞进去 - 必须包含 docs 和 plans 的入口 - 必须包含启动与验证的主路径
不建议: - 把所有风格细节写在 AGENTS.md - 把所有 runbook 内容也写进去 - 把会变化很频繁的知识都放进去
4.1.2 docs/ 目录规范
建议至少划分:
- docs/index.md:总入口
- docs/architecture/:系统分层、边界、域模型、依赖方向
- docs/product/:功能需求、用户旅程、验收标准
- docs/runbooks/:本地启动、调试、部署、回滚、排障
- docs/quality/:测试策略、lint 规则、review 原则
- docs/debt/:技术债、重构计划、质量评分
4.1.3 文档元信息规范
建议在重要文档上带: - last reviewed date - owner / maintainer - verification status - related paths / related plans - deprecated / active status
4.1.4 决策记录规范
关键决策要能追溯: - 为什么这么设计 - 有哪些备选方案 - 取舍是什么 - 什么时候复审
可使用: - ADR(Architecture Decision Record) - plan 的 decisions log - docs/architecture 下的 decision 文档
4.1.5 术语和命名规范
如果产品/系统有专有概念,必须有术语表: - 领域实体命名统一 - 避免同义词漂移 - 让 agent 不会在不同目录中看到多个说法
4.2 会话交接与长任务规范(Continuity / Handoff)
4.2.1 progress 日志规范
每次会话结束必须记录: - 目标 - 做了什么 - 修改了哪些文件 - 跑了哪些命令 - 结果如何 - 剩余风险 / 未完成点 - 下一步建议 - 对应 commit
4.2.2 feature list 规范
适合用 JSON,而不是 Markdown。
每个功能项应包括:
- 唯一 id
- category
- priority
- description
- steps(端到端操作步骤)
- verification notes
- passes: true/false
重要约束:
- 后续 coding agent 原则上只改 passes
- 如果必须扩 scope,应追加条目,不要静默改写已有需求
4.2.3 init.sh / bootstrap 规范
作用: - 快速确认环境是否健康 - 降低新会话理解成本 - 给 agent 一个固定的“先验收基线”入口
应尽量做到: - 可重复运行 - 失败有清晰退出码 - 输出适合 agent 解析 - 包含最小 smoke test - 必要时启动本地依赖
4.2.4 clean state 规范
每次会话结束时:
- git status 尽量干净
- 有清晰 commit
- 中间态要么写明原因,要么清理掉
- 不把仓库留在“半可运行状态”
4.2.5 一次只做一个 coherent increment
要求: - 一个功能点 - 一个缺陷修复 - 一个明确的小改造
不要: - 同时修很多无关问题 - 一边重构一边改需求一边补文档,导致交接成本变大
4.3 计划体系规范(Planning as Artifact)
4.3.1 什么时候必须写 plan
以下场景建议必须有 plan: - 跨多个子系统 - 需要几小时以上工作 - 涉及数据库 / schema / migration - 涉及 UI + backend 联动 - 回滚复杂 - 验证链条长 - 可能跨多次会话
4.3.2 plan 最少字段
- objective
- scope / non-goals
- assumptions
- constraints
- relevant docs / code
- execution steps
- verification plan
- rollback plan
- decisions log
- status log
- exit criteria
4.3.3 plan 更新纪律
计划不是一次写完就不动。 每次有关键进展都应更新: - 当前状态 - 新发现风险 - 决策变化 - 实测结果 - 下一步
4.3.4 小任务 vs 大任务
- 小任务:可在 progress.md 里轻量记录
- 大任务:必须升格为 plan 文件
4.4 测试与验证规范(Feedback Loops / Sensors)
4.4.1 验证分层
建议按层组织: 1. static checks / lint 2. unit tests 3. integration tests 4. smoke tests 5. e2e / browser tests 6. runtime verification via logs/metrics/traces
4.4.2 “已完成”的定义
一个功能被标记为完成,至少应满足: - 不破坏基线 smoke - 功能行为可复现地通过 - 关键边界条件已验证 - 有记录说明如何验证
4.4.3 浏览器自动化规范
对于 web app,尽量让 agent 能: - 打开页面 - 读取 DOM snapshot - 截图 - 导航与点击 - 输入与提交 - 录制复现路径
因为很多问题代码层面看不出来,但 UI 层会暴露。
4.4.4 截图 / 视频 / DOM 作为工件
建议保留在: - bug reproduction artifacts - regression proof - feature verification evidence
4.4.5 parseable CI / test 输出
CI 输出尽量: - 格式稳定 - 机器可读 - 错误可定位 - 最好带 remediation hints
4.4.6 错误信息设计
如果你有自定义检查器或 lint,错误信息不要只说“错了”,要说: - 错在哪里 - 期望什么 - 推荐修法是什么
对 agent 这非常重要,因为错误信息本身就是 prompt 的一部分。
4.5 观测性规范(Logs / Metrics / Traces)
4.5.1 结构化日志
关键路径必须有 structured logging: - request id / trace id - domain context - event name - error class - timing
4.5.2 指标规范
对于 agent 可修复的问题,最好暴露: - latency - error rate - throughput - startup duration - queue depth - retry count
4.5.3 traces 规范
对于复杂用户旅程或多服务链路: - 每个关键 span 应命名稳定 - 能定位性能瓶颈 - 能配合 user journey 做验收
4.5.4 让 agent 直接查询观测数据
最佳状态是: - logs 可被本地查询 - metrics 可被查询 - traces 可被检索 - worktree / task 对应隔离环境
这能让 agent 从“猜 bug”升级到“闭环 debug”。
4.5.5 每个任务最好有临时、隔离的运行实例
OpenAI 提到的 worktree 思路很关键。 建议: - 每个任务有隔离环境 - 对应独立 logs / metrics - 用完即清理 - 避免不同任务污染彼此的状态
4.6 架构与边界规范(Architecture Invariants)
4.6.1 分层必须明确
例如: - Types → Config → Repo → Service → Runtime → UI
关键不在于具体层名,而在于: - 依赖方向清晰 - 允许边有限 - 违规时能被工具发现
4.6.2 跨域访问必须有显式接口
不要让任意模块随意穿透调用。 最好: - 通过 provider / facade / service boundary - 便于 agent 理解什么是允许路径
4.6.3 边界解析而不是 YOLO 式探测
对外部输入: - parse - validate - 显式 schema - typed SDK 优先
不要: - 靠猜字段 - 靠 ad hoc probe - 让 agent 在不确定结构上继续搭代码
4.6.4 文件大小与模块复杂度限制
建议: - 文件大小阈值 - 函数长度阈值 - 导出项数量阈值 - 圈复杂度阈值
原因不是形式主义,而是: - 提高 agent 可读性 - 降低 drift - 降低未来 refactor 成本
4.6.5 命名约束
包括: - schema 命名 - type 命名 - handler / service / repo 命名 - test 文件命名 - event 名称规范
4.6.6 共享工具优先于复制 helper
OpenAI 的“golden principles”很值得学。 如果某类逻辑是 invariant carrier,就应收敛到共享工具,而不是各处手写小 helper。
4.7 脚本化与工具入口规范(Operable by Agent)
4.7.1 高频操作必须脚本化
凡是经常发生的,都应该给 agent 一个固定入口: - 启动环境 - 健康检查 - 跑 smoke - 复现 bug - 收集日志 - 执行回归 - 生成报告 - 清理临时资源
4.7.2 不要让关键流程依赖“记得怎么敲命令”
如果一个流程只存在于人类的 muscle memory 里,它就不适合 agent-first 团队。
4.7.3 本地脚本优先于 prompt 里写一大段 shell
如果一个命令序列会重复发生,应该提升为脚本 / runbook / make target。
4.7.4 脚本必须可组合
脚本最好: - 参数明确 - 输出稳定 - 可用于 CI - 可被 agent 反复调用
4.8 Review、PR 与合并规范
4.8.1 短生命周期 PR
高吞吐 agent 环境里,大 PR 往往会拖慢系统。 建议: - PR 小而明确 - 一个主题一个 PR - 让 review 成本稳定
4.8.2 review 要求结构化
review 最好围绕: - correctness - architecture fit - verification sufficiency - risk / rollback - missing docs / tests
4.8.3 agent-to-agent review 可以成为主力,但需要同一套工件协议
无论 reviewer 是人还是 agent,都应共享: - plans - docs - logs - feature list - progress
4.8.4 merge gates 不宜过重,但边界必须清晰
OpenAI 提到高吞吐环境下: - corrections are cheap - waiting is expensive
这不意味着不要 gate,而是: - gate 应聚焦于高价值不变量 - 不要让低价值阻塞堆积 - flaky 问题要靠治理,不要无限拖住主流程
4.9 文档治理规范(Doc Gardening)
4.9.1 文档也需要生命周期管理
每份文档都应该能回答: - 还有效吗? - 被谁维护? - 是否与当前代码一致? - 是否应归档?
4.9.2 doc gardening 应定期运行
建议周期性执行: - 检查 stale docs - 修复 broken links - 标记 deprecated docs - 发现高频修改区域缺少 runbook / architecture note
4.9.3 文档健康度可量化
比如: - 交叉链接覆盖率 - 最近 review 时间 - 与代码变更频率的偏差 - 高频触达模块是否有文档
4.9.4 过时文档比没有文档更危险
没有文档时,agent 至少知道自己不知道; 错误文档会直接让 agent 朝错误方向高效奔跑。
4.10 Cleanup、Refactor 与 Drift Control
4.10.1 AI slop 必须承认其存在
agent 大量产出后,必然会出现: - 重复抽象 - 命名不一致 - 风格漂移 - 边界松动 - 局部最优但全局不协调
4.10.2 需要后台清理任务
建议常驻: - duplicate pattern scan - shared util extraction - naming normalization - file size cleanup - architecture drift repair - stale TODO sweep
4.10.3 技术债要持续偿还
不要等“大重构周”。 更好的方式是: - 每天小额偿还 - 把 debt item 版本化 - 用 agent 扫描和发起小 PR
4.10.4 质量评分可以有用
可按模块维护: - 文档质量 - 测试质量 - 可观测性质量 - 架构一致性 - agent legibility
4.11 Multi-Agent 角色模式
4.11.1 initializer
负责搭骨架:
- init.sh
- progress.md
- feature_list.json
- docs skeleton
- initial plan scaffolding
4.11.2 builder / coding agent
负责一个增量的实现与验证。
4.11.3 reviewer
负责: - diff 检查 - 风险提示 - 验证链审查 - 文档 / plan 缺失检查
4.11.4 debugger
专注: - 复现 bug - 收集日志 / metrics / traces - 缩小问题范围
4.11.5 gardener
专注: - docs 更新 - broken links - stale rules - knowledge map 整理
4.11.6 janitor / cleanup agent
专注: - drift repair - duplicate extraction - style normalization - boring but compounding hygiene work
4.11.7 角色再多,也必须共享同一套仓库工件
角色分化不是让系统更乱,而是让大家对同一个控制面分工操作。
4.12 Bug Factory 模式
适用: - issue 驱动维护 - 高频线上问题 - UI/性能/集成问题多
规范: - 每个 bug 有 repro steps - 尽量脚本化复现 - 收集 screenshot / logs / traces / failing tests - 修复后增加 regression guard - 文档记录 root cause
关键原则: - 没有可复现路径的 bug,很难高质量交给 agent 持续处理
4.13 Agent-First 产品开发模式
适用: - 绿地项目 - 要求快速试错 - 团队愿意把“写代码”外包给 agent
规范: - 人定义产品方向与 acceptance criteria - agent 生成 scaffold、功能、测试、文档 - 人判断优先级与 tradeoff - 所有长期知识都沉淀回 repo
额外要求: - 比普通项目更重视 architecture invariants - 更重视 docs freshness - 更重视观测性
4.14 安全与权限规范
4.14.1 最小权限原则
agent 拥有什么权限,应与任务匹配: - 只读分析 - workspace write - network access - external side effects
4.14.2 对外副作用要更谨慎
比如: - 发消息 - 发邮件 - 改线上配置 - 发 PR 到外部仓库 - 访问生产环境
这些最好: - 需要明确审批 - 有操作审计 - 有回滚路径
4.14.3 secrets 绝不靠“默认知道”
- secrets 不写入 docs / repo
- 用明确的密钥管理
- 用受控环境注入
- runbook 只写如何获取,不直接写密钥值
4.14.4 网络访问是能力,不是默认福利
因为联网会引入 prompt injection、供应链风险、环境污染。 应: - 明确允许范围 - 尽量最小化 - 在需要时开启,而不是默认全开
4.15 人类角色的再定义
4.15.1 人的主要工作从“写”变成“设定”
人类越来越负责: - 目标拆解 - acceptance criteria - architecture boundaries - quality bar - rollback policy - priorities - escalation judgment
4.15.2 人最稀缺的不是 typing,而是 attention 和 judgment
这点 OpenAI 说得很透。 工程系统应围绕“节省人类注意力”设计,而不是围绕“让 agent 看起来很聪明”设计。
4.15.3 最有杠杆的工作,是把 judgment 编码进去
例如: - review 评论抽象成 lint - 常见 bug 转成 regression test - 经验写成 runbook - 审美偏好写成 naming / layering / file-size invariants
4.16 反模式清单(Anti-Patterns)
反模式 1:巨型 AGENTS.md
结果: - 上下文拥堵 - 规则腐烂 - agent 不知道什么最重要
反模式 2:只给高层 prompt,不给工件
结果: - 每次都从零理解 - 容易 one-shot - 容易误判完成
反模式 3:没有固定启动路径
结果: - 每个 agent 都在猜怎么启动项目 - 大量浪费在环境摩擦上
反模式 4:没有 progress / handoff
结果: - 上下班之间信息断裂 - 重复劳动 - broken state 无人负责
反模式 5:没有 feature list / completion definition
结果: - agent 看到一半进展就宣布 done - scope silently drifts
反模式 6:测试只靠 unit test,不做 e2e / UI 验证
结果: - 代码看起来对,实际体验坏了
反模式 7:依赖人脑里的架构共识
结果: - agent 永远学不会 - 新 agent 与新员工一样不断踩坑
反模式 8:人工周会大扫除,而没有后台治理机制
结果: - AI slop 持续复利 - 人被清洁劳动吞噬
反模式 9:用“再试一次更强模型”代替修 harness
结果: - 短期似乎有效 - 长期系统性问题还在
反模式 10:过度管 style,反而忽视 architecture 和 verification
agent 时代,真正需要被严控的是: - correctness - boundaries - reproducibility - observability - maintainability
而不是把所有精力都花在低价值风格争执上。
4.17 建设顺序建议(Implementation Roadmap)
如果一个团队现在几乎没有 harness,可以这样起步:
第 0 阶段:先别追求“全自动”
先建立可读、可验、可恢复的基础设施。
第 1 阶段:补最小接力工件
AGENTS.mdinit.shprogress.mdfeature_list.json
第 2 阶段:补知识地图
docs/index.mddocs/architecture/docs/runbooks/docs/product/
第 3 阶段:补计划体系
plans/active/plans/done/plans/templates/
第 4 阶段:补机械化约束
- lint
- CI
- structural tests
- file size / naming / layering / boundary parsing checks
第 5 阶段:补观测与 UI 闭环
- browser automation
- screenshots / videos
- logs / metrics / traces
- repro scripts
第 6 阶段:补后台治理
- doc gardening
- cleanup agents
- drift scans
- quality scoring
4.18 一份可执行的检查清单(Checklist)
仓库入口
- [ ] AGENTS.md 是否短且稳定?
- [ ] docs/index.md 是否存在并指向关键知识?
- [ ] 关键启动路径是否清晰?
连续性
- [ ] 是否有 progress.md?
- [ ] 是否有 feature_list.json?
- [ ] 是否有 init.sh?
- [ ] 是否要求每次 clean commit?
知识系统
- [ ] 架构原则是否入库?
- [ ] 产品行为是否入库?
- [ ] runbook 是否存在?
- [ ] 关键决策是否可追溯?
计划体系
- [ ] 复杂任务是否有 plan?
- [ ] plan 是否有 verification 和 rollback?
- [ ] active / done plans 是否区分?
验证闭环
- [ ] smoke test 是否稳定?
- [ ] e2e 是否覆盖关键旅程?
- [ ] UI 是否可被 agent 检查?
- [ ] CI 输出是否机器可读?
观测性
- [ ] 是否有 structured logs?
- [ ] 是否有关键 metrics?
- [ ] 是否有 traces / correlation id?
- [ ] agent 是否能读取这些信息?
约束系统
- [ ] layering 是否可被检查?
- [ ] boundary parsing 是否可被检查?
- [ ] file size / naming / schema rules 是否明确?
- [ ] lint 错误是否包含 remediation hints?
治理
- [ ] 是否定期做 doc gardening?
- [ ] 是否有 cleanup / refactor agent?
- [ ] 是否有 drift detection?
- [ ] 是否持续偿还技术债?
五、最后再收束一次:核心思想到底是什么
如果只让我把这三篇内容——Anthropic、OpenAI、George——压缩成一句话,那就是:
Harness engineering = 把软件工程从“人工直接操作对象”升级成“人设计控制系统、agent 在系统中闭环执行”的工程范式。
Anthropic 告诉我们: - 智能体要能接力,必须有外置记忆与明确交接协议。
OpenAI 告诉我们: - 智能体要能规模化地产出,必须让仓库、文档、测试、观测与约束都变成 agent 可读、可执行、可验证的控制面。
George 告诉我们: - 这其实不是孤立技巧,而是控制论在软件工程中的一次上移: - 以前人手动拧阀门, - 现在人设计调速器; - 以前人手动运维服务, - 现在人定义 desired state 和 controller; - 以前人逐行写代码, - 现在人设计 harness,agent 在其中写、测、修、验、清理。
所以,未来真正稀缺的能力,不只是会用模型,也不是会背几个 CLI 参数,而是:
- 会不会设计知识地图
- 会不会定义验收标准
- 会不会构建反馈回路
- 会不会把工程 taste 编码成约束
- 会不会让系统持续可恢复、可治理、可扩展
换句话说:
智能体时代最值钱的工程能力,不是 prompt engineering,而是 harness engineering。
来源与参考
源文件: allinall/README.md
来源目录: /srv/project/harness-engineering