模型输出一条命令只需要几秒,删除文件、覆盖系统配置或执行远程脚本也只需要几秒。真正危险的地方,是“模型想做”与“系统执行”之间没有任何停顿。
Hermes Agent 的选择很克制:它没有先造一套覆盖所有工具的通用权限平台,而是优先拦住终端中的已知高风险命令。
这篇只回答一个问题:为什么 Agent 的权限系统不应该简单地把每次工具调用都交给用户审批?
Hermes 给出的答案是:Hermes 先锁定最可能造成不可逆损害的终端命令,用模式检测、输入规范化、分级审批和缓存构成一道窄而有效的安全门。
第一原则:先拦住不可逆损害
读取一个文件和格式化磁盘都叫工具调用,但风险完全不同。若统一要求审批,低风险动作会制造大量打扰;用户很快会形成机械点击“允许”的习惯,真正危险的提示反而失去注意力。
Hermes 把第一道防线放在 terminal handler 中,只检测终端命令。这不是一套完整的通用权限模型,而是对最高风险入口的优先治理。
模式检测不能只认识 rm
危险操作包括 SQL DROP、磁盘格式化、杀死系统进程、curl 管道执行脚本、覆盖系统配置和破坏 Git 历史。检测规则由正则表达式和人类可读说明组成,既服务机器判断,也服务审批界面解释。
字符串检测还要面对绕过。Hermes 在匹配前清除 ANSI 转义并进行全角到半角的 Unicode 规范化,避免同一条命令换一种字符形态就逃过检查。
审批结果需要生命周期
每次都问,会让安全机制变成操作阻力。Hermes 给出“本次、当前 session、永久允许、拒绝”几种选择,让用户把判断绑定到合适的时间范围。
其中 session 缓存很关键。同类安装或管理操作在一次任务中可能连续出现,只确认一次能显著降低打扰。永久放行则需要写入配置,承担更长生命周期的风险。
同一规则,不同入口
CLI 可以显示终端交互选项,Gateway 则需要 Telegram、Slack 等平台按钮。Hermes 把审批逻辑与展示层分开:风险判断和缓存一致,界面根据入口适配。
审批超时默认拒绝也体现了安全默认值。系统无法确认用户意图时,不应把沉默解释为授权。
一条危险命令如何通过安全门
当 Agent 准备执行终端命令时,terminal handler 会先规范化文本:清除 ANSI 转义,把全角字符转换为半角。随后用危险模式列表匹配删除、磁盘、SQL、进程、远程脚本等高风险操作。
没有命中时,命令按原流程执行。命中后,系统先查看当前 session 或永久 allowlist 中是否已有有效决定;没有缓存,才向用户展示风险说明和审批选项。
用户选择“仅本次”,决定只覆盖这一条命令;选择“当前 session”,同类操作在本次任务中不再重复询问;选择“永久允许”,结果会进入配置。用户拒绝或超时,命令不执行。
因此,权限系统实际维护的是 风险识别、授权范围和失效时间,不是一个简单的确认弹窗。Smart approval 可以辅助判断低风险命令,但它没有改变最终原则:不确定时不应默认执行。
三个容易走偏的地方
- 把所有工具一律拦截,导致审批疲劳,用户最终关闭安全机制。
- 危险规则只检测 rm,遗漏 SQL、远程脚本和系统级破坏操作。
- 把审批写进核心循环,使通用执行逻辑与特定工具风险耦合。
产品经理可以怎样评审
评审这项能力,可以先检查三条:
- 审批频率不是越高越安全,真正目标是让高风险提示保持稀缺且醒目。
- 每个授权都要明确作用对象和有效期,本次、会话级与永久授权不能混用。
- 无法识别、等待超时或规则冲突时,应采用拒绝或升级确认的安全默认值。
本文只讨论原材料中的终端危险命令审批,不把它扩展为完整的工具权限、数据权限或企业策略系统。
