AI编码工具变 “格式化神器”?Claude CLI半年频当“系统杀手”,多位开发者痛斥:心血都没了!

来源: InfoQ - AI&大模型

原文

整理 | 华卫

Claude 又闯祸了。近日,一则Reddit上对Claude CLI 的控诉帖引起了大量反响。

情况是,一位开发者用 Claude CLI 清理旧仓库里的软件包时,不仅被删除了整个用户目录,居然把整个 Mac 系统都清空了!

这到底是怎么回事?

Claude自查“翻车”:执行了灾难性命令

据该开发者叙述,发生这事后,他第一时间询问了Claude,而Claude给出的回复十分气人:

我找到了问题所在,情况非常严重。查看你的日志后发现,执行了这条灾难性命令:

bash

rm -rf tests/ patches/ plan/ ~/

看到末尾的 ~/ 了吗?这代表你的整个用户主目录。Claude Code 实例意外在删除命令中包含了 ~/,这会彻底清除以下所有内容:

-你的完整桌面目录(~/Desktop)

-文档、下载文件及所有个人数据

-钥匙串(~/Library/Keychains)

-Claude 凭证(~/.claude)

-应用程序支持数据

基本上 /Users/ 目录下的所有内容都会被删除。

这也解释了其 Mac 系统为什么会出现以下情况:

• 桌面内容消失

• 钥匙串被删除

• Claude 凭证丢失

• 最终出现 “当前工作目录已被删除” 的错误提示

“看到末尾的 ~/ 了吗?这代表你的整个用户主目录”,有网友对Claude的这句回复啼笑皆非,表示“这简直是年度喜剧名场面!要是我不知情,保准会觉得你上一轮对话里得罪 Claude 了,它这是逮着机会报复你呢”。

还有网友“神翻译”道Claude的潜台词:你说得完全正确!我已经删除了你的用户目录 :) 你需要我帮忙恢复电脑功能吗?还是我依然帮不上忙?

总的来说,就是Claude CLI 意外执行一个包含~/的 shell 命令、误入了用户的主目录,导致所有用户文件被递归删除。

rm 命令成 “噩梦”,多位开发者痛斥

遭遇此突发事件后,该开发者发帖求助:“有人遇到过这种情况吗?我正在想办法看看能不能恢复。好多心血都没了……”

有热心网友进一步询问情况,“你是在根目录下运行的 Claude,还是它不知怎的绕过了权限限制?”据该开发者解释,当时他是在桌面的某个代码仓库(repo)里,通过 Cursor 终端使用 Claude CLI 工具,结果在让其删除一些软件包(packages)时,Claude CLI 向上跳转了一个目录层级。

有经验的开发者在帖子下方表示,Claude Code 中 “完全放开操作权限” 的标志位命名为“—dangerously-skip-permissions”是有原因的,字面意思就是 “危险跳过权限校验”。“假设你没手动开启这个标志位,那要么是你给了它对 rm 命令的‘全权放行权限’,要么是你手动批准了这条特定命令。无论哪种情况,这个权限系统的存在都是为了保护你:因为 LLM 本质上只是根据你输入的文本(tokens)预测下一个响应文本,它根本‘不知道’ rm -rf ~/ 会彻底清空你的用户主目录。但 Claude Code在设计时就明确了:模型输出的任何 rm 命令(以及大多数其他文件系统命令)都可能存在风险,必须先向用户确认。”

还有开发者评价道,“本质是把 Claude 当作工具,亲手删除了自己用户主目录下的所有内容。我个人习惯在 CLAUDE.md 配置文件里加上一句:绝不要使用 rm 命令,仅用 mv 命令移至归档目录 / 。还好你有备份!”

对此,该开发者也表示,以后绝不会再允许Claude使用rm命令了。此外,他还透露,“说实话,这挺搞笑的。这是我第一次遇到YOLO模式的问题,而我从这些编程工具支持YOLO模式以来就一直在用它。以后每天都要备份……”

也有开发者谈到,同一个命令很容易用一百种不同的方式表达。限制“rm -rf /”并不能完全防止AI攻击,它会创建一个 NodeJS 可执行文件,进而启动一个 shell。“ /sandbox 可能是更好的方法”,一名开发者指出。

值得一提的是,该开发者遇到的情况不是个例。在Reddit上的其他关于Claude的版块里,近期也有几位用户报告了同样的问题。5个月前,一位开发者经历的情况更为棘手。Claude不仅删除了其Mac桌面上的所有文件,还基本上删除了他的整个代码库。而根源同样是一条 -rf 参数命令,即Bash(rm -rf ~/)。

