15. 策略与审批

角色给出了粗粒度的划分(guest / user / owner)。策略是底下那一层,允许你说:“user 能调 exec,但只能跑只读命令”;或者”任何动到 GitHub MCP 服务的工具都需要我先审批”。策略是把共享智能体做得安全的方式。


15.1 三种效果

每条策略规则在智能体准备调一个工具时会产生三种结果之一:

  • Allow —— 调用继续。
  • Deny —— 调用被拦下;智能体收到一个错误代替结果,然后决定接下来怎么做。
  • Require approval —— 调用暂停;owner 收到包含工具名和参数的通知,必须先 approve 或 reject。

多条规则匹配时,最严格的胜出。


15.2 规则看什么

一条规则可以匹配:

  • 工具名 / 资源 —— file_writeexec,或 MCP 服务 id 比如 github
  • 工具参数模式 —— 例如 exec 且命令以 rm 开头。
  • 主体角色 —— guest / user / owner。
  • 资源路径 —— 对文件工具,即工具要触及的路径。
  • 通道 —— 有时希望在 CLI/Web 上比公开 Telegram 上更宽松。

规则会组合。一般先放两条宽泛的默认,然后遇到具体场景再加例外。


15.3 hermit config policy 命令

# 列出某智能体上的规则。
hermit config --agent main policy list

# 拒绝 guest 访问 exec。
hermit config --agent main policy set exec '[{"type":"role","value":"guest"}]' --effect deny

# 对 user 在 GitHub MCP 服务上的访问要求审批。
hermit config --agent main policy set github '[{"type":"role","value":"user"}]' --resource-type mcp --effect require_approval

# 删除一条规则。
hermit config --agent main policy delete exec --effect deny

<resource-key> 通常是工具名(如 exec)、MCP 服务 id(如 github)或 *。Grants 是 JSON 数组,例如 [{"type":"role","value":"guest"}][{"type":"role","value":"user"}][{"type":"any"}]


15.4 审批 —— Owner 这一边

当一个工具需要审批时,智能体的回复暂停,owner 会收到通知(Web UI 的 Observe 选项卡,以及配好的通道通知)。通知会显示:

  • 请求来自哪个 user / session。
  • 智能体想调哪个工具。
  • 完整参数。
  • 智能体给出的简短理由。

owner 点 approve 或 reject。会话以该决策恢复;智能体把结果当作普通工具结果处理。

待审批会超时(默认几分钟);超时算作 reject。


15.5 合理的默认

适合多数共享智能体的起步策略:

# Guest 不能 exec。
hermit config --agent main policy set exec '[{"type":"role","value":"guest"}]' --effect deny

# Guest 不能用写类 shell / 文件工具。
hermit config --agent main policy set file_write '[{"type":"role","value":"guest"}]' --effect deny

# 外部系统对 user 要审批。
hermit config --agent main policy set github '[{"type":"role","value":"user"}]' --resource-type mcp --effect require_approval
hermit config --agent main policy set slack  '[{"type":"role","value":"user"}]' --resource-type mcp --effect require_approval

除非你显式写了针对 owner 的规则,owner 不受约束。(你可以这么做 —— 给自己加一条”破坏性操作要我确认”的规则,有时是明智的。)


15.6 Web 管理界面

Manage → Policies 选项卡显示规则列表,带启用/停用开关和新增表单。

Observe 选项卡顶部显示待审批项。


15.7 角色差异

OwnerUserGuest
查看策略规则
增删规则
批准待审请求

15.8 How-to 配方

15.8.1 禁止 guest 写文件

hermit config --agent main policy set file_write '[{"type":"role","value":"guest"}]' --effect deny

要做路径特定规则,用 --resource-type file 加一个带 sandboxmodepath 的 JSON scope

验证 —— 让智能体往 /etc/hosts 写;应该被拒,智能体能恢复。


15.8.2 任何破坏性 shell 命令都要审批

hermit config --agent main policy set exec '[{"type":"role","value":"user"}]' --effect require_approval

验证 —— 让智能体”删掉临时目录”;你应该看到审批提示。


15.8.3 把公开智能体收紧

对 access-level=public 的智能体,为 guest 角色写 deny 规则,覆盖:execfile_write、每一个会花钱的 MCP 工具、每一个会在外部系统改状态的 MCP 工具。file_read 只允许在某个公开路径下。


15.9 FAQ

规则拒绝一个调用时,智能体的回复怎么办? 智能体把 deny 当作工具错误,通常会调整 —— 道歉、给替代方案、或告诉你它本来打算做什么。

策略规则能带时限吗? 原生不支持。如果你需要临时放宽,加规则、用智能体、再删规则。

审批通知发到哪里? 默认 Observe 选项卡。如果你配了通知通道(比如发给 owner 的 Telegram 聊天),也会送到那里。各通道 adapter 对审批提示的支持程度不一 —— 见 第 17 章


15.10 指引