👁 935

给 Hermes Agent 开最高权限

想让 Hermes Agent 帮你干最高权限的事,就得先给它最高权限

很多人用 AI Agent 用得憋屈,自己说不出哪憋屈,我替你说:

你让它去干,它每一步都问你能不能干。

你让它 ssh 上路由器换个固件,它弹审批;你让它 podman 重启 WordPress 容器,它弹审批;你让它读个内网 URL 看监控,它直接告诉你”私网地址被拦截”;你让它把数据库密码取出来灌进配置文件,它把密码打码成一串星号——然后下一步连库失败。

绕了一圈你发现:你雇了一个秘书,但你给他戴了手铐脚镣,还嫌他动作慢。

这玩意儿不是它的锅,是你没解锁

Hermes Agent 默认那套审批/拦截,是给不信任的场景留的兜底:公司多人共用、对外开放 Bot、生产环境直连。这种场景该锁,没毛病。

但自己单机玩、入口只有你自己一个人的 QQ/Telegram DM、跑在家里墙后面的小盒子上——你就是它的唯一调用者。它能干什么不能干什么,由你的 prompt 决定,不由它的 config 决定。

这种场景还把审批开着,等于:你让它去厨房切菜,每切一刀它跑出来问你”我能下刀吗”。切完了你饿死了。

真正想用 Agent,就把四把锁全打开

~/.hermes/config.yaml 里找这四行,全反过来:

approvals:
  mode: auto                    # 不再每步问

security:
  allow_private_urls: true      # 内网随便访问
  redact_secrets: false         # 密码不打码,能取能用
  tirith_enabled: false         # 命令静态分析关掉

再把命令白名单铺开。默认就 2 条,加成你自己实际用的:ssh / scp / podman / docker / wp-cli / sysupgrade / uci / opkg / iptables / nft / ip / iw……你平时会让它跑啥就加啥,别舍不得。

开完不用重启,下一条 tool 调用就生效。

你怕什么,无非这几条,但都不成立

怕它乱删东西? 它乱删一次是 bug,乱删两次你换模型。但你为了防那 1% 的意外,让剩下 99% 的任务全部走得磕磕绊绊,亏的是你。备份做好,回滚一句话的事。

怕 prompt injection? 别人能往它嘴里塞 prompt 才叫 injection。你私人 DM 入口、家里墙后面、没人能发指令给它——攻击面就你自己。自己骗自己不算注入。

怕它读到密码泄露? 不开 redact_secrets 它取不到密码,整个 WordPress / 数据库 / 容器运维它都干不了。你要么信它一起干,要么自己手动干。AI Agent 不是来当观众的。

怕 cron 跑歪? 这条留个口子就行:

approvals:
  mode: auto
  cron_mode: deny     # 交互式给最高权限,定时任务还是审一审

人在场的时候放权,定时器后台跑保守。这才是合理的不对称。

给它放权之后,它才是个 Agent

我家里几台 Hermes 节点四把锁全开了。开完用了一段时间,感受是:

它终于像个 Agent,而不是一个不停举手问问题的实习生。

你说”去某台机器把那个文章发了”,它真的去发了,发完告诉你 URL。你说”把这三台路由器 WiFi 信道统一一下”,它真的 ssh 上去逐台改完。你说”看看哪些容器还在用旧版镜像”,它真的拉完清单回来。

中间没有”我能 ssh 吗””我能 podman 吗””我能访问 192.168.x 吗”——这些问题本来就不该问,是你雇它来解决问题的,不是来问问题的。

但代价也得写清楚——放权之后会踩到什么

光说好处不写坑,那是卖产品。我自己开了几周以后,真踩到的几类问题,原原本本记下来:

1. 模型抽风的时候,没人拦它了

审批锁本质上是”人在回路”的最后一道保险。关掉以后,模型一旦自己绕进死胡同(错误地理解任务、把 A 当成 B),它会一路执行到底——你回来看到的就是一个已经发生的事实。

