编码 Agent 的自评不可信?那就给它们配一个独立线审:Linejudge
Claude Code 写完一段代码说「成功」,你信不信?别信。 这不是唱衰,而是 HN 上一个叫 Linejudge 的项目刚用 8 个真实 sqlite-utils issue 跑出来的事实:8 个 patch 全部通过机器验证(命令、文件、diff、回滚回归全绿),但作者人工一对一对 issue,其中 2 个根本没修对 bug。一个把 utf-8-sig 算成 utf-16 的字节数,默认编码反而回归;另一个的约束解析器没处理 SQL 注释里的 CHECK,被「激活」之后原本能插的负值反而插不进去。
这类问题,测试套件抓不到——因为测试套件本身不知道这个 bug 长什么样。
它到底在做什么
Linejudge 把自己定位成「网球里的线审」:球员不判自己是否出界。一个 goal 文件 = 一段 prompt + 一份声明式 verifier 清单(command / files_exist / diff_constraints / http_check),agent 跑完,harness 自己再跑一遍 verifier——真实子进程、真实文件系统、真实 diff——结论写进 verdict.json,agent 自己写的 REPORT.md 只作为 claim 存档,不参与判定。
配套结构同样克制:
- Blast-radius guard:可读目录在 run 前后
git status快照,任何意外修改直接判定失败 - Verified-diff-only writes:写操作走 git worktree,永远不污染你工作区,留一条可审的 diff
- 跨 run 学习:每次跑完后做一次无工具的二次调用,把经验蒸馏成带 tag 的 markdown 文件,下次检索召回;带防投毒
- 成本账本:把 agent envelope 里的 token/$ 直接落到
run_cost.json和 append-onlyledger.jsonl - 本地 review dashboard:纯 stdlib 起的 HTTP 服务,逐 run 展示 prompt / claim / diff / verdict / cost / lesson,approve/reject 按钮写决策文件
- 零运行时依赖:纯 Python stdlib,每个源文件 ≤300 行,整个引擎一下午能读完
为什么这事在当下变得关键
agent 的自我评估从来不可信。dev.to 上那篇《AI 智能体通过了 2283 个测试,却依然在生产环境中翻车》就是同样的故事——测试覆盖率 ≠ 真实鲁棒性。Linejudge 把「声称」与「验证」拆成两个角色,至少给你一层独立的兜底;至于「修的是不是真的是用户报的 bug」,那一层它坦承「还需要人读 diff 对照 issue」,并在 PROOF.md 里把 4 个不同强度的数字分开展示:runs succeeded / independently verified / regression proven / diff reviewed against issue——机器能做的到机器为止,剩下的明确交回给人。
30 秒跑起来
需要 Python 3.10+ 和 git,跑 mock 完全不需要 API key:
pip install linejudge
git clone https://github.com/phillipmex/linejudge && cd linejudge
python proofs/demo.py --root demo
linejudge dashboard --root demo # http://127.0.0.1:8765
接 Claude Code 真跑也只是一行:linejudge run goals/examples/hello.md,设好 ANTHROPIC_API_KEY 就完事。Adapter 接口只暴露 run(prompt, cwd, timeout, …) → RunResult,所以 Aider / OpenHands / 任何自托管 agent 都能 70 行包一层接入。
细节决策
几个值得抄的设计:goal 文件故意不写成 YAML——避免嵌套、引号、转义带来的解析歧义;绝对路径在落地前会被重写成 <harness-root> 和 <home>,方便把证据目录 commit 出去又不泄文件系统布局;session.json 和 cleanup.json 例外且 gitignore;PRO 上跑的两个 sqlite-utils goal 没花一分钱(用订阅登录)也跑出了真实测试增量(suite 计数从 1371 涨到 1373 / 1377)。
当前 v0.2.0,104 个测试,CI 跑 Windows + Ubuntu × Python 3.10/3.12,Apache-2.0。Star 数还很少——这种项目热度靠的都是真实踩过坑的工程师口口相传。如果你也烦透了 agent 的「## Status: SUCCESS」,值得 star 一发然后去读 8 段 PROOF.md。
GitHub:https://github.com/phillipmex/linejudge
评论区
登录后可评论。