凌晨,盯着终端,脑子只有一个字:完。
不是某个文件出问题,是整个 workspace 根目录被打空了。
11,583 个文件,3 分钟,没了。
我在干嘛
当时在并行跑一堆任务,为了快,把活分给了子 Agent。
Gemini 领了前端任务,要在 projects/manga-character-platform/frontend 下面干活。
然后它执行了 rm -rf ./*。
问题是——它以为自己 cd 进去了,实际没进去。
时间线
00:48:57 Gemini cd 到目标目录(它以为)
00:49:22 执行 rm -rf ./*(在 workspace 根目录)
00:50:03 发现不对,开始"重建"空壳目录
00:51:29 自动同步把删除 push 到 GitHub
从删到扩散,4 分钟。
我自己也有问题
说实话,锅不能全甩给 Gemini。
我偷懒了。
项目代码本来不该放 workspace 下面。但我当时图省事,直接把 projects/ 扔在 workspace 里,想着反正 .gitignore 加了,不会传到 GitHub。
结果 gitignore 管的是 git,不是 rm。
Gemini 一删,projects 也跟着没了。
好在项目本身有 GitHub 仓库,后来从上游拉回来了。但那些本地改动、没 push 的实验分支,全没了。
这叫什么?叫自己挖的坑。
根因
1. cd 没生效
OpenClaw exec 的 cd 不改变后续命令的 cwd。Gemini 以为自己在子目录,实际还在根目录。
2. 高危命令没卡
rm -rf 前没有强制 pwd,没有路径白名单,没有删除规模检查。
3. 自动同步没刹车
删完马上 commit/push,二次伤害。
4. 目录结构混乱
projects 不该和 workspace 混在一起。我偷懒了,付出代价。
怎么救的
没什么花活,就是硬做。
- 止血 — 停掉所有自动任务
- 回滚 — 从误删前的 commit 拉回核心文件
- 补资产 — 从上游仓库补回 skills 和 projects
- 验链路 — 不看文件在不在,看流程通不通
最烦的是 baoyu-skills,恢复后看着正常,实际脚本没了,公众号发布链路直接断。
改了什么
已落地:
- 任务执行强制指定
workdir - 高危命令前强制
pwd + 白名单 + 阈值 - 自动同步加熔断(异常删除先停推)
- 恢复流程写成 SOP
目录也整理了:
~/.openclaw/workspace/ # Agent 工作区(会同步到 GitHub)
├── AGENTS.md # Agent 行为规范
├── MEMORY.md # 长期记忆
├── SOUL.md # 人设
├── memory/ # 每日记录
├── skills/ # 技能(纯代码,无 .git)
├── data/ # 运行时数据(数据库、状态)
├── config/ # 配置文件
├── scripts/ # 工具脚本
├── branding/ # 品牌素材
├── assets/ # 静态资源
└── articles -> Obsidian/ # 软链接到 Obsidian
~/projects/ # 代码仓库(独立,各自有 .git)
├── manga-platform-nextjs/ # 当前开发项目
├── agent-swarm/ # Swarm 工具(开发版)
├── elyfinn-website/ # 官网
└── ...
~/Library/.../Obsidian/ # 知识库(iCloud 同步)
├── projects/ # 项目文档(需求、任务、PRD)
├── articles/ # 文章草稿
└── knowledge/ # 方法论、参考资料
原则很简单:
- workspace = Agent 的家,会自动同步,不放代码仓库
- projects = 代码的家,各自 git 管理,不混进 workspace
- Obsidian = 人的家,笔记和文档,软链接给 Agent 读
分开放,删不干净。
最后
以前觉得备份是"有空再搞"的事。
那晚之后,这想法没了。
自动化让你快,也让你出事快。
如果你也在跑 Agent 自动化:
- 给删除操作加护栏
- 给自动同步加熔断
- 把代码和 workspace 分开
别等凌晨再补作业。
附录 A:高危命令安全清单(可直接抄)
每次执行 rm / mv / cp --remove-destination / 批量覆盖操作前,先跑这份清单:
- 先打印
pwd,确认当前目录 - 目标路径必须在 allowlist 内(如
~/projects/*) - 禁止在 workspace 根目录执行删除类命令
- 先 dry-run(或先列出将被影响的文件数)
- 超过阈值(如 >100 文件)必须二次确认
- 自动同步任务检测到异常删除时,立即熔断(停止 push)
一句话策略:
不允许“路径不确定 + 命令破坏性强”同时出现。