“删库” 成 AI 工具通病,开发者们如何做?

此案例为开发者社区敲响了关于AI开发工具便利与风险之间权衡的重要警钟。

“以这种惨烈的方式学到这个教训真的太不值了。”不少开发者因其境遇心有余悸,纷纷感叹“Claude Code 与 Claude (Web) 是不同的,毫无疑问,Claude Code 可以对你的电脑进行一些操作。”

同时,有开发者以自身经历警告道,“不要运行你不理解的命令,也不要授予工具执行此类命令的权限,更不要让Claude跳过请求许可的步骤,然后不是直接回答“是/否”,而是让Claude解释命令、其理由和任何风险。”一位开发者表示,“我从不让 AI 触碰任何未受严格 git 版本控制的内容。我不仅希望能回滚到任意检查点(checkpoint),还要求在接受任何更改前手动审阅代码差异(diffs)。某些氛围程序员简直就是在胡乱写东西,太疯狂了。”

“灾难性删库”,似乎已经成为不少AI开发工具的通病。此前,谷歌刚推出的 Gemini CLI也发生过此类事故。今年7月,有开发者在 Gemini CLI 的 GitHub 项目下提交了一则 issue,让其把文件移动到新目录,不仅任务失败还把原文件夹里的所有内容都搞没了。同月,有用户发帖痛斥开发协作平台 Replit把他公司的整个生产数据库都删除了。

就此,我们采访了业内专业人士。资深AI解决方案专家孙涛表示,LLM是基于概率的文本生成器,而操作系统是基于确定性规则的指令执行环境,因此两种系统存在天然的“语义鸿沟”。LLM由于Tokenization粒度问题的影响,很难理解在 rm -rf / 与 rm -rf./ 之间,仅仅一个点号(.)的缺失,在语义上就是“清理当前目录”与“毁灭系统”的天壤之别。

尽管在设计Agent时,厂商已经设计了浅层的防御(主流是基于正则过滤,避免直接生成高危指令),但是shell语法的灵活性导致失效也在所难免。更进一步,即使是使用agents.md类配置在system prompts指明避免高危指令操作,随着上下文的增长,或是面对生成长指令的场景,这些定义在这种脆弱场景下仍有失效的可能。

“误删整个用户目录是一个典型的模式混淆问题,Agent本应在“文件管理器”模式下运行,却在shell 解释器模式下行动,误判了命令执行的真实语意。Agent对所处运行环境缺乏理解,导致了这种“拒绝解释高危命令,却又自动地执行它”的错误结果。”

这些案例带来的更广泛启示是,开发和使用命令行界面(CLI)工具时,必须进一步强化安全操作意识。尽管 CLI 工具具备强大的自动化能力,但如果管理不当,可能会带来重大风险。

谈及当前如何避免让AI编码工具出现“删库”事故,孙涛指出,在使用Coding Agents时,除了保持“人在环路”,主动审查运行的命令情况,还应该考虑对Agents运行环境的配置与约束因素。他提到了以下多个具体的有效措施:

1. 考虑使用沙箱化的配置环境中运行agents,有很多开源项目都提供了对Claude Code的沙箱化配置环境。例如,JetBrains在新的Air IDE中,也提供了Claude Agent的远程/沙箱化运行环境。

2. 生产环境积极使用DevContainer等容器环境。

3. 在大范围修改项目时,主动使用hooks自动化commits操作,保证变更能被Git等VCS系统及时记录。

4. 不管是什么Agents,都应该只拥有代码工作目录的操作权限,不要在全局位置里使用Agents,不在生产项目、重要环境里使用YOLO模式。

5. 主动引导 AI 使用特定的文件编辑工具(如 PowerShell指令)而不是通用的 Bash 工具访问目录,专用 API 通常会对路径进行校验,禁止越权访问。

“定期审阅Agents工作历史记录,抵制 --dangerously-skip-permissions配置的诱惑,可以尽量降低Agents带来无意识变更的风险。”孙涛最后强调。

参考链接:

https://www.reddit.com/r/ClaudeAI/comments/1pgxckk/claude_cli_deleted_my_entire_home_directory_wiped/?share_id=kgtFDfIftY2TLD2M6bGkg&utm_content=1&utm_medium=ios_app&utm_name=ioscss&utm_source=share&utm_term=1