Technical Guide

17. 安全边界:审批、敏感信息、文件路径和工具限制

看懂 Hermes 如何用审批、redaction、上下文扫描、toolset 和路径限制降低 Agent 风险。

这篇解决什么问题

Hermes 能执行真实动作,所以安全不是附属功能。

一个能读文件、跑 shell、发消息、调用外部服务的 Agent,如果没有边界,很容易因为误操作或 prompt injection 出问题。

这一篇看 Hermes 的几类安全边界。

第一层:工具边界

不是所有会话都应该有所有工具。

Hermes 通过 toolset 控制能力范围:

web
file
terminal
browser
skills
cronjob
memory

Webhook、子 Agent、Cron 都可以限制 enabled_toolsets。

这是最直接的边界:不给工具,就不能调用。

第二层:命令审批

终端工具有风险。

删除文件、重置 git、覆盖配置、安装软件、访问敏感目录,都可能造成真实损失。

Hermes 有 command approval 机制,遇到危险命令时可以要求用户确认。

这就是你之前看到写入命令被审批拦住的原因之一。

第三层:敏感信息 redaction

工具输出可能包含 token、API key、URL secret、订阅链接。

Hermes 会对工具输出和模型回复做 secret redaction,避免敏感信息进入对话、日志或投递平台。

相关逻辑分散在:

agent/redact.py
agent/chat_completion_helpers.py
agent/secret_scope.py

这类逻辑不要随便关闭。

第四层:上下文文件扫描

项目里的 .hermes.mdAGENTS.md.cursorrules 会进入系统提示词。

如果这些文件来自不可信仓库,就可能包含 prompt injection。

agent/prompt_builder.py 会对上下文文件做 threat pattern 扫描,命中时用 blocked placeholder 替代原内容。

这是防止“仓库文件劫持 Agent 行为”的一层保护。

第五层:文件路径限制

文件工具和 skill 工具都需要路径边界。

比如:

  • 不应该直接读取 Hermes 内部缓存文件;
  • 不应该跨 profile 修改另一个 profile 的 skill/memory;
  • skill 支持文件只能写入 references、templates、scripts、assets 等安全子目录;
  • cron job id 不能包含路径穿越。

这些看起来是小规则,但都是为了防止 Agent 把“文件系统是平的”这个假设用错。

第六层:平台消息过滤

Gateway 面对真实聊天平台。

它需要过滤:

  • provider 原始错误;
  • 认证失败信息;
  • 可能包含敏感内容的错误体;
  • 平台不适合展示的状态噪声。

否则一个 401 错误可能把 provider 返回的完整 body 直接发到群里。

安全设计的核心思路

不要指望模型永远判断正确。

更可靠的是:

能不给的工具就不给
危险动作要审批
敏感信息要自动遮挡
不可信上下文要扫描
文件路径要限制
外部平台输出要过滤

如果你要扩展 Hermes

新增工具或平台时,至少问这几个问题:

这个工具会不会写文件?
会不会执行命令?
会不会接触密钥?
输出会不会进模型上下文?
错误信息会不会投递给用户?
是否需要 check_fn 和 requires_env?
是否应该默认关闭?

安全边界不是最后补的,而是工具设计的一部分。

下一篇看什么

下一篇看调试与排障。

安全和排障经常连在一起:很多“不能用”,其实是边界保护在生效。