Agent工坊

【Agent工坊】Hermes Agent Checkpoints 实战:给 AI Agent 装上「撤销键」

一次 rm -rf 误删整个项目目录、一个 sed 正则把配置文件改崩、一段 AI 写的 patch 把核心逻辑改烂——这些不是假设,是每个 AI Agent 日常运行中的真实风险。Hermes Agent v0.16 的 Checkpoints 系统就是为这种场景而生的:在每次破坏性操作前自动快照,一键回滚。

1

Checkpoints自动快照流程:破坏性操作前自动Git快照,随时可回滚

引言:当 AI Agent 成为你的"第二双手"

过去半年,AI Agent 从"玩具"变成了"生产线"。我们用 Hermes Agent 写代码、改配置、部署服务、维护数据库。一个每天跑18小时的生产级 Agent,一周可能要执行上千次 write_file、数百次 patch、几十次 rmmv

问题在于:Agent 不是你。它不理解某个文件是你的"核心资产",它不知道那个 2000 行的配置文件里藏着一周前的补丁逻辑。它看到一个需要修改的地方,就动手了。

Checkpoints 就是为这个场景设计的——它不是备份,不是版本控制,而是一个轻量级的、自动化的"操作前快照"。像游戏里的存档点:打 Boss 前存一下,打不过就回档重来。

Checkpoints 是什么

Hermes Agent 的 Checkpoints 系统做三件事:

  1. 自动触发:在每次破坏性操作之前(write_filepatchrmmvsed -i 等),自动对当前工作目录做一次 Git 快照
  2. 独立存储:快照保存在 ~/.hermes/checkpoints/store/ 下的一个独立 Git 仓库里,不污染你项目的 .git 目录
  3. 随时回滚:通过会话内的 /rollback 命令或 CLI 的 hermes checkpoints 命令,查看、对比、恢复任何快照

关键设计原则:一个目录每回合只拍一次快照。长时间运行的会话不会因为连续 100 次 write_file 而生成 100 个快照。

5 分钟上手指南

第一步:启用 Checkpoints

Checkpoints 是选择性加入(opt-in)的功能,默认关闭。启用方式有两种:

方式一:会话级启用(推荐先试)

hermes chat --checkpoints

方式二:全局启用 编辑 ~/.hermes/config.yaml

checkpoints:

  enabled: true

启用后,Agent 会在每次破坏性操作前自动创建快照。你什么都不用管,它默默在后台干活。

第二步:让 Agent 干点活

启动一个带 checkpoints 的会话后,让 Agent 做一些文件操作:

你:帮我把 config.py 里的 DEBUG=False 改成 DEBUG=True,再把 app/utils.py 里的日志级别从 WARNING 改成 INFO

Agent 会依次调用 patch 修改 config.py,再调用 patch 修改 app/utils.py。每次操作前,Checkpoints 系统都会自动快照。

第三步:查看快照历史

在会话中输入:

/rollback

你会看到类似这样的输出:

📸 Checkpoints for /home/user/my-project:

 1. 4270a8c 2026-06-14 10:23 before patch (config.py, 1 file, +1/-1)

 2. eaf4c1f 2026-06-14 10:22 before write_file (app/utils.py)

 3. b3f9d2e 2026-06-14 10:21 before terminal: sed -i s/old/new/ config.json

 /rollback <N> restore to checkpoint N

 /rollback diff <N> preview changes since checkpoint N

 /rollback <N> <file> restore a single file from checkpoint N

第四步:回滚

假设 Agent 改完 config.py 后你把服务跑崩了,想回到修改前的状态:

/rollback diff 1 # 先看看改了什么

/rollback 1 # 确认无误,回滚到快照 1

一步回到操作前的状态。不仅如此,/rollback 还会同时撤销最近一个对话回合,让你的会话上下文也与文件状态保持一致。

哪些操作会触发 Checkpoint

以下是完整的触发操作列表(来自 Hermes Agent 源码):

操作触发场景举例
write_fileAgent 生成新文件或覆写已有文件
patchAgent 做定向查找替换
terminal: rm / rmdirAgent 删除文件或目录
terminal: cp / installAgent 复制或安装文件
terminal: mvAgent 移动/重命名文件
terminal: sed -iAgent 做流编辑
terminal: truncateAgent 截断文件
terminal: ddAgent 做底层磁盘操作
terminal: shredAgent 安全删除文件
terminal: > (shell 重定向)Agent 用重定向覆写文件
git reset / clean / checkoutAgent 操作 Git 工作区

这些操作有个共同特征:执行后无法通过简单的 Ctrl+Z 恢复。Checkpoints 就是为这些"不可逆"操作买保险。

深入配置:调优你的快照策略

默认配置适合大多数场景,但生产环境需要更精细的控制。以下是完整配置项:

checkpoints:

  enabled: true # 主开关(默认 false)

  max_snapshots: 20 # 每个项目最多保留的快照数

                             # 超过后自动清理最旧的

  max_total_size_mb: 500 # 全局存储上限

                             # 超过后删除最旧的 commits

  max_file_size_mb: 10 # 单文件超过此值则跳过

                             # 防止大文件撑爆快照仓库

  # 自动维护(推荐保留默认值)

  auto_prune: true # 启动时自动清理

  retention_days: 7 # 快照保留天数

  delete_orphans: true # 删除已不存在项目的快照

  min_interval_hours: 24 # 自动清理间隔(至少24小时一次)

2

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_pruneretention_days 自动清理是默认开启的。每次 Hermes Agent 启动时,它会扫描快照仓库,删除超过 7 天的快照和已不存在项目目录的孤儿快照。这个机制确保你的磁盘不会悄悄被快照撑满。

如何关闭自动清理

如果你需要长期保留快照(例如做审计追踪),可以关闭自动清理:

checkpoints:

  enabled: true

  auto_prune: false # 关闭自动清理

然后定期手动运行清理:

hermes checkpoints prune # 手动清理

hermes checkpoints clear # 清空全部快照(会先确认)

进阶用法:命令行快照管理

除了会话内的 /rollback,你还可以在终端直接管理快照:

# 查看总体状态

$ hermes checkpoints

Checkpoint base: /home/user/.hermes/checkpoints

Total size: 142.3 MB

  store/ 138.1 MB

  legacy-* 4.2 MB

Projects: 12

 WORKDIR COMMITS LAST TOUCH STATE

 /home/user/code/hermes-agent 20 2h ago live

 /home/user/code/experiments 8 1d ago live

 /home/user/code/old-project 3 15d ago orphan

关键命令速查

命令用途
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 中配置:

approvals:

  mode: smart # smart | manual | off

  timeout: 60 # 审批超时(秒)

smart 模式下,Hermes Agent 会评估每个命令的风险等级。高风险操作(如 rm -rf、写入 ~/.ssh/)会被拦截并要求人工确认——Agent 不能绕过你执行这些操作。这是第一道防线。

防线二:Checkpoints(操作后回滚)

即使一个操作通过了审批门禁,执行后也可能发现结果不如预期。Checkpoints 就是这道"后悔药"——操作前的快照让你可以随时回滚。门禁防的是"不该做的操作",Checkpoints 救的是"做了但后悔的操作"。

防线叠防实战示例

场景:Agent 要修改你的 SSH 配置

1. Agent 调用 patch 修改 ~/.ssh/config

   → 审批系统检测到路径包含 ~/.ssh → 弹出确认请求

   → 你点"确认"

2. 操作执行前,Checkpoints 自动快照

3. 操作执行后,你发现 SSH 连不上了

   → /rollback(查看快照列表)

   → /rollback 1(回滚到修改前的状态)

   → SSH 恢复正常

两道防线各司其职:审批门禁拦截明显的危险,Checkpoints 兜底不可预见的后果。

生产环境最佳实践

实践 1:按项目粒度启用

不要全局启用 Checkpoints,而是在需要安全网的特定项目上使用会话级启用:

# 只在操作核心代码库时启用

hermes chat --checkpoints --workdir ~/production/critical-service

这样做的好处:① 避免在不需要的项目上浪费存储;② 你的快照列表不会混入无关项目。

3

/rollback命令实战:列出快照、回滚到指定版本、预览差异

实践 2:定期清理

在你的 Cron 任务中加入每周清理:

# 每周日凌晨 3 点清理快照

0 3 * * 0 hermes checkpoints prune

实践 3:监控存储增长

把快照库大小纳入你的监控体系:

du -sh ~/.hermes/checkpoints/store/ 2>/dev/null

如果超过 300MB,手动 prune 或调整 max_total_size_mbretention_days

实践 4:与 Git 分支配合

Checkpoints 是对 Git 的补充,不是替代。推荐的工作流:

  1. Agent 开工前:git checkout -b feature/agent-experiment
  2. Agent 操作中:Checkpoints 自动快照
  3. 如果结果满意:git commit 保存到真正的版本历史
  4. 如果不满意:/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 的安全感。

三个关键点带走:

  1. 开即用hermes chat --checkpoints,一行命令启用
  2. 零侵入:不污染项目 Git 历史,不改变工作流
  3. 可调配max_snapshotsretention_daysauto_prune 等参数让你精确控制存储成本

下次 Agent 帮你改代码的时候,记得先开 Checkpoints。这不是"不信任 AI",而是对自己负责


#AI创业 #HermesAgent #Agent工坊 #Checkpoints #生产环境 #一人公司

本文由AI辅助创作,经人工审核编辑发布