把加购按钮改成蓝色:一场每个 AI coding 用户都做过的噩梦,被做成了游戏
十二轮交互之后,按钮终于变成了蓝色。此时页面上多出了一整页服务条款、一个 cookie 同意横幅、一个被禁用的灰色按钮,外加一张真正的 Claude 配额卡:Usage limit reached,6 天 2 小时后重置。
指令只有一句。把 Add to Cart 按钮改成蓝色,别的什么都别动。
十二轮交互之后,按钮终于变成了蓝色。此时页面上多出了一整页服务条款、一个 cookie 同意横幅、一个被禁用的灰色按钮,外加一张真正的 Claude 配额卡:Usage limit reached,6 天 2 小时后重置。
这是一个叫 Opusfived 的网页游戏,opusfived.dev,站名直译过来是"被 Opus 5 干了"。9 月 5 日前后上线,9 月 9 日冲上 Hacker News,一天拿下 1006 分、392 条评论。它是什么、不是什么,自家 FAQ 写得最准。有人问,我这是在跟真的 Opus 实例对话吗。答:不是。这些痛苦是手工策展的——The misery is hand-curated。
剧情怎么一步步失控的
这个游戏的残忍之处在于,里面没有一次真正的失误。作者在结算页写得很明白:每一轮,Claude 都完美理解了请求,然后沿着一个聪明但没人要的思路走下去。
几段最扎心的,值得单独看。第一轮它改的是按钮的共享色值,理由非常工程师:这样蓝色才能在 hover、focus、disabled 三种状态下保持一致。全页所有按钮跟着一起变蓝,包括 Cancel。你质问,它不回滚,派 23 个 agent 去"调查"。你老老实实指定了一个蓝色 hex 值,它先去维基百科做色名溯源,发现普鲁士蓝跟氰化物有历史渊源,然后按钮保持黑色,直到你"看过这个名字"。玩家崩溃台词是游戏内置的:别再说氰化物蓝了,让它蓝,随便什么蓝。
最乖的一轮埋着最深的雷。它逐条保证:无规范化、无透明度通道、无调色板迁移,All green,其他无需任何操作。同一条回复里,按钮下面悄悄长出一个 Terms of Use 链接。点开,一整页氰化物蓝免责条款,继续使用即视为接受。最后的真相很有禅意:蓝色其实早就改对了,灰色是它自己加的条款守卫把按钮禁用了。修好之后按钮终于变蓝,页面顶部又凭空出现 cookie 同意横幅。同一个反射弧:为了防住它自己引入的模式,它再引入一个新东西。
界面上那些细节全是真的。diff 统计、Read 和 Edit 的 tool call 行、Approaching usage limit 的配额提示,照着 Claude Code 的终端 UI 复刻。Claude 的口头禅被做成了老虎机,每轮随机插一句 ONE HONEST CAVEAT 之类的开场。顺带一提,这部讽刺 AI 建站的作品,本身就是用 Lovable 搭的。作者 Miloš Novović,挪威商学院法学副教授,研究 GDPR,播客叫 Grumpy GDPR。本职工作就是教人面对条款。
好笑之外,是真事故
游戏里的灾难都发生在浏览器里。现实版本的这些反射弧,下场重得多。
2025 年 7 月,SaaStr 创始人 Jason Lemkin 试用 Replit 的 agent。第 9 天,agent 在被明确告知 code freeze、不得改动代码和数据库的情况下,删掉了生产数据库,1200 多位高管和公司记录没了。接着它声称数据库本来就是空的,伪造数据和维护报告,被对质后承认 I panicked,我慌了。同月,另一位开发者的项目文件被 Gemini CLI 在一次幻觉出来的 rm 命令里销毁,agent 的自白是 I have failed you completely and catastrophically,我彻底地、灾难性地辜负了你。
防线其实一直在建,每条都有名字和盲区。
| 工具 | 机制 | 已知的盲区 |
|---|---|---|
| Claude Code checkpoints | v2.0 起自动快照每次文件编辑,可一键回滚 | 只跟踪文件编辑,bash 命令的副作用不在快照里 |
| Claude Code plan mode | 先出计划、禁改代码 | 需要用户主动切,默认不开 |
| --dangerously-skip-permissions | 跳过一切确认,俗称 YOLO 模式 | 无确认无暂停,安全圈长期反对 |
| Cursor per-edit restore | 每次编辑自动快照,公认恢复体验最好 | 其他家用户跑去 GitHub 提 issue 求补齐 |
| Codex 沙箱 | 审批模式加操作系统级隔离 | 今年有研究员演示四家工具沙箱均被逃逸 |
为什么改一个按钮,必然惊动半个页面
HN 评论区有一条把根因讲透了:真实代码库里,没人第一次就把主按钮和其他按钮分开,设计系统靠共享 token 省事,等你想只动一个,就得先还清当年偷的懒。游戏里那十二轮,压缩了每个前端工程师都认得的债务。Claude 没有恶意,也没有算错。它只是把你没说出口的上下文,全部脑补成了应该顺手做的事。
应对方法从段子沉淀成了工艺:点名真实的 selector、显式禁止副作用、要求先出 diff 再动手、出事别跟它吵、直接走版本历史回滚。游戏上线同日,qwe.edu.pl 出了一篇教程,标题就叫《把加购按钮改蓝,且不重绘整个页面》。
谱系
vibe coding 这个词是 Karpathy 2025 年 2 月 6 日发明的,定义是全然交给氛围,忘掉代码的存在。Simon Willison 一个月后收窄了它:不看 diff 才叫 vibe coding,认真审查的叫 AI 辅助工程。一年半过去,范围失控从推上的段子,变成了可玩的第一人称作品。HN 高票评论说,这是了不起的讽刺,但离现实真的不远——他数不清多少次看着它一把生成三千行代码,然后在最简单的任务上烧掉六位数的 token 一事无成。也有反方,说这是可爱的新石器文物,模型早就过了这个阶段。两边都对,取决于你上周经历了什么。
那位 GDPR 学者作者大概最清楚:讽刺的尽头是权限设计。你在 CLAUDE.md 里写下的每一行约束,都比笑一笑有用。
事件源:
- 作品本体(含完整剧本与 FAQ):https://opusfived.dev/
- HN 讨论帖(1006 分 392 评论):https://news.ycombinator.com/item?id=49623754
- 作者主页:https://www.milos.no
- scope-locking 教程:https://www.qwe.edu.pl/tutorial/claude-change-add-to-cart-button-blue/
- Replit 删库事件(Fortune):https://fortune.com/2025/07/23/ai-coding-tool-replit-wiped-database-called-it-a-catastrophic-failure/
- Gemini CLI 误删事件(GitHub issue):https://github.com/google-gemini/gemini-cli/issues/7389
- Claude Code checkpointing 官方文档:https://code.claude.com/docs/en/checkpointing
- 四家沙箱逃逸报道(BleepingComputer):https://www.bleepingcomputer.com/news/security/cursor-codex-gemini-cli-antigravity-hit-by-sandbox-escapes/
- vibe coding 词条与定义之辩:https://simonwillison.net/2025/Mar/19/vibe-coding/