速查表

智能体 Harness 速查表:组件、文件、常见问题与启动清单

更新于: · Skillaria.Top

智能体 Harness 由五个子系统组成:指令、工具、环境、状态和反馈。最小文件集包括:作为简短路由的 AGENTS.md、验证脚本(make check、verify.sh)、进度文件,以及带状态的功能列表。“通过”状态由脚本设置,而不是由智能体自行标记。

Harness 的五个子系统

子系统含义产物失效的症状
指令智能体应当知道的项目知识AGENTS.md / CLAUDE.md、skills、docs/、ADR违反已知约定
工具智能体能做什么shell、测试、代码检查、浏览器、MCP 服务器“想做却做不了”
环境智能体在哪里工作锁文件、Docker/devcontainer、git worktree、沙箱、init.sh每个会话都从修环境开始
状态重启后仍然保留的内容PROGRESS.md、DECISIONS.md、feature_list.json、提交记录新会话不知道上次停在哪里
反馈智能体如何得知自己出错make check、端到端测试、钩子、架构检查、评估者宣布“完成”,但功能不工作

从零搭建的顺序:反馈 → 指令 → 状态 → 环境 → 工具。

Harness 文件

文件用途规则
AGENTS.md / CLAUDE.md入口:项目是什么,如何启动,如何验证简短的路由(约 80 行),附带“何时阅读”条件的文档链接
docs/*.md各主题的细节按需阅读,不整篇加载
.claude/skills/*/SKILL.md可重复的流程(部署、评审)任务与描述匹配时才加载
PROGRESS.md状态、已完成内容、阻塞项、下一步每次会话结束时更新
DECISIONS.md决定、理由、被否决的方案记录路径,而不只是结论
feature_list.json功能:behavior、verification、state恰好一个功能为 active(WIP=1)
scripts/verify.sh验证功能并将其设为 passing唯一能设置 passing 的脚本,并附带提交 SHA
scripts/arch-check.sh架构边界检查退出码 1,输出中包含 WHY 和 FIX
scripts/init.sh工作前检查环境环境正常、git 工作区干净、make check 为绿色、有活动功能
sprint contract编码前对功能的约定范围内 / 范围外 / 待决问题
.claude/settings.jsonClaude Code 的权限与钩子在事件上进行检查,而不依赖智能体的记忆

AGENTS.md 骨架

# 项目:支付后端(FastAPI、PostgreSQL)

## 启动
docker compose up -d && ./scripts/init.sh

## 验证
make check   # 代码检查、类型、单元测试、arch-check
make e2e     # 端到端场景

## 完成定义
- make check 和 make e2e 退出码为 0
- 功能通过脚本 scripts/verify.sh 设为 passing
- PROGRESS.md 已更新

## MUST
- 数据库访问只能通过仓储
- 密钥只能来自环境变量

## 文档
- docs/payments.md——涉及支付和退款的任务
- docs/migrations.md——修改数据库结构的任务

功能状态

状态含义由谁更改
pending排队中规划者
active进行中(同一时间只能有一个)智能体开始工作时
passing验证通过只能由 verify.sh
blocked需要人来决定,附原因说明智能体

验证层级

层级内容何时运行
1代码检查、类型检查始终
2单元测试与集成测试始终
3端到端测试修改涉及多个层次;宣布“完成”之前
4arch-check出现新的跨层导入时

只有通过最高层级之后,才有资格宣布“完成”。绿色的单元测试不等于完成。

将规则机械化

层级工具成本
grep 守卫带模式搜索和 WHY/FIX 信息的脚本几分钟
代码检查规则import-linter(Python)、dependency-cruiser、eslint-plugin-boundaries(JS/TS)约一小时
架构测试CI 中的测试,违反分层时失败更多,但在 make check 中可见
#!/usr/bin/env bash
fail=0
if grep -rn "from app.db" app/services/; then
  echo "WHY: 服务层不直接访问数据库"
  echo "FIX: 使用 app/repositories/ 中的仓储"
  fail=1
