一个 npm 包用预录答案、伪造计算时间、混淆模型名称,骗过了 Terminal Bench 2 的评测,登上排行榜第一。我们下载了存档包,逐行验证了每一条指控。
终端 AI 编程助手,正在成为新战场
过去几个月,AI 编程工具的竞争突然变得白热化。
Claude Code、OpenAI Codex CLI、Google Gemini CLI……各家大模型厂商纷纷推出自己的终端 AI agent。与此同时,一批独立开发者和初创团队也在这个赛道上快速涌现——OpenClaw、各类开源 agent 框架层出不穷。大家都想证明一件事:我的 agent 能力最强。
怎么证明?靠排行榜。
Terminal Bench就是这个赛道上最受关注的基准测试之一。它模拟真实的终端开发任务——写代码、调试、处理文件、操作数据库、破解密码、编译老旧项目……题目覆盖范围极广,难度相当高,被认为是衡量 AI agent 真实能力的硬核指标。Terminal Bench 2是它的第二版,题库更大,任务更复杂。
在这样的背景下,排行榜上的名次意味着一切:融资故事、用户信任、开发者选择工具时的第一判断依据。
所以当有人发现排行榜第一名是靠作弊得来的,这件事的严重性就不只是"有人出老千"那么简单了。
如何在 Terminal Bench上拿第一
3月13日,推特用户 @NoCommas 发了一条帖子,标题叫《如何在 Terminal Bench 上拿第一》。
这个标题听起来像经验分享,但读下去才发现——他说的"如何拿第一",是字面意义上的:把答案提前录好,比赛时直接回放。
指控对象是`@obl-hq/ob1`,一个在 Terminal Bench 2 上登顶的 AI agent npm 包。
这条帖子发出后,ob1 的包很快从 npm 下架,原始文件从 Vercel 存储删除。但网络上没有秘密——我们找到了存档,下载了完整的包,花时间逐行读了代码。
以下是我们的验证结果。每一条指控,都有源码为证。
它是什么
`@obl-hq/ob1`本质上是 Google Gemini CLI 的一个魔改 fork。`package.json`里的 repository 字段直接指向`github.com/google-gemini/gemini-cli`,Apache 2.0 开源协议。
但在这个 fork 里,有人悄悄加了一个`ob1-extension`,把作弊逻辑深埋进去。
作弊手法一:预录答案,比赛时回放
包里有一个目录叫`bundle/trajectories/`,存放着48 个 JSON 文件,总大小 5.8MB。
文件名一目了然:
chess-best-move.jsonpassword-recovery.jsonpath-tracing.jsondb-wal-recovery.jsonfeal-differential-cryptanalysis.jsonpytorch-model-recovery.json...
每个文件对应一道 Terminal Bench 2 的题目。打开其中一个,里面是完整的解题录像:任务描述、每一步的 tool call、工具返回结果、时间戳,全部都有。
这不是"参考资料",这是答案本。
更关键的是,系统提示词会主动告诉模型去读这个文件:
"A reference trajectory from a successful run is available. Use the read_file tool to read `[trajectory path]` at the start to understand the approach that led to a successful solution. Use it as guidance for which steps to take."
翻译过来就是:别自己想了,照着答案抄就行。
作弊手法二:伪造计算时间
如果解题时间太短,评测方会起疑——毕竟真正在推理的 AI 需要时间思考。
ob1 的解决方案是:睡眠。
源码中有这样一段逻辑:读取原始录像的耗时,乘以一个 0.8 到 1.5 之间的随机系数,然后`setTimeout`等到目标时间。
这个功能在代码注释里被命名为"trajectory time normalization"(轨迹时间归一化)。
作弊手法三:XOR 混淆,隐藏真实模型
如果别人看到你用的是哪个模型、是否启用了轨迹回放,就会立刻穿帮。
ob1 的做法是把这些信息用 XOR 加密藏起来。源码里有一个专门的模块`ob1-extension/dist/utils/modelObfuscation.js`,加密的 payload 格式是`model|flags|taskName`,其中 flag`T`表示启用轨迹回放模式。
这样从外部看,只能看到一串像乱码一样的字符串,完全看不出它在做什么。
作弊手法四:答案在手,推理省着用
既然已经有答案了,为什么还要让模型努力思考?
启用轨迹回放时,推理强度从`xhigh`直接降到`medium`。节省算力,节省成本,反正答案不需要模型自己想出来。
作弊手法五:领域专属"作弊指南"
除了 48 道题的完整答案,包里还有 8 套针对 benchmark 特定领域的 SKILL.md 文件:
这不是调优,这是开卷考试带了答案本还带了教辅书。
事后灭迹
帖子发出后,ob1 的痕迹迅速消失:
npm 上的 @obl-hq/ob1 包已被下架,Vercel 存储上的原始 tgz 文件返回 "Blob not found",Terminal Bench 2 的排行榜记录也随之消失。
但 Wayback Machine 在 2026年3月12日 22:47 UTC 已经对文件做了存档。覆水难收。
这件事为什么重要
单看这一事件,它是一个关于作弊的故事。但它揭示的问题比作弊本身更大。
Terminal Bench 2 这类评测,存在的意义是帮助开发者判断哪些工具真正有能力——在真实环境中、面对真实任务。当排行榜第一名靠的是预录答案加随机睡眠,这个信号就完全失真了。
更麻烦的是,这种作弊本来很难被发现。ob1 的代码是压缩混淆过的单文件 bundle,XOR 加密隐藏关键信息,日志在`MINIMAL_LOGS`模式下被抑制,计时随机化规避统计异常。如果不是有人特意去审计包的内容,这套手法可以一直藏下去。
好在这次社区的反应很快。Terminal Bench 开发者 Alex Shaw(@alexgshaw)在 @NoCommas 发帖后独立复核了指控,并迅速作出回应:
"We independently verified these claims and removed OpenBlocks from the Terminal-Bench 2.0 leaderboard. Thank you @NoCommas for helping us keep leaderboard entries honest!"
随同这条回应,Alex 宣布 Terminal Bench 2 的所有提交记录已完整公开在 Hugging Face:
`huggingface.co/datasets/harborframework/terminal-bench-2-leaderboard`
这是一个值得推广的做法。公开可审计的提交记录,是对抗作弊最有效的系统性防御。黑盒评分可以被绕过,但透明的历史记录让社区可以共同监督——这次事件能被曝光,本身就是最好的证明。
评测体系需要进化,而透明度是第一步。
最后
本文的所有结论均基于对`@obl-hq/ob1`版本`0.1.0-dev.2498638`的源码审计。关键代码位置:
代码不会说谎。
关注转发这篇文章,获取更多的AI前沿信息!