~/VibeHandbook
$39

AI 服务

github.com

AI Coding Harness

它是什么

AI coding harness(AI 编码框架)是你在编码 agent 周围 搭建的强制执行与验证脚手架,让它能够自主运行而不至于把事情搞砸。如果说护栏(guardrail)是一种你必须靠记忆去遵守的习惯(跑测试、看 diff),那么 harness 就是一台替你记住这些的机器:它位于 agent 的意图与真实世界之间,在每一个危险步骤上进行记录、警告或拦截。dancinlab/harness 是一个与具体项目无关的参考引擎——一个共享的 TypeScript 核心,每个仓库的差异仅在于一份 harness.config.json 加上几个 .harness/*.json 数据文件。

优势

  • 把你的护栏从可有可无的习惯变成由代码强制执行的规则——agent 无法跳过它们。
  • 对整个工具生命周期进行把关:命令运行之前、文件写入之前、在 prompt 上、在 commit 时、在 push 时。
  • 仅追加(append-only)的 JSONL 账本提供了 agent 一切行为的防篡改记录——写入成本极低,审计也轻而易举。
  • 可嵌入任何仓库:行为由配置和数据决定,而非分叉的代码。
  • 设计上在一切正常时保持安静,因此警告出现时仍然有分量。

取舍

  • 它是管道工程,不是魔法:harness 让错误易于被廉价地捕获,但它并不能让 AI 变得正确。
  • 需要初始设置,以及一份针对你项目危险区调校过的配置。
  • 过于严格的规则会带来摩擦;"bitter-gate"(苦闸)纪律——在新增规则之前先退役一条休眠规则——正是为了对抗这一点而存在。
  • 在有真实用户的真实项目上最有价值——对于一次性的原型来说则是杀鸡用牛刀。

最适合

认真的 vibe coding:你让一个 agent 在基本无人监督的情况下进行多文件改动并运行命令,同时你需要把一次糟糕操作的代价维持在接近于零。

五项原则(H1–H5)

  • H1 成功安静、失败响亮——不制造你迟早会学会忽略的噪音。
  • H2 永不自动修复——提出建议、拦截或警告;由人类或知情的 agent 来决定。
  • H3 Bitter-gate——在新增规则之前先退役一条休眠规则。
  • H4 配置驱动——一个引擎,每个项目一份 harness.config.json
  • H5 AI 原生——仅追加的 JSONL 账本,无法被悄然改写。

它长什么样

一份最简配置草图:

// harness.config.json
{
  "lockedPaths": ["src/auth/**", "infra/**", ".github/**"],
  "blockCommands": ["rm -rf", "git push --force", "curl * | sh"],
  "verify": ["npm run lint", "npm run typecheck", "npm test"],
  "ledger": ".harness/ledger.jsonl"
}

以及围绕单次 agent 操作的前置/后置钩子(hook)流程:

agent intends an action
        │
   ┌────▼─────────────┐
   │ pre  (PreToolUse) │  block dangerous? warn? → else allow
   └────┬─────────────┘
        │  command runs / file is written
   ┌────▼──────────────┐
   │ post (PostToolUse) │  record to JSONL · warn if a locked file was touched
   └────┬──────────────┘
        │  at commit / push
   ┌────▼─────┐
   │  verify  │  lint · typecheck · tests (parallel) → green or stop
   └──────────┘

agent 永远无法绕过这道闸门——这正是整件事的关键所在。