Skip to main content
Discord is a deployment-owned communications provider. It is not a Roomote sign-in provider. Roomote can receive direct messages and server mentions, work each task in a thread on the message that requested it (or a forum post in forum channels), accept follow-ups in that conversation, and deliver onboarding suggestions to the default channel. Discord connects to Roomote through the Gateway, so it does not require an inbound webhook or public callback URL.

Create the Discord bot

  1. Open the Discord Developer Portal and create an application.
  2. Open Bot, create the bot if needed, and copy or reset its token.
  3. Under Privileged Gateway Intents, enable Message Content Intent. Roomote needs this to understand natural-language messages and follow-ups.
  4. In Roomote, open Settings > Communications > Discord, paste the bot token, and save.
Roomote reads the bot and application identity from the token and registers the /new, /goal, /link, and /help commands automatically. You do not need to copy an application ID or bot name into Roomote.
Treat the bot token like a password. Do not put it in a repository, task prompt, or Discord message.

Add Roomote to a server

After you save the bot token, the Add to Discord button appears in Roomote. Select it and choose the server. The generated installation link requests the permissions Roomote needs; administrator access is not required. For tasks started in a server, the bot needs these permissions:
  • view channels
  • send messages
  • read message history
  • embed links
  • attach files
  • create public threads
  • send messages in threads
  • add reactions
  • manage threads (only when a required-tag forum has no unmoderated tags)
A task started from a normal text or announcement channel runs in a public thread started on the message that requested it — like a threaded reply — so the conversation stays anchored where it began. A task started in a forum gets its own forum post, and /new starts a fresh, separate task thread. When a forum requires a tag, Roomote applies an available unmoderated tag automatically. If every tag is moderated, the bot needs Manage Threads to apply one.
Unlike a Slack workspace, a Discord server can be public or shared with people outside your team. Task threads are visible to everyone who can see the channel, including repository names, task descriptions, and PR links. Only add Roomote to servers whose members you trust with that context, and use private channels for sensitive work.
When deployment Memory is enabled, Roomote also collects message history from server channels visible to @everyone where the bot has View Channel and Read Message History. Active public threads and forum posts are included; private channels, private threads, and DMs are not. Removing public visibility or the bot’s read access removes that channel’s collected pages after the next successful permission scan. If Roomote cannot see the server or channel, confirm that the bot was added to the server and that its role and channel overrides grant the permissions above. Use Repair to register commands again and refresh server discovery. Discord tasks are attributed only to people who have linked their Discord account to a Roomote user. Generate a link command under Settings > Personal > Linked Accounts and run it in a direct message with the bot. This verifies that Roomote can reach you for onboarding work. If Discord blocks the DM, open the server’s Privacy Settings and enable Direct Messages. The command expires after ten minutes. Once linked, work you start from Discord is attributed to your Roomote account. During onboarding, Roomote posts the setup suggestions to the default channel so the whole team can see and start them. When no default channel is configured yet, they are sent to the linked setup user’s direct messages instead; Discord can block those messages when the user’s server-member DM privacy setting is disabled, and the task remains available in the Roomote web app in that case.

Default channel for proactive posts

Roomote posts proactive updates (automation suggestions, reports, and other messages that are not replies to an existing conversation) to a default channel you pick. Choose it in the Discord section of Roomote’s comms settings: select a server and a text or forum channel where the bot has permission to post and create threads. Replies always stay in the conversation they started in. Required-tag forums work when Roomote can apply a usable tag — an unmoderated tag, or a moderated tag when the bot has Manage Threads. Individual automations can also report to their own Discord channel instead of the default: pick a Discord channel in that automation’s destination selector on the Automations page, the same way you would pick a Slack channel.

