Hermes Agent

Hermes Agent Gateway 消息平台与插件机制

Hermes Agent Gateway 用平台注册表和插件目录接入 Telegram、Discord、Slack、飞书等消息渠道,新平台不必反复修改核心代码。页面拆解适配器注册、懒加载、会话身份、跨平台镜像和共享记忆,帮助你理解多入口连续对话的真实机制与边界。查看完整拆解与风险提醒。便于后续检查。

自动化 进阶

📚 系列导航:上一篇 Hermes Agent MCP 配置教程 已经讲清“MCP 配置与双向集成指南”;本篇聚焦 Hermes Agent Gateway 配置;下一篇 Hermes Agent 使用入口指南 继续学习“CLI、桌面 App 与 Web Dashboard 使用入口”。

先给结论:23 是版本口径,平台注册表才是长期价值。 新平台通过插件目录注册,不必反复修改 Gateway 核心;因此平台数量继续增长时,核心代码不需要跟着膨胀。

ℹ️ 版本说明: 原稿基于 Hermes Agent v0.16.0(2026 年 6 月)源码整理。本文保留其版本化机制分析;命令、数量和界面请以 Hermes Agent 官方文档 与本地输出为准。

Hermes Gateway 支持平台的版本口径

从 Telegram、Discord、Slack、WhatsApp、Signal、SMS、邮件,到钉钉、飞书、企业微信、微信、QQ、腾讯元宝,再到 Microsoft Teams、Google Chat、LINE、Matrix、Home Assistant,最后到第 23 个 ntfy。你能想到的主流 IM,Hermes 基本都能当成它的「前台」。

我得先帮你把这个数字祛魅。23 是个官方整数,口径其实有点浮动。官方文档里把浏览器也算进了这 23 个,但源码里另外还躺着 IRC、APIServer、Webhook 这些接入通道。真去数源码里能跟人对话的 adapter,至少有 24 个。

所以我在书里只敢用官方的「23 个消息平台」这个说法,再补一句:源码里其实还有 IRC 等没被列进去的。这么写既不夸大,也不会被懂行的人抓字面。

这些平台是分批长出来的,每一个官方都给了「第几个」的编号,时间线很清楚。

平台进来的版本官方计数
Google Chatv0.13.0 (2026.5.7)第 20 个
LINE + SimpleX Chatv0.14.0 (2026.5.16)累计到 22 个
Microsoft Teams(端到端打通)v0.14.0 (2026.5.16)
ntfyv0.15.0 (2026.5.28)第 23 个

两个月里加了五个能对话的平台。旧书那会儿连「第 N 个」这种官方计数都还没有,只写了 6 个一级加 9 个二级扩展。一个数字的膨胀不算什么,关键是膨胀的代价没跟着涨。这才是这一节真正想讲的。

Hermes Gateway 平台插件注册机制

旧书那个版本,加一个平台是件挺重的活。你得去核心代码里改一堆 if/elif 分支:消息进来要判断它从哪个平台来,消息出去要判断该往哪个平台发,配置解析、用户授权、状态展示,每一处都得为新平台改一行。平台越多,核心越臃肿,改一处怕碰坏另一处。

v0.16.0 的做法不一样了。核心有个叫 PlatformRegistry 的注册表(在 gateway/platform_registry.py 里)。它是个单例,谁要加平台,就往这个注册表里登记一下自己。Gateway 收到消息先查注册表,查不到才回落到老的内建路径。

新平台不再写进核心,而是住进 plugins/platforms/ 目录,一个平台一个文件夹,里面放一个 plugin.yaml 和一个 adapter.py 。插件启动时调用 ctx.register_platform() 自己注册进去。

Hermes Gateway 使用平台注册表加载消息平台插件

官方文档里那句话说得很直接:插件路径「requires zero changes to core Hermes code」。adapter 创建、配置解析、用户授权、cron 投递、消息路由、系统提示、状态展示、安装向导,这一整套插件系统全自动接管。

那一个平台到底要给 Registry 交代清楚哪些事?这就是 PlatformEntry 这个数据结构干的活。它把「Gateway 想认识一个平台需要知道的一切」做成了声明式的字段清单。我挑几个有意思的列出来,你能感觉到设计者考虑得多细。

字段它解决什么问题
max_message_length这个平台单条消息最长多少,超了自动智能分块
pii_safe会话描述要不要脱敏(比如 SMS 的电话号码别明文显示)
platform_hint注入系统提示的平台指引,比如告诉 Agent「你现在在 IRC 上,别用 markdown」
standalone_sender_fncron 任务和 Gateway 不在同一个进程时,临时开个连接把消息发出去
apply_yaml_config_fn让插件自己解析自己的配置,核心 config.py 不必懂每个平台的 schema

你看最后那个字段就明白整个设计的用心了。核心代码刻意把自己变「笨」,它故意不去懂每个平台的配置长什么样。懂不懂是插件自己的事。核心只负责「有一个平台注册进来了,按它声明的规则办」。平台的复杂性被关进了各自的文件夹里,不会渗进核心。

