A Discord bot that connects your server to Maestro AI agents through maestro-cli.
- Creates dedicated Discord channels for Maestro agents
- Queues messages per channel for orderly processing
- Streams agent replies back into Discord, including usage stats
- Node.js 18+
- A Discord application + bot token
- Maestro CLI installed and authenticated
CLI docs: https://docs.runmaestro.ai/
- Install dependencies:
npm install- Configure environment:
cp .env.example .envSet these values in .env:
DISCORD_BOT_TOKEN= # Bot token from Discord Developer Portal
DISCORD_CLIENT_ID= # Application ID from Discord Developer Portal
DISCORD_GUILD_ID= # Your server's ID (right-click server → Copy ID)
DISCORD_ALLOWED_USER_IDS=123,456 # Optional: comma-separated user IDs allowed to run slash commands
API_PORT=3457 # Optional: port for internal API (default 3457)
DISCORD_MENTION_USER_ID= # Optional: Discord user ID to @mention when --mention is used
- Deploy slash commands:
npm run deploy-commands- Start the bot (dev mode):
npm run devnpm run build
npm startnode --test --import tsxCoverage:
node --test --experimental-test-coverage --import tsx| Command | Description |
|---|---|
/health |
Verify Maestro CLI is installed and working |
/agents list |
Show all available agents |
/agents new <agent-id> |
Create a dedicated channel for an agent |
/agents disconnect |
(Run inside an agent channel) Remove and delete the channel |
/agents readonly on|off |
Toggle read-only mode for the current agent channel |
/session new |
Create a new owner-bound thread for the current agent channel |
/session list |
List session threads for the current agent channel |
Mention the bot in an agent channel to create a thread, then chat — messages are queued and forwarded to the agent via maestro-cli. See docs/architecture.md for the full message flow, thread ownership model, and project layout.
Agents can push messages to Discord via the maestro-discord CLI / HTTP API. See docs/api.md for usage, endpoints, and error codes.
The bot stores channel ↔ agent mappings in a local SQLite database at maestro-bot.db.
Delete this file to reset all channel bindings.
Invite the bot with both bot and applications.commands scopes:
https://discord.com/oauth2/authorize?client_id=<DISCORD_CLIENT_ID>&scope=bot+applications.commands&permissions=11344
This grants the following permissions:
- Manage Channels
- Add Reactions
- View Channels
- Send Messages
- Manage Messages
Then enable Message Content Intent under Privileged Gateway Intents at:
https://discord.com/developers/applications/<DISCORD_CLIENT_ID>/bot
Without this the bot will fail to connect with a "Used disallowed intents" error.
- Slash command access can be limited with
DISCORD_ALLOWED_USER_IDS. - Mention-created and
/session newthreads are bound to a single owner. - In bound threads, non-owner messages are ignored without bot replies.
- If
/healthfails, ensuremaestro-cliis on your PATH and you are logged in. - If commands don’t appear, re-run
npm run deploy-commandsafter updating your bot or application settings.