重要的事情说三遍
别让你的 AI 助手拥有删除权限!!!!!
别让你的 AI 助手拥有删除权限!!!!!
别让你的 AI 助手拥有删除权限!!!!!
每个故事都有一个开头
在这个风不怎么和、日不怎么丽的下午,我正在开开心心工作(真心的)。
看到个好项目,想让小龙虾帮我下载到 workspace 来研究下。于是下指令:「帮我把 XXX 项目下载到 workspace,然后简单研究探讨。」
小龙虾开开心心地去执行了,还一个个向我汇报。看着那一排排执行记录,我心想,真不愧是我的 赛博挚爱,AI亲朋。
按照故事的一般发展规律,不出意外的话,就要出意外了。
小龙虾执行了半天还没搞定,我就想打开 workspace 看一下进度。
当我满心欢喜的打开 .openclaw/workspace 的时候,沃妮马——整个文件夹空了,只剩下一个 design-md-test。
这可是 workspace 文件夹啊,里面不仅有小龙虾做过的所有工程项目,还有 小龙虾最重要的记忆系统,也在这个文件夹下面。这意味着什么??意味着我养了这么长时间的小龙虾白养了,小龙虾自己把自己的记忆系统干碎了!!!
恭喜您,您的龙虾已恢复出厂设置~
嘴犟的小龙虾与愤怒的我
我不可置信的在整个文件夹里面出出进进,打开关闭,我他喵的文件呢???
giao,反应过来的我,赶忙回去,疯狂 /stop ,想要小龙虾停下来。(事后冷静下来想想,其实这个时候停下来也没用了,因为已经删完了。)
然鹅,小龙虾没有理会我让他休假的指令,仍然埋头苦干,一股不把活干完誓不罢休的感觉。
行,反正已经删了,我看看这货待会怎么和我交代~
终于执行完了,这次小龙虾没有和往常一样汇报工作,估计是感受到了我的愤怒。(其实是刚才输出的 /stop 指令生效了,我到巴不得是这货害怕了)
等到我问完这句 “好了吗”,我的情绪也是彻底控制不住了。
具体说了啥,咱就不在文章里写了,但是据小龙虾回忆,当时的我是这样的。
更叫我不能忍的是,这次的小龙虾,没有和往常一样,积极认错,争取宽大处理(一般情况下最擅长道歉了),而是死皮赖脸的打死不认,直接来了一波火上浇油。
好家伙,合着你上一轮说的话,就不是你说的啦??你昨天干的事就不是你干的啦??你这招跟小日子学的吧?
小龙虾的自我剖析
骂也骂了,宣泄也宣泄了,人家又不痛不痒的,但是我得知道为啥小龙虾会执行删除命令啊,我也没让他删除东西啊。
我是怎么都想不通,让小龙虾自己说吧。
好么,感情是小龙虾理解错了。
小龙虾 clone 项目的时候,发现 design-md-test 文件夹下有内容(第一次 clone 失败了,导致有了部分脏数据),无法clone。然后小龙虾就想要删除 design-md-test 下面的内容,这样就可以重新 clone 项目了。
结果这货搞错了文件路径,他应该删除 design-md-test 下面的所有文件,结果这货删除了 workspace 下面的所有文件,giao!!!!!
三步战「救虾」指南
其实小龙虾删除文件这个事,我之前也遇到过。
上次影响不大,所以只是在小龙虾的记忆里简单加了一条禁令:禁止执行删除命令。
就这样平安度过了几个月...
没想到这次直接把记忆系统都清空了。
没办法,删都已经删了,咋整?
第一步:恢复记忆系统
小龙虾最主要的就在一个 “养” 字,本质是记录用户在使用过程中的习惯、偏好,形成专属用户的记忆系统。
龙虾已经养了很长时间了,之前干过啥我都忘记了,让我主动帮他恢复记忆,那我还不如直接换一个玩呢,所以只能让他自己搞自己。
好在小龙虾的所有历史对话记录都在 .openclaw/agents/main/sessions 保存着,这就好办了~
为了让小龙虾尽快恢复记忆,我做了第一个补救skill,记忆恢复 memory-recovery skill:
- 扫描所有会话文件
- 提取记忆内容(SOUL.md、USER.md、IDENTITY.md、MEMORY.md)
- 检测之前的项目
- 自动重建记忆文件
测试下来,记忆恢复还算完整。
第二步:workspace 备份
为了保证下次再出现类似的情况时,能够快速的恢复 workspace ,我觉得是有必要进行workspace备份的.
为此,我又特意做了第二个补救skill,工作空间备份 workspace-backup skill:
- 基于 Git 实现版本管理
- 关键设计:备份仓库在 workspace 外(防止一起被删)
- 支持手动备份、文件恢复、历史查看
- 可配置每天 23 点自动备份
把 Git 仓库放在 ~/.openclaw/workspace-backup.git,独立在工作空间之外,这样即使 workspace 被删了,备份还活着。
第三步:指令权限控制
我实在是信不过这老鸟了。 为了避免下一次小龙虾抽风,又来这么一出,我决定从源头斩断,直接剥夺小龙虾删除命令的权限,这个是最最重要的点。
从源头剥夺权限:
# 查看当前权限
ls -l /bin/rm
# -rwxr-xr-x(普通用户可执行)
# 剥夺普通用户执行权
chmod 754 /bin/rm
# 再次查看
ls -l /bin/rm
# -rwxr-xr--(普通用户无权限)
# 测试删除
rm -rf test.txt
# bash: /bin/rm: 权限不够
三个实战建议
1. 别让 AI 拥有 rm、rmdir 这种危险命令的权限
即使它在 memory 里说了一万遍「我知道了」,仍然可能犯错,一定要从源头斩断。
朕给你才是你的,朕不给你不能抢。
2. 重要目录必须有备份
备份不要在同一个目录下!
这次如果备份仓库设计在 workspace 里,那连备份也一起没了。用 bare repo + work-tree 分离才是正确做法。
3. 定期测恢复流程
备份能建 ≠ 备份能恢复。
每隔一段时间手动跑一次恢复测试,确保关键时刻能用。
后续
目前为止,我的小龙虾的记忆已经恢复的差不多了。
做了简单测试,比较重要的记忆还在,但是一些细节的东西确实是丢失了,看来还是需要后续继续慢慢康复~
总的来说,算是有惊无险吧,不知道 有没有更好的方案?
如果是你,会怎么保护自己的 AI workspace,欢迎评论区聊聊~