返回

文章详情

ProofRun - AI编码代理的本地验证收据

Hacker News2026年8月16日 03:22

AI编码代理的本地验证收据。English · 简体中文 ProofRun并不判断你的代码是否正确。它通过加密证明——而不是客气地询问——哪些检查实际上在你当前的确切代码上运行了。 问题 一个AI编码代理说:“所有测试通过。”这是真的吗?也许。上次代理实际运行测试时,这是真的。但那可能是三次编辑之前。代理甚至可能不记得运行它们——它可能只是推断“更改看起来正确,测试可能仍然通过。”仅凭这些话,你无法区分“我运行了并且通过了”和“我很确定它会通过。”ProofRun填补了这个空白。不是通过让代理更诚实——而是通过使声明本身可检查。 如何工作 $ proofrun run test -- pytest ... 测试: 通过 (退出 0,1841毫秒) $ proofrun status test 通过 (退出 0,1841毫秒) # 此后的代码更改——代理或人都无所谓 $ proofrun status test 过期 (上次运行: 通过,退出 0 — 自那以来代码已更改) 每个检查结果都绑定到你确切代码状态的指纹:git提交,再加上未提交内容的哈希——是否已暂存,是否已跟踪都无所谓。更改一个字节,结果将自动变为过期。没有人需要记得问“这次通过仍然算数吗?” 安装 curl -L https://github.com/yebiguo/proofrun/releases/download/v0.2.0/proofrun_linux_amd64.tar.gz | tar xz # 其他平台: https://github.com/yebiguo/proofrun/releases 或者从源代码构建:go install github.com/yebiguo/proofrun/cmd/proofrun@latest 快速开始 proofrun init # 写入.proofrun.yml proofrun run test -- pytest # 真实运行pytest,绑定结果 proofrun status --strict # 如果任何内容不是通过则非零退出 为什么这样,而不是相信代理 没有LLM调用,任何地方。ProofRun不使用AI来验证AI。它启动一个真实的子进程并读取其真实的退出代码——这就是整个机制。四个状态,绝不猜测。通过、失败、过期、未运行——每一个状态都来自一次观察到的执行,或缺少执行的文档记录。没有第五种“可能还好。” 完全离线。零网络调用,零遥测,零账户。精准的argv,而不是字符串匹配。声明为pytest -k "foo bar"的检查不能通过一个仅在文本扁平化后看起来相似的命令来满足——ProofRun比较的是实际参数数组,而不是字符串。 ProofRun故意不做的事情 它不解析测试输出,不判断代码质量, 不自动修复任何内容。有关完整边界,请参见AGENTS.md。 由AI代理构建,由AI代理负责 ProofRun是由一个AI编码代理(Claude Code)在人工指导下编写的,然后在第一次发布之前经过几轮独立、只读的对抗性审查。该审查发现,ProofRun自己的命令比较可能会被欺骗:一个错误引用的shell参数使得检查悄悄运行零个测试并仍然报告通过。完整的重现、确切的修复以及为什么一个简单的补丁不够 → docs/case-study.md。每个修复在被接受之前都经过了真实重现的验证——不仅仅是可行性审查。一个旨在让AI代理负责的工具如果不能经受同样的审查,那就没有存在的必要。 命令 proofrun init # 生成.proofrun.yml proofrun run <检查名称> -- <cmd> # 真实运行<cmd>,将退出代码 + 持续时间绑定到当前git状态 proofrun run-all [--only <名称>] # 运行每个声明的检查,在每次后保存结果 proofrun status [--strict] # 每个检查的通过/失败/过期/未运行;--strict如果所需检查不是通过则非零退出 proofrun report [--json] # 完整报告,既可供人类阅读也可供机器读取 配置: .proofrun.yml 检查: 测试: 命令: [pytest] 必需: true 构建: 命令: [npm, run, build] 必需: true 检查: 命令: [ruff, check, .] 必需: false 命令是argv列表,而不是 shell 字符串——ProofRun从未通过 shell 运行,实际运行的内容与声明的内容的比较必须逐项精确。必须: true是使检查块状态--strict的内容,这就是你会接入预提交钩子或CI门的内容。 指纹如何工作 每个结果都绑定到你当前的git HEAD加上git diff HEAD的SHA-256哈希,以及任何未追踪、未忽略文件的内容。proofrun status每次都会重新计算该指纹,并将其与本地存储的进行比较——任何不匹配,甚至是一个字符的空间的变化或一个新文件,都会报告为过期。 GitHub操作 在: pull_request 权限: 内容: 读取 作业: 验证: 运行在: ubuntu-latest 步骤: - 使用: yebiguo/proofrun@v1 这会自行检查确切的PR头提交——它绝不信任调用工作流已经检查出的内容,因此pull_request触发器无法悄悄交给GitHub的合成合并预览提交。然后,它会清除在PR分支上收到的任何receipt.json,下载校验和验证。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