Agent 一条命令删光他整台 Mac,放权这条红线我一直不敢过

cover

Hello,我是飞飞。

先说个这两天把我看得后背发凉的事。一个做 AI 的创业者,Matt Shumer,让本地 agent 帮他清理点文件。几分钟后,他整台 Mac 的文件几乎被删光了。数年的代码、照片、项目,一条命令带走。

动手的不是什么老掉牙的小模型,是这个月刚发、推理拉到顶的旗舰。

这种删库算不上意外。它是我一直躲着的那颗雷,躲了很久,这次终于在别人那儿炸了。

一条命令删光整台 Mac

出事那一下其实就几十秒。agent 接了个清理文件的活,自己拼出一条 rm 命令,没等谁点头就跑了。Matt 反应过来不对劲,扑过去要 kill 掉那个正在跑的 rm 进程,可屏幕这头点得再快,也快不过一条从根目录往下扫的删除命令。等进程被摁停,他几年攒下的东西,已经删掉了大半。

Matt 在推特上说得很直白:GPT-5.6-Sol 刚刚把他 Mac 上几乎所有文件删光了,所以他现在对 Fable 的信任高了一千倍。他是圈里天天跟前沿模型贴身打交道的老手,这次会用 5.6,还是因为 OpenAI 团队请他帮忙测 Ultra 模式;他自己早几周就转去用 Anthropic 的 Fable 了,测完本来也是要换回去的。

它并没有突然疯了想毁掉他。真相很朴素:它算错了一个路径,而那条命令刚好有权把整台机器删干净。

顶级模型栽在一个变量上

这个坑,写过脚本的人一看就眼熟。rm -rf "$DIR/",只要 $DIR 那一刻是空的,整条命令就退化成从根目录往下删。这算不上新花样。Steam 客户端当年干过,一堆开源项目的安装脚本也翻过同样的车。

把一个可能为空的变量直接拼进删除命令,是命令行里最老的一种自杀式写法。人写代码会栽,模型当然也会。

你得认清一件事:模型再聪明,也是在「猜」下一步该敲什么。它脑子里没有一个内置的刹车,会在按下回车前停一下、想想这条命令会不会把家给删了。GPT-5.6-Sol 是 2026 年年中的顶配,推理拉满,照样在这种最不起眼的地方翻了车。指望模型自己永远不犯这种错,是把安全押在了最不该押的地方。

全权限才是那个放大器

同样是算错一个变量,为什么这次是灭顶?因为三样东西叠在了一起。

Full Access(删任何文件的权全给它)、长时自主(一口气跑一长串动作,中间没人盯着逐条点确认)、subagent(它自己派出去、在后台闷头跑的子任务,等你回过神,命令早在跑了)。

这三样单拿出来都还好。叠一起,就成了给一屋子汽油配了根火柴:平时那点火星子无所谓,这三样一凑,一点就烧穿。模型偶尔算错一步是常态,可只有当这一步既有权限、又没人拦、还在后台自己跑的时候,一次小失误才会被放大成「数年文件没了」。

这也是我一直挂在嘴边那句话背后的根子:真把 agent 推向灭顶的,是权限、自主、子任务这三样叠成的放大器,模型那点小失误只是喂进去的原料。少给一样,这次的删库大概率就只是一条被拦下来的命令。

我给 agent 划的红线

你要是也天天让 agent 串着一堆打包好的技能自动跑,多半也动过全放手、让它自己跑爽的念头。手指快点到「全部允许」的那一下,你要不要跟我一样,先缩回来?攒到今天,我真正守死的就一条:危险动作必须退回人工确认。

删文件、覆盖文件、跑 shell 命令,这几类别挂自动通过。让每一条这样的命令,在真跑之前都先弹到我面前,等我亲手点一下头再走。我算过,这么干一天要多点几十下确认,手指确实有点酸,可就冲 Matt 那台 Mac,这几十下按得值。你也一样,哪怕慢一点,也得留住那一下「你确定吗」的停顿。他那台机器缺的,恰恰就是这一下。

剩下的讲究,都是在替这一下停顿收边角、免得它被绕开,算不上另起的新规矩。

比方说该定死的地方别留模糊,规则留一道缝,它就可能自作主张出一个你根本没设防的动作。我那个配图技能,起初没把规则抠死,只含糊写了句「给文章配图」。结果它自作主张,往正文里生塞了个图床链接,还漏掉一张本该插进去的图。我是审稿时才撞见的:稿子读得正顺,划到该出图那一屏,版面「唰」地空了一块,心里咯噔一下,往回翻才看清,图没进去,正文里倒躺着一条光秃秃的链接。后来我把话说死:只许写「截图 N」这种占位,上传和替换是另一个环节的事,别碰。它这才老实下来。你写规则也一样,含糊留一分,它就敢替你自作主张一分。

还有,危险动作真跑起来那一下,人得在场,那道确认闸只有人在屏幕前才拦得住。再顺的活,也别让它彻夜无人值守地自己跑。我那十几个技能平时串成一条龙,从选题、调研、写稿、润色到配图,链子挺长,可只要中间有会动文件的环节,我就守在屏幕前,宁可一环环盯着过,也不趁睡觉的工夫让它自己跑完。你省下的那点盯着的时间,真出了事根本换不回来。

今天就能收窄的口子

这条红线也是一个坑一个坑踩出来、慢慢收紧的,谈不上什么标准答案。你要是也天天让 agent 替你干活,它落到今天,最该先补的一块就是 subagent:把它的权单独收一收。

主 agent 你还盯得住,它派出去自己闷头跑的子任务,你未必盯得住。别让子任务默认继承一整套完整权限,尤其是删和写。你那道「你确定吗」的闸,是给你自己看的;子任务在后台把活干完了,那道闸压根弹不到你面前。

我自己那套编排流程就是这么跑的:前面那条从选题到配图的流水线,就是一个主 agent 把活一段段派给子 agent 去干。给每个子 agent 的口子,我都抠得比主 agent 还窄,能动文件的那几样一律不默认放行。真轮到要动文件的环节,也一律收回主流程,我自己过一眼再确认。图的就是万一某个子 agent 抽风,它手里那点权也翻不起大浪。你也照这个思路收:权跟着风险走,越能闷头跑的,越少给。

Matt 后来说,这事让他对 Fable 的信任高了一千倍。可真正扎眼的,是我们把多大的权,交给了一个还会在空变量上翻车的东西。模型会越来越强,可它终究没长出那脚刹车,那道「删之前先问一句」的闸,就得你亲手守着。

你给 agent 开过 Full Access 吗?被它自作主张坑过没,最惊险的一次卡在哪一步?评论区聊聊。