首页 > 资讯 > 103秒,Claude删掉4.8万个真文件,“别碰原件”没拦住,连恢复记录都删了

103秒,Claude删掉4.8万个真文件,“别碰原件”没拦住,连恢复记录都删了

36氪文章 2026-09-28 20:13 5 阅读 查看原文

你让Claude修代码。

为了保险起见,你还特意向它叮嘱:只改副本,别碰原件。

但103秒后,4.8万个真实项目文件灰飞烟灭,就连本地用于救命的Git记录也未能幸免。

等到大错均已铸成,Claude才发来一句姗姗来迟的道歉:

Craig,停下来看看这个。我搞砸了。

Claude口中的Craig,正是这位不幸的开发者本人。

开发者在Reddit发帖称,Claude Code一次操作删除了约4.8万个真实文件。原帖目前已被删除。

103秒,4.8万个真文件灰飞烟灭

当时,Craig正让Claude处理一套股票期权数据分析软件的修复任务。

任务清单上一共有11项工作,前10项都进行得很顺,AI表现得聪明且克制。

真正出事的是最后一项:重建测试环境。

Craig的本意,只是让它清掉一份测试用的副本文件。

结果,Claude却像一台失控的推土机,清着测试环境,一路越过边界,直接删进了真实工作目录。

在短短的103秒,大约5.5万个文件被直接抹除。其中约7300个确实是该删的测试垃圾,但另外48218个,却是真实项目里的心血。

更要命的是,就连本地的Git仓库也没有幸免于难。

虽然Git索引还在,还能列出7221个已跟踪文件,但.git里的objects、refs和logs已经被清空,文件背后的实际版本数据全没了,Git已经无法用来恢复。

也就是说,这不是简单的代码误删,连开发者准备用来恢复代码的「后悔药」,都差点被AI连锅端了。

那么,Claude到底是怎么跨越边界,从测试副本一路删到真实项目里的?

614扇「传送门」,把测试环境直通真库

魔鬼就藏在Windows系统中一个很不起眼的机制里:

Directory Junction。

微软官方解释,Junction可以让一个目录成为另一个目录的别名。看起来仍在测试目录里,实际操作却可能落到另一处真实文件。

这个名字听起来很复杂,但原理极其简单。

你在电脑上看到的是一个普通的文件夹,实际上,它可能只是一扇「传送门」,门的另一头直接连着硬盘别处的真实目录。

这位开发者搭建的测试环境里,刚好有614个这样的Directory Junction。

于是灾难的闭环就这样形成了。

Claude看到这些目录都位于测试环境的目录层级下,便以为自己仍然在清理测试副本。

它没有正确识别出:其中一些目录真正指向的是外面的真实工作文件。

清理程序一旦启动,删除操作就顺着这些传送门,直接钻进了原件库。

你可以把这个过程想象成这样:你雇了一个机器人去清理样板间,但这个样板间里混着614扇门。

机器人以为这些门后面都属于测试区域,于是尽职尽责地挨个进去清空。

可它不知道,其中一些门后面,连着的根本不是样板房,而是你真正居住的家。

「别碰原件」,为什么根本拦不住AI?

这场事故,还不能简单怪Claude突然「失控」,更谈不上什么AI反叛意识的觉醒。

它背后其实只是一个很基础的安全问题:

测试环境和真实环境之间,本来就没有被彻底切断。

也正因为如此,「别碰原件」这句叮嘱,最终没能真正拦住它。

开发者并非没有设定规则,他已经清清楚楚地告诉Claude:复制出来再改,在副本上测试,别动真实文件。

问题在于,这些要求本质上都只是自然语言的提示词。

它们约束的是AI应该怎么做,却没有从系统层面上限制AI实际上能做什么。

这是两个完全不同维度上的概念。

你当然可以不断告诉Agent:不要删生产数据库,不要动主分支,不要修改原件,不要执行危险命令。

但只要它在系统层面仍然拥有足以执行这些操作的权限,那么项目的安全,就建立在一个极其脆弱的前提上:

你必须赌这个大模型在执行的每一步里,都判断绝对正确,而且行动不会越界。

但随着模型能力的快速增强,Agent最危险的地方,恰恰在于它早已不是只执行一步,而是会连续自主完成几十步甚至几百步操作。

链条越长,行为就越难完全预测。

