/rewind 很好,但它看不见 Bash——Claude Code checkpoint 的覆盖边界

Claude Code 内置的 checkpoint 值得所有赞誉:每一轮对话结束后自动给改过的文件拍快照,/rewind(连按两次 Esc)能把代码拖回任意时点。对”AI 改坏了我的文件”这种事故,它就是对的工具——快、零配置、原生内置。

但是,官方文档在描述 checkpointing 的同时也画出了它的边界。这条边界值得仔细读。

checkpoint 追踪什么、漏掉什么

按官方文档,自动捕获覆盖的是 Claude Code 内置文件工具(Write、Edit、NotebookEdit)产生的文件改动,每轮响应完成后拍一次,会话内有滚动上限。

边界之外的有:

  • Bash 改动的文件。 Agent 通过 shell 执行的命令——rm -rf、清理脚本、会重写文件的工具链、包管理器、数据库迁移——不走 Write/Edit,因此不被捕获。这不是边缘场景:几乎所有登上头条的 AI 删库事故走的都是 shell 命令,而不是编辑工具。2026 年 9 月那起”Claude Code 顺着 614 个 junction、103 秒删 48,218 个文件”的事故,走的正是 shell 清理,不是 Edit 工具失误。
  • 子代理(subagent)的改动。 子代理上下文里的文件改动同样在捕获路径之外。
  • 工作会话之外的一切。 checkpoint 是会话级、带滚动上限。机器上其他地方——用户目录、共享缓存、数据集、其他项目——从来就不在范围内。

这个盲区是结构性的,不是 bug

平台 checkpoint 只能拍平台看得见的改动。shell 命令在设计上就是不透明边界:平台看得见命令字符串,看不见(至少不能可靠地看见)它将碰什么。任何站在这个位置的工具都会撞同一堵墙——Cursor 的本地历史、Replit 的快照、各家 harness 的回滚都做了同样的取舍。这不是批评谁,这就是问题的形状。

分层的答案

“闯祸的工具无法完全撤销自己的破坏”——工程界的标准答案很古老:把撤销机制放在爆炸半径之外,放在 Agent 碰不到的那一层。

这就是卷级快照。VSS 卷影是存储层上的整卷时间点视图——文件删除(包括通过 Bash、通过 junction、对着项目外的文件发的)碰不到卷影存储。unlose(免费开源,Apache-2.0,Windows)做的就是这一层:识别 26+ 个 Agent,在它们开工时自动拍快照——记忆文件指令还能让 Agent 在危险 shell 操作之前主动请求快照——然后给你一条时间线,按文件或整卷拖回去,测试里逐字节验证。

两分钟的实际配置

  1. checkpoint 保持开启——会话内的编辑事故它最擅长。
  2. 加一层 Agent 碰不到的整盘快照(Windows 上:unlose;或者你喜欢折腾,手工 wbadmin/disk-shadow 纪律)。
  3. 如果你装了命令拦截器(DCG 之类)——也留着。纵深防御:拦得住的拦,拦不住的拍。

checkpoint 是安全带,卷级快照是安全气囊。两个都要——因为把车撞报废的事故,从来不是从你握着方向盘的那只手开始的。

unlose 是免费开源(Apache-2.0)的 Windows 快照工具:AI Agent 动手前自动拍卷级快照,出事后拖时间线找回。

下载 unlose 查看文档