Hermes v0.22.2:0.22.1 本该交出的那个版本

你把 Hermes 配成 systemd 服务已经好几个月了,之前每次重启都能干净地拉起来——直到某天早上服务是死的,systemctl start 说它已经在运行了,而日志里唯一的线索是一个属于完全不相干进程的 PID。或者你在笔记本上跑本地模型,一个很长的回合突然就停了:状态栏杵在那里不动,你合上盖子过一会儿回来,这一轮已经放弃了。这两件事在 v0.22.2 里都有修复,还有一个更少见的问题:它的上一个版本是从错误的提交构建出来的。
v0.22.1 到底发生了什么
v0.22.1 发布于 2026 年 10 月 14 日,指向了错误的代码树。从外部能看到的后果有两个:那个 tag 打包进了尚未发布的网关改动,Microsoft Store 版本还可能卡在 “Connecting.”,第一次启动走不完。
v0.22.2 在第二天早上发布,用本该被打包的那个提交构建,并把已发布的 v0.22.1 作为父提交。官方 release 说明说得很直白:“0.22.2 is the release 0.22.1 was meant to be.”(0.22.2 才是 0.22.1 本该发布的样子。)从 v0.22.1 到 v0.22.2 的比较范围内共 11 个提交——这是一次重建,不是一次功能发布。
重建还带着一个必须说清楚的遗留问题:在 0.22.1 网关下运行过的会话,在 0.22.2 里无法删除。 它们能读、能继续,就是删不掉。如果你在意这一点,请改成归档或导出,别依赖删除。
第一步:确认你跑的是哪个构建
补丁版本恰恰是“我到底有没有装上修复”最值得认真核对的地方,所以先查版本,再做别的:
hermes version
桌面端在 Settings ▸ About 里显示版本号(如果你按稳定通道那篇指南配过,更新通道开关也在同一个位置)。Docker 用户看自己拉的是哪个 tag:nousresearch/hermes-agent:stable 会在你下次 pull 时跟着升到新的补丁版本。
如果你在 0.22.1 上,请更新。如果你在 0.22.0 上,同一条 hermes update 会直接把你带到 0.22.2,下面两个修复一并到手。
hermes update
修复一:受管网关重启后能正常启动了
网关在接管之前,需要知道这台机器上是不是已经有另一个网关在跑。它用的是自己记录下来的进程号,而这里有一个洞:重启之后,Linux 可能把某个很靠前的 PID 分给一个毫无关系的进程。 如果被回收的 PID 恰好和记录里的对上了,网关就会认定“已经有一个活着的网关占着这台机器”,从而拒绝启动。放在 systemd、launchd 或 Docker 下——也就是有东西一直在等着把服务拉起来的环境里——结果就是一个永远起不来的服务。
修复的思路是不再只信一个裸 PID,而是记录重启无法伪造的东西:
- Hermes 会记录自己是哪一次开机启动的,并拿它和当前这次开机做比对。
- 当记录无法比对时——旧格式的记录,或者读不到开机时间——它改问 host lock。host lock 是只有活着的网关才会持有的文件,所以“持有它”这件事比 PID 可靠得多。
- 存活检测不再因为“看一眼”就顺手创建锁文件;argv 特征也从检查里彻底移除了,因为被回收的 PID 完全可能同时匹配上启动时间和命令行。
如果你的网关一直在重启后拒绝启动,升级就能解决,不需要改你的 unit 文件。用你 supervisor 的命令确认:
systemctl status hermes-gateway
修复二:笔记本上的本地模型长回合能跑完了
在本地跑模型会改变故障模式:模型成了整个房间里最慢的东西,而它所在的机器随时可能睡着。一个 PR(#138560)一次性堵上了四个坑:
| 现象 | 改了什么 |
|---|---|
| 长提示词看起来像卡住的回合 | 本地请求始终流式返回,服务器读提示词时状态栏显示读取进度 |
| 机器睡着的那些时间被算成模型思考时间 | 停顿计时器会跳过系统挂起的时间 |
| 一次超时之后,之后每条消息都失败,哪怕服务器已恢复 | 恢复后的本地服务器会获得重试机会,而不是被一直断开的熔断器挡住 |
| 模型还在读的时候压缩就超时了 | 压缩不再在服务器还在消化长对话时提前放弃 |
在统一内存的 Windows 机器上还有第五点:模型启动和提示词缓存按可用内存定容,而不是按总内存,所以本来就忙的机器不会把自己压垮。
这些坑最容易在本地模型最诱人的场景里踩到——一台只剩几 GB 余量的笔记本、一个很长的 agent 回合,以及一个会合盖子的用户。如果你是第一次搭这套东西,llama.cpp 本地模型指南里讲了 Hermes 会给你装上的运行时。
0.22.0 以来这一系列还有什么
因为 0.22.2 是把整个 0.22 系列重新发布了一遍,几个更小的改动也一并到手,值得知道一下:
- 模型选择器: 选择器顶部多了精选模型列表;NVIDIA NIM 有了自己的默认模型列表;Nemotron 3.5 Super VL 带上了默认参数。
- Mistral 线路: 复合工具 ID 会在发给供应商之前重新配对——Mistral 对工具 ID 有 9 个字符的长度限制。
- Profile: 新建 profile 会连同 endpoint 一起继承
custom启动模型,env 引用的供应商同样适用。 - 终端与搜索:
PATH里用户自己的工具排在 Hermes 的工具前面;本地文件搜索用 Hermes 固定的 ripgrep,而不是机器上第一个rg。 - 插件目录: 韩语和巴西葡萄牙语桌面语言包上线,另有 author-feed、wait-ledger、openinvest、TeamoRouter、Hermes AAC、Agent Mixer 等新条目。
- 依赖: httpx2/httpcore2 升到 2.12.0,固定的 npm 包一并升级以清掉审计告警。
0.22 系列的完整整理版说明在 v0.22.0 Threshold 发布页和 v0.22.2 发布说明里。
小结
一个“取代另一个补丁版本”的补丁版本,值得你花一分钟:查 hermes version、跑 hermes update,如果你原本在 0.22.1 上,就把无法删除的会话当成唯一的尾巴——归档而不是删除。如果你正要搭一套全新安装,安装指南里有当前的安装命令。
来源:Hermes Agent 仓库的 v0.22.2 release 说明与 v0.22.1...v0.22.2 比较范围;网关开机标识相关工作是 PR #138594(修复 issue #133744),本地模型相关工作是 PR #138560。