Field notes · AI agents, Hermes & Claude Code By Julian Goldie

Hermes Agent Discord: Set Up The Bot In 8 Steps, Lock Down Access And Fix A Silent Bot

The operator order for getting Hermes into a Discord server: the intent that blocks most setups, the access rules to set first, and the config I'd start from.

Get The AI Profit Stack Join AIPB →
  • 01 1,000+ done-for-you AI agent workflows
  • 02 5 live coaching calls / week with me
  • 03 7-day refund, cancel anytime
  • 04 3,400+ AI operators inside

Hermes Agent Discord setup takes eight steps, and one of them decides whether your bot ever comes online.

That step is the Message Content Intent toggle in the Discord Developer Portal.

Below is the exact order I'd run it in, the access rules I'd set before anyone else joins, and the fixes for a bot that sits offline or goes quiet.

If you'd rather have my team map out how a server bot fits your business first, book a free SEO strategy session.

What Happens To Every Discord Message Before Hermes Answers

Hermes on Discord is not a stateless webhook, according to the official Discord page in the Hermes docs.

Each message runs through the full messaging gateway in a fixed order.

  1. Authorization against your allowlist.
  2. Mention and free-response checks.
  3. Session lookup.
  4. Loading that session's transcript.
  5. A normal agent run, with tools, memory and slash commands.
  6. Delivery of the reply back to Discord.

So two settings shape everything: who is allowed, and when the bot is supposed to speak.

The gateway itself is one background process that serves every platform you connect, runs cron jobs and handles sessions, as the messaging overview explains.

Step 1: Create The Application And Bot User

Open the Discord Developer Portal, click New Application, name it and accept the terms.

Note the Application ID on the General Information page, because a manual invite link needs it.

Click Bot in the sidebar and Discord creates the bot user for you.

Under Authorization Flow, set Public Bot to ON if you want the Installation tab to generate your invite, and leave Require OAuth2 Code Grant OFF.

Prefer a private bot? Leave Public Bot off and use the manual invite URL in Step 4 instead.

Step 2: Turn On The Two Intents Hermes Needs

Stay on the Bot page and scroll to Privileged Gateway Intents.

IntentWhat it unlocksHermes needs it?
Message ContentThe text of messagesRequired
Server MembersMember list and username lookups for the allowlistRequired
PresenceOnline or offline statusOptional

Hermes always asks Discord for message content.

With that intent off, Discord refuses the connection and the bot never appears online.

The docs call this the number one reason Discord bots don't work, and the log line to look for reads "Discord rejected the connection because privileged Gateway Intents are not enabled".

Click Save Changes before you leave the page.

Below 100 servers you can flip these freely; at 100 or more, Discord wants a verification application for privileged intents.

🔥 Get the Discord bot setup on video, click by click Inside the AI Profit Boardroom you get step-by-step video trainings on Hermes and messaging bots, the installable Agent OS, four coaching calls a week and 3,400+ members comparing server setups. → Join the AI Profit Boardroom

Step 3: Copy The Token Once And Store It

Under Token, click Reset Token, enter your 2FA code if asked, and copy the value straight away.

Discord shows it once.

Lose it and you reset it again; anyone holding it controls your bot, so it goes in a password manager and never into Git.

Step 4: Build The Invite Link With The Right Permission Level

You have two routes.

The Installation tab route: enable Guild Install, pick Discord Provided Link, and select the bot and applications.commands scopes.

The manual route: build the URL yourself with your Application ID and a permissions integer.

https://discord.com/oauth2/authorize?client_id=YOUR_APP_ID&scope=bot+applications.commands&permissions=309237763136
LevelIntegerAdds
Minimal117760View Channels, Send Messages, Embed Links, Attach Files, Read Message History
Recommended309237763136Create Public Threads, Send Messages in Threads, Add Reactions
Full309240908864Connect and Speak for voice channels

I'd go Full if there's any chance you'll want voice later.

Existing installs don't pick up newly requested permissions on their own, so changing your mind means re-inviting.

You need Manage Server on the target server to authorize the invite; otherwise hand the link to an admin.

The bot then shows in the member list as offline until the gateway starts.

Step 5: Let The Wizard Write The Config (Or Do It By Hand)

The shortcut is the setup wizard.

hermes gateway setup

Pick Discord and paste the token.

The wizard checks the token with Discord before saving it, warns you if Message Content is still off, prints a ready-made invite link with the Full permission set, and offers to allowlist you as owner.

That last part means you can skip Developer Mode entirely.

Doing it by hand instead? Turn on Settings → Advanced → Developer Mode, right-click your name, choose Copy User ID, and add two lines to ~/.hermes/.env.

DISCORD_BOT_TOKEN=your-bot-token
DISCORD_ALLOWED_USERS=284102345871466496

Step 6: Lock Access With Users, Roles And Channels

Hermes fails closed on Discord.

