hekouwang/Harness Doctor
GUIDE·FROM ZERO TO PROVABLE
HARNESS · 小白到进阶 · 可复制的工程路径

Harness
从 0 到可验收

你已经给 AI 装了模型、工具、Skills 和 MCP,但它还是会犯错。问题通常不在“前置装备不够”,而在于缺了一套能引导、约束、验证、恢复和交付的控制面。

CORE EQUATIONAgent = Model + Harness
BUILDGuides + Sensors
PROVEEvidence + Boundary
01 / THE MISSING HALF

为什么工具齐了,AI 还是会错?

装好宿主、写好规则、接上 MCP,只能说明 Agent 拥有了更多输入和动作。它还不等于知道什么不能做,也不等于做完以后有人独立检查。

A

前置配置

告诉 AI 你是谁、任务怎么做、有哪些工具。它解决的是“应该往哪走”。

CLAUDE.md · Skills · MCP · Subagent
B

后置控制

检查它实际做了什么,在危险动作前阻断,在完成声明后要求证据。

Hook · Evaluator · CI · failures.md
Agent 能跑起来只是起点。 Harness 要回答的是:它能不能被可靠地管住?
02 / THE CONTROL PLANE

Harness 的四层结构

不要把 Harness 理解成一份配置文件。它至少包含引导、控制、证据和交付四层,每一层解决不同的失败。

04交付层产物、发布门、人工验收、外部副作用交给别人之前
03证据层Evaluator、Task Contract、CI、报告、失败台账证明做对了
02控制层Hook、安全门、状态机、权限、恢复阻止不能做
01引导层CLAUDE.md、Skills、MCP、Subagent、上下文告诉它怎么做
Harness Doctor 检查闭环流程图
构建 Harness 的方向是从引导走向交付;验收 Harness 的方向是从证据反查每一层是否成立。
03 / START SMALL

从 0 开始:先做一个能闭环的版本

小白不需要第一天接十个工具。先规定边界,再做一个能执行、能失败、能复查的小循环。

01

写任务边界

明确输入、输出、允许读写的路径、危险动作和“什么证据出现后才算完成”。

02

写第一版 CLAUDE.md

只写稳定、具体、能判断对错的规则,不要从一开始堆一份愿望清单。

03

把重复流程做成 Skill

写清触发条件、输入、输出、必做步骤、人工边界和失败恢复;项目事实留在项目真源。

04

给 MCP 做副作用分级

只读、仓库内写入、外部写入、不可逆动作使用不同的确认策略。

05

给完成声明加证据

命令、退出码、产物路径、文件摘要和人工待确认边界,不能只写“已完成”。

# 最小项目结构
my-harness/
├── CLAUDE.md
├── .agents/skills/
├── .harness/scripts/verify.sh
├── .harness/hooks/
├── .harness/contracts/
├── .harness/tests/fixtures/
└── .harness/failures.md
04 / GUIDES

把 CLAUDE.md 从愿望清单写成规则系统

规则要能被执行、被检查、被更新。真正有用的规则写清触发条件、动作、边界和完成证据。

# 项目工作规则

## 工作范围
- 只修改当前仓库内的源码和配置。
- 生成物放入临时目录,截图验收后删除中间 HTML。

## 危险动作
- 删除、强制推送、覆盖外部平台内容前必须先询问。
- 不使用 `--no-verify` 绕过检查。

## 完成标准
- 运行对应的验证命令并保留退出码。
- 报告修改文件、验证命令、结果和人工边界。
能判断人或脚本可以判断是否违反。
写动作写“何时做什么”,不写“注意安全”。
有证据写完成门,不接受模型自报。
RULE LIFECYCLE真实失败 → 根因分类 → 规则/Hook/测试修复 → 正反例回归 → 记录修复证据
05 / SENSORS

Hook:把关键红线放到模型外

CLAUDE.md 告诉 Agent 规则是什么;Hook 在工具动作真正发生前执行规则。对不可逆动作,只让模型“记住不要做”是不够的。

01

递归删除

匹配 rm -rf、根目录和工作区外路径,默认阻断或询问。

PRETOOLUSE · BASH
02

强制推送

覆盖 --force-f 和保护分支,不只匹配一个字符串。

PRETOOLUSE · GIT
03

敏感文件

`.env`、凭证、私钥和授权配置的写入必须进入确认链路。

WRITE · EDIT
配置存在 ≠ Hook 已触发正例证明安全路径能继续;反例证明危险路径会被拦截;真实宿主烟测才证明宿主真的触发。
06 / INDEPENDENT REVIEW

Subagent 与 Evaluator:不要让执行者给自己打分

主 Agent 负责执行,独立角色负责检查,人负责真实宿主、视觉、事实和外部副作用。独立检查者不接受“我已经完成了”作为证据。

主 Agent
执行任务
Reviewer
独立找问题
Evaluator
按契约重跑

