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
- Open the Discord Developer Portal
and create an application.
- Open Bot, create the bot if needed, and copy or reset its token.
- Under Privileged Gateway Intents, enable Message Content Intent.
Roomote needs this to understand natural-language messages and follow-ups.
- 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.
Link your account
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
- confirm the Discord settings page shows the bot identity and a connected
Gateway
- confirm Message Content intent and Slash commands pass their checks
- link your personal Discord account
- mention the bot with a small request and confirm Roomote creates a task
thread or forum post
- 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.