v0.18.0,代号没有,但安全修复密度史无前例。 12 天,1760 个 commit,其中安全相关提交超过 60 个。 这是 Hermes 有史以来安全修复最密集的一次更新。
先说结论
这次更新的核心主题只有一个:安全加固。
Gateway 会话劫持漏洞堵了,浏览器私有网络访问锁死了,子进程环境变量凭证泄漏补了。
功能上最大的亮点是 Google Vertex AI 支持——Gemini 用户终于可以原生接入了。
稳定性方面,MoA(Model of Agents)和上下文压缩各修了一堆关键 bug。
一句话判断:如果你用了 Gateway 远程连接或多账号场景,必须升。
全景统计:fix 占近六成,进入打磨期
| 类型 | 数量 | 占比 | 说明 |
|---|---|---|---|
| fix | 1033 | 58.7% | 修复为主 |
| feat | 209 | 11.9% | 新功能 |
| test | 141 | 8.0% | 测试补充 |
| chore | 116 | 6.6% | 工程维护 |
| docs | 91 | 5.2% | 文档更新 |
| refactor | 78 | 4.4% | 代码重构 |
| security | 15 | 0.9% | 安全专用 |
| 其他 | 77 | 4.4% | ci/other |
fix:feat ≈ 5:1,典型的打磨期比例。
fix 排名前五的方向:gateway(134)、desktop(90)、agent(71)、security(47)、telegram(39)。
结论:Gateway 和安全是这次改动最集中的两个方向。
下面逐个拆解重点更新。
一、安全加固(本次绝对主角)
1. Gateway /resume IDOR 修复:堵住会话劫持
这是本次最严重的安全修复。
漏洞原理:
Gateway 的 /resume 和 /sessions 接口,之前没有严格绑定调用者身份。
也就是说,理论上有人可以构造请求,读取或恢复不属于自己的会话。
这是一种 IDOR(Insecure Direct Object Reference)漏洞。
修复内容(7 个连环提交):
| 提交 | 修复点 |
|---|---|
| scope /resume to caller’s origin | 核心修复:严格绑定调用者来源 |
| fail closed on blank-source | 空来源行直接拒绝 |
| fail closed on no-provenance | 无来源信息直接拒绝 |
| fail closed on identity-less | 无身份调用者直接拒绝 |
| scope Matrix by thread | Matrix 按 thread 隔离,不只是 room |
| tighten DM scoping | 收紧私信范围 |
| allow shared-group resume | 合法共享组恢复正常 |
设计原则:所有无法验证来源的请求,一律 fail closed(拒绝),而不是放行。
commit: c4f278c02
2. 浏览器私有网络防护增强:CDP 不再豁免
之前的浏览器安全防护有个漏洞:cloud-metadata 地址拦截只对本地 backend 生效。
问题场景:
如果你的 Agent 跑在云服务器上,用本地 headless Chromium,它可以导航到 169.254.169.254(云元数据地址),读取实例凭证。
而且 CDP(Chrome DevTools Protocol)远程浏览器被错误地判定为"本地",跳过了私有网络检查。
修复内容(3 个提交):
| 提交 | 修复 |
|---|---|
| enforce cloud-metadata floor on all backends | 所有 backend 强制拦截云元数据地址 |
| re-check after browser_back | 导航后退后重新检查私有网络 |
| extend guard to browser_console | browser_console 也纳入检查 |
云元数据拦截地址: 169.254.169.254、metadata.google.internal、ECS/Azure/GCP IMDS——全部无条件拦截。
commit: 0a7561651
3. 子进程凭证清理:堵住环境变量泄漏
之前 Hermes 的动态密钥会泄漏到所有子进程的环境变量中。
问题: Agent 启动的子进程(如 terminal 命令、脚本)可以读取到 Hermes 自身的会话密钥和凭证。
修复(3 个连环提交):
| 提交 | 修复 |
|---|---|
| strip dynamic Hermes secrets | 核心修复:spawn 时清除所有动态密钥 |
| close cross-session leak | 修复跨会话 HERMES_SESSION_* 泄漏 |
| close same session leak | 修复同一会话的 spawn surface 泄漏 |
清除的凭证类型: 会话令牌、动态密钥等 Hermes 内部凭证。
commit: a658f3b28,2026-07-01
4. 其他安全修复
| 修复 | 说明 |
|---|---|
| portal_base_url 校验 | 防止伪造 Portal 地址 |
| pairing 同步 allowlist | pairing 权限不再绕过 allowlist |
| path traversal 防护 | Teams 录音文件名清除目录组件 |
| browser credential denylist | 收窄凭证查询拦截名单 |
二、新功能
1. Google Vertex AI Provider:Gemini 原生接入
新增 Google Vertex AI 作为 Provider,通过 OAuth2 认证。
支持内容:
| 项目 | 说明 |
|---|---|
| 模型 | Gemini 系列 |
| 认证 | OAuth2 |
| 配置入口 | 桌面端 Keys tab 可直接配置 |
| 原生适配 | 合并同角色内容、移除 stream_options |
实际意义: 之前用 Gemini 要走第三方 API 中转,现在直接 OAuth2 认证,延迟更低,成本更可控。
commit: c73e74386,2026-07-01
2. Kanban 通知路由优化
通知不再盲目广播,而是通过 owning profile 精准路由。
改动:
- 通知通过任务所属的 profile 路由
- 路由到 profile 后,唤醒创建该任务的 agent
- 支持多语言通知消息
实际意义: 多 profile 场景下,通知不再串台。A profile 的任务完成通知,只发给 A profile 绑定的渠道。
commit: c69643026
3. 子代理工具集自动继承
之前 delegate_task 需要手动指定子代理的 toolsets 参数。
现在移除了这个参数——子代理自动继承父代理的完整工具集。
变化:
| |
少了一个容易出错的参数。子代理默认拥有和父代理相同的能力范围。
commit: ba0bc01d1,2026-07-01
三、稳定性修复
1. MoA(Model of Agents)大修
这次 MoA 修了至少 10 个 bug,核心三个:
| 问题 | 修复 | 影响 |
|---|---|---|
| 辅助超时太短 | 提升至 900s,Codex 路径获得稳定 provider | 长推理不再中途超时 |
| 预设选择丢失 | 持久化预设选择 | 不再每次都重置 |
| 成本计算虚高 | 按 aggregator 真实模型计价 | 会话成本不再被 advisor 拉高 |
之前的问题: MoA 的 aggregator 轮次被按 advisor(辅助模型)计价,导致会话成本显示虚高。而且 Codex 路径缺少稳定的 prompt_cache_key,导致缓存命中率低、延迟高。
修复后: 成本按真实模型计算,Codex 路径有稳定缓存键,900s 超时兜底长推理。
commit: eae3700b1、aa605b66c、9be292f1e
2. 上下文压缩修复
| 问题 | 修复 |
|---|---|
| 压缩期间中断请求丢失 | 中断请求排队,不再丢弃 |
| merge-into-tail 摘要越界 | 检测并截断分隔符后的内容 |
| END MARKER 位置错误 | END MARKER 放在摘要末尾 |
之前的问题: 压缩过程中如果有新消息进来,会直接丢失。而且 merge-into-tail 模式的摘要有时会越过分隔符,污染后续内容。
commit: 5eaccf580、b795a45b8、a1a8a967e
3. Windows 平台修复
| 问题 | 修复 |
|---|---|
| terminal 路径错误 | init_session 的 cd 走 Windows 路径转换 |
| bash 选择错误 | 优先使用 Git for Windows bash |
| 破坏性命令检测 | 新增 Windows 破坏性 shell 命令检测 |
实际意义: Windows 用户之前可能遇到 terminal 工作目录不对、bash 版本选错等问题,这次都修了。
commit: 5d613a563、ad5f3341d
4. Gateway 稳定性
| 问题 | 修复 |
|---|---|
| /restart 失效 | Restart=on-failure 模式下正确恢复 |
| pairing 权限不一致 | pairing 同步到 allowlist |
| Telegram 连接超时 | 每次 initialize() 加 30s 超时兜底 |
Telegram 超时修复细节: 之前如果 telegram.org 和所有备用 IP 都不可达,initialize() 没有外层超时限制,会阻塞数分钟导致 Gateway 卡死。现在每次尝试限制 30s,失败后重试退避。
commit: 40dbfa0e3、1bfe08145、9f0309504
升级建议
| |
按使用场景分级建议:
| 场景 | 紧迫度 | 原因 |
|---|---|---|
| Gateway 远程连接 | 必须升 | IDOR 漏洞修复 |
| 多账号 / 多 profile | 必须升 | 会话隔离加固 |
| 浏览器工具在云服务器 | 必须升 | 云元数据拦截 |
| MoA 用户 | 强烈建议 | 超时/成本/缓存全修 |
| Windows 用户 | 强烈建议 | terminal 路径修复 |
| 单机纯 CLI | 建议升 | 稳定性提升 |
写在最后
这次更新让我印象深刻的是安全修复的密度。
7 个连环提交堵一个 IDOR 漏洞,3 个提交锁死云元数据访问,3 个提交清理子进程凭证——
每一个都是真实可被利用的攻击面。
fix 占比 58.7% 不是坏事。 一个 AI Agent 框架在快速迭代后进入安全打磨期,说明项目在认真对待生产环境可靠性。
如果你在用 Gateway 或多账号,这次更新不要跳过。
关注 varkm,一起学习,一起成长