With no allowed users, no allowed roles, no allowed channels and no allow-all flag, the bot connects fine and then denies every inbound message.

That's the right default, because the docs warn that authorized users get the agent's full abilities, including tools and system access.

Here are the four access controls I actually use.

  • DISCORD_ALLOWED_USERS: numeric user IDs, comma-separated. Usernames resolve too, but display names and nicknames never match.
  • DISCORD_ALLOWED_ROLES: role IDs. Anyone holding the role is in, which suits a team where people come and go.
  • DISCORD_ALLOWED_CHANNELS: the only channels where the bot will answer.
  • DISCORD_IGNORED_CHANNELS: channels where it never speaks, even when tagged.

Leave DISCORD_ALLOW_ALL_USERS off unless the guild is private and fully trusted.

For DMs from people not yet on a list, the gateway can hand out a one-time pairing code that expires after an hour; the messaging docs show the approve and revoke commands.

Step 7: Decide Mentions, Threads And Free-Response Channels

Out of the box, Hermes answers every DM and only answers in server channels when you @mention it.

Each @mention in a text channel spins up its own thread, because DISCORD_AUTO_THREAD defaults to true.

Once it has joined a thread, it keeps replying there without a fresh tag.

If a message tags somebody else but not the bot, it stays out of it.

For a help channel where nobody should need to tag it, list that channel in DISCORD_FREE_RESPONSE_CHANNELS.

Free-response channels answer inline rather than threading, unless you also set free_response_auto_thread: true.

Running several bots in one thread? Set thread_require_mention: true so each one only fires when called by name.

Step 8: Run The Gateway As A Service

hermes gateway            # foreground, for the first test
hermes gateway install    # user service (launchd on macOS)
sudo hermes gateway install --system   # Linux boot service

Test in the foreground first: the bot should come online within seconds.

Send it a DM, then tag it in a channel it can see.

Once both work, install it as a service so it survives a reboot.

Since v0.23.0, one gateway per machine owns every session, so the CLI, desktop app, bots and cron share the same chats and history.

The Config Block I'd Start A Small-Business Server With

discord:
  require_mention: true
  auto_thread: true
  free_response_channels: "HELP_CHANNEL_ID"
  ignored_channels: ["ANNOUNCEMENTS_ID"]
  reactions: true
  history_backfill: true
  allow_mentions:
    everyone: false
    roles: false
group_sessions_per_user: true

Every key above is in the documented config.yaml reference, and env vars win when both are set.

Two defaults deserve a second look.

The mention guard stops the bot from pinging @everyone, @here or roles, even if a reply happens to contain those strings, so leave it on.

And group_sessions_per_user: true gives each person their own conversation inside a shared channel, so one person's long task doesn't bloat everyone else's context.

Switching it to false makes the whole room one session, with shared token costs and people interrupting each other's runs.

Three Server Layouts For Real Small Businesses

A design agency with private client channels

  1. Create one channel per client and add only those channel IDs to DISCORD_ALLOWED_CHANNELS.
  2. Give each channel its own channel_prompts entry with that client's tone and brief.
  3. A designer tags the bot in the channel; Hermes opens a thread, reads the recent scrollback through history backfill, and drafts copy or a task list.
  4. Write "draft only, nothing goes to the client" into the channel prompt, and a human posts the final version.

A board game shop with a members server

  1. Create a Regulars role and add its ID to DISCORD_ALLOWED_ROLES, because nobody gets an answer until they pass the allowlist.
  2. Make #ask-the-shop a free-response channel and give it a channel prompt with opening hours, the events calendar and the returns rule.
  3. A regular asks about Friday's tournament; Hermes answers inline, in that person's own session.
  4. Limit regulars to a short user_allowed_commands list, since anyone authorized reaches the agent's tools; plenty of shops will keep the bot staff-only.

A plumbing firm whose crew sends voice notes

  1. Each plumber records a Discord voice message in a free-response #job-notes channel after a job.
  2. Hermes transcribes it with the configured speech-to-text provider; local faster-whisper needs no key.
  3. It replies with a tidy job summary in the thread.
  4. A cron job posts a "draft only" end-of-day digest to the home channel set with /sethome.

For a deeper support build on top of this, see my walkthrough of Hermes Agent for customer support.

📞 Want help picking which channel to automate first? Book a free SEO strategy session and my team will walk through your server with you, free. → Grab a free call with my team

Voice Channels, Forum Channels And Files

Voice messages are transcribed automatically, and /voice tts adds spoken audio to text replies.

Hermes can also join a voice channel, listen and talk back, which is what the Full invite permissions are for.

It leaves after 300 idle seconds by default; set voice_channel_inactivity_timeout_seconds: 0 to keep it in until /voice leave.

Forum channels only accept thread posts, so Hermes creates a new post on each send and names it from the reply's first line.

Uploads of any file type are accepted, up to 32 MiB per file by default via DISCORD_MAX_ATTACHMENT_BYTES.

