已经在用 Hermes,判断这次升级收益,可以看三个场景:答应执行却停住、MCP 恢复后仍找不到工具、长会话摘要把猜测写成事实。v0.23.0 对这些问题有对应改动。[3][4][6]
本机已从 v0.22.6 升到 v0.23.0。11 月 6 日做过真实 CLI 对话与会话存储验收;11 月 7 日只读复核版本、健康端点和旧验收会话,没有再次调用模型。本文给已有 Linux 部署的使用者一份升级判断和验收清单,不提供跨安装方式的一键升级脚本。
从 v0.22.6 升级,哪些变化与日常使用有关
官方 v0.23.0 是正式版,但发行说明的累计范围从 v0.22.0 开始,还汇总了 v0.22.1—v0.22.7。不能把整份亮点都算作从 v0.22.6 新增的能力。[1]
以下三项已对照新旧 tag 的提交关系。它们在目标版本中,也属于本次基线之后的改动;功能解释来自源码核查,不是本机故障注入结果。
说了“现在执行”,却没有调用工具
在已有会话里,模型可能给出执行承诺,随后直接结束回复。相关保护会识别一部分此类短回复,让执行继续。目标版本把“有没有工具结果”的判断锚定在当前真实用户轮,避免被更早的工具历史干扰;内部追加的提醒也不会被误认成新一轮。[3]
对使用者有用的变化是:旧会话曾经用过工具,不应让当前轮的保护失效;当前轮已经执行过工具,也不应被内部提醒重新触发。[3]
这仍是有条件的保护,默认与 Codex 路径相关。它不保证任意模型、语言或执行承诺都会续跑。本次未做这类行为专项测试。
MCP 已恢复,工具搜索里却仍然缺席
MCP 是 Agent 连接外部工具的一种协议。上游记录的问题是:服务断连时生成的工具定义缓存,在服务恢复后仍被复用,长期运行的进程可能继续看不到那些工具,新建会话也未必解决。[4]
本次修复让工具定义缓存随可用性判定过期,并让显式失效同步影响缓存。这样,早先的不可用结果有机会被重新检查。[4]
但“重新可发现”不等于“立即加入每个旧会话的工具列表”。现有列表的冻结策略、工具集选择和权限范围仍然生效。[5] 本机没有断开真实 MCP 服务做恢复实验,不能据此宣布所有连接问题已解决。
长会话压缩后,猜测不应变成已确认结论
上下文压缩会把旧对话整理成摘要。新增提示要求把未确认判断放进 Unverified / Working Hypotheses,并用 UNVERIFIED: 单独标注,首轮摘要和后续更新都接入了这一要求。[6]
例如,排障时尚未证实的原因,应继续保留“待验证”的身份。读到摘要中的 UNVERIFIED,仍需回查日志或做验证,不能直接按结论改配置。
这里核对的是提示约束。本轮没有调用摘要模型,也没有测量摘要质量或 Token 节省。
使用独立 WebUI,还要单独看版本通道
本机另一个项目是 nesquena/hermes-webui,从 v0.52.544 升到 exp-v0.52.646。这是第三方项目的预览版,发布对象标记为 prerelease;它与 Nous 的官方 Webapp 不同。[2] Agent 的正式版身份不能替它提供稳定性保证。
经新旧 tag 核查,这个 WebUI 升级区间内有几项与已有用户相关的修复:
- 长会话打开与滚动。 上游调整了可见行定位和消息渲染缓存,避免逐行定位带来的开销,并处理隐藏行对定位的干扰。[7][8] 本机未做浏览器性能对比,不引用上游耗时充当本机改善。
- 审批卡首次点击。 提交前核对服务端待审批请求;同一请求的传输 ID 变化可以校正。若逻辑请求已换,界面要求重新点击,不把之前的同意转给下一项。[9]
- 停止后残留审批卡。 Gateway 流停止时会收尾该次运行的卡片。停止前已完成校验的点击仍有竞态边界,不能写成“停止绝不会再发生任何动作”。[10]
exp-v0.52.646 自身的发布说明还包含删除会话后分享链接停止工作的修复。[2] 本次没有分享或删除真实会话,也未做上述审批交互的端到端测试。
升完怎样验收:分开看四层结果
版本号、健康接口、真实回复和存储,各自回答不同的问题。本机记录如下,时间统一按北京时间。
| 验收层 | 实际结果 | 能证明的范围 |
|---|---|---|
| 磁盘源码 | 11 月 7 日:Agent 精确 tag 为 v0.23.0;WebUI 为 exp-v0.52.646;各自 HEAD 等于目标 tag commit | 源码基线对应目标版本;不代表运行进程必然加载了全部新代码 |
| 当前响应 | 11 月 7 日:两端 HTTP 200、status=ok;Gateway 报告 version=0.23.0 | 对应健康端点当前可响应 |
| 真实对话 | 11 月 6 日:标准 CLI 最小对话取得真实回复 | 当时该调用链可用;不是本轮新测试,也不是浏览器全链路验收 |
| 会话存储 | 11 月 6 日验收通过;11 月 7 日只读复核同一旧会话仍在,预期回复匹配 | 该验收会话与回复已保存并可回读 |
本机 WebUI 保留定制修改。因此,“HEAD 对应 tag”与“工作树完全等于上游”也要分开。
在各自仓库确认精确版本
这些命令适用于 Git 安装,要求目标 tag 已在本地。进入自己的 Agent 仓库目录后运行;不要在 WebUI 仓库里查 Agent 版本。
# Agent 仓库;全部为只读命令
TAG=v0.23.0
git describe --tags --exact-match HEAD
git rev-parse HEAD
git rev-parse "${TAG}^{commit}"
if [ "$(git rev-parse HEAD)" = "$(git rev-parse "${TAG}^{commit}")" ]; then
printf 'HEAD matches target tag\n'
else
printf 'STOP: HEAD differs from target tag\n'
fi
git --no-optional-locks diff --name-only
git --no-optional-locks diff --cached --name-only
git log --oneline v0.22.6..v0.23.0 -3
--exact-match 要求 HEAD 精确落在 tag 上。^{commit} 把 tag 解析到提交,兼容轻量和附注 tag。两条 diff 分别检查未暂存与已暂存的受跟踪改动;它们不检查未跟踪文件。最后一条只展示升级区间末尾的三条提交,不是完整变更表。
若提示不是 Git 仓库、找不到 tag,或显示 HEAD differs,就停在版本层排查。不要据此直接执行强制 checkout,覆盖自己的补丁。
使用同一个第三方 WebUI 项目时,进入它自己的仓库运行:
# nesquena/hermes-webui 仓库;全部为只读命令
TAG=exp-v0.52.646
git describe --tags --exact-match HEAD
git rev-parse HEAD
git rev-parse "${TAG}^{commit}"
if [ "$(git rev-parse HEAD)" = "$(git rev-parse "${TAG}^{commit}")" ]; then
printf 'HEAD matches target tag\n'
else
printf 'STOP: HEAD differs from target tag\n'
fi
git --no-optional-locks diff --name-only
git --no-optional-locks diff --cached --name-only
本机两处均得到 HEAD matches target tag。有补丁的环境,还需核对补丁是否保留、运行进程是否来自预期目录。本文没有验证容器、桌面包等安装方式,不能用这些 Git 命令替代它们各自的验收。
对已配置的本地监听器检查健康
以下端口是本次环境的配置:WebUI 为 8787,Gateway 为 8644。它们不是所有安装的通用默认值。命令须在服务所在机器执行,且该服务已提供 /health;端口不同时应按自己的实际配置替换。
curl --noproxy '*' -fSs --max-time 5 \
-w '\nHTTP %{http_code}\n' http://localhost:8787/health
curl --noproxy '*' -fSs --max-time 5 \
-w '\nHTTP %{http_code}\n' http://localhost:8644/health
localhost 只访问本机。--noproxy '*' 避免本地请求绕进代理;--max-time 5 限定等待时间;-f 让 HTTP 错误返回非零。仍须检查 JSON,HTTP 200 本身不代表 status=ok。
本次实际回读的关键字段是:两端 status 均为 ok,Gateway 的 version 为 0.23.0。若连接失败、JSON 状态异常或版本不符,验收停在这一层。不要拿另一个服务的 200 补位。
用已有真实任务核对回复和持久化
本次复用了升级当晚的标准 CLI 验收,不为写文重发模型请求。真实回复已经取得,随后在对应运行 profile 的存储里核对同一会话与回复;第二天只读复核仍能找到匹配结果。公开稿不展示会话标识、提示词或回复内容。
自己做验收时,要确认 CLI、Gateway 与存储检查实际对应哪个 profile。只查一个默认数据库,很容易检查错对象。若尚无已授权的真实调用结果,这一层就保持“未验证”,健康检查不能代替它。
哪些结论现在还不能下
升级记录显示,原应用环境继续使用同一路径,原有 108 个包名保留。这不表示全部依赖版本没变。历史导入检查还出现过 profile 回退警告,不能描述为“零警告”或“所有 profile 路由正常”。
本轮未执行上游离线功能测试:原应用解释器没有 pytest,也没有为此安装依赖或新建环境。源码中的测试断言已审读,但没有算成本机测试通过。
以下项目也不在已验收范围:量化速度、内存和 Token 改善,真实 MCP 故障恢复,实际摘要效果,浏览器审批与停止的全部交互,以及设备、通知、定时业务完整端到端。准备让关键任务依赖它们时,需要单独安排对应验证。
如果日常经常遇到工具恢复、执行承诺停住或长会话问题,这些修复值得纳入升级评估。只用短对话、当前运行稳定的环境,可以按自己的维护窗口安排。第三方预览 WebUI 要另作决定,不必因为 Agent 升级就同时切换。
动手前确认自己的安装方式、补丁、配置和数据恢复点。本文只给出已经执行过的只读核验方法,没有验证跨安装形态的通用升级或回退脚本;保留恢复点也不等于已经演练过回退。
AI 辅助说明:本文使用 AI 辅助整理材料、撰写与检查;版本、代码解释及验收结论以所列官方来源和实际运行记录为依据。
Sources
[1] github.com/NousResearc… — Hermes Agent v0.23.0 — The Hearth Release [2] github.com/nesquena/he… — exp-v0.52.646 [3] github.com/NousResearc… — fix(agent): anchor the intent-ack tool gate on this turn's own user row [4] github.com/NousResearc… — fix(tools): expire the tool-definitions memo with its check_fn verdicts [5] github.com/NousResearc… — fix(tools): key the tools[] freeze on generation and selection, hold flips on pin restore [6] github.com/NousResearc… — feat(compression): keep uncertain claims labelled UNVERIFIED through compaction [7] github.com/nesquena/he… — changelog: #8228 long sessions stop freezing [8] github.com/nesquena/he… — perf(webui): address #8228 re-review — identity-only height reuse + hidden-row-safe anchor [9] github.com/nesquena/he… — fix(approval): reconcile card transport id against the server head before responding (#7091) [10] github.com/nesquena/he… — fix(gateway): Stop/server settle retire a default-stream run's approval cards