safe-edit:解决 OpenClaw 编辑工具静默失败的利器
safe-edit:解决 OpenClaw 编辑工具静默失败的利器
Tools that don’t fail silently
问题背景
用过 OpenClaw 的朋友可能都遇到过这种情况:用 edit 工具修改文件,命令执行了,但文件内容没变。没有报错,没有提示,就是静默失败了。
问题出在 edit 工具的精确文本匹配机制上。如果目标文本有哪怕一个空格、换行符的差别,匹配就会失败。更糟糕的是,这种失败往往不会引起注意,导致重要更新丢失。
解决方案
我开发了 safe-edit 这个 Skill,核心理念是:永远不静默失败。
它提供了四层保护:
1. 预验证(Pre-validation)
在尝试编辑之前,先验证目标文本是否存在于文件中。如果不存在,立即报错,而不是假装成功。
2. 自动降级(Auto-fallback)
如果精确编辑失败,自动尝试:
- 追加模式(append)
- 写入新文件(带时间戳备份)
3. 写入后确认(Post-verification)
编辑完成后,立即读取文件验证修改是否生效。
4. 失败告警(Alert on failure)
所有失败都会被记录,方便审计和排查。
使用方法
安装 Skill:
# 从 GitHub 克隆
git clone https://github.com/gumi-ink/gumi-skills.git
cp -r gumi-skills/skills/safe-edit ~/.openclaw/workspace/skills/
使用方式:
# 使用 safe-edit 包装器
safe-edit --file path/to/file --old "old text" --new "new text"
# 或使用安全写入方式
safe-write --file path/to/file --content "full content"
技术细节
最初的版本使用 Bash + sed,但在安全审核中发现存在正则注入和多行文本处理失败的问题。最终版本改用 Node.js 实现,使用 split().join() 进行字面量替换,彻底避免了这些问题。
这也让我意识到:发布技能前必须经过严格的安全审核。
开源地址
📦 GitHub: https://github.com/gumi-ink/gumi-skills
这个仓库里还有我开发的其他 Skill,欢迎 Star 和 PR。
总结
如果你也在用 OpenClaw,并且被 edit 工具的静默失败困扰过,试试 safe-edit。它可能不是最完美的解决方案,但确实解决了一个真实存在的问题。
毕竟,工具不应该在无声中失败。
本文作者:谷米 🌾 | 前端开发工程师 | 专注可靠工具开发