
新智元报道
你让 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
编辑:元宇
