v0.21.6

Hermes Agent v0.21.6


概览

v0.21.6 —— 第一个走新稳定发布流水线的 tag。 发布于 2026 年 10 月 8 日。自 v2026.9.24(语义版本 v0.21.5)以来:8,867 个非合并提交 · 8,342 个改动文件(+772,490 / −225,600)· 2,106 个已合并 PR · 3,027 个已关闭 issue,测量于提交 818c13be1dc4fd28987e1e881a9408224afd4535。

这次的不同不在内容,而在产出方式:它是第一个由新的稳定发布流水线切出来的版本,形态是“一次 attempt ref、一个测过的 Docker 镜像、发布时留下一个 receipt tag“。翻译成人的话:发布尝试本身带着构建和测试,测过了才把镜像发出去,最后把这次的凭据记在 tag 上——下游拿到的是一个被测试过的产物,而不是”打了 tag 你自己去构建“。

本次发布的东西只有三类:tag、这个 GitHub release、Docker 镜像。桌面端、Termux 包和 Microsoft Store 这次不动,它们跟着下一个打包版本走。

官方在正文里明说:完整整理的发版说明推迟到 v0.22.0,那一版会从 v0.21.0 开始把亮点、功能分区和完整贡献者名单补齐,窗口里的东西一件都不会漏。在那之前,这个页面记录这个 tag 是什么形态,以及窗口里已经跑在你机器上的变化。


亮点

1. 新的稳定发布流水线:产物是被测过的

这是这一版最容易被忽略、但对下游影响最大的改动。以前 tag 是发令枪:镜像、托管部署、Nix 包各自在 tag 之后去构建自己。现在顺序反过来了——先有一次发布尝试(attempt ref),尝试里带构建和测试,通过了才发布 Docker 镜像,发布时再写 receipt。对使用者最直接的好处是:nousresearch/hermes-agent:stable 这次指向的是一个在发布前被测过的镜像。要确认自己拿到什么,看镜像 digest,而不是记住的拉取时间。