Start and continue tasks

  • mention the bot with a request in a server channel
  • mention the bot in a thread reply to start work in that same thread (Slack- style), with earlier thread messages and supported attachments as context
  • send the bot a direct message
  • use /new request:<request> in a server channel or thread to open a fresh conversation in its own thread instead of continuing the current one; in a DM, /new sends the request into the DM conversation
  • use /goal objective:<objective> to make the current session pursue an objective across multiple turns; it may delegate child tasks as needed
  • Discord DMs, mentions, attachments, and eligible thread replies from your linked account always enter a session, which answers directly or delegates repository work into tasks
  • replies in a Roomote-owned DM or thread continue that session; replies in an existing task conversation continue or resume the task
  • reply naturally inside a task thread, forum post, or DM to continue it (same Slack-style rules: after someone else posts or is @mentioned in the thread since Roomote’s last reply, tag Roomote again to keep going)
  • paste a Discord message link (https://discord.com/channels/.../.../...) in any session so the agent can pull that message and nearby channel/thread context, including when the session started on another chat provider (lookups outside the originating Discord conversation require a linked Discord account)
  • use /help to see the available commands
Roomote can read bounded context from the current Discord thread or channel, use MCP servers and user-scoped integrations that you are allowed to access, and delegate repository work to Roomote tasks. Members can create and manage their own custom automations through a session; deployment admins can manage all custom automations, including those without a creator. Built-in automations and deployment settings remain admin-only. Roomote does not read other channels implicitly or inspect repository contents without delegating the work to a task. When the request spans every repository, Roomote can delegate it to the deployment’s all-repositories environment. Session automation reports can be delivered to configured Discord channels or the automation owner’s DM. Replies continue the report’s session in Discord. Linked participants’ messages in established Roomote Discord threads keep reaching Roomote after a peer is mentioned. When a judgment model is configured, every unmentioned reply in such a thread with more than one person is judged before it can start a turn and routes when it is addressed to Roomote. Messages meant for another participant stay silent; acknowledgements addressed to Roomote reach the session, which then decides whether a response is warranted. Explicit bot mentions, commands, DMs, and replies to Roomote always receive a response. This applies only inside the established thread; it does not make Roomote monitor the surrounding channel. Every Roomote reply ends with a compact footer: Reply anytime, a plain running-task count when at least one task is running, links to pull requests the session is working on, and Open in Roomote, which opens the session transcript. Roomote keeps the footer on the latest reply current as delegated tasks start and finish (checking about every 30 seconds while work is running), and earlier replies drop their footer when a new reply posts. Roomote does not quote every message it answers. In a task thread, the conversation itself supplies the context. When you start a task by tagging Roomote in an existing thread, Roomote reads earlier messages in that thread (including supported attachments, up to a few hundred recent thread messages) so the agent has that background. Follow-ups in an active or resumed task thread also carry undelivered earlier Discord messages the same way Slack does, so the agent keeps full thread context across turns. Natural follow-ups without an @mention work for people already in the conversation with Roomote (the task owner, the thread starter, or anyone who tagged Roomote earlier). If somebody else posts or is mentioned after Roomote’s last reply, tag Roomote again so side chat is not treated as a new instruction. Native forwarded messages contribute their text and supported attachments to the task context. Image attachments are passed to the task as image input, and supported documents are downloaded and added to the request. Attachment downloads are size-limited and restricted to Discord’s media hosts.

Self-hosted configuration

The setup UI stores the token for the deployment. To configure it with an environment variable instead, set:
The Discord Gateway runs as an opt-in subsystem inside Roomote’s existing BullMQ process, so enabling Discord does not add another container, process, or port. It stays dormant until a token is saved, uses Redis to elect a single active replica, and disconnects if Discord is removed. Durable event delivery uses Redis and a dedicated internal shared secret. Saving Discord credentials in settings generates R_DISCORD_GATEWAY_SECRET when it is not already configured. If Discord was already set up without one (for example after an upgrade), Roomote generates and persists the secret automatically the next time the gateway or API needs it, or when you use Repair. For env-var-only setups, set the same secret on the API and BullMQ processes yourself (installers and platform templates also generate one). Gateway session state is stored in the Roomote database. On a service restart or leader handoff, Roomote asks Discord to resume the previous session and replay any missed events; Discord can fall back to a fresh session when the old one has expired. Restart BullMQ after changing either environment variable. Tokens saved in the setup UI are detected automatically without a restart.

Verify setup

  1. confirm the Discord settings page shows the bot identity and a connected Gateway
  2. confirm Message Content intent and Slash commands pass their checks
  3. link your personal Discord account
  4. mention the bot with a small request and confirm Roomote creates a task thread or forum post
  5. reply in that conversation and confirm the same task continues
If the Gateway remains disconnected, verify BullMQ is running and has access to the same Redis, database, token, and internal secret as the API. If natural messages are ignored but slash commands work, enable Message Content Intent in the Developer Portal and restart BullMQ.