52.8% 的人用 Hermes 开过 YOLO:你是不是还不知道有 7 种常用模式?

坊间流传一句话:用 Hermes 的,十个里有五个开过 YOLO。但 YOLO 并不是 Hermes 安全体系的全部——它只是审批模式光谱上的一个极端点。真正玩得溜的人,会根据场景在 7 种常用模式 之间切换,而不是一遇到问题就
/yolo。
Hermes Agent 有一个很强的默认假设:你允许它执行的命令,它应该替你负责到底。所以在执行可能破坏系统的命令前,它会先停下来问你。这套机制叫 Dangerous Command Approval(危险命令审批),而 YOLO 只是跳过审批的一种方式。
本文把 Hermes 里和“放权/安全”相关的 7 种常用模式一次讲清楚。读完之后,你可以对自己的 Hermes 说:
- “日常开发用 smart 模式就够了。”
- “这段脚本我反复跑,session 放行。”
- “这次要批量重构,开 YOLO,但禁止
git push --force。” - “生产环境直接上 Docker,审批全免,但系统也伤不到。”
1. smart 模式:AI 帮你判断风险(默认推荐)
approvals:
mode: smart
smart 是 Hermes 的默认审批模式。它的工作方式是:当命令命中危险模式时,Hermes 会先让一个辅助 LLM 评估实际风险。
- 明显安全的命令(例如
python -c "print('hello')")自动放行; - 明显危险的命令(例如
rm -rf /)自动拒绝; - 拿不准的才弹出来让你决定。
好处是大幅减少“审批疲劳”。你不需要对每个 bash -c 都点一次同意,同时真正危险的操作仍然会被拦住。
适用场景:日常开发、探索性任务、对系统有一定信任的环境。
2. manual 模式:每个危险命令都过一遍
approvals:
mode: manual
如果你不喜欢把决定权交给辅助 LLM,可以用 manual 模式。所有命中危险模式的命令都会停下来,等你批准。
CLI 里的提示通常长这样:
⚠️ DANGEROUS COMMAND: recursive delete
rm -rf /tmp/old-project
[o]nce | [s]ession | [a]lways | [d]eny
Choice [o/s/a/D]:
四个选项:
- once:只放行这一次;
- session:本次会话内同类命令都放行;
- always:永久加入白名单,保存到
~/.hermes/config.yaml; - deny(默认):拒绝。
适用场景:对安全性要求高的工作、新手阶段、执行不确定的命令。
3. YOLO 模式:一键跳过所有审批
YOLO 模式会绕过所有危险命令审批。开启方式有三种:
# 启动时开启
hermes --yolo
hermes chat --yolo
# 会话中切换
/yolo
# 环境变量
HERMES_YOLO_MODE=1
开启后,Hermes 会用红色提示和状态栏提醒你当前处于 YOLO 状态,避免你忘了自己已经把安全网撤掉。
> /yolo
⚡ YOLO mode ON — all commands auto-approved. Use with caution.
YOLO 适合你非常确定命令安全的场景,比如:
- 反复运行的自动化脚本;
- 在容器或临时环境里操作;
- 你就在旁边盯着,随时准备
Ctrl+C。
但要注意:YOLO 不是 100% 无限制,它仍然会被下面的 hardline 黑名单挡住。
4. hardline 黑名单:YOLO 也绕不过的底线
即使 approvals.mode: off 或 /yolo 打开,Hermes 仍然拒绝执行一些不可逆的灾难性命令。这就是 hardline blocklist(硬线黑名单)。
典型例子包括:
| 命令 | 为什么被拉黑 |
|---|---|
rm -rf / |
直接抹掉根目录 |
:(){ :|:& };: |
bash fork bomb |
mkfs.* 对根设备 |
格式化运行中的系统 |
dd if=/dev/zero of=/dev/sd* |
清零物理磁盘 |
从不可信 URL 管道到 sh |
远程代码执行攻击面太大 |
这些命令在代码里由 tools/approval.py::UNRECOVERABLE_BLOCKLIST 维护,没有任何开关可以绕过。
设计哲学:YOLO 是“我相信 AI 不会误操作”,hardline 是“就算 AI 或用户自己疯了,也不能把整个机器搞炸”。
5. 自定义 deny 规则:YOLO 也要讲例外
如果你觉得 YOLO 太宽,但 manual 又太烦,可以用 approvals.deny 写自己的禁止规则:
approvals:
mode: off # 相当于 YOLO
deny:
- "git push --force*"
- "*curl*|*sh*"
- "dd if=* of=/dev/*"
规则是 fnmatch 风格的大小写不敏感通配符,会命中经过反混淆处理后的完整命令文本。即使开了 YOLO,匹配到的命令也会被硬拒绝。
这非常适合“大部分操作我放心,但有几个高危动作绝对不许碰”的场景。例如:
- 允许 AI 自由改代码、跑测试,但禁止
git push --force; - 允许 AI 下载依赖,但禁止
curl ... | sh; - 允许 AI 操作 Docker,但禁止直接写块设备。
6. write approval 模式:管住记忆和技能写入
除了终端命令,Hermes 还会自己写东西:把对话中的重要事实写入 memory,把学到的流程写成 skill。如果你担心它“学坏”或写错,可以打开 write approval。
memory:
write_approval: true
skills:
write_approval: true
打开后,任何 memory 或 skill 的写入都会先进入 ~/.hermes/pending/,等你用命令审批:
# 查看待审批的 skill 写入
/skills pending
/skills diff <id>
/skills approve <id>
/skills reject <id>
# memory 同理
/memory pending
/memory approve <id>
/memory reject <id>
适用场景:
- 你不希望 AI 自动记住敏感或错误信息;
- 团队共享的 Hermes,需要人工把关它学到的技能;
- 调试阶段,想先看一眼它要学什么再决定。
7. 容器隔离模式:用隔离代替审批
最后一种模式不是“怎么审批”,而是“让审批变得不必要”。Hermes 支持多种终端后端:
| 后端 | 隔离级别 | 是否检查危险命令 |
|---|---|---|
| local | 无,在宿主机运行 | ✅ 检查 |
| ssh | 远程机器 | ✅ 检查 |
| docker | 容器 | ❌ 跳过(容器就是边界) |
| singularity | 容器 | ❌ 跳过 |
| modal | 云端沙箱 | ❌ 跳过 |
| daytona | 云端沙箱 | ❌ 跳过 |
当你在 Docker/Modal/Daytona 后端运行时,危险命令检查会被跳过,因为即使容器被炸掉,也伤不到宿主机。生产环境的 Hermes Gateway 通常推荐这种配置。
Docker 容器还默认带有一组安全加固参数:
_BASE_SECURITY_ARGS = [
"--cap-drop", "ALL",
"--security-opt", "no-new-privileges",
"--pids-limit", "256",
"--tmpfs", "/tmp:rw,nosuid,size=512m",
]
适用场景:生产部署、CI/CD、多租户环境、任何“炸掉也无所谓”的沙箱。
一张表选对模式
| 模式 | 命令审批 | 写入审批 | 使用建议 |
|---|---|---|---|
| smart | AI 预审 + 人工复核边缘情况 | 可选 | 日常开发默认 |
| manual | 全部人工 | 可选 | 新手或高风险任务 |
| YOLO | 全部跳过 | 可选 | 临时自动化、可信脚本 |
| hardline | 灾难性命令永久禁止 | 不涉及 | 始终生效的底线 |
| deny 规则 | 自定义禁止 | 不涉及 | YOLO 场景下加例外 |
| write approval | 可选 | memory/skill 需审批 | 防止 AI 学坏 |
| 容器隔离 | 不检查 | 依赖容器边界 | 生产/沙箱首选 |
实操建议
- 默认不要改:日常用
smart就够了,没必要一上来就关审批。 - 批量任务用 session 放行:比 YOLO 安全,又不会每个命令都问。
- YOLO 配 deny 规则:想完全放开时,至少保留几条自定义红线。
- 生产用 Docker:隔离比审批更可靠,还能跳过审批疲劳。
- 定期审计白名单:
command_allowlist会越积越多,记得用hermes config edit清理。 - 开启 write approval 当共享 Hermes:特别是在团队里跑 long-running gateway 的时候。
结语
Hermes 的审批系统不是来拖慢你的,而是来让你在放心地放权和及时地踩刹车之间找到平衡。YOLO 很爽,但它只是 7 种模式中的一种。真正的高手,知道什么时候该 smart,什么时候该 manual,什么时候该把 YOLO 关回去,然后泡一杯咖啡看 Docker 里的 Hermes 自己跑。
下次再开 YOLO 之前,不妨先问问自己:我真的需要跳过所有审批,还是只需要 session 放行 + 一条 deny 规则?