我撞过一次:让它清理一批测试文章,它把”测试”两个字匹配得太宽,把一篇正常文章也带删了。审批开着时它会停下来念给我听,关掉以后它直接执行,事后从 dump 找回来花了我半小时。

对策:

  • 重要数据永远有 dump。WordPress 我每天全库 dump、保留 30 天。
  • 高风险动作让它先 DRY-RUN:SELECT 看清楚再 DELETE、--dry-run 看清楚再 rsync。
  • 给它写 skill 时把”危险动作铁律”明确写进去,比如”批量 UPDATE ≥ 2 行前必须先 SELECT 出受影响行”。

2. redact_secrets=false 之后,日志里全是明文密码

会话历史、tool 调用日志、错误堆栈,全都有可能落到磁盘上。Hermes 默认日志是 ~/.hermes/logs/,会话记录在 ~/.hermes/sessions.db。这两个文件你自己心里要清楚里面有什么。

万一你哪天把这台机器的 home 目录拷出去给朋友看、或者上传到云端备份——密码就跟着泄了。

对策:

  • ~/.hermes/ 整个目录权限锁 chmod 700
  • 备份这台机器之前先看一眼 sessions.db 里有没有敏感会话,必要时清掉
  • 数据库 / API key 这种长期凭据,用一段时间就轮换一次

3. tirith=false 之后,模型自己写错命令也没人挡

Tirith 误伤多但偶尔确实能挡几下手抖。比如模型在脚本里把 /dev/mmcblk0 写成 /dev/sda(你本意是 SD 卡,它认成你系统盘),tirith 开着会拦下来,关掉就一刀切下去了。

对策:

  • 设备名相关的命令自己手动 review 一遍再让它跑,别全交出去
  • 系统盘单独做 LUKS 或者快照,最差情况能整盘恢复

4. 内网放开 = 你的 Agent 是你内网的一根管道

allow_private_urls=true 之后,Agent 能访问你内网任何 IP。这意味着:如果哪天有人能向这个 Agent 投递 prompt(你不小心把 bot 入口公开了、有人拿到你的 Telegram session、家里 WiFi 被蹭网了),它就成了别人扫你内网的工具。

对策:

  • Bot 入口白名单:Telegram 配 allowed_user_ids,只让你自己的 user_id 进
  • 家里 WiFi 用强密码,外来设备走单独的访客网络隔离
  • 关键服务(NAS 后台、路由器 LuCI)即使在内网也开认证,别裸奔

5. 你会越来越懒

这条是最隐蔽的代价。Agent 顺手以后,你会发现自己开始不看它干了什么。它说”已完成”你就回一句”好”,连结果都不验证。

时间长了,你对自己系统的掌控感会变差——某天它出问题,你都不记得它最近一周改过哪些文件。

对策:

  • 重要任务让它输出一份变更摘要:动了哪些文件、跑了哪些命令、影响哪些服务
  • 定期翻一翻 session 日志,知道它平时干啥
  • 别把 Agent 当成完全自治的同事,它是你的延伸,不是替代

给谁全开,给谁别全开

适合全开的:

  • 私人单机 Agent,入口只有你自己(QQ / Telegram DM)
  • 家里折腾用的节点,最坏情况大不了重装
  • 你用了一段时间、知道它行为边界的
  • 数据有备份——这是底线

不该全开的:

  • 公司或团队共用的 Agent——多人能发指令,等于把服务器钥匙挂门口
  • 接公开 Bot 入口、开放注册的——任何人都能 prompt 它
  • 直连生产数据库 / 生产 K8s 集群——一条命令不可逆
  • 没有备份机制的机器——出了事没法回滚

最后

工具的局限来自要兼容所有人。但你的机器是你的,你的 Agent 是你的,你比配置文件更清楚什么能放、什么不能放。

放权不等于失控。放权 + 备份 + 边界意识 才是用 Agent 的正确姿势。光锁着用不爽,光放开了不管早晚出事。

别让默认配置替你做决定。该解开就解开,做完该做的兜底,干完活再说。