Skip to content
Agentmart
Submit a tool

configure-discord-group

Configure Hermes on Discord so the bot sees every message in a server channel, not just @mentions/DMs — Developer Portal bot creation, privileged intents…

Skill by Humalike

IndexedMIT★ 213
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/humalike-configure-discord-group

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Configure Hermes on Discord so the bot sees every message in a server channel, not just @mentions/DMs — Developer Portal bot creation, privileged intents, invite URL, and the authorization/mention gates. Use when a user wants the turn-taking bot working in a Discord server, or asks why it isn't replying to unmentioned channel messages.

Use cases: backend

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/configure-discord-group

What's inside

Skill name
configure-discord-group
Description
Configure Hermes on Discord so the bot sees every message in a server channel, not just @mentions/DMs — Developer Portal bot creation, privileged intents, invite URL, and the authorization/mention gates. Use when a user wants the turn-taking bot working in a Discord server, or asks why it isn't replying to unmentioned channel messages.
License
MIT
Instructions
103 lines in SKILL.md · view on GitHub

Files (1)

  • SKILL.md

SKILL.md (first lines)

# Hermes on Discord in a server

Env settings go in `~/.hermes/.env`; **restart the gateway** after changes.

## 1. Create the bot in the Developer Portal

https://discord.com/developers/applications → **New Application**, then
**Bot** → **Reset Token** (or create). Copy the token:
```bash
DISCORD_BOT_TOKEN=<token>
```

## 2. Enable the privileged intents

**Bot → Privileged Gateway Intents**, enable:
- **Message Content Intent** — required for server-channel message content;
  without it the bot sees only mentions/DMs (Discord delivers content there
  without the intent) and channel messages arrive effectively empty.
- **Server Members Intent** — required for role-based authorization
  (`DISCORD_ALLOWED_ROLES`) and member lookups.

## 3. Invite the bot to the server

OAuth2 → URL Generator, or use the ready-made invite:
```text
https://discord.com/oauth2/authorize?client_id=<APP_ID>&scope=bot+applications.commands&permissions=274878286912
```
(`permissions=274878286912` = the bot+commands permission integer Hermes
expects. `applications.commands` enables slash commands.)

## 4. Authorization — who gets replies

Checked in the gateway before anything reaches turn-taking; unauthorized
senders are rejected even though the bot sees the message. Three models:

- **Allowlist (default):** only these user IDs may trigger the bot:
  ```
  DISCORD_ALLOWED_USERS=<user-id1>,<user-id2>
  ```
  Find user IDs in the gateway log line
  `Unauthorized user: <id> on discord` (unauthorized senders are rejected
  before turn-taking, so they never produce `tt inbound`), or Discord
  Developer Mode → right-click user → Copy User ID.
- **Role-based (recommended for servers):** grant via role instead of
  per-user — role grants propagate automatically when mod teams churn:
  ```
  DISCORD_ALLOWED_ROLES=<role-id1>,<role-id2>   # OR'd with DISCORD_ALLOWED_USERS
  ```
  Auto-enables the Members intent. Copy role IDs with Developer Mode →
  right-click role → Copy Role ID.
- **Open server (dev only):** every user can pass authorization:
  ```
  DISCORD_ALLOW_ALL_USERS=true
  ```
  This only bypasses the user/role allowlist — the @mention gate (section 5)
  still applies, so without `DISCORD_REQUIRE_MENTION=false` or
  `DISCORD_FREE_RESPONSE_CHANNELS` the bot still only answers when mentioned.
  Don't combine this with public channels unless you want a free-response bot
  in front of everyone.

## 5. The @mention gate (server channels only, not DMs)

Either:
```bash
DISCORD_REQUIRE_MENTION=false                          # whole bot, all channels
DISCORD_FREE_RESPONSE_CHANNELS=<chan_id1>,<chan_id2>   # or only these channels (safer)
```
Channel IDs: right-click the channel (Developer Mode) → Copy Channel ID, or
grab from the gateway logs after any message.

## 6. Turn-taking tuning (channels only)

```bash
DISCORD_AUTO_THREAD=false    # reply inline; auto-threads fragment the room into per-message sessions
DISCORD_REACTIONS=false      # no 👀/✅ ack reactions while processing
```
`DISCORD_REACTIONS` defaults to `true` — if you keep it, expect reaction acks
on each message. `DISCORD_AUTO_THREAD=false` matters for turn-taking: with
threads on, every top-level message becomes its own session and the bot can
never coalesce the conversation.

Fully open = `DISCORD_ALLOW_ALL_USERS=true` + `DISCORD_REQUIRE_MENTION=false` —
weigh it before doing this on a busy/public server. Prefer
`DISCORD_ALLOWED_USERS`/`DISCORD_ALLOWED_ROLES` + `DISCORD_FREE_RESPONSE_CHANNELS`.
To keep the bot out of specific channels entirely: `DISCORD_IGNORED_CHANNELS=<ids>`.

## Verify

Restart the Hermes gateway, then look for `✓ discord connected` and
`tt inbound` (message seen) on an unmentioned message. `tt decide` may
legitimately be `stay_silent` — that's turn-taking working, not a failure.

## Diagnosis: "the bot doesn't see unmentioned messages"

| Log symptom | Cause |
|---|---|
| `Unauthorized user: <id> on discord` | Gate A — add the user ID to `DISCORD_ALLOWED_USERS`/`DISCORD_ALLOWED_ROLES`, or `DISCORD_ALLOW_ALL_USERS=true` |
| No `tt inbound`, no unauthorized line | Gate B — mention still required for that channel (add it to `DISCORD_FREE_RESPONSE_CHANNELS`) |
| Message payload empty / no text | Message Content Intent not enabled (step 2) |
| `tt decide ... stay_silent` | Expected — turn-taking speaks selectively |
| `tt respond ... DROPPED (superseded)` | Message burst; only the newest gets a reply |

From Humalike/hermes-humalike-plugin, MIT.

Compare and alternatives

    Featured in

    Signals

    Stars
    213
    Forks
    22
    Open issues
    1
    Last commit (this folder)
    Aug 4, 2026 (2 months ago)

    From GitHub (fetched Oct 24, 2026).

    Details

    License
    MIT
    First seen
    Oct 24, 2026
    Last checked
    Oct 24, 2026

    More from Humalike

    Cite this page

    configure-discord-group skill. Agent Mart. https://agentmart.dev/skills/humalike-configure-discord-group (last updated 2026-10-24)