fi
exit $fail

常见问题与解决方法

问题子系统解决方法
CLAUDE.md 中的规则没有被遵守指令精简文件,把规则变成检查或钩子
智能体无法运行测试工具开放该命令的权限,把依赖装进镜像
不同机器上行为不一致环境锁文件,Docker/devcontainer,固定运行时版本
会话之间失忆状态PROGRESS.md、会话交接说明,会话开始时阅读
三个功能都开始了,没有一个完成状态在 feature_list.json 中设置 WIP=1
“完成”,但功能不工作反馈完成定义、端到端测试、verify.sh、独立评估者
单元测试通过,功能却坏了反馈使用真实数据库和配置的端到端测试
智能体复制了糟糕的模式反馈从第一天就引入 arch-check
不清楚智能体做了什么状态小步提交,在 PROGRESS.md 中报告,记录 DECISIONS.md
智能体一夜之间破坏了环境环境沙箱,git worktree,检查点,通过 init.sh 回滚
同一条评审意见出现两次整个 Harness把它变成 make check 中的检查,并从指令中删掉这段文字

长任务中的角色

角色负责不负责
规划者带验收标准的功能不写代码
生成者实现一个功能,运行测试不决定是否完成
评估者依据评分标准给出结论,附文件、行号或日志引用看不到生成者的推理
合并当 review == pass 时提交这是代码,不是智能体

自主工作的预算

  • 目标用一句话描述(例如:让所有功能都达到 passing)。
  • WIP=1,每个功能有时间和尝试次数的上限。
  • 指标单调上升,出现回归立即回滚。
  • 迁移、基础设施、资金:升级给人处理。
  • 多次评审失败之后,用干净的上下文重新开始该功能。

智能体启动清单

  1. 存在 AGENTS.md:技术栈、启动方式、验证命令、完成定义。
  2. make check 在干净的克隆上通过。
  3. 环境可复现:锁文件,Docker 或 devcontainer。
  4. 智能体拥有所需的命令权限,危险的命令被禁止或放在沙箱中。
  5. 至少有一个覆盖主要场景的端到端测试。
  6. 存在 PROGRESS.md,并规定会话开始时先读取它。
  7. 功能列表中有状态,且只有一个处于 active。
  8. passing 状态由脚本设置。
  9. 检查信息中包含 WHY 和 FIX。
  10. 任务有验收标准,并明确了范围边界。
  11. 明确哪些事项需要人来决定。
  12. 在改动之前计算了 verification gap,以便之后比较。

Harness 指标

指标计算方法
Verification gap10 个任务中,宣布“完成”但未经验证确认的比例
MTTR从出故障到恢复可工作状态所花的时间
冷启动新会话能否在没有猜测的情况下回答“我们在哪里,下一步是什么”
消融在固定任务集上关闭某一子系统后的性能下降

总结

Harness 是一个闭环,而不只是一个文件:指令、工具、环境、状态和反馈。从验证开始,让 AGENTS.md 保持简短,把“完成”的判定交给脚本,并定期审查 Harness。所有这些都在 Harness 工程课程中,汇聚到一个基于实际项目的完整 Harness 上。

常见问题

AGENTS.md 和 CLAUDE.md 有什么区别?

作用相同,都是智能体的指令文件。CLAUDE.md 由 Claude Code 读取,AGENTS.md 是适用于多种智能体的通用格式;在 CLAUDE.md 中可以直接引用 AGENTS.md。

AGENTS.md 应该有多少行?

没有硬性上限,但入口文件应保持简短,约一百行左右,像目录一样。细节放在独立的文档中。

小项目需要 feature_list.json 吗?

单次的小修改不需要。当智能体连续或跨多个会话处理多个功能时,它才有价值。

智能体需要访问的密钥应该放在哪里?

放在环境变量或密钥管理器中,而不是指令文件或代码里。给智能体的是对环境的访问权限,而不是写在文本中的值。