v0.21.4

Hermes Agent v0.21.4


Overview

v0.21.4 — The One-Gateway Patch。 2026 年 9 月 21 日发布。自 v0.21.3 以来:5,071 个非合并提交 · 5,169 个改动文件(+312,961 / −62,855)· 1,812 个已合并 PR · 2,116 个已关闭 issue,统计于提交 4b8a8134009a8727a289bcabeb0019fedd353128。

这个 tag 是为下游消费者切的:Docker 镜像、Hermes Cloud、托管部署都从最新的 release tag 构建,所以这个窗口里的修复必须先滚进一个稳定版本,云端用户才拿得到。官方在 release body 里明确写了,完整策展说明留给 v0.22.0——那一版会从 v0.21.0 起把全部内容补齐,包括亮点、功能分区与贡献者名单。本页记录的是这个 tag 的定位,以及窗口里那些“已经在你机器上生效、但还没被写进任何 release notes”的变化。


Highlights

1. 网关拓扑收敛:一台机器只有一个宿主网关

这是本窗口最大的架构变化。每个 OS 用户、每台机器只有一个 hermes gateway run 进程,它服务所有 profile;次级 profile 的 gateway run 会附着到宿主进程(打印宿主 PID 与被服务的 profile 集合,退出码 0),而不是启动第二个。gateway start --all / restart --all 现在指的是那一个宿主多路复用器,不会再扫掉别人正在跑的网关。

老开关 gateway.multiplex_profiles: false 已退役:它仍然能被解析,但不再能钉住独立网关进程,行为等同于未设置并打一行警告。命名 profile 不能再新建自己的 gateway unit(除非 --force);--standalone 被删除。从旧拓扑升级的路径是 hermes gateway migrate --multiplex --dry-run 先看计划,再 hermes gateway migrate --multiplex 执行——收敛由拓扑定义而非配置开关,所以重跑这条命令就是中断后的恢复手段。相关 PR:#118273、#118097、#118433。

2. 连接器:在对话里把应用连上

用户直接在对话里说“把 Notion 连上”,后端负责完成整次连接:收集字段、给出登录链接,同一个回合里就能调用新工具。桌面端、hermes --tui 与经典 CLI 看到的是同一个设置步骤。仓库自带 65 个已审核 MCP 服务器目录,其中 55 个使用 OAuth(#111008)。

3. CLI 与 Agent 表面:结构化输出、钉住的技能、存储日志模式

  • hermes chat -q "..." --format stream-json:stdout 输出 JSONL 事件(init / text / tool_use / tool_result / result),最终信封带 token 统计与退出码,方便 CI 在不抓屏的前提下消费运行结果(#90411)。
  • skills.auto_load:在 config.yaml 里列出的技能会在每个新会话开始时被完整加载,CLI / TUI / 网关 / cron / API agent 全覆盖;注入按“每个 agent 解析一次”实现,渲染字节稳定,不破坏 prompt 缓存(#92048)。
  • hermes sessions set-journal-mode delete|wal:把 state.db(或 --db 指定的其他存储)在 WAL 与 DELETE 之间离线转换;有进程持有文件时拒绝执行并逐个列出持有者,转换后回读文件头验证(#117684)。

4. Profile 隔离:一批 P1 级修复

“一个后端服务多个 profile”会放大定域错误,本窗口收掉了一批:#118275 让所有 REST 路由尊重请求里点名的 profile——此前 POST /api/memory/reset?profile=worker_beta 会删掉启动 profile 的 MEMORY.md,现在破坏性路由在多元 profile 主机上收到不带 profile 的请求时直接返回 400;#118373 让命名 profile 重新解析根 profile 的 OAuth 登录,修掉升级后 No Codex credentials stored 那类故障;#118246 让桌面端附着到宿主后端,不再为每个 profile 各起一个 hermes serve。

Improvements

  • mcp.discovery_concurrency:MCP 启动阶段的并发连接受该键约束(默认 4,0 为不限),8 个 stdio 服务器的实测峰值从 8 降到 4,避免开机瞬间的进程风暴(#117956)。
  • 未授权私聊三态:gateway.unauthorized_dm_behavior 增加 decline,可用 unauthorized_dm_decline_message 自定义话术,也可按平台覆盖。
  • session_search 时间窗:新增 after / before 边界(ISO 日期或 7d / 24h / 2w 这类相对时长),严格匹配失败时放宽为 OR 条件重试一次。
  • 桌面端:聊天/界面字体选择(#111226)、最小化到托盘(#118441)、修饰键轻点唤起 HUD(#118446)、每个会话独立的状态栈抽屉(#118407)、插件卸载与本地引擎一键更新。
  • 一次更新只重启一次网关:hermes -p X update 与 hermes -p Y update 合计只重启一次宿主网关,重启通知送达每个被服务的 profile(#118108)。
  • 目录更新:FAL 视频族新增 LTX 2.5 与 Kling O3 Standard;插件目录新增一批社区插件,并为每个插件与作者提供独立页面(README 钉在已审核提交上)。

Fixes

  • 托管网关返回 429 时,image_generate 与 FAL 视频会被识别为限流并重试一次,而不是提示“模型可能未启用”(#118311)。
  • 更新后发给某个始终未连接平台的通知,不再每 2 秒重试到永久(#118312)。
  • 自建单槽本地模型上,自动起标题不再与回合回复争抢同一个槽位(#117494)。
  • 图片被提供方拒绝时,只清理本次请求的副本,不再把整个会话标记为不支持视觉(#118316)。
  • 压缩 worker 的 TimeoutError 不再被误判为轮询超时(#118319);会话维护任务移到自己的线程池,不再饿死回合正文(#118318);ASCII 编解码恢复过程中会话历史保持完整(#118313)。
  • Windows 上清理只读 git 对象(检查点、插件、MCP 目录、profile 分发)不再失败(#117609)。

Upgrade

hermes update                      # git 安装
# Docker / Hermes Cloud:从本 tag 构建的镜像
docker pull nousresearch/hermes-agent:v2026.9.21

跑多个 profile 的机器,升级后建议先 hermes gateway status,再看一次 hermes gateway migrate --multiplex --dry-run。

← Hermes Agent Changelog