Building Custom AI Skills with InstructLab Taxonomy
Create domain-specific AI capabilities using InstructLab's taxonomy system—from writing skill definitions to generating synthetic training data and validating fine-tuned models.
Discord is one of the most popular channels for OpenClaw. With a Discord bot, your AI agent can respond to messages in channels and DMs, making it accessible to your team, community, or personal server 24/7.
This guide covers the complete flow: creating the bot in Discord, configuring it in OpenClaw, and fixing the most common integration errors.
Important: The bot token is shown only once after reset. Store it securely.
This is the step most people miss, and it causes the dreaded Fatal Gateway error: 4014.
In the Discord Developer Portal:
If you don’t enable it, OpenClaw will warn you:
[discord] Discord Message Content Intent is disabled;
bot may not respond to channel messages.
Enable it in Discord Dev Portal (Bot → Privileged Gateway Intents)
or require mentions.And worse — the gateway may crash with:
[openclaw] Uncaught exception: Error: Fatal Gateway error: 4014Error code 4014 specifically means “Disallowed intent(s)” — Discord is rejecting the connection because the bot requested intents it hasn’t been approved for.
botapplications.commands (optional, for slash commands)Open the URL in your browser. You’ll see an authorization page:
Your bot should now appear in the server’s member list (it’ll show as offline until OpenClaw connects).
SSH into your Azure VM and set the bot token:
cd ~/openclaw
# Set the Discord bot token (new config namespace)
docker compose run --rm openclaw-cli config set \
channels.discord.botToken "<YOUR_BOT_TOKEN>"Note: In newer OpenClaw versions, Discord config moved from
discord.*tochannels.discord.*. If you use the old path, you’ll see:Error: Config validation failed: discord: discord config moved to channels.discord (auto-migrated on load).
docker compose run --rm openclaw-cli config set \
channels.discord.enabled truedocker compose down
docker compose up -d
docker compose logs -f --tail=100 openclaw-gatewayIn the gateway logs, you should see:
[discord] [default] starting provider (@openclaw)Without any Fatal Gateway error: 4014 following it.
If the bot doesn’t respond:
Cause: Bot requested intents not enabled in Discord Developer Portal.
Fix:
docker compose down && docker compose up -dCauses:
Fix:
# Check Discord config
docker compose run --rm openclaw-cli config get | grep -i discordCause: Using old discord.* config path.
Fix: Use channels.discord.* instead:
docker compose run --rm openclaw-cli config set channels.discord.botToken "<TOKEN>"
docker compose run --rm openclaw-cli config set channels.discord.enabled trueIf the gateway keeps restarting after enabling Discord, temporarily disable it to stabilize:
docker compose run --rm openclaw-cli config set channels.discord.enabled false
docker compose down
docker compose up -dThen fix the Discord config and re-enable.
With Discord connected, let’s explore the Control UI dashboard: Accessing OpenClaw Control UI Dashboard.
AI & Cloud Advisor with 18+ years experience. Author of 8 technical books, creator of Ansible Pilot. Speaker at KubeCon EU & Red Hat Summit 2026.
Create domain-specific AI capabilities using InstructLab's taxonomy system—from writing skill definitions to generating synthetic training data and validating fine-tuned models.
How to access the OpenClaw Control UI dashboard from an Azure VM — via SSH tunnel (secure) or public IP. Covers device pairing, dashboard authentication, and the browser-based management interface.
End-to-end guide to building a complete persistent memory system for your OpenClaw AI agent. Combine memory flush, hybrid search, file-backed notes, SQLite indexing, and session hooks into a cohesive knowledge architecture.