v0.18.0

Hermes Agent v0.18.0 — The Judgment Release(审判者版本)


概览

v0.18.0 — The Judgment Release(审判者版本),2026 年 7 月 1 日发布。~1,720 次提交 · 998 个合并 PR · 2,215 个文件变更 · ~251,000 行新增 · ~41,000 行删除 · 949 个 issue 关闭 · 370+ 社区贡献者

这个版本的核心转变就一句话:Hermes Agent 学会了用证据说话,而不是靠“我感觉搞定了”来交差。Mixture-of-Agents 从一个小开关进化成了一级模型系统——每个参考模型的推理过程你都能看到,最终答案实时流式输出。/goal 有了完成合约,/learn/journey 让 Agent 的自我进化变得可视、可控。底层方面,Gateway 实现了 scale-to-zero + 优雅排空,已经可以上生产环境了;桌面端也终于有了真正的一级编程项目系统。

除此之外,还有一件事:团队花了十二天,把整个仓库里所有 P0 和 P1 全部干掉了。零 P0,零 P1。这是新的底线。


P0/P1 大清扫

优先级 Issue 关闭 PR 合并
P0(致命) 3 8
P1(高危) 493 188
合计 496 196

十二天消化了 ~692 个最高优先级项。最后一个倒下的 P0 是中断保护压缩的 sibling-fork bug(#56391,由 #56416 修复),发版前夜通宵拿下的。

特别鸣谢 @kshitijk4poor,这位大佬跟核心团队一起日夜爆肝——cron 可靠性波次、compression-fork 修复、credential-exfil 加固,还有一大票 P1 关闭都是他的功劳。

从现在开始,P0/P1 永远保持


重磅功能

1. Mixture-of-Agents(MoA)—— 一级模型选择器

MoA 从一个小开关跃升为模型系统的一等公民。每个命名好的 MoA preset 现在作为虚拟模型挂在 moa provider 下面——在 CLI、TUI、桌面端、Gateway 的每一个模型选择器里,它和 Claude、GPT、Grok 平起平坐。选 “my-council” 就跟选任何一个模型一样顺手,Hermes 自动把你的 prompt 路由到那个 ensemble。

像选模型一样选专家团:

# 在 CLI 中通过模型选择器切换到 MoA preset
/hermes model:moa/my-council

# /moa 变成一次性快捷方式——用默认 preset 跑一次,跑完自动恢复之前的模型
/moa 评审一下这个架构方案

每个参考模型的推理单独展示。 在 CLI、TUI、桌面端中,每个参考模型的完整输出独立渲染成一个带标签的区块——GPT-5 怎么想的、Claude 怎么想的、Grok 怎么想的,一清二楚。然后 aggregator 汇总出最终答案。你不再是等宣判结果,而是现场观摩委员会怎么讨论的。

Aggregator 实时流式输出。 不再是沉默半天然后一堵墙一样砸过来。最终答案在三个终端界面里逐 token 流式推送。

配置方法:

# hermes.config.yaml
moa:
  presets:
    my-council:
      references:
        - provider: anthropic
          model: claude-sonnet-4-20250514
          role: reference
        - provider: openai
          model: gpt-5
          role: reference
        - provider: xai
          model: grok-3
          role: reference
      aggregator:
        provider: openai
        model: gpt-5
  save_traces: true  # 可选:把完整 turn trace 持久化到 JSONL,方便调试和评估

底层原理:

  • 参考模型能看到完整工具状态,在每次 user/tool 响应时都会触发——不只是初始 prompt
  • Advisory references 在 user turn 结束并拿到 reference-role system prompt
  • 参考模型和 aggregator 模型通过各自 provider 的真实路由调用——不走捷径
  • Context window 从 aggregator 解析,不再用 256K 默认值
  • Auxiliary tasks 自动解析到 aggregator
  • 虚拟 provider 被阻止作为 reference/aggregator slot——杜绝递归 ensemble
  • 手改 preset 配置也能容错——不会因为格式有点小问题就崩
  • MoA slot provider-identity 统一收敛到 call_llm 单一 choke point
  • HermesBench 评估结果已文档化

2. Verification —— Agent 学会了自己证明工作做完了

Hermes 现在会记录编码工作的验证证据,并通过实际跑你的项目检查来决定是否完成——而不是凭嘴说“搞定了”。

/goal 完成合约:

# 设定目标时声明"完成"的标准
/goal "修复 auth handler 里的竞态条件"
# Hermes 会提示你定义"搞定"的标准:
# "搞定 = 所有单测通过 + 零 lint 报错 + 并发测试连续 10 次不出问题"

# standing-goal 循环拿证据说话,不是模型说了算。
# 合约不满足就不停。
# 把 goal 循环挂到后台进程上,不用反复戳 Agent
/goal wait 12345

验证证据账本:

# hermes.config.yaml
coding_context:
  verify_on_stop: auto     # 自动检测项目类型,跑对应的检查
  pre_verify:              # 自定义验证钩子,声称完成前必须先过这关
    - command: "npm run test -- --coverage"
    - command: "npm run lint"
    - command: "npm run typecheck"

实现细节:

  • Profile 级别的证据账本,由 agent.coding_context 自动检测
  • Gateway 通过 GET /api/verification/status 暴露验证状态
  • pre_verify 钩子接受任意脚本作为验证关卡
  • 验证停止循环 + 临时验证脚本支持
  • verify-on-stop 默认关闭,附带一次性 v32 迁移;跳过纯文档编辑;消息界面禁用
  • Surface-aware “auto” 默认已恢复(区分交互式和非交互式场景)

3. /learn —— 一键把任何工作流蒸馏成可复用技能

/learn <任何东西>,Hermes 自动从你指定的内容中提炼出可复用 skill,并按照 CONTRIBUTING.md 标准写入。下次再需要这个工作流,它已经在技能库里了。教 Hermes 新本事,现在就是一条命令的事。

# 从目录学习——package.json、脚本、README,全部分析
/learn ./my-deployment-scripts

# 从 URL 学习——文档、API 参考、博客文章
/learn https://docs.example.com/api-reference

# 从刚走完的工作流学习——Hermes 观察最近 N 轮对话
/learn workflow  # 自动识别最近的工作流模式

底层发生了什么:

  • 分析结构(目录内容、URL 内容或对话历史)
  • 识别可复用模式和领域特定流程
  • 按你项目的 CONTRIBUTING.md 标准生成 skill 文件
  • 遵守混合要求——如果 CONTRIBUTING.md 规定了特定格式,就用那个格式
  • 下次需要这个工作流时,它已经在技能库里等着了

本版本新增的 skill 工具:

  • cloudflare-temporary-deploy —— 可选 skill,快速 Cloudflare 部署
  • creative-ideation v2.1.0 —— 创意方法库

4. /journey —— 可交互的 Agent 记忆时间线

CLI 和 TUI 都有了 /journey —— 一条展示 Hermes 积累的记忆和技能的学习时间线,支持原地编辑和删除。再配上桌面端新增的 memory graph(一个自上而下、可交互的放射状记忆时间线),你第一次可以真正到你的 Agent 知道什么、观察它如何成长、并修剪掉错误的记忆。

/journey
# 显示所有记忆和技能的可滚动时间线
# 方向键:浏览
# Enter:展开详情
# e:原地编辑
# d:删除

桌面端记忆图谱: 放射状时间线可视化(俯视图、交互节点),按时间段聚类展示记忆和技能。可播放——拖动时间轴、缩放到特定时间段、点击节点查看完整记忆内容。

5. Background Fan-Out —— 后台并行委派子 Agent

delegate_task 现在可以把多个子 Agent 作为后台任务并行分发——你的主聊天完全不受影响。等全部子 Agent 完工后,结果合并成一个 turn 返回给你。

# 并行调研委派
/delegate_task "并行调研 A、B、C 三家竞品——列出定价、功能、最新融资情况"

# 背后发生了什么:
# 1. 三个后台子 Agent 同时启动
# 2. CLI/TUI 状态栏显示后台活跃数
# 3. 主聊天保持响应——你继续干别的事
# 4. 三个子 Agent 全部完工后,一份合并汇总送达

基础设施:

  • CLI + TUI 状态栏实时跟踪后台子 Agent
  • 后台有活时静默提示“稍后回来”
  • 一份合并结果——不用挨个盯子 Agent

6. 桌面端 —— 一级编程项目系统

桌面端终于有了真正意义上的 per-profile Projects 功能,底层是 project → repo → lane 模型。你的编程工作不再散落在零散的聊天会话中,而是组织成 Agent 看得懂、能操作的项目。

项目结构解剖:

Project "auth-service"
  ├── Repo: github.com/myorg/auth-service
  │     ├── Lane: main(当前工作分支)
  │     ├── Lane: feat/oauth-refactor(worktree)
  │     └── Lane: fix/race-condition(worktree)
  └── Tools: Agent 可调用的项目工具(lint、test、build)

编程驾驶舱功能:

  • 侧边栏:per-profile 项目列表 + 编码工具栏
  • 审查面板:git 状态、diff 视图、worktree 管理
  • 远程 Gateway 感知的文件夹选择器:托管 Gateway 也能用
  • Git 驾驶舱:内联状态、PR 风格 diff 审查、worktree 创建/切换/删除

多终端面板:

  • 只读 Agent 终端——观察 Agent 在干什么
  • 终端标签页和滚动历史跨重启持久化恢复

PR 风格文件 diff:

  • 文件变更以内联 side-by-side 或 unified diff 形式展示
  • 内置就地编辑器用于文件预览窗格
  • Assistant markdown 支持内联富嵌入、图表和警告框

UX 增强:

  • 对话时间线 rail——长线程导航利器
  • 上下文用量明细弹窗——看清楚你的 context window 都塞了什么
  • 子 Agent 旁观者转录——只读观察窗口
  • 可拖拽浮动 composer——把输入框弹出独立窗口
  • 自动 TTS composer 开关——朗读回复
  • 窗口状态持久化——大小、位置、最大化状态跨启动记住
  • 重新设计的 clarify prompt
  • 共享 overlay Panel 原语——cron/profiles/agents 统一管理

桌面宠物:

  • Opt-in 漫游宠物,更安静、更自然的 roam 行为
  • Alt+滚轮缩放——永不裁剪
  • 帧精确孵化流程 + CPU 安全色度渲染
  • 弹窗 overlay + 通知

重构浪潮:

  • Composer 分解为独立 engine hooks
  • Branch/esc/url/placeholder/popout engines 各自提取为独立模块
  • God file 拆分:thread.tsxsidebar/index.tsx、onboarding overlay、use-prompt-actions 全部拆成专注模块
  • 共享 WebSocket 层解耦桌面端与 Dashboard(hermes serve
  • 性能:限制 tool-result 渲染,防止 /learn 大批量数据冻结界面;负载下快速会话切换

7. Gateway —— Scale-to-Zero + 优雅排空

Gateway 现在可以在空闲时进入休眠,并在重启、迁移或自动更新前优雅排空——不会丢失正在进行的对话。

Scale-to-zero 工作流:

# 启动 Gateway 并开启 scale-to-zero
hermes serve --scale-to-zero --drain-timeout 30s

# 背后逻辑:
# 1. Gateway 监控活跃连接
# 2. 闲置一定时间后(可配置),进入休眠状态
# 3. 新连接进来时,透明唤醒
# 4. 闲置期间零计算开销

优雅排空(安全关机):

# 维护/重启前优雅排空
hermes serve --drain

# 进行中的对话自然完成
# 新连接被拒绝并收到 retry-after 信号
# 排空超时后持久化对话转录
# 忙碌/空闲状态暴露给生命周期编排系统

生产级加固:

  • 默认 restart_drain_timeout 设为 0,干掉 systemd crash loop
  • 从卡死的 draining/degraded 状态自动恢复
  • 排空标记时抑制 home-channel 关机广播
  • Harden dormancy arm-gate 防止 disabled placeholder 平台干扰

8. Relay(Phase 5 / 6)——中继系统成熟化

中继基础设施在多平台、多 Agent 部署方面大幅成熟:

  • Wake 原语(Gateway 侧)——远程中继可唤醒休眠的 Gateway
  • Going-idle / buffered-flip 原语——状态转换时干净交接
  • WebSocket 上的 passthrough_forward——轻量级中继消息代理
  • Multi-platform-per-agent 身份——一个 Agent、多个消息平台、统一身份
  • Per-frame egress——精细控制哪些消息通过哪个通道发出
  • 稳定的 instance id——自配置时转发,方便可靠追踪
  • Relevance policy在 connector 层声明——中继层过滤噪音
  • 基于 delivery 的授权——中继事件按 delivery 鉴权,而非 source.platform
  • scope_id wire key 全面采用——清理平台特定的 scope 术语

9. Google Vertex AI —— 一级 Provider

Vertex AI 现在是 Gemini 模型的一级 provider,走 Vertex 的 OpenAI 兼容端点。核心突破:Hermes 自动签发并刷新短周期 OAuth2 access token,从你的 service-account JSON 或 Application Default Credentials 中搞定——不再需要静态 API key。

# hermes.config.yaml
providers:
  - name: vertex-gemini
    provider: vertex
    credentials: /path/to/service-account.json
    model: gemini-2.5-pro
    region: us-central1

  # 或者用 Application Default Credentials(ADC)——不需要指定文件路径
  - name: vertex-gemini-adc
    provider: vertex
    model: gemini-2.5-flash
    region: europe-west4

为什么这很重要: 普通 custom-provider 方式连 Vertex 总是 mid-session 断连,因为 token 约 1 小时就过期。Hermes 现在完整接管 OAuth2 生命周期——签发、刷新、重试——全程透明。把 service account 指向它,剩下的事不用管。

继承并现代化了 @slawt 的原始 PR #8427

10. 消息平台 —— 重大更新

Cron 可续接:

  • Cron job 现在支持优先线程续接,DM 镜像为兜底方案
  • Slack 支持扁平频道内可续接 cron 投递
  • Cron 创建/列表时检查 Gateway 是否在运行

平台级更新总览:

平台 更新点
Telegram 可配置命令菜单 + 提升默认上限,skill 不会被挤出;富文本草稿预览独立开关;send pool 超时后排空再重试
Slack Opt-in Block Kit 渲染 Agent 消息;--no-assistant 标志用于 manifest 生成
Discord 通过 -# 前缀将推理内容渲染为副文本;可配置 display.reasoning_style
WhatsApp 通过 Baileys bridge 原生媒体投递(send_video/send_voice/send_document
Teams 原生 send_video/send_voice/send_document 支持
Signal AAC 语音笔记重新封装 + 共享 markdown 格式
iMessage Photon sidecar 升级到 spectrum-ts v8,支持 tapback 关联
Raft 新部署 Gateway setup wizard

适配器迁移: Slack、钉钉、WhatsApp、Matrix、飞书、Telegram、企业微信、Email、SMS 适配器全部迁移到 bundled 格式,加载更快,版本管理更可靠。


新增内置工具与命令

工具 / 命令 描述 用法
web_extract 截断并存储网页内容(替代 LLM 摘要,更快更省) web_extract https://example.com
/reasoning full 不限制思考 token 上限——适合深度分析 /reasoning full 然后输入你的问题
llm.oneshot 通过 Gateway RPC 发起一次性 LLM 调用 hermes rpc llm.oneshot '{"prompt": "..."}'
project.facts 通过 Gateway RPC 暴露编码上下文项目事实 hermes rpc project.facts
/timestamps 切换聊天历史中的消息时间戳显示 /timestamps
/history 可组合的历史记录视图,带搜索和过滤 /history 关键词
/prompt $EDITOR 中编写完整 markdown prompt,保存后排队发送 /prompt
/journey 交互式记忆/技能时间线,支持原地编辑/删除 /journey
/learn 从目录、URL 或工作流中蒸馏可复用 skill /learn ./路径
/moa 通过默认 preset 执行一次性 MoA prompt /moa <问题>
/goal wait <pid> 把 goal 循环挂到后台进程 /goal wait 12345
ctx.profile_name 插件中的会话无关 profile 访问 ctx.profile_name
Blank Slate 极简 Agent 启动模式——按需开启一切 配置:setup: blank_slate
cloudflare-temporary-deploy 可选 skill,快速 Cloudflare 部署 Skill 安装
creative-ideation v2.1.0 扩展创意方法库 Skill 安装

改进

核心 Agent 与工具

  • 并发 @-引用展开:多个 @file@url 引用现在并行解析而非串行——多引用 prompt 速度显著提升
  • 人性化工具标签:所有内置工具现在有可读的自然语言描述,降低学习曲线
  • HERMES_WRITE_SAFE_ROOT:支持多个允许写入目录——将 Agent 文件写入限制在审批路径内
  • Opt-in HTTP/WS 体抓取:将请求/响应体记录到隔离的 gui_bodies.log(分享排除,需手动开启)
  • Per-reasoning-model stale-timeout floor:区分流式和非流式 LLM 调用的超时检测,避免误判
  • SIGTERM→SIGKILL 升级:host-pid 终止后宽限期过后升级,确保清理彻底

压缩与会话

  • 原地压缩:不创建新 ID,原地压缩单个会话;默认翻转为 true 并加了防护修复
  • 备份扩展:升级前快照现在包含 projects.db 和 kanban 看板,保证状态完整

Provider 与模型

  • Krea 通过托管的 Nous Subscription gateway 可用
  • Z.AI 端点选择器(Global/China/Coding Plan),区域感知路由
  • Ollama-cloud reasoning_effort 接线完成
  • 移除 google-gemini-cli 和 google-antigravity OAuth provider(整合到 Vertex AI)
  • 支持 NOUS_INFERENCE_BASE_URL 环境变量覆盖 Nous OAuth
  • 空闲 dashboard/gateway Agent 保持 Nous auth 新鲜——防止会话过期

Kanban

  • 任务生命周期插件钩子:claimedcompletedblocked 事件
  • 带类型的阻塞原因 + unblock-loop breaker——防止无限阻塞/解阻塞循环
  • Handoff freshness stamping——追踪任务所有权最后转移时间

LSP

  • PowerShellEditorServices 语言服务器加入——PowerShell 诊断现在可用
  • mem0 v3 API + OSS 模式 + update/delete 工具,记忆管理升级

Web Dashboard

  • 未认证加载自动 SSO 跳转
  • No-provider non-loopback 绑定时的交互式认证引导
  • Confidential-client OIDCclient_secret)支持自托管身份提供商
  • API Key 目录:所有 memory-provider key 在 OPTIONAL_ENV_VARS 中列出
  • 自定义 .env key:从 Keys 页面列出并添加任意环境变量
  • Cron 执行字段暴露用于监控
  • 备份管理:从 Web UI 导入/创建/下载
  • PTY 异步化:spawn/close 操作移出 event loop,防止阻塞

性能

  • 冷启动优化:Gateway 平台适配器懒加载;配置和插件 manifest 用 CSafeLoader(libyaml)解析,替代纯 Python YAML
  • FTS5 写锁竞争:合并并索引 segment,减少并发写入时数据库锁竞争
  • Profile 列表:单次遍历 alias map + skill 数量缓存 + event-loop 卸载 list_profiles——多 profile 系统提速明显
  • Gateway API 服务器:可配置并发运行上限,防止高负载下 DoS

安全与可靠性

攻击面加固

  • MCP-config 持久化攻击面锁定——防止恶意 skill 跨会话常驻
  • Cron base_url 凭据窃取拦截——cron job 不能通过覆盖 provider base URL 来截获凭据
  • 前缀密钥哨兵(non-reusable sentinel)——文件读取中可能泄露 secret 的特定模式会被捕获并拒绝
  • Slack xapp- token 脱敏——应用级 token 自动从日志和诊断信息中抹除
  • 浏览器 cloud-metadata floor——所有 CDP 后端强制执行(包括非本地场景)
  • 导航后重检 privat-network guard——防止通过重定向绕过
  • /resume/sessions 限定到调用方 origin——防止 IDOR 攻击
  • aiohttp CVE 底线设为 3.14.1,覆盖所有 lazy messaging path,附带 pin-drift guard

Cron 可靠性波次

  • Fail closed——unpinned job 的 provider 漂移时不静默回退
  • Missed-grace job 只跑一次——不再无限推迟,防止无限追赶循环
  • BaseException 时 ticker 存活 + heartbeat 感知状态——cron 不会无声挂掉
  • MCP server 按 job 叠加到工具集——每个 cron job 拿到正确的工具
  • Model-tool path guard + auto-resume loop breaker——防止工具链失控

Windows 可靠性

  • 抑制 Gateway 操作期间的 console 闪烁
  • Harden Gateway 重启,处理各种边界情况
  • PATH fallback 时优先用 cmd npm shim
  • GUI 更新后窗口化重生 Gateway
  • WhatsApp/桌面集成优先用托管 node

回滚记录(本窗口内)

  • Cron job 存储回退到 per-profile(回滚集中存储 #32117 + #50993
  • auth.json 克隆已禁用——复制 OAuth grant 会导致兄弟撤销
  • Windows terminal-popup PR 回滚,待稳定性重新评估
  • prompt_caching.enabled 开关撤回,待重新评估

Breaking Changes(破坏性变更)

  • verify-on-stop 默认关闭:一次性 v32 迁移;跳过纯文档编辑;消息界面禁用。如需开启:
coding_context:
  verify_on_stop: auto
  • 移除 google-gemini-cli 和 google-antigravity OAuth provider——迁移到 Vertex AI provider
  • 适配器迁移:消息平台适配器现为 bundled 格式——自定义适配器路径可能需要更新

升级

hermes update

全新安装请参考安装指南


GitHub 完整 Changelog

← 版本发布