Hermes YOLO 与 smart 审批:让 Agent 大胆干活但别裸奔

说明 Hermes Agent 里 approvals.mode smart、临时 --yolo、worktree、checkpoints、Git checkpoint 和工具权限限制的区别,给出日常配置和高风险任务的安全边界。

Hermes 里的 YOLO 很诱人:少点确认,任务能连续跑,Agent 不会每隔几步就停下来问一句“可以吗”。但它真正适合的用法不是“永远全开”,而是按任务风险分层:日常用 smart,一次性可信任务临时 --yolo,改代码时配合 git worktree 和 checkpoints,生产机器和真实数据目录里不要裸奔。

一句话版本:

smart 日常用,--yolo 临时用,配合 git/worktree/checkpoints/容器兜底,不建议全局 off。

先分清三个概念

Hermes 的审批策略大致可以按风险从低到高理解:

模式常见命令适合场景风险
手动审批approvals.mode manual新环境、生产机器、你还不信任任务时最安全,但打断多
智能审批approvals.mode smart日常默认模式低风险自动放行,高风险仍确认
YOLO / 跳过审批--yoloapprovals.mode off临时任务、隔离目录、测试环境最顺手,也最容易误伤

这里最重要的一点是:--yolo 是临时启动参数,退出当前任务就结束;approvals.mode off 是配置级别的长期跳过审批。后者不要随手开在主力机器上。

日常推荐:approvals.mode smart

日常使用最推荐 smart

hermes config set approvals.mode smart

它的效果是:

  • 低风险命令自动放行。
  • 高风险命令仍然提示确认。
  • 比纯手动少打断。
  • 比 YOLO 或 off 更安全。

比如读取文件、列目录、跑普通检查这类动作,通常不需要你一直点确认;但涉及删除、覆盖、系统服务、敏感路径或其他高风险行为时,仍会停下来让你确认。

设置完可以查看配置:

hermes config show | sed -n '/^approvals:/,/^[^ ]/p'

期望看到类似:

approvals:
  mode: smart

如果是 Telegram Gateway,配置改完后建议重启或让新会话重新读取配置:

hermes gateway restart

或在 Telegram 里执行当前版本支持的重启命令,例如:

/restart

临时 YOLO:只给一次任务放权

如果你确定当前任务可信,而且目录是测试目录、临时目录或干净 repo,可以临时启动:

hermes --yolo

适合这类任务:

  • 在临时目录里生成脚本。
  • 在测试项目里连续修改和跑测试。
  • 让 Agent 自动整理一批无敏感数据的文件。
  • 新装机器上批量初始化配置,但你已经知道每一步大概会做什么。

临时 --yolo 的好处是边界清楚:这个 Hermes 进程结束后,权限就没了。它不像 approvals.mode off 那样留在全局配置里,未来每个任务都默认跳过确认。

不适合这样用:

cd ~
hermes --yolo

家目录里通常有 .ssh.config、浏览器数据、token、密钥和大量没有版本控制的文件。让 Agent 在这里无确认自由操作,风险太高。

改代码:YOLO 配 worktree

改代码时,更稳的组合是:

hermes --yolo --worktree

或者短参数:

hermes -w --yolo

效果是让 Agent 在独立 git worktree 里工作,而不是直接污染主工作区。这样它可以更大胆地重构、跑测试、改多个文件;如果结果不满意,可以丢掉 worktree,而主分支仍然保持干净。

适合:

  • 大范围重构。
  • 迁移框架或目录结构。
  • 批量修 lint/test。
  • 让 Agent 尝试一个你还不确定的实现方向。

不适合:

  • 没有 git 的目录。
  • 里面有大量用户数据的目录。
  • 生产服务正在读取的工作区。

开 YOLO 前先做 checkpoint

如果不用 worktree,至少先保证当前状态可回滚。

最稳的是提交一个 checkpoint:

git status
git add .
git commit -m "checkpoint before yolo agent"
hermes --yolo