这条线和这本书的主线「缰绳会自己长」是呼应的。Agent 的能力会自己长(skill 自改进),它的接入层也在自己长,多一个平台,核心不动一根毫毛。Gateway 从一个「内置一堆平台的大进程」,长成了「一个带注册表的平台宿主」。

一个细节:Discord、HomeAssistant、Mattermost 这几个,在老的内建枚举里有,在新的插件目录里也有同名。这不是 bug,是历史内建平台正一个个迁成插件的痕迹。新架构留了条兼容路:查不到注册表,就回落老路径。

Hermes Gateway 的平台懒加载

按常理,平台越多,进程启动该越慢,要拉起的东西更多了。Hermes 反着来。

窍门在懒加载。QQ 和元宝这两个适配器特别重,元宝是逆向出来的私有协议加 WebSocket 栈,QQ 要拉起分块上传的整套东西。以前它们在每次 CLI 调用时都会被急着导入,光这一下就吃掉约 48 毫秒、8MB 内存,而你这次根本没用 QQ。

现在改成了用到才加载。配合 v0.14.0 砍掉约 19 秒冷启动、v0.15.0 每次对话少调用 47%的函数,整个 Gateway 的性能故事就成了一句挺反直觉的话:平台越加越多,启动越来越快。

Hermes 跨平台会话的真实机制

跨平台对话连续性,是 Hermes 一直主打的卖点。旧书里只写了个结论:你在 Telegram 上聊到一半,换到 Discord 能接着聊。听起来很魔法。

但我把源码翻了一遍,发现这句话照字面理解是会出问题的,懂行的读者一抠就露馅。我得把真实机制讲清楚,不然这是个准确性地雷。

第一层,是会话身份。源码里有个函数专门生成「会话的唯一身份」,长这样:

agent:main:{platform}:dm:{chat_id}

agent:main:{platform}:{chat_type}:{chat_id}

注意看,这个 key 是以平台名开头的。也就是说,同一个人在 Telegram 和在 Discord,严格讲是两条不同的会话。它们并不是字面意义上「共用同一条对话历史」。

那连续性是怎么来的?靠的是另一套机制,源码里叫 sessionmirroring(会话镜像)。当一条消息被发到某个平台时,系统会往目标会话的对话记录里追加一条「镜像记录」,让接收那一侧的 Agent 知道刚才发生了什么、发了什么。

所以真正撑起「跨平台连续」体验的,是三件事叠在一起。

Hermes Agent 跨平台消息通过会话镜像补充上下文

跨平台共享 Hermes 记忆与 Skills

23 个平台共享同一个 Agent 实例。你在哪个平台说的偏好,都进同一个记忆库。换平台,它对你的理解不会清零。

Hermes Agent 不同消息平台共享记忆与 Skills

跨平台消息 transcript 镜像

消息跨平台流动时,内容会被镜像进目标会话的记录,对侧 Agent 因此有了上下文,不至于一脸懵。

桌面 App 跨 Profile 引用会话

新出的桌面 App 里可以用 @session 直接引用另一个会话,把不同来源的对话串起来。

讲清楚这层机制,不是为了显得严谨。是因为一旦你照着「同一条 session 无缝延续」的想象去用,碰到边界情况就会困惑:为什么有时候它好像「忘了」。理解了「共享记忆+镜像」这个真相,你才知道它的能力边界在哪。

⚠️ 注意

写这一章时我专门列了几个容易踩的坑:别照抄「Telegram 开始 Discord 继续」的字面;「23」是官方整数、口径含 web 不含 IRC;GitHub 星标这种高波动数字只写量级、注明日期,别写死。拿不准的对外声称,宁可写保守、写机制,也别写没核实的数字。

Hermes Gateway 插件机制的价值

把这一节收一下。23 个平台是表象,注册表才是里子。

一个产品愿意为了「加平台不改核心」去专门设计一套注册表机制,说明它赌的是平台数量还会长、而且要长很久。它不想让自己的核心在第 30 个、第 50 个平台时被改烂。这是一种对未来的预付:现在多写一层抽象,换将来无数次「丢个文件夹就完事」的轻松。

对你这个用户来说,好处很直接:你想接的那个小众 IM,哪怕官方没做,社区也能用一个文件夹补上,不用等核心团队排期,更不用 fork 整个项目。接入的口子,被彻底打开了。

下一节我们看 Gateway 另一面的进化,它这两个月终于长出了一张脸:原生桌面 App 和浏览器管理面板。从「躲在后台的进程」,变成你能直接点的东西。

常见问题

Hermes Agent Gateway 有什么用?

Gateway 负责把多个消息平台接到同一个 Agent 核心,并处理消息路由、授权、平台提示和定时投递。具体支持平台数量会随版本变化。

Hermes 能在不同平台继续同一段对话吗?

不同平台通常仍有各自的会话身份,连续体验来自共享记忆、Skill 和消息镜像等机制。它不一定等于所有平台共用同一条原始聊天记录。

这篇教程里的版本数字会变化吗?

会。原稿以 Hermes Agent v0.16.0 为分析基线,平台、工具、命令参数和默认配置可能继续变化;实际操作前请核对当前官方文档和本地命令帮助。