Small text files under 100 KiB get pulled straight into the prompt, and binaries come through as a file path the agent can inspect.

Slash Commands, The Model Picker And Approvals

Every installed skill registers as a native Discord slash command on the next gateway restart.

Discord caps a bot at 100 application commands, so extra skills get skipped with a warning.

Send /model with no arguments for a dropdown picker that times out after 120 seconds.

To keep regular users from running everything, add allow_admin_from and user_allowed_commands under the Discord extra block; /help and /whoami always stay open.

Risky commands come up as approval cards with buttons, and Discord's buttons wait 300 seconds by default under approvals.discord_prompt_timeout.

🔥 Steal the exact server config I would start from Inside the AI Profit Boardroom you get the full Hermes video trainings, the Agent OS you can install today, four live coaching calls every week and a community of 3,400+ members who share their bot setups. → Join the AI Profit Boardroom

Troubleshooting: Offline, Silent, Or 403

SymptomLikely causeFix
Bot stays offlineMessage Content Intent off, gateway not running, or a stale tokenEnable the intent, run hermes gateway, update DISCORD_BOT_TOKEN
Online but ignores everyoneNo access policy setAdd DISCORD_ALLOWED_USERS or roles, then hermes gateway restart
Ignores you onlyYour ID isn't on the listAdd your user ID and restart
Can't see one channelBot role lacks View ChannelGrant View Channel and Read Message History
403 or error 50001 on /threadMissing permissions or a channel overrideRe-invite with the right integer or fix the override

For the silent case, check ~/.hermes/logs/gateway.log for "No Discord access policy configured".

That line means the bot is doing exactly what the defaults tell it to.

If you're on Hermes Cloud with Team Gateway, Discord reaches your agent through a shared Hermes bot rather than your own, as the relay docs and the Telegram page describe; running your own beside it needs GATEWAY_RELAY_ALLOW_DIRECT_PLATFORMS=true and keeps the instance awake.

The v0.23.1 release notes, dated 9 November 2026, describe a patch that rolls up the work since v0.23.0 and raises the plugin catalog cap.

They carry no Discord-specific notes, and curated notes for the window are promised with v0.24.0.

So treat the Discord doc at the v0.23.1 tag as the source of truth for every setting on this page.

Also On Our Network

FAQ: Hermes Agent Discord

Why is my Hermes Discord bot offline?

Most often the Message Content Intent is off in the Developer Portal, so Discord refuses the connection. Otherwise the gateway is not running or the token is out of date.

Why does the bot come online but never reply?

Hermes denies everyone until you set an access policy. Add DISCORD_ALLOWED_USERS or DISCORD_ALLOWED_ROLES to ~/.hermes/.env and restart the gateway.

Which invite permission integer should I use?

309237763136 is the documented Recommended set. 309240908864 adds Connect and Speak for voice channels and is what hermes gateway setup prints.

Can Hermes answer in a channel without being tagged?

Yes. Add the channel ID to DISCORD_FREE_RESPONSE_CHANNELS, or set DISCORD_REQUIRE_MENTION=false to drop the mention rule everywhere.

Do people in the same channel share one conversation?

Not by default. group_sessions_per_user is true, so each person gets their own session inside a shared channel.

📺 Video notes + links to the tools 👉

🎥 Learn how I make these videos 👉

🆓 Get a FREE AI Course + Community + 1,000 AI Agents 👉

About Julian

I'm Julian Goldie, an SEO entrepreneur, author and founder of the AI Profit Boardroom, which has 3,400+ members.

I help business owners scale with AI agents, automation and SEO.

  • I've built a 7-figure SEO and link building agency, Goldie Agency, with a team of 70+ SEO experts.
  • I've grown a YouTube channel to 400,000+ subscribers.
  • I wrote "Link Building Mastery".
  • My Udemy courses have taught over 29,000 students.

→ Get my best AI training inside the AI Profit Boardroom

Flip the two intents, run the wizard and test one DM tonight, and if you want my team beside you for the rollout, book a free strategy session about your Hermes Agent Discord setup.

§ Field reports

Real wins from inside the AI Profit Boardroom

See all 3,400+ members →
AIPB member win screenshot AIPB member win screenshot AIPB member win screenshot AIPB member win screenshot AIPB member win screenshot AIPB member win screenshot AIPB member win screenshot AIPB member win screenshot AIPB member win screenshot AIPB member win screenshot AIPB member win screenshot AIPB member win screenshot

Scroll sideways →

⚑ Next step

Ready to run AI agents that actually do the work?

Join 3,400+ operators inside the AI Profit Boardroom. Get 1,000+ plug-and-play AI agent workflows, 5 coaching calls a week, and a community that holds you accountable.

Join The AI Agent Community →

7-day no-questions refund · Cancel anytime

Found this useful? Get more of this site in your Google.

One tap adds us as a preferred source — Google then shows you our posts more often in Search, Top Stories, and AI Overviews.

← Back to all posts