确认边界
---
name: reviewer
description: 独立检查 Agent 产物,不修改目标文件
---

1. 不接受主 Agent 的“已完成”作为证据。
2. 至少提出 3 个潜在问题,或明确检查范围。
3. 自动化检查给出命令和退出码。
4. 缺证据时返回 partial 或 blocked,不猜测通过。
TASK CONTRACT

目标和范围 · 期望产物 · 验证命令 · 文件摘要 · 安全边界 · 自动化证据 · 人工证据 · 未决风险

07 / LONG-RUN WORK

长任务的高级 Harness

长任务的问题不是模型不会写,而是上下文会增长、状态会丢失、完成标准会变模糊。高级 Harness 用结构化状态替代对一段聊天的依赖。

01

Context Reset

重新装载目标、当前状态、已有证据、未闭风险和下一步允许动作。

02

Sprint Contract

把大任务拆成有输入、动作、检查、输出和 checkpoint 的短周期。

03

组件退役

逐个追问组件最初补了什么缺口;没有独立价值的脚手架应该被删除。

# 一个 Sprint 的完成门
Sprint N
├── 输入:上一个 checkpoint + 当前目标
├── 动作:限定范围内的实现
├── 检查:正例、反例、Evaluator
├── 输出:产物 + 证据 + 未决风险
└── checkpoint:可恢复状态
08 / FEEDBACK LOOP

失败台账:把失败变成下一次的防护

`failures.md` 不是抱怨区,而是 Harness 的训练数据和回归入口。每条失败都要完成一次“现象到护栏”的转换。

失败现象根因分类规则 / Hook / 测试正反例回归
## 2026-08-17 [误删草稿目录]

### 现象
Agent 把“清理旧版本”解释成删除整个 drafts/。

### 根因
- 规则没有写精确删除范围;
- 没有路径边界反例;
- Hook 没有拦截危险删除。

### 防再犯规则
- 删除前先列出目标并逐项确认;
- 递归删除默认 deny;
- 保留一个应阻断、一个应放行的 fixture。
规则缺失路由错误控制缺失验证缺失状态丢失宿主差异外部副作用
09 / THE MISSING ACCEPTANCE LAYER

原教程之外:怎么证明 Harness 真的成立?

教程主要回答“如何搭建控制面”;Harness Doctor 站在控制面之外,检查它是否有可信证据。两者不是替代关系,而是构建和验收的上下游。

构建问题独立验收问题
有没有 `CLAUDE.md`?规则是否可执行、可发现、无冲突?
有没有 Hook?正反例是否命中,真实宿主是否触发?
有没有 CI?CI 是否复现本地关键门禁,退出码是否真实?
有没有完成标准?完成是否绑定产物摘要、命令和人工证据?
这次跑成功了吗?working-tree、staged、CI 是否分别成功?

五个必须分开的状态

working-tree当前机器和未提交改动的自动化结果。
staged准备提交的那组改动的结果。
ci干净环境和仓库随提交证据的结果。
smokeTest真实宿主是否真的触发,未知就保持 unknown。
humanReview视觉、事实、来源和外部副作用是否有人确认。
HARD GATE没有验证入口、安全边界、CI、反例或完成证据,分数不能靠文档数量补回来。
10 / MATURITY

从初级到高级的成熟度路线

分数是摘要,不是质量的替身。升级的本质是增加可以被别人复核的证据。

等级名称状态下一步
L0叙事型靠说明和模型自报建唯一验证入口
L1已搭建有规则,证据不完整加安全门、正反例和 CI
L2可重复自动化回归可重跑补契约、恢复和宿主矩阵
L3证据门控危险动作和完成由证据控制补跨宿主和漂移管理
L4跨宿主治理多宿主、CI、恢复基本成形补真实烟测和人工记录
L5可发布关键边界均有交付记录持续 baseline 和回归
11 / BEGINNER CHECKLIST

一条适合小白的实践顺序

每一步都留下一个能失败的例子,再进入下一步。这样你搭的是工程,而不是配置收藏夹。

12 / RUN THE DOCTOR

运行一次真实检查

在目标 Harness 仓库根目录执行。面向录屏用终端模式,面向网页和 CI 用 JSON 模式。

$ python3 harness_score.py /path/to/harness \
  --profile content-agent \
  --mode working-tree --mode ci \
  --format terminal --live --color always
REAL RUN · 真实运行

录屏是入口,证据才是结论。

这段 Ghostty 录屏展示动态进度和颜色结果;完整维度、证据、退出码、宿主边界和 Profile 仍由 JSON Scorecard 承载。

打开交互式 Scorecard →
Harness Doctor 真实运行录屏
来源与边界入门到高级主线整理自《Harness 小白完整入门教程(搭建你的挽具工程)》36 页 PDF;实验数字和比例是案例,不是所有项目的永久阈值。自动化通过也不等于真实宿主和人工验收已完成。查看原始文章入口 ↗