Hermes Agent v0.20.5
Overview
v0.20.5 — The Housekeeping Release(大扫除版)。 发布于 2026 年 8 月 19 日。自 v0.20.4 以来 合并约 323 个 PR · 约 746 个提交 · 改动约 1,250 个文件(+111,500 / −20,701)。
这个窗口没有单一大 feature,却把一堆“早就该有”的事做完了。头条是 Bot Mode 群聊终于能收文件了:PDF、图片、任意附件都支持拖拽上传,每个响应的 bot 都能看到;旧会话自动折叠成一行摘要,群聊不再滚出天际;头像变成了由 agent 名字确定性生成的 blob 脸,还多了 4 个新剪影。开发者日常这边,hermes worktree list/prune 让多 agent 工作流积压的 worktree 和已合并分支有了安全的回收通道;hermes update --plan 和结构化更新回执让“更新到底发生了什么”第一次有了可审计的答案;cron 任务像其他 agent 一样获得持久记忆,还能按任务单独指定 reasoning effort。另外 opencode-free 成了真正零配置的免费模型——不填任何 key 就能出现在 /model 和桌面选择器里。
这是补丁版本,官方说明从简,完整文档随 v0.21.0 发布。本页覆盖该窗口最有价值的部分。
Highlights
1. Bot Mode 群聊:能收文件了,旧消息自动折叠
群聊过去只能打字,现在文件是一等公民:群聊接受 PDF、文件和拖拽上传,每个参与响应的 bot 都能看到附件(#97b41f8cf、#b359db72e)。长群聊也不再刷屏——旧对话自动折叠成一行摘要(“▸ API design … 14 replies · 2h ago”),最新对话始终完整展开(#8505559fa)。
头像也换了风格:Bot Mode 头像默认使用由 agent 名字确定性生成的 blob 脸(同一名字永远同一张脸),并新增 4 个剪影(blobatar 2.0.0,#a77ee88ce、#cb0fd836a)。
2. hermes worktree list/prune——积压 worktree 的安全回收
多 agent 并行工作流(hermes -w / /worktree new)跑久了,.worktrees/ 里会积压几十个树和上百个已合并分支。启动时的静默清理只敢碰“干净且完全合并”的树,其余永远留着。现在有了显式、可预演的回收命令:
hermes worktree list # 审计:每棵树一行,含年龄/体积/裁决/原因
hermes worktree prune --dry-run # 只看计划,不改任何东西
hermes worktree prune # 回收安全树 + 已合并分支
安全不变量和启动清理器完全一致:带跟踪改动的树任何情况下都不删,未推送的独有提交绝不删(用 git cherry 判断“独有”),存活进程锁定的树不碰,分支只在它的 worktree 成功移除后才删,纯未跟踪的杂物先归档到 ~/.hermes/archive/worktree-prune/ 再回收——只收垃圾,绝不丢活物(#f309f92d3)。
3. hermes update --plan + 结构化更新回执——更新过程可审计
更新终于“证明”自己做了什么,而不是假设成功(#0aecadc17、#1d74833d8):
hermes update --plan:只读模式,列出安装类型(git/docker/nix)、所有 profile 下每个正在运行的 Hermes 服务及其 supervisor 和运行中的代码版本,以及每个服务将如何重启。在活着的集群上跑也完全安全。- 结构化回执:每次
hermes update把“发现了什么、做了什么、跳过了什么(及原因)“写成 JSON 记录,存到<HERMES_HOME>/logs/update_receipts/。更新后还会读取每个 profile 的gateway_state.json,把每个存活 gateway 的code_sha与刚更新的 checkout HEAD 比对,打印一张群版本矩阵——混合版本集群(#88654 那类)第一次变成醒目的报告,而不是潜伏状态。
4. cron 任务有记忆了,还能按任务调思考档位
cron 任务过去用 skip_memory=True 构造,MEMORY.md/USER.md 从不加载,memory 工具也被硬性剥离——用户只能靠 hacky 绕过。现在 cron agent 和其他 agent 一样启用持久记忆(#ef04d846e):任务能读到、也能更新你的持久记忆。
同时每个任务可以单独指定 reasoning effort,独立于全局 agent.reasoning_effort 和按模型的 reasoning_overrides(#4e1dd1a74):
# 重活跑 high,轻活跑 minimal,不动全局默认
hermes cron create "0 7 * * *" --reasoning-effort high --prompt "深度分析本周仓库趋势"
hermes cron create "every 5m" --reasoning-effort minimal --prompt "健康检查并汇报"
档位:none/minimal/low/medium/high/xhigh/max/ultra。模型不支持的档位会被 provider 自动钳制(在 max 封顶的模型上钉 xhigh 就跑 high)。编辑时传空字符串清除钉住值。
5. opencode-free:真正零配置的免费模型
opencode-free 成为完全 keyless 的 provider——不填环境变量、不注册账号、匿名走线(#ca06b8768),并通过目录漂移同步把 live 的 OpenRouter 免费模型拉进列表(#624723130)。升级后 keyless provider 在所有地方都算“已认证”:opencode-free 直接出现在 /model 和桌面选择器里,零设置可用(#2a2307e68)。
hermes model # 选择 opencode-free,不需要任何 key
6. 执行纪律与运行时停滞护栏
来自 Composio eval 发现的一批“执行纪律”加固:后台审查取消同步化、前台优先级正确(#37da0d4d5、#b883756b7)、Ox Alpha reasoning effort 钳制后可靠到达线缆(#d4d04098a)、提示缓存的 cache-control 装饰幂等化(#0fc52b055)。这类改动没有炫酷的演示,但长跑任务更不容易卡死或乱花 token。
Improvements
- 桌面性能:Bot Mode 首屏水合(paint-first)、compositor spinner、两个渲染器都启用 React Compiler——桌面更快更跟手。
- 旧会话编辑修复:编辑老会话里的消息不再失败(profile DB + 窗口相对序号,#02e270a47)。
- Telegram DM 草稿:DM 草稿流式发送后保留富文本(#790c85014、#216c98aae)。
- Docker stage2:
API_SERVER_KEY引导不再依赖.env存在(#7a17a1b8a)。 - Bot Mode:群聊成员的长时任务不丢(#88885 后续)、跨机器群聊路由稳定(#88921)、一个 bot 可同时在多个群聊(#88980)。
Fixes
- 原生压缩在 checkpoint 前剪枝时保留压缩摘要消息(#fb27614ad)。
- cron 调度任务不再把 MEMORY.md 塞进任务 prompt(#fc9cbc872,与记忆启用的最终语义一致:任务可读写持久记忆,但调度侧不做多余注入)。
- 目录漂移同步:清掉死掉的免费 slug、拉进 live OpenRouter 免费模型(#624723130)。
- Gateway:orphan-reaper 服务排除扩展到整个 launchd fleet,BSD 兼容 ps 标志 + 全 profile launchd pid 发现(#42bd567a8、#d8047c303)。
- OpenAI 适配器容忍稀疏 response 对象;relay 解开惰性完成流并使用规范化托管操作名(#85581、#85579、#85582)。
Upgrade
hermes update
升级后运行 hermes doctor 验证安装,并重启 gateway(hermes gateway)让平台变更生效。想先看这次更新会动什么:hermes update --plan。