Managing an AI coding agent usually means staying tethered to a terminal or IDE. Hermes inverts that assumption by turning the chat apps you already use into the control surface for a single, persistent agent.
Hermes Premise: a Claude Agent for 20 Surfaces
Hermes is an open-source, self-hosted AI agent runtime from Nous Research that runs as one persistent process and fans multiple chat front-ends into a shared agent core . Telegram, Slack, Discord, WhatsApp, Signal, Matrix and 20+ other surfaces are adapters, not separate agents — the same conversation state, memory, skills, cron jobs and tool permissions are visible regardless of which surface sends the prompt . It is MIT-licensed, and the current release is v0.18.2, published around July 8, 2026 .
On the model side, Hermes routes to 300+ models across Anthropic, OpenRouter, Bedrock, Azure Foundry, Gemini, DeepSeek and local endpoints, but a model with at least a 64K-token context window is required for multi-step tool workflows — a hard constraint, not a suggestion .
The contrast worth naming: Anthropic's own Claude Code Channels is a research preview covering Telegram, Discord and iMessage . Hermes' Slack reach, WhatsApp support and self-hosted posture come from its own gateway layer, not from Anthropic-native integrations. As the seed walkthrough frames the appeal, the point is being able to "issue commands from anywhere" . You write one agent config and expose it everywhere — no duplicated auth logic, no per-app session isolation.
What to Prepare Before You Install Hermes
Before running the installer, line up four things: a supported OS, one inference provider, and the chat-app credentials you want to expose. Get these ready and setup is a few minutes; skip one and the gateway will fail exactly where the missing piece lives.
-
Operating system. Hermes installs on Linux, macOS, or WSL2 via a one-line script, with a native Windows PowerShell path —
iex (irm https://hermes-agent.nousresearch.com/install.ps1)— and Termux for Android . - Inference provider. Pick one and have its API key ready. Hermes needs a model with at least a 64K-token context window for multi-step tool workflows . Nous Portal, Anthropic direct, OpenRouter, or a local Ollama-compatible endpoint all qualify, drawn from 300+ supported models .
-
Telegram. Create a bot with @BotFather's
/newbot, note the token, and get your numeric user ID from @userinfobot — that ID becomes yourTELEGRAM_ALLOWED_USERSwhitelist value. -
Slack. You need two tokens, not one: a bot token (
xoxb-) for API calls and an app-level token (xapp-) for Socket Mode . Hermes auto-generates the Slack app manifest, so you don't hand-define event subscriptions.
How to Install Hermes and Configure Telegram and Slack
Install Hermes with a single command, verify a plain CLI chat works, then attach the messaging surfaces. On Linux, macOS, WSL2, or Termux the official one-liner is curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash, which provisions Python 3.11 via uv, Node.js v22, ripgrep, and ffmpeg, clones the repo, and installs a global hermes command . Reload your shell afterward so the binary resolves.
Quick Answer: Run the one-line installer, then hermes setup to pick a provider and model. Confirm a normal CLI chat succeeds before enabling any gateway — the gateway faithfully exposes whatever provider, tool, and terminal config already works or is broken underneath it, so a healthy foundation comes first .
The docs prescribe a staged path for a reason. Run hermes setup, choose one inference provider and a model with at least a 64K-token context window, and send a message from the terminal. If that plain chat answers, the model layer is sound; if it fails, fix it here — not after two chat apps are wired in .
Telegram. Set TELEGRAM_BOT_TOKEN and TELEGRAM_ALLOWED_USERS in ~/.hermes/.env, or run hermes gateway setup and select Telegram, then start the layer with hermes gateway start. The bot handles text, images, files, and voice; voice is transcribed by local faster-whisper, Groq Whisper, or OpenAI Whisper depending on your config .
Slack. Generate the app definition with hermes slack manifest --agent-view --write, paste the output into Slack's app-manifest creation flow, install the app into your workspace, then set SLACK_BOT_TOKEN and SLACK_APP_TOKEN in ~/.hermes/.env. One catch worth flagging early: the bot does not auto-join channels — invite it explicitly with /invite @Hermes Agent in each channel you want it to read .
| Platform | Tokens in ~/.hermes/.env
|
First manual step |
|---|---|---|
| Telegram |
TELEGRAM_BOT_TOKEN, TELEGRAM_ALLOWED_USERS
|
Create bot via @botfather /newbot
|
| Slack |
SLACK_BOT_TOKEN (xoxb-), SLACK_APP_TOKEN (xapp-) |
Paste generated manifest, then /invite
|
For persistence, hermes gateway registers itself as a launchd service on macOS or a systemd unit on Linux, so it survives reboots and keeps answering without an open terminal session . The payoff of a single gateway is that both surfaces resolve to one agent core — a shape this verified snippet models, where 20 named front-ends all route into a single session (it ran successfully, printing one line per front-end):
class ClaudeSession:
def ask(self, prompt):
return f"Claude session handled: {prompt}"
front_ends = [f"frontend-{i:02d}" for i in range(1, 21)]
session = ClaudeSession()
print("One Claude session, 20 front-ends -- that's Hermes")
for front_end in front_ends:
print(f"{front_end}: {session.ask('ping')}")
Trigger Claude Code from Telegram or Slack
Once the gateway is live, a chat message becomes a Claude Code invocation. Hermes drives Anthropic's Claude Code CLI in two delegation modes . Print mode runs a one-shot task and exits — for example claude -p 'task' --allowedTools 'Read,Edit' --max-turns 10 — skipping permission dialogs and capturing structured JSON, which makes it the natural fit for CI-style chat triggers. Interactive mode instead orchestrates a full PTY via tmux, so you can inject prompts and watch progress while using slash commands like /review or /compact.
"Print mode runs a one-shot task and exits, capturing structured JSON — suited to automation and CI." — Anthropic Claude Code documentation (source: code.claude.com)
Budget and model flags are available on every trigger regardless of surface. You can pass --model with the sonnet, opus, or haiku aliases (or full names like claude-sonnet-4-6), plus --effort, --max-budget-usd caps and --allowedTools whitelisting . The control surface is identical whether the prompt arrives from Telegram or Slack.
Two surface-specific quirks matter in practice:
-
Slack threads block slash commands. Slack won't deliver
/commands inside thread replies, so Hermes ships thread-safe!equivalents —!queue,!stop,!model,!approveand!deny. - Telegram auto-registers a command menu. Hermes caps the payload at 60 of the available commands by default — Telegram allows up to 100 — because oversized registration payloads can fail silently .
Gotchas: Slack Manifest Events and Telegram Bot Visibility
The failures that cost the most time are silent ones. On Slack, missing channel events are the leading cause: if the generated manifest omits message.channels or message.groups, Slack simply will not deliver channel messages — the bot looks alive in DMs but never reacts in a channel . Regenerate with hermes slack manifest --agent-view --write rather than hand-editing. Classic RTM app tokens are also dead as of March 2025, so the xoxb- bot token plus xapp- app-level token pair is not optional .
On Telegram, privacy mode is the equivalent trap. With privacy on, the bot sees only slash commands and direct replies in groups. You change it through BotFather, but Telegram caches the setting per chat — you must remove and re-add the bot to every affected group before the change takes effect . The public Bot API also caps downloads at 20 MB; a self-hosted telegram-bot-api server raises that ceiling to 2 GB if you need large-file handling .
The takeaway that matters most is the execution backend. Hermes docs recommend Docker or Modal for production gateways rather than the local host — the Docker backend drops Linux capabilities, enforces PID limits, and applies configurable CPU, memory and disk ceilings . Every connected surface is a remote command trigger, so run triggered work in a container, not on your machine.
Frequently asked questions
Does Hermes require a paid Anthropic API key?
No. Hermes runs on any of 300+ models across providers, including local Ollama and LM Studio endpoints and OpenRouter free tiers , so an Anthropic key is only one option among many. The one exception is Claude Code delegation: when Hermes drives Anthropic's Claude Code CLI in print or interactive mode, that layer needs its own valid Claude credentials, configured separately from the model provider you pick for the agent core .
Why is my Slack bot not receiving channel messages after setup?
Almost always missing event subscriptions. Slack will not deliver channel messages unless the app manifest subscribes to message.channels and message.groups — this is the number-one Hermes Slack setup issue . Rather than hand-editing the installed app, regenerate the manifest with hermes slack manifest --agent-view --write and re-import it, then confirm the bot was invited to the channel with /invite @Hermes Agent.
Can I connect more than one Slack workspace to a single Hermes install?
Yes. Comma-separate multiple xoxb- bot tokens in SLACK_BOT_TOKEN while keeping a single xapp- app-level token in SLACK_APP_TOKEN . Hermes uses Slack Bolt over Socket Mode, and one app-level credential handles the WebSocket connection for every workspace, so no public HTTP request URLs are needed.
Is KakaoTalk supported?
Not as of the current documentation. The official surface list covers Telegram, Slack, Discord, WhatsApp, Signal, Matrix, Mattermost, DingTalk, Home Assistant, SMS via Twilio and Email (IMAP/SMTP) among 20+ platforms — KakaoTalk is a confirmed absence . The seed walkthrough flags the same gap . That reflects the official platform list, not proof that no third-party bridge could exist.
What happens to the Hermes session if the machine reboots?
The gateway comes back on its own. The installer registers Hermes as a launchd service on macOS or a systemd service on Linux, so the process restarts automatically after a reboot . Session store, memory, skills and cron schedules persist in ~/.hermes/ between restarts, so the agent you talk to on Telegram or Slack keeps its state.
Top comments (0)