The Hermes messaging gateway
One process, twenty-plus platforms, and what each one can do
Hermes reaches its chat apps through one gateway process. Telegram, Discord, Slack, WhatsApp, Signal, SMS, email, Home Assistant, Mattermost, Matrix, Microsoft Teams and a long tail of regional platforms are adapters inside it; each receives messages, routes them through a per-chat session store and hands them to the agent. The same process runs the scheduler. Here is how it is set up, what the platform table says each one supports, and the parts that are not obvious.
Setup
- An interactive setup command walks through each platform with arrow keys, shows what is already configured and offers to start or restart the gateway when done.
- Install it as a user service on Linux or a launchd service on macOS, or as a boot-time system service on a server.
- Credentials saved by setup can enable a platform without a config entry; an explicit disabled flag still wins, and a different profile never inherits the server’s credentials.
- Saved means credentials are stored, not that the gateway is running or the platform is connected; a platform can be enabled and still show the gateway stopped.
What each platform can do
The docs keep a comparison table: voice, images, files, threads, reactions, typing indicators and streaming, per platform. Telegram, Discord, Slack, Matrix and Feishu have nearly the full row. WhatsApp has images, files, typing and streaming but no threads or reactions. SMS has none of it, on purpose: text in, text out. Email has images, files and threads. Reading that row before choosing a channel saves a support thread later.
Silence is a delivery decision only.
Silence tokens
For group chats, hooks and automations, an agent whose whole final response is a silence token is not delivered; the turn is still kept in the transcript so the conversation alternates normally, and a failed turn still surfaces as an error. It is the mechanism that lets a bot sit in a group without answering everything.
Keeping it alive
A systemd-managed gateway can opt into an event-loop watchdog: Hermes sends heartbeats only while the loop is making progress, and systemd restarts the process when they stop. The user-level service still stops at logout until lingering is enabled, which the Hermes install guide covers with the other install-time traps.
On Diali
On Diali the gateway process, its service and its restarts are the platform’s job; the channels connect from the dashboard, and the Hermes row of the catalog lists Telegram, Discord, Slack, WhatsApp, SMS, Mattermost, Matrix and Signal. Voice calls are OpenClaw-only. Hosted Hermes on Diali is the hosted version; Channels on Diali lists every channel with the engines it supports.
- One gateway, many adapters, a per-chat session store.
- Read the platform row before you pick a channel.
- Silence is a delivery decision, not a missing reply.
Stop reading about it, build one
Set up an agent, pick a channel, and have it working inside the app you already keep open.