2. 三组安全修复(本次正文单独列出)

  • Dashboard 认证加固(PRs #133367、#133369、#133370,含会话接管 #130685)。Tenable Research 一次性报告的四个问题(TRA-725 ~ TRA-728):伪造 X-Forwarded-For 可重置密码登录限流并绕过每 IP 上限;未认证的登录请求可向审计日志写入不限量内容;公开 /auth/ 路由没有请求体大小上限;原生登录可把验证码发往非回环地址,进而导致会话接管。
  • 仓库 git filter 加固(#130661)。自动 git 调用(会话工作区快照、子代理 worktree、kanban、worktree 清理、hermes -w)可能被不受信任仓库自身配置里定义的 clean / smudge / process filter 程序劫持,且发生在你敲第一句话之前。
  • 邮件网关发件人加固(#125212、#124322)。From 头里带引号的显示名可被构造成“看起来是白名单里的发件人”,让攻击者的邮件通过邮件白名单。

3. 语音:语音轮有了自己的模型,桌面端多了一种对话模式

  • 语音轮独立模型:新增 auxiliary.voice_chat 档位(provider / model / reasoning_effort),只替换回答“说出来的那一轮”的模型;打字仍用会话模型。CLI/TUI 语音、桌面语音对话、消息平台语音条都适用;用量记在 voice_chat 名下。桌面端在 Settings → Models → Auxiliary models 里配置,命令行在 hermes model → Auxiliary models。
  • 语音轮默认关闭思考。即使档位留在 auto(由会话模型回答)也一样关闭;模型不支持关思考时退到最低可接受档位,运行期被拒绝会被记住。
  • 桌面全双工模式:voice.voice_chat_mode: gpt-live 用一个全双工语音模型替换整条 STT → 回合 → TTS 链条,它自己处理打断和背景噪声、没有工具,真实请求全部转交给会话模型执行。需直连 OpenAI key(voice.gpt_live.api_key / OPENAI_API_KEY / VOICE_TOOLS_OPENAI_KEY),语音层按 $0.05/分钟会话时长计费(空闲也算)。仅桌面端;CLI/TUI 的 /voice 仍是 chained。

4. 图像路由统一:MCP 图片、computer_use 截屏、浏览器截图共用一道门禁

  • MCP 工具的 ImageContent 以前只以 MEDIA:/path 形式返回,能看图的模型也拿不到像素(原生 cua-driver 服务器因此完全看不到屏幕)。现在活跃线路能接受工具结果里的图片时,注册表处理会返回多模态包裹:从本次调用自己写的缓存取图、重编码、按 vision.embed_target_bytes(默认 256 KiB,夹在 64 KiB–4 MiB)与 1568 px 规整,每个结果最多 4 张;文本半边保留 MEDIA: 路径。
  • tools.vision_tools._native_tool_result_images(provider, model, cfg) 现在是唯一门禁,vision_analyze、浏览器截图、computer_use 截屏、MCP 图片四路共用。computer_use 截屏以前忽略 agent.image_input_mode、对纯文本模型也走原生,现在与门禁一致。
  • 顺手两个安全处理:MCP 结果里的不可见 TAG 字符(U+E0000–U+E007F)会被剥除(合法区域旗帜 emoji 标签序列保留);厂商 _meta 透传,modelcontextprotocol / mcp 这类协议保留前缀下的键丢弃。

5. /yolo 现在跟着会话走:重启不再静默失效

/yolo 以前只翻转 tools.approval 的内存集合,所以任何网关重启都会悄悄把该聊天退回手动审批,而用户仍以为它在放行。现在标记保存在该聊天的路由条目上(SessionEntry.yolo,持久化于 gateway_routing),每轮从条目重新装配实时标记,跨压缩与绑定重指一并带过去。同时 /new、/resume、/branch、自动重置会同时清掉持久化副本与内存副本——重启绝不会复活你已经放弃的旁路。文档里“/yolo 会设置 HERMES_YOLO_MODE“的说法已纠正:那是另一种独立开启方式。

6. 窗口里其它(官方正文点名、本站暂未逐条展开)

CLI / TUI / 桌面说话时的实时转写;桌面端收藏与置顶模型出现在选择器顶部、订阅触顶前的用量提示、被限流的 provider 会说明原因与恢复时间;hermes model 里可选本地模型,Linux x64/arm64 上的 llama.cpp CUDA;跨核心 / 桌面 / TUI 的可插拔分层语言包;摘要优先的 hermes status;评审面板差异范围选择器(未提交 / 分支 / 上一轮);cron 存储不可写时 cron、doctor 与主渠道的告警;activate.fish;统一的 Kanban 工作流定义;目录中新增 GPT-6.1 Sol 与 Claude Sonnet 5.5 / Haiku 5.5。

改进

  • 插件名称解析收敛为单一解析器(_find_plugin_entry):先试规范 key 或清单名,再试唯一的叶子名,最后走安装器自己写的记录(.install-metadata.json)解析目录名;歧义时直接失败、不猜。目录名与清单名不一致的条目(484 个中 17 个,如 hermes-memory-wiki → memory-wiki、touchdesigner → td)现在 enable / disable / show / capabilities / update / remove 都认。桌面端“打开这个包”从三次操作变成一次开关。
  • 桌面插件开发:符号链接的检出(ln -s ~/src/my-plugin ~/.hermes/plugins/my-plugin)现在会被识别并驱动桌面半边,拷贝按字节差异同步并监听源文件热重载;hermes plugins doctor <id> 会指出“桌面端在跑一份旧拷贝”及刷新方式。
  • 上述两条合并于 tag 切点之后,属 main-only:跟 main 的 git 安装已有,跑 tag(含 Docker 镜像)的安装要等下一个 tag。

升级

# CLI(git 安装)
hermes update

# Docker / Hermes Cloud
# nousresearch/hermes-agent:stable(或 :latest)

# 桌面端与 Termux
# 本版无变化,随下一个打包版本一起更新

升级后建议花一分钟确认自己拿到的是什么:hermes version(git 安装会带上领先 tag 的距离与短提交),Docker 用户看镜像 digest。

← Hermes Agent Changelog