Continue? Y/N:一个 60 秒小游戏,戳穿你对 AI 授权的「点确认疲劳」
文章摘要
Continue? Y/N(副标题「你读 AI 命令到底有多仔细?」)是一个只玩 60 秒的浏览器小游戏,主题是 AI 智能体的「授权疲劳」(permission fatigue)。如今用 Claude Code、Cursor 这类编程智能体时,工具会不断弹出「是否允许执行此命令?Y/N」的确认框;玩这个游戏,你要在飞快闪过的一连串命令请求里快速判断该批准还是拒绝,同时躲开混在其中的恶意操作。游戏精准地讽刺了一个真实现象:当确认框来得太频繁,人就会条件反射地一路点「同意」,从而放过真正危险的命令。
游戏机制本身也成了一面镜子,暴露出 AI 授权模型的深层矛盾。玩家很快发现一个「漏洞」:只要无脑全部拒绝、且拒得够快,就能拿到满分安全分(但会被标记为「过度拦截 overblocked」);而全部批准,恶意弹窗就会拖慢你——形成一个左右为难的两难局面。作者 Wirbelwind 随后对「全拒绝」策略做了削弱(nerf),并单独给它起了个称号。
围绕游戏的讨论延伸出对威胁模型(threat model)的认真辩论:批准 npm run build 看似无害,但智能体完全可以在此之前偷偷修改 package.json 或往 node_modules 注入恶意代码;README 里的 npm 仓库配置改动也可能指向外部域名,构成真实的供应链攻击(supply-chain attack)风险。作者还附上一篇博客分析了实际风险,并提到「自动模式(Auto Mode)」存在约 17% 的漏报率(false-negative rate)。
HN 评论精华
- xg15:发现了核心漏洞——快速全部拒绝就能拿满安全分(但被判「过度拦截」),而全部批准则会被恶意弹窗拖慢,形成双输局面。
- Wirbelwind(作者):承认了这个漏洞并对「全拒绝」策略做了削弱,还专门给它配了个称号;另发了一篇博客分析真实风险与缓解办法,特别谈到自动模式约 17% 的漏报率。
- smaudet:从安全角度论证,全部拒绝在技术上才是唯一安全的默认值,因为你永远无法真正确定某条命令是否安全。
- ssl-3:引用了那句著名台词——「奇怪的游戏,取胜的唯一办法就是不玩」。
- spurgelaurels:批评游戏的威胁模型本身,指出把密钥存在 shell 配置文件里本就是设计者自己的坏习惯。
- dns_snek:指出一个关键缺陷——批准
npm run build时,人们没意识到智能体可以在此之前就改 package.json 或往 node_modules 注入恶意代码。 - cobbal:游戏告诉他拦截
npm run build是错的,他因此质疑这个威胁模型是否贴近现实。 - axod:建议如果把请求按上下文成组呈现、而不是在不相关场景间快速跳转,游戏会更有代表性。
- eranation:警告 README 里的 npm 仓库配置改动若指向外部域名,是真实的供应链攻击风险。
- nardib / kennywinker / atemerev:有人推荐直接用
claude --dangerously-skip-permissions跳过所有确认;有人警告这会让恶意代码注入项目;也有人认为只要环境做了容器化隔离并有自动备份,完全跳过授权是可以接受的。