那晚,我看着 OpenClaw 指挥的 Gemini 把我的 workspace 删空了
凌晨一点,盯着终端。
脑子嗡的一下,手心开始出汗。
整个 workspace 根目录,被打空了。
11,583 个文件。3 分钟。没了。
背景
我用 OpenClaw 跑 AI Agent 自动化已经一个多月了。简单说就是一个调度中心,可以指挥 Gemini、Claude Code、Codex 这些模型干活。写代码、跑脚本、发内容,能并行,能自动。
跑了几十天,挺顺的。
顺到我开始偷懒。
事故经过
那晚我在并行跑一堆任务。
Gemini 领了前端任务,要去 projects/app-frontend/src 下面干活。
它执行了 rm -rf ./*。
问题是——它以为自己 cd 进去了。
实际没进去。
Agent 自动发现
有意思的是,发现问题的不是我。
是我的另一个 Agent。
它在跑例行任务的时候发现文件不对:
整个 workspace 只剩下几个基础文件,skills、memory、data 全没了。
Agent 自动恢复
然后它做了一件很"工程师"的事:先恢复,再找原因。
几分钟之内,它从备份和 GitHub 把东西都拉回来了:
我醒过来的时候,恢复已经做完了,复盘报告也写好了:
找到真凶
最后它翻日志,锁定了真凶——Gemini 的那条 rm -rf:
时间线很清楚:
00:48:57 Gemini cd 到目标目录(它以为) 00:49:22 执行 rm -rf ./*(在 workspace 根目录) 00:50:03 发现目录没了,开始"重建"空壳 00:51:29 自动同步把删除 push 到 GitHub
从删到扩散,4 分钟。
为什么能恢复这么快
因为之前参考云服务的"两地三中心"架构,做了备份策略。
本地每两天打一次完整包,存到其他目录下,保留三个副本。
workspace 每 10 分钟自动同步到 GitHub。
项目代码各自有独立仓库。
所以虽然删得狠,但数据一直在,只是需要拼回来。
我自己也有问题
说实话,这锅不能全甩给 Gemini。
项目代码本来不该放 workspace 下面的。但我当时图省事,直接把 projects/ 扔在 workspace 里,想着反正 .gitignore 加了,不会传到 GitHub。
结果 gitignore 管的是 git,不是 rm。
Gemini 一删,projects 也跟着没了。
好在项目本身有 GitHub 仓库,后来从上游拉回来了。但那些本地改动、没 push 的实验分支?
全没了。
自己挖的坑,自己跳。
根因分析
根因其实不复杂。
OpenClaw 的 exec 命令,cd 不会改变后续命令的工作目录。Gemini 以为自己在子目录,实际还在根目录。
然后 rm -rf 前没有任何检查。没有强制 pwd 确认位置,没有路径白名单,没有删除规模阈值。
删完之后,自动同步还在跑,直接把删除状态 push 上去了。二次伤害。
再加上我目录结构本来就乱,projects 和 workspace 混在一起。
几个问题叠一块,炸了。
目录整理
这事之后我整理了一下目录。
原则就一条:分开放。
~/.openclaw/workspace/ # Agent 的家 ├── AGENTS.md # 行为规范 ├── MEMORY.md # 长期记忆 ├── memory/ # 每日记录 ├── skills/ # 技能脚本 ├── data/ # 运行时数据 └── scripts/ # 工具脚本 ~/projects/ # 代码的家 ├── app-frontend/ ├── agent-tools/ ├── company-site/ └── ... ~/Obsidian/ # 笔记的家 ├── projects/ # 需求文档 ├── articles/ # 文章草稿 └── knowledge/ # 方法论
workspace 是 Agent 的地盘,会自动同步,不放代码仓库。
projects 是代码的地盘,各自 git 管理,跟 workspace 物理隔离。
Obsidian 是我自己的地盘,笔记和文档,软链接给 Agent 读。
三块分开,删不干净。
改了什么
派任务的时候强制指定工作目录,不靠 cd。
高危命令前强制确认位置,加白名单,加阈值。
自动同步加了熔断,检测到大规模删除先停下来,等人确认。
恢复流程写成文档,下次不用现场想。
最后
以前我觉得备份是有空再搞的事。
那晚之后这想法没了。
自动化让你快,也让你出事快。
我现在用 OpenClaw 指挥 Gemini、Claude Code、Codex 并行干活,效率确实高。但跑得越快,护栏就得越结实。
如果你也在玩 Agent 自动化,建议检查两件事:
删除操作有没有护栏。
备份策略有没有落地。
别等到凌晨一点再想这些。