一次
rm -rf误删整个项目目录、一个sed正则把配置文件改崩、一段 AI 写的patch把核心逻辑改烂——这些不是假设,是每个 AI Agent 日常运行中的真实风险。Hermes Agent v0.16 的 Checkpoints 系统就是为这种场景而生的:在每次破坏性操作前自动快照,一键回滚。
Checkpoints自动快照流程:破坏性操作前自动Git快照,随时可回滚
引言:当 AI Agent 成为你的"第二双手"
过去半年,AI Agent 从"玩具"变成了"生产线"。我们用 Hermes Agent 写代码、改配置、部署服务、维护数据库。一个每天跑18小时的生产级 Agent,一周可能要执行上千次 write_file、数百次 patch、几十次 rm 和 mv。
问题在于:Agent 不是你。它不理解某个文件是你的"核心资产",它不知道那个 2000 行的配置文件里藏着一周前的补丁逻辑。它看到一个需要修改的地方,就动手了。
Checkpoints 就是为这个场景设计的——它不是备份,不是版本控制,而是一个轻量级的、自动化的"操作前快照"。像游戏里的存档点:打 Boss 前存一下,打不过就回档重来。
Checkpoints 是什么
Hermes Agent 的 Checkpoints 系统做三件事:
- 自动触发:在每次破坏性操作之前(
write_file、patch、rm、mv、sed -i等),自动对当前工作目录做一次 Git 快照 - 独立存储:快照保存在
~/.hermes/checkpoints/store/下的一个独立 Git 仓库里,不污染你项目的.git目录 - 随时回滚:通过会话内的
/rollback命令或 CLI 的hermes checkpoints命令,查看、对比、恢复任何快照
关键设计原则:一个目录每回合只拍一次快照。长时间运行的会话不会因为连续 100 次 write_file 而生成 100 个快照。
5 分钟上手指南
第一步:启用 Checkpoints
Checkpoints 是选择性加入(opt-in)的功能,默认关闭。启用方式有两种:
方式一:会话级启用(推荐先试)
方式二:全局启用
编辑 ~/.hermes/config.yaml:
启用后,Agent 会在每次破坏性操作前自动创建快照。你什么都不用管,它默默在后台干活。
第二步:让 Agent 干点活
启动一个带 checkpoints 的会话后,让 Agent 做一些文件操作:
Agent 会依次调用 patch 修改 config.py,再调用 patch 修改 app/utils.py。每次操作前,Checkpoints 系统都会自动快照。
第三步:查看快照历史
在会话中输入:
你会看到类似这样的输出:
第四步:回滚
假设 Agent 改完 config.py 后你把服务跑崩了,想回到修改前的状态:
一步回到操作前的状态。不仅如此,/rollback 还会同时撤销最近一个对话回合,让你的会话上下文也与文件状态保持一致。
哪些操作会触发 Checkpoint
以下是完整的触发操作列表(来自 Hermes Agent 源码):
| 操作 | 触发场景举例 |
|---|---|
write_file | Agent 生成新文件或覆写已有文件 |
patch | Agent 做定向查找替换 |
terminal: rm / rmdir | Agent 删除文件或目录 |
terminal: cp / install | Agent 复制或安装文件 |
terminal: mv | Agent 移动/重命名文件 |
terminal: sed -i | Agent 做流编辑 |
terminal: truncate | Agent 截断文件 |
terminal: dd | Agent 做底层磁盘操作 |
terminal: shred | Agent 安全删除文件 |
terminal: > (shell 重定向) | Agent 用重定向覆写文件 |
git reset / clean / checkout | Agent 操作 Git 工作区 |
这些操作有个共同特征:执行后无法通过简单的 Ctrl+Z 恢复。Checkpoints 就是为这些"不可逆"操作买保险。
深入配置:调优你的快照策略
默认配置适合大多数场景,但生产环境需要更精细的控制。以下是完整配置项:
Checkpoints四大核心配置参数:快照数上限、存储上限、保留天数、自动清理
各配置项详解
max_snapshots: 20
这是每个项目的快照上限。如果你的项目有 20 个目录,理论上最多可以有 400 个快照。当某个目录的快照超过 20 个,系统会自动删除最旧的,保留最近的 20 个。20 个快照意味着你可以回滚到几十次操作之前的状态——对于日常开发完全够用。
max_total_size_mb: 500
全局硬限制。因为底层用 Git 做内容寻址存储,相同内容自动去重,实际占用通常远小于文件总和。500MB 可以轻松容纳数十个项目的快照历史。如果你发现存储增长太快,先检查是否有大文件被反复修改。
max_file_size_mb: 10
单个文件超过 10MB 会被跳过。这不是 Bug——对大文件做 Git 快照成本很高,而且 10MB 以上的文件通常是二进制资源(模型权重、数据库文件、压缩包),不适合 Git 追踪。如果你频繁修改这类文件,建议用其他备份方案。
auto_prune 与 retention_days
自动清理是默认开启的。每次 Hermes Agent 启动时,它会扫描快照仓库,删除超过 7 天的快照和已不存在项目目录的孤儿快照。这个机制确保你的磁盘不会悄悄被快照撑满。
如何关闭自动清理
如果你需要长期保留快照(例如做审计追踪),可以关闭自动清理:
然后定期手动运行清理:
进阶用法:命令行快照管理
除了会话内的 /rollback,你还可以在终端直接管理快照:
关键命令速查:
| 命令 | 用途 |
|---|---|
hermes checkpoints | 查看快照库总览 |
hermes checkpoints status | 同上 |
hermes checkpoints prune | 手动清理(删除孤儿、过期快照、执行 GC) |
hermes checkpoints clear | 清空全部快照(交互式确认) |
hermes checkpoints clear-legacy | 删除旧版 v1 迁移留下的遗留档案 |
hermes checkpoints prune 是最常用的维护命令——定期跑一下,确保存储不会无声膨胀。
与审批系统配合:双重保险
Checkpoints 只是 Hermes Agent 安全架构的一环。把它和审批系统(Approval System)结合起来,你就有了两道防线:
防线一:审批门禁(操作前拦截)
在 ~/.hermes/config.yaml 中配置:
在 smart 模式下,Hermes Agent 会评估每个命令的风险等级。高风险操作(如 rm -rf、写入 ~/.ssh/)会被拦截并要求人工确认——Agent 不能绕过你执行这些操作。这是第一道防线。
防线二:Checkpoints(操作后回滚)
即使一个操作通过了审批门禁,执行后也可能发现结果不如预期。Checkpoints 就是这道"后悔药"——操作前的快照让你可以随时回滚。门禁防的是"不该做的操作",Checkpoints 救的是"做了但后悔的操作"。
防线叠防实战示例
两道防线各司其职:审批门禁拦截明显的危险,Checkpoints 兜底不可预见的后果。
生产环境最佳实践
实践 1:按项目粒度启用
不要全局启用 Checkpoints,而是在需要安全网的特定项目上使用会话级启用:
这样做的好处:① 避免在不需要的项目上浪费存储;② 你的快照列表不会混入无关项目。
/rollback命令实战:列出快照、回滚到指定版本、预览差异
实践 2:定期清理
在你的 Cron 任务中加入每周清理:
实践 3:监控存储增长
把快照库大小纳入你的监控体系:
如果超过 300MB,手动 prune 或调整 max_total_size_mb 和 retention_days。
实践 4:与 Git 分支配合
Checkpoints 是对 Git 的补充,不是替代。推荐的工作流:
- Agent 开工前:
git checkout -b feature/agent-experiment - Agent 操作中:Checkpoints 自动快照
- 如果结果满意:
git commit保存到真正的版本历史 - 如果不满意:
/rollback回滚 +git checkout main丢弃实验分支
Checkpoints 管"粒度"——每次操作前的微快照;Git 管"叙事"——有意义的提交历史。两者互补。
常见问题
Q: Checkpoints 和 Git commits 有什么区别?
Checkpoints 是自动的、细粒度的、临时的。Git commit 是手动的、有意义的、永久的。Checkpoints 回答"我刚才改崩了什么",Git 回答"这个功能是什么时候加的"。两者不冲突——Checkpoints 的存储完全独立于你的项目 .git。
Q: 快照会占用多少磁盘空间?
一个典型的快照通常只有几 KB 到几十 KB(因为只存差异)。一个活跃项目运行一周,20 个快照总量通常在 5-50MB 之间。加上 Git 的内容去重机制,全局存储比"文件大小 × 快照数"小得多。
Q: 快照包含 `.env` 等敏感文件吗?
包含。但 Checkpoints 存储在 ~/.hermes/checkpoints/ 下,这个目录在你的用户空间中,权限是 0700。如果你担心敏感信息泄露,可以在 max_file_size_mb 或项目根目录的 .gitignore 中排除特定文件。
Q: `/rollback` 和 `/undo` 有什么区别?
/rollback 回滚文件状态到之前某个快照。/undo(v0.16 新增)回滚对话回合——撤销 Agent 最后 N 个对话回合的操作。/undo 更轻量,适合"刚说错话了,退回一步重来"的场景;/rollback 更彻底,适合"改了一堆文件后发现方向错了"的场景。
Q: 多人共用同一台机器会有冲突吗?
不会。每个用户的 Checkpoints 存储在自己的 ~/.hermes/checkpoints/ 下。不同用户之间完全隔离。如果多个 Agent 会话同时操作同一个项目目录,Checkpoints 会正常工作——Git 的内容寻址存储天然支持并发写入。
总结
Hermes Agent 的 Checkpoints 系统解决了一个核心矛盾:我们信任 AI Agent 的能力,但不信任它的每一次判断。通过"操作前自动快照 + 一键回滚",你获得了在生产环境中大胆使用 Agent 的安全感。
三个关键点带走:
- 开即用:
hermes chat --checkpoints,一行命令启用 - 零侵入:不污染项目 Git 历史,不改变工作流
- 可调配:
max_snapshots、retention_days、auto_prune等参数让你精确控制存储成本
下次 Agent 帮你改代码的时候,记得先开 Checkpoints。这不是"不信任 AI",而是对自己负责。
#AI创业 #HermesAgent #Agent工坊 #Checkpoints #生产环境 #一人公司
本文由AI辅助创作,经人工审核编辑发布