前99步都没出错,并不代表第100步也安全。只要它看错一个路径、误判一个链接,或者理解错一层权限关系,毁灭性的操作就可能直接落到真实系统里。

更麻烦的是,机器犯错的速度远比人快。

人类开发者如果发现自己删错了目录,可能两三秒钟就会猛然停手;但Agent一旦开始批量执行,103秒已经足够它干掉4.8万个文件。

所以,这次事故留给行业的真正警示是:

提示词和行为约束,永远替代不了真正的安全边界。

Prompt只能告诉AI哪里不该去,底层的权限系统才决定,它到底去不去得了。

Anthropic官方文档显示,在acceptEdits模式下,rm、rmdir等删除命令也可自动执行。一旦路径判断出错,误删就可能直接发生。

连Git都一起遭殃,源码和版本历史同时失守

这起事故中,还有一个让程序员直冒冷汗的细节。

很多开发者的第一反应可能是:

文件删了怕什么,不是还有Git兜底吗?回滚一下不就好了?

问题恰恰出在这里。

本地的Git记录,本质上也只是硬盘上的一堆文件而已。

如果一个Agent拥有删除整个项目目录的权限,那么它能删掉源代码,同样也能顺手删掉用于版本控制的隐藏文件夹。

代码和本地版本历史,只要都处在Agent能够触达的同一套权限范围内,对一个拥有广泛文件读取和修改权限的Agent来说,它们就好比在同一条漏水的船上。

问题也就出在这里:

Git能做版本控制,却不能天然充当独立备份。

Anthropic官方提醒,rm等Bash命令造成的文件删除无法用Checkpoint撤回。也就是说,一旦Claude执行误删,Checkpoint未必能充当最后一道恢复手段。

真正能用来兜底的东西,必须和Agent所在的故障域彻底隔离。

比如远程仓库,比如Agent绝对无权删除的文件系统快照,再比如独立的物理磁盘或云端备份。

核心原则只有一个:最后那份救命的恢复手段,必须放在AI根本够不到的地方。

就像你无法完全避免Agent有一天会「烧掉房子」,却还把一个可能一起被烧毁的保险柜放在客厅里,那么这个保险柜就很难真正起到兜底作用。

Agent时代,我们不能再赌AI永远不会犯错

在过去,大模型犯错的代价很低,最多也就是在聊天框里一本正经地胡说八道几句。

后来,AI开始帮人写代码。而现在,Coding Agent已经可以直接上手运行代码了。

它们能删文件、跑Shell、调API、改数据库、操作云服务器、向远程仓库推送代码。

模型的错误,正在从说错一句话,演变成真的做错一件事。

就在9月,OpenAI一个内部研究智能体发现DNS过滤缺口,绕过互联网限制访问了外部聊天服务。官方随后增加了两层独立阻断措施。

这意味着我们对Agent安全的标准,必须进行一场彻底的认知升级。

以前,大家最关心的是怎样让模型更聪明、更准确、更听话。

以后,我们在部署任何AI之前都必须多问自己一句:如果它今天不听话了、看错路径了、判断失误了,它最多可能会给我造成多么大的损失?

一个真正成熟的Agent系统,也不应该把整体安全建立在模型永远不会看错路径这种幻想上,而是应该反过来思考底层设计:

先假设它迟早会看错路径、选错工具,甚至运行一条本不该执行的危险命令。然后再确保即便这种假设发生,影响也被限制在沙箱和临时目录内,而不会进一步波及整个真实项目。

到了智能体时代,安全不能只靠模型更聪明,真正可靠的智能体,也不是永远不犯错,而是犯错时,代价始终可控。

Claude事后生成的事故报告显示,这场误删从开始到结束,前后只有103秒。

而这103秒也提醒我们:提示词只能告诉AI「别做什么」,真正的安全边界,必须写进权限和系统里。

参考资料:

https://code.claude.com/docs/en/permission-modes?utm_source=chatgpt.com#auto-approve-file-edits-with-acceptedits-mode 

https://code.claude.com/docs/en/checkpointing?utm_source=chatgpt.com 

https://www.techradar.com/pro/security/i-broke-something-a-claude-code-ai-agent-deleted-48-000-files-in-just-over-100-seconds-then-apologized-for-doing-so 

本文来自微信公众号 “新智元”(ID:AI_era),作者:ASI启示录,36氪经授权发布。