agent-browser
Browse the web for any task — research topics, read articles, interact with web apps, fill forms, take screenshots, extract data, and test web pages. Use…
Add Discord bot channel integration to ClaudeClaw.
$ npx -y skills add sbusso/claudeclaw --skill add-discord --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/add-discordContext preview
The summary Claude sees to decide when to auto-load this skill.
Add Discord bot channel integration to ClaudeClaw.
name: add-discord description: Add Discord bot channel integration to ClaudeClaw.
This skill adds Discord support to ClaudeClaw, then walks through interactive setup.
Check if `src/channels/discord.ts` exists. If it does, skip to Phase 3 (Setup). The code changes are already in place.
Use `AskUserQuestion` to collect configuration:
AskUserQuestion: Do you have a Discord bot token, or do you need to create one?
If they have one, collect it now. If not, we'll create one in Phase 3.
git remote -v
If `discord` is missing, add it:
git remote add discord https://github.com/qwibitai/claudeclaw-discord.git
git fetch discord main
git merge discord/main || {
git checkout --theirs package-lock.json
git add package-lock.json
git merge --continue
}This merges in:
If the merge reports conflicts, resolve them by reading the conflicted files and understanding the intent of both sides.
npm install npm run build npx vitest run src/channels/discord.test.ts
All tests must pass (including the new Discord tests) and build must be clean before proceeding.
If the user doesn't have a bot token, tell them:
> I need you to create a Discord bot: > > 1. Go to the [Discord Developer Portal](https://discord.com/developers/applications) > 2. Click **New Application** and give it a name (e.g., "Andy Assistant") > 3. Go to the **Bot** tab on the left sidebar > 4. Click **Reset Token** to generate a new bot token — copy it immediately (you can only see it once) > 5. Under **Privileged Gateway Intents**, enable: > - **Message Content Intent** (required to read message text) > - **Server Members Intent** (optional, for member display names) > 6. Go to **OAuth2** > **URL Generator**: > - Scopes: select `bot` > - Bot Permissions: select `Send Messages`, `Read Message History`, `View Channels` > - Copy the generated URL and open it in your browser to invite the bot to your server
Wait for the user to provide the token.
Add to `.env`:
DISCORD_BOT_TOKEN=<their-token>
Channels auto-enable when their credentials are present — no extra configuration needed.
Sync to container environment:
mkdir -p data/env && cp .env data/env/env
The container reads environment from `data/env/env`, not `.env` directly.
> **Service name:** Derived from the directory name: `com.claudeclaw.<dirname>` (macOS) / `claudeclaw-<dirname>` (Linux). For example, if cwd is `my-assistant`, the service is `com.claudeclaw.my-assistant`. Determine the correct service name before running service commands below.
npm run build launchctl kickstart -k gui/$(id -u)/com.claudeclaw
Tell the user:
> To get the channel ID for registration: > > 1. In Discord, go to **User Settings** > **Advanced** > Enable **Developer Mode** > 2. Right-click the text channel you want the bot to respond in > 3. Click **Copy Channel ID** > > The channel ID will be a long number like `1234567890123456`.
Wait for the user to provide the channel ID (format: `dc:1234567890123456`).
The channel ID, name, and folder name are needed. Use `npx tsx setup/index.ts --step register` with the appropriate flags.
For a main channel (responds to all messages):
npx tsx setup/index.ts --step register -- --jid "dc:<channel-id>" --name "<server-name> #<channel-name>" --folder "discord_main" --trigger "@${ASSISTANT_NAME}" --channel discord --no-trigger-required --is-mainFor additional channels (trigger-only):
npx tsx setup/index.ts --step register -- --jid "dc:<channel-id>" --name "<server-name> #<channel-name>" --folder "discord_<channel-name>" --trigger "@${ASSISTANT_NAME}" --channel discordTell the user:
> Send a message in your registered Discord channel: > - For main channel: Any message works > - For non-main: @mention the bot in Discord > > The bot should respond within a few seconds.
tail -f logs/claudeclaw.log
1. Check `DISCORD_BOT_TOKEN` is set in `.env` AND synced to `data/env/env` 2. Check channel is registered: `sqlite3 store/messages.db "SELECT * FROM registered_groups WHERE jid LIKE 'dc:%'"` 3. For non-main channels: message must include trigger pattern (@mention the bot) 4. Service is running: `launchctl list | grep claudeclaw` 5. Verify the bot has been invited to the server (check OAuth2 URL was used)
This is the default behavior for non-main channels (`requiresTrigger: true`). To change:
If the bot connects but can't read messages, ensure: 1. Go to [Discord Developer Portal](https://discord.com/developers/applications) 2. Select your application > **Bot** tab 3. Under **Privileged Gateway Intents**, enable **Message Content Intent** 4. Restart ClaudeClaw
If you can't copy the channel ID:
The Discord bot supports:
Repo: sbusso/claudeclaw
Browse the web for any task — research topics, read articles, interact with web apps, fill forms, take screenshots, extract data, and test web pages. Use…
Add /compact command for manual context compaction. Solves context rot in long sessions by forwarding the SDK's built-in /compact slash command. Main-group or…
Add Gmail integration to ClaudeClaw. Can be configured as a tool (agent reads/sends emails when triggered from WhatsApp) or as a full channel (emails can…
Add image vision to ClaudeClaw agents. Resizes and processes WhatsApp image attachments, then sends them to Claude as multimodal content blocks.
Add Ollama MCP server so the container agent can call local models for cheaper/faster tasks like summarization, translation, or general queries.
Adds Parallel AI MCP integration to ClaudeClaw for advanced web research capabilities.