What Slack is for
The Slack adapter lets Hermes take part in your workspace as a bot user. It connects through Socket Mode, an outbound WebSocket, so you do not need a public URL or open port. People on the allowlist can DM the bot directly, or @mention it in channels where it replies in a thread. Hermes can generate a ready-made Slack app manifest for you, which cuts down the clicking in Slack's admin pages. Per-channel prompts, mention gating and reaction triggers are configurable, and cron jobs can deliver results to a home channel. That makes Slack a good place to land scheduled briefings your team will actually read.
What you need
- A new Slack app (classic RTM apps are deprecated) with a Bot User OAuth Token (xoxb-) and an App-Level Token (xapp-) carrying the connections:write scope
- Use the generated Agent view manifest for the complete scope/event set. Manual setup also needs files:write for uploads and message.mpim/mpim history/read for group DMs; assistant:write controls the working status/native streaming. Reinstall after changes.
- Slack Member IDs for every user you want to allow
Set it up
- 1
Run
hermes slack manifest --agent-view --write, then create the app at api.slack.com/apps using "From an app manifest" and paste the generated~/.hermes/slack-manifest.json - 2
Enable Socket Mode, generate the app-level token, turn on the App Home Messages Tab, then install the app to copy the xoxb- token
- 3
Add SLACK_BOT_TOKEN, SLACK_APP_TOKEN and SLACK_ALLOWED_USERS (comma-separated Member IDs) to
~/.hermes/.env, or runhermes gateway setupand choose Slack - 4
Start the gateway with
hermes gateway(orhermes gateway installto run it as a service), then/invite @Hermes Agentin each channel it should watch
Check it works
- DM the bot; it should answer without an @mention
- @mention the bot in an invited channel and confirm it replies in a thread
- Upload a file and ask about it to confirm the files:read scope works
Limits and failure points
- Any scope or event change requires reinstalling the Slack app, and missing history scopes mean channel messages never arrive
- Slack blocks native slash commands inside threads, so use the ! prefix there (for example !stop)
- Without an allowlist, an approved pairing or another explicit grant, the gateway will not execute messages. A configured allowlist normally suppresses unsolicited pairing codes. allow_bots: all can create loops; use it deliberately.
Messaging setup
Primary sources
- Hermes Agent docs: Slack (opens in a new tab)
- Hermes Agent docs: Messaging Gateway (opens in a new tab)
- Official Hermes Agent source: gateway/authz_mixin.py (opens in a new tab)
- Official Hermes Agent source: website/docs/user-guide/messaging/slack.md (opens in a new tab)
- Official Hermes Agent source: website/docs/user-guide/messaging/slack.md (opens in a new tab)
- Official Hermes Agent source: website/docs/user-guide/messaging/slack.md (opens in a new tab)
- Official Hermes Agent source: website/docs/user-guide/messaging/slack.md (opens in a new tab)
Spotted something wrong or out of date? Tell us on X at @HermesWatcher (opens in a new tab) and we will fix it.