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 学坏
容器隔离 不检查 依赖容器边界 生产/沙箱首选

实操建议

  1. 默认不要改:日常用 smart 就够了,没必要一上来就关审批。
  2. 批量任务用 session 放行:比 YOLO 安全,又不会每个命令都问。
  3. YOLO 配 deny 规则:想完全放开时,至少保留几条自定义红线。
  4. 生产用 Docker:隔离比审批更可靠,还能跳过审批疲劳。
  5. 定期审计白名单command_allowlist 会越积越多,记得用 hermes config edit 清理。
  6. 开启 write approval 当共享 Hermes:特别是在团队里跑 long-running gateway 的时候。

结语

Hermes 的审批系统不是来拖慢你的,而是来让你在放心地放权及时地踩刹车之间找到平衡。YOLO 很爽,但它只是 7 种模式中的一种。真正的高手,知道什么时候该 smart,什么时候该 manual,什么时候该把 YOLO 关回去,然后泡一杯咖啡看 Docker 里的 Hermes 自己跑。

下次再开 YOLO 之前,不妨先问问自己:我真的需要跳过所有审批,还是只需要 session 放行 + 一条 deny 规则?