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.md、AGENTS.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?
是否应该默认关闭?
安全边界不是最后补的,而是工具设计的一部分。
下一篇看什么
下一篇看调试与排障。
安全和排障经常连在一起:很多“不能用”,其实是边界保护在生效。