如果暂时不想提交,也可以保存 patch:

git diff > /tmp/before-agent.patch

这样 Agent 改坏后,你至少知道“坏之前”是什么样子。没有 checkpoint 的 YOLO,通常不是技术问题,而是心理压力问题:你会不知道哪些变化是它改的,哪些变化是原来就有的。

用 Hermes checkpoints 做可回滚会话

Hermes 还可以配合文件系统 checkpoints:

hermes chat --checkpoints

会话里也可以手动打快照:

/snapshot

如果结果不对,可以回滚:

/rollback

这种模式适合“我想让你大胆改,但我要能撤销”的任务。它和 git 不冲突:git 管源码历史,Hermes checkpoint 管一次 Agent 会话里的文件系统快照。重要代码仓库里,两者一起用更安心。

一个高风险改代码任务可以这样起手:

git status
git add .
git commit -m "checkpoint before yolo agent"
hermes --yolo --worktree --checkpoints

这套组合的意思是:

  • git commit 保护当前主工作区。
  • worktree 让 Agent 在隔离副本里改。
  • checkpoints 让会话内也能撤回。
  • YOLO 让 Agent 连续执行,不被低价值确认打断。

不要在生产机器上全局 YOLO

比较安全的使用边界:

可以考虑不建议
repo 副本生产服务器
临时目录用户真实数据目录
Docker 或 dev container~/.ssh~/.config 附近
git worktree密码、token、cookie 文件附近
测试环境没有 git 的大目录
专门的 agent 机器正在跑业务的服务目录

生产机器上尤其要小心。很多操作看起来只是“顺手修一下”,实际可能碰到服务重启、配置覆盖、证书、DNS、数据库、权限、日志清理和备份目录。这里更适合 smart 或手动审批,而不是全局 off

用 tools 收窄能力

有时你不是想放开所有权限,只是想少点审批。那就不要只盯着 YOLO,还可以收窄工具集。

查看工具:

hermes tools
hermes tools list

如果只是写代码,通常只需要:

  • terminal
  • file
  • skills
  • session_search

可以考虑关闭暂时不需要的能力:

  • browser
  • web
  • messaging
  • image_gen
  • homeassistant
  • discord_admin

具体命令以你当前版本的 hermes tools --help 为准。思路是:让 Agent 在需要的领域里顺手,在不需要的领域里少碰。

几套推荐配置

日常默认:

hermes config set approvals.mode smart

大胆执行一次可信任务:

hermes --yolo

改代码并隔离工作区:

hermes --yolo --worktree

高风险改代码,先做 Git checkpoint:

git status
git add .
git commit -m "checkpoint before yolo agent"
hermes --yolo --worktree --checkpoints

只适合隔离环境的全局 YOLO:

hermes config set approvals.mode off

全局 off 只建议放在 Docker、测试 VM、专门的 agent 机器或一次性沙盒里。主力电脑、生产服务器、真实数据目录,不建议这么配。

如果开过全局 YOLO,恢复日常模式:

hermes config set approvals.mode smart

一个实用判断法

开 YOLO 前问自己三个问题:

  1. 这个目录删错了,我能不能接受?
  2. 当前状态有没有 git、backup 或 checkpoint?
  3. Agent 这次任务需不需要碰系统服务、密钥、用户数据或生产配置?

如果三个答案里有任何一个让你犹豫,就用 smart,或者先建 worktree、容器、临时目录,再开 YOLO。

我的默认建议

如果是日常聊天、写脚本、轻量维护:

hermes config set approvals.mode smart

如果是一次明确的开发任务:

hermes --yolo --worktree --checkpoints

如果是在生产机器上:

hermes config set approvals.mode smart

然后让高风险命令继续确认。

YOLO 的价值不是“让 Agent 什么都能干”,而是让它在你已经设好边界的地方少被打断。真正舒服的用法,是把风险关进笼子里,再让 Agent 跑快一点。