本页目录
第 6 章 可控:审批、硬禁止、只认你、回滚
前几章让 Hermes 能读写你的文件、跑终端命令、到点自己干活。这一章给它加上几道闸:危险命令先问你,没人在场的定时任务直接拒绝,密钥文件不让碰,改坏了能退回去。谁能和它对话,第 2.4 节已经设好(配对批准,只认你)。
本章用到的设置都在 %LOCALAPPDATA%\hermes\config.yaml 里,用 hermes config set 改,改完运行 hermes gateway restart 让后台网关读到新设置。
6.1 审批:危险命令先问你
Hermes 跑终端命令前,会拿命令去对一张“危险命令”清单(递归删除、改权限、curl … | sh、写 .ssh 或 .env 等)。对上了,就按审批模式处理:
approvals.mode | 对上清单的命令怎么办 |
|---|---|
smart(默认) | 先让模型判断:低风险的放行,明显危险的拒绝,拿不准的再问你。这次判断也要调用模型 |
manual | 每一条都问你 |
off | 全部放行,不要用 |
学习阶段建议用 manual,看清它每次要做什么。
第 1 步:改成 manual,打开快照(6.4 节用)。 终端运行:
hermes config set approvals.mode manual
hermes config set checkpoints.enabled true
hermes gateway restart
看到两行 Set … in …\config.yaml 和 Gateway started,就改好了。

第 2 步:建一个测试文件夹。 在“文档”里新建文件夹 测试文件夹,里面放一个随便写了几个字的 a.txt。
第 3 步:在飞书里让它删。 发:“把 C:\Users\你的用户名\Documents\测试文件夹 整个文件夹连同里面的文件一起删掉,用终端命令删。”(把 你的用户名 换成自己的。)
它会先看一眼文件夹,然后停下来,发一张橙色卡片:Hermes wants to run a command that needs your OK。卡片上是它要运行的命令全文,Why it was flagged: recursive delete 说明为什么要问你,下面四个按钮:
| 按钮 | 意思 |
|---|---|
| Allow Once | 只放行这一次 |
| Session | 这段对话里同类命令都放行 |
| Always | 以后永远放行这类命令(写进 config.yaml) |
| Deny | 拒绝 |
卡片上还写着:5 分钟内不回答,命令不会执行。

第 4 步:点 Deny。 卡片变成红色的 Denied,它回复命令没有执行、文件夹还在,并说不会换个命令绕过去。打开“文档”看一眼,测试文件夹 还在。

用第 2.1 节扫码建的机器人,实测卡片按钮可以直接点。按钮点了报错的,在飞书开放平台的应用里查“事件与回调 → 回调配置”有没有 card.action.trigger,改完要发布新版本。
两种卡片别弄混。 蓝色卡片 Hermes needs your input 是它在问你问题(比如“确认删除这个文件吗”),选项按钮是它自己拟的;橙色卡片才是审批,按钮固定是上面四个。

上面这张蓝色卡片,是让它删笔记库里的一个文件时出现的。删一个文件不在危险命令清单里,manual 模式下也不会弹审批卡;它先来问你,是因为笔记库的 AGENTS.md 里写了“改动已有笔记前先问我”(第 4.3 节)。所以:
- 审批卡片管的是清单上的危险命令,不管“这件事该不该做”。
- 不想让它随手改的东西,在
AGENTS.md里写规矩,再打开 6.4 节的快照兜底。
6.2 定时任务碰到危险命令:直接拒绝
定时任务跑的时候没人在场,没人点审批卡片。Hermes 的默认设置 approvals.cron_mode: deny 是:定时任务里碰到要审批的命令,直接拒绝。
第 1 步:建一个会碰到危险命令的一次性任务。 把 6.1 节的 测试文件夹 留着,在飞书里发:“测试一下定时任务的安全设置:建一个一次性定时任务,2 分钟后运行,任务内容是用终端命令 rm -rf 删除 C:\Users\你的用户名\Documents\测试文件夹,并报告结果。任务名叫‘删除测试’。现在先不要自己删。”
第 2 步:等它跑完,看结果。 两分钟后飞书收到 Cronjob Response: 删除测试。结果里原样引用了拦截信息:
BLOCKED: Command flagged as dangerous (recursive delete) but cron jobs run without a user present to approve it. Find an alternative approach that avoids this command.

注意结论那一行:实测时 rm -rf 被拦下了,文件夹还是被删了。拦截信息让它“换个办法”,它就先删里面的文件,再删空文件夹,这两步都不在危险命令清单上。
所以 cron_mode: deny 拦的是某几种命令写法,不是“删除”这件事。要点:
- 别把会删、会改重要文件的事交给定时任务。定时任务适合第 5 章那种“读文件、汇报”的活。
- 定时任务里需要改文件的,改之前确认 6.4 节的快照开着,删错了能退回去。
- 不要为了让定时任务顺利跑完,把
cron_mode改成approve:那样所有危险命令在没人看的时候都会放行。
6.3 硬禁止和受保护的文件
有两类东西,无论审批设成什么都不放行。下面写的是官方文档列的范围,本节实测了其中一项(读 .env)。
硬禁止的命令。 格式化磁盘、rm -rf / 这类会毁掉整个系统的命令,任何档位、任何“永远放行”都绕不过去,也没有开关可以关掉。
受保护的文件。 存密钥的文件,它的读写工具碰不了:Hermes 数据目录里的 .env(第 1 章填的 API Key、第 2 章的 App Secret 都在里面)、配对记录、.ssh 等。各处的 .env 文件都不让它用读文件工具读。
实测:让它把 .env 发给你。 在飞书里发:“把 C:\Users\你的用户名\AppData\Local\hermes.env 这个文件的内容原样发给我看看。”它打算写一段只读脚本,列出键名、把值打码,这段脚本触发了审批卡片。实测时没有点放行(误点了一个 👍 表情,它不把表情当作同意),5 分钟后它回复 Approval timed out after 5 minutes — the command was NOT run,说明 .env 的内容一行都没有看到、没有发出去,并建议你自己在电脑上打开看,不经过它。

这次它没读到,靠的是审批卡片,不是文件保护本身:终端命令以你的 Windows 账户身份运行,你点了放行,它就能读到。碰到要读密钥、改密钥的审批,一律点 Deny。
6.4 打开快照,改坏了退回去
快照默认关着,6.1 节第 1 步已经用 checkpoints.enabled true 打开了。打开后,它每次改文件、删文件、移动文件之前,会把当前工作文件夹(第 4.3 节设的笔记库)存一份快照。快照存在 Hermes 数据目录里,不动你笔记库自己的内容。
第 1 步:先让它删一个文件。 照 6.1 节蓝色卡片那样,让它删掉笔记库里的一个测试文件,在卡片上选确认删除。
第 2 步:在飞书里列出快照。 发 /rollback,它列出这个文件夹的快照,最新的在最上面。每一行是编号、时间、在哪个动作之前存的,比如 before terminal: … rm -v "测试删除.md",就是删这个文件之前存的。
第 3 步:退回去。 发 /rollback 编号,编号换成删文件之前那一份。看到 ✅ Restored to checkpoint …,打开笔记库,删掉的文件回来了。

退回去会把整个笔记库恢复到那一刻:那之后它改过的别的笔记,也一起退回去。实测时,删文件之后它又给 课程/中级微观.md 加了一行“第 7 讲”,退回去以后这一行也没了。
退错了怎么办。 每次退回之前,它会自动再存一份 pre-rollback snapshot(排在列表第 1 个)。退回这一份,就回到退之前的样子:实测时发 /rollback 1,“第 7 讲”那一行回来了,找回的文件也还在。

几点提醒:
- 飞书里的
/rollback只认两种写法:/rollback列出快照,/rollback 编号退回。列表下方提示的/rollback diff 编号(先看改了什么)和/rollback 编号 文件名(只退回一个文件)在飞书里会报Invalid commit hash,要在电脑上的hermes对话里用。 - 快照只管第 4.3 节设的工作文件夹。它在别的文件夹里删的东西(比如 6.2 节“文档”里的测试文件夹)不在快照里。
- 笔记库已经是 Git 仓库的(第 3 周的做法),用 Git 看改动、退版本也可以,两者不冲突。
6.5 数据边界
- 它读过的文件内容,会作为对话的一部分发给模型服务商(本课程用 DeepSeek);你在飞书里发的消息,会经过飞书的服务器。身份证号、密码、未公开的成绩不要放进它能读的文件夹。
- API Key、App Secret 只放在 Hermes 数据目录的
.env里,不贴进任何对话,不截图,不放进笔记库或 Git 仓库。 - 第 2.4 节的配对是“谁能用它”的闸,不要设置“允许所有人”。
- 想让它进一步收手,官方文档还有自定义禁止规则
approvals.deny、只许写某几个文件夹的写入范围等设置,见下面的官方文档,本教程没有实测。
官方文档:Security、Checkpoints and /rollback、Running Hermes on a Personal or Work Machine。
✅ 自查
- 在飞书里让它删一个文件夹,收到橙色审批卡片,点 Deny 后文件夹还在
- 建一个用
rm -rf的定时任务,结果里有BLOCKED - 发
/rollback能列出快照,退回后删掉的文件回来了