昨天 v0.15.0 刚发布,今天 v0.15.1 就来了——GitHub 上已经有人在问"为什么升级后 Dashboard 一直在刷新"。
答案找到了。
Hermes Agent v0.15.1 是一个同一天热修复补丁,针对 v0.15.0 引入了几个让 Docker 用户和本地部署用户当场崩溃的 bug。其中最严重的是:Dashboard 会进入无限重载循环,页面不断刷新根本停不下来。
这篇文章把这次更新的核心内容讲清楚,重点是哪些人必须升级、以及升级前要注意什么。
这个是这次更新的 headline bug,影响范围最广。
问题原因(说人话版):
在 loopback 模式下(也就是本地跑 Hermes、用 Docker、或用托管版本的用户),Dashboard 会先调用 /api/auth/me 这个接口来确认身份。这个接口在未登录状态下返回 401 是正常行为。
但 v0.15.0 引入的 token 轮换检测逻辑,把所有 401 都当作了"token 过期了,需要刷新"的信号,于是触发了一次页面重载。而每次重载后,其他正常请求又会把"已经重载过"的状态清掉,导致这个流程永不停止——页面就开始无限刷新。
Firefox 用户看到这个:"Navigated to /sessions" 风暴;Chrome 用户看到 React 渲染循环风暴。
修复方案:
给 fetchJSON 加了一个 allowUnauthorized 参数,专门针对 loopback 模式下 /api/auth/me 的 401 放过这次重载逻辑——401 仍然会抛出,AuthWidget 仍然会吞掉它(显示登录界面),但不会触发无限重载循环。
| 用户类型 | 是否受影响 | 需要升级吗 |
|---|---|---|
| v0.14.x 用户 | 否(bug 在 v0.15.0 新引入) | 否 |
| v0.15.0 Docker 用户 | 是 | 必须升级 |
| v0.15.0 本地部署用户 | 是 | 必须升级 |
| v0.15.0 托管版用户 | 是 | 等待托管平台更新 |
--insecure 逻辑改了(重要迁移提醒!)v0.15.1 之前,如果你用 Docker 跑 Hermes 并且绑定到非 loopback 地址(比如 0.0.0.0),系统会自动推断你需要 --insecure 模式。
这造成了一个混淆:把"我想要局域网访问"和"我想要关闭同源保护"混为一谈。
v0.15.1 的改动:
现在这两个需求彻底分开了。bind host 只管绑定地址,而关闭 Dashboard 的同源认证保护需要显式设置环境变量:
HERMES_DASHBOARD_INSECURE=1
如果你正在用 Docker 并绑定了非 loopback 地址,v0.15.1 开始会默认启用安全模式。如果之前你依赖这个自动推断行为,升级后需要手动加上这个环境变量。
为什么这个改动合理:
之前那种"绑定到 LAN 地址就自动推断为 insecure"的逻辑确实有问题——在本地开发机绑定 LAN 地址不代表你想要任何人无需认证就能访问 Dashboard。显式 opt-in 更安全,也更符合最小权限原则。
MCP 服务器配置里,如果用了 npx、npm、node 这种裸命令(不带完整路径),v0.15.0 在 Docker 容器里会静默失败——因为 agent 的 PATH 环境变量里找不到 Node 工具链的位置。
v0.15.1 修复:这些 bare command 现在直接解析到 /usr/local/bin,Docker 镜像里那些二进制文件在这里放着,所以能正确找到并启动。
这是另一个数据亮点。
之前 Skills hub 页面只显示部分目录(858 条),因为用了分页 API 拉取。v0.15.1 改成爬 sitemap,所以现在能拿到完整的 19,932 条 skills.sh 目录。
如果你之前找不到某个 Skill,现在可以在 picker 里完整搜索所有 19,932 条了。
| 修复项 | 说明 |
|---|---|
| Kanban worker SIGTERM | 之前 SIGTERM 被中间进程吞掉,worker 杀不掉;现在能正常终止了 |
.md 文件媒体传输 |
之前媒体上传验证用了过于严格的 allowlist,现在改成 denylist-only |
/yolo 中途切换模式 |
之前 /yolo 在 session 中途使用时只切换了环境变量,但 agent 已经快照了旧值;现在能正确启用 per-session bypass |
| URL 参数保留 | 之前 redaction 逻辑会把带凭证形状的 query 参数吃掉;现在透传不变 |
| Kanban worker 视觉 | 现在能把 task body 里引用的图片正确传给有视觉能力的模型 |
| Memory provider 上下文 | 现在 completed-turn 消息的 context 能正确传给 memory provider |
必须升级的用户:
- [ ] 在用 v0.15.0
- [ ] 用 Docker 跑 Hermes
- [ ] 用 loopback 模式跑本地部署
- [ ] 用托管 Hermes
需要手动加环境变量的用户:
- [ ] Docker 绑定到非 loopback 地址,且之前依赖自动 insecure 推断 → 升级后加上 HERMES_DASHBOARD_INSECURE=1
v0.14.x 用户:
- [ ] 如果你没升级到 v0.15.0,这次直接升 v0.15.1 就行,不影响
这次 v0.15.1 是一个典型的"热修复补丁",核心就一件事:把 v0.15.0 引入的无限重载循环修掉。如果你是在用 Docker 或者本地部署 Hermes,现在就去升级。
其他修复都是细节改善,Skills 目录从 858 暴涨到 19,932 是最大的功能亮点——之前找不到某个 Skill 的现在可以再去 picker 里搜一下。
技能页终于显示全了||Docker 用户记得加那个环境变量||升级后 Skills 目录变全了||终于能正常关掉 worker 了
💬 评论区