zebbern/claude-code-discord

A Discord bot that brings Claude Code to your channels so you can chat, run shell/git, and manage branches. Access from any local, VM, or Docker instance with full capebilty of claude code!

229

stars

262

commits

TypeScript

primary language

Aug 1, 2026

updated

anthropic
anthropic-claude
automation-framework
awesome
awesome-list
awesome-lists
claude
claude-ai
claude-ai-bot
claude-code
claude-code-commands
claude-code-discord
developer
discord-api
discord-bot
opus
sonnet-4
tools-and-automation
Browse cluster: Curated Resource Collections and Lists

README

claude-code-discord

Run Claude Code from Discord with full SDK integration, agents, rewind, mid-session controls and more.

Found a bug or have an idea for improvement? Submit it via GitHub Issues >⩊<

FeatureDetailsStatus
Use Claude Code AnywhereHost locally (VM / Docker / cloud) and send commands via the Discord API
Thread-per-sessionEach /claude-thread conversation gets its own Discord thread with custom names
Granular sandbox configFull SDK sandbox with network rules, filesystem ACLs, and excluded commands
Local hosting & securityKeep keys and code on your infra while exposing a controlled interface through Discord
Centralized collaborationRun commands and discuss results where your team already communicates
Branch-aware organizationMaps Git branches to channels/categories so feature work stays separated
Mid-session controlsInterrupt, change model, change permissions, stop tasks, and rewind without restarting
MCP server managementView status, toggle, and reconnect MCP servers mid-session
Hooks systemPassive SDK callbacks for tool use, notification, and task completion observability
Full SDK IntegrationBuilt on @anthropic-ai/claude-agent-sdk with native agent support
AskUserQuestionClaude can ask clarifying questions mid-session via Discord buttons
Interactive permission promptsAllow/Deny buttons when Claude wants to use unapproved tools
Role-based access controlRestrict destructive commands (/shell, /git, worktree ops) to specific Discord roles
Channel monitoringWatch a channel for bot/webhook messages and auto-investigate in a thread
Audit trail & accountabilityChannel history provides an easy-to-search record of who ran what and when

v2.5.0 Security hardening, Discord UX (queue, Cancel, compact embeds), Docker SDK-only image. See CHANGELOG.

preview

Quick Start

git clone https://github.com/zebbern/claude-code-discord.git
cd claude-code-discord
cp .env.example .env
# Edit .env: DISCORD_TOKEN, APPLICATION_ID, and ANTHROPIC_API_KEY (required in Docker)
docker compose up -d

Need a Discord bot token first? See Discord Bot Setup.

Installment options (auto setup script or manual installation), see Installation Guide.

Documentation

DocDescription
Discord Bot SetupCreate a Discord app, get your token and application ID, invite the bot
InstallationDocker, one-command setup, manual setup, .env configuration
CommandsFull reference for all 45+ slash commands
FeaturesThinking modes, agents, MCP, rewind, structured output, mid-session controls
ArchitectureProject structure and SDK integration details
DockerDocker Compose, GHCR images, Watchtower auto-updates
UpdatingHow to update (Docker pull, git pull, version check)

Select Newest Model Available

/settings category:claude action:set-model value:opus
/settings category:claude action:set-model value:sonnet
/quick-model model:haiku

Configuration

Create a .env file (or copy .env.example):

# Required
DISCORD_TOKEN=your_bot_token_here
APPLICATION_ID=your_application_id_here

# Optional
ANTHROPIC_API_KEY=sk-ant-...          # Enables dynamic model discovery & refresh
USER_ID=your_discord_user_id          # @mention when Claude finishes a task
CATEGORY_NAME=claude-code             # Discord category for bot channels
WORK_DIR=/path/to/project             # Working directory (default: current dir)

# Access Control (RBAC) — leave blank to keep all commands open
ADMIN_ROLE_IDS=123456789,987654321    # Comma-separated Discord role IDs
ADMIN_USER_IDS=111111111              # Comma-separated Discord user IDs

# Channel Monitoring (optional)
MONITOR_CHANNEL_ID=123456789012345678    # Channel to monitor for alerts from other bots/webhooks/users
MONITOR_BOT_IDS=987654321,111111111      # Comma-separated bot/webhook/user IDs to trigger auto-investigation

# Proxy (optional — respected automatically if set)
# HTTP_PROXY=http://proxy:8080
# HTTPS_PROXY=http://proxy:8080
# NO_PROXY=localhost,127.0.0.1
VariableRequiredDescription
DISCORD_TOKENYesBot token from the Discord Developer Portal
APPLICATION_IDYesApplication ID from the Developer Portal
ANTHROPIC_API_KEYNoEnables dynamic model discovery; refreshes hourly
USER_IDNoYour Discord user ID — bot @mentions you when tasks finish
CATEGORY_NAMENoDiscord category name for channels (default: claude-code)
WORK_DIRNoWorking directory for Claude operations (default: current dir)
ADMIN_ROLE_IDSNoComma-separated role IDs for RBAC (shell, git, system, admin)
ADMIN_USER_IDSNoComma-separated user IDs for RBAC — grants access regardless of roles
MONITOR_CHANNEL_IDNoDiscord channel ID to watch for bot/webhook messages
MONITOR_BOT_IDSNoComma-separated bot/webhook user IDs that trigger auto-investigation
HTTP_PROXYNoHTTP proxy URL (also reads http_proxy)
HTTPS_PROXYNoHTTPS proxy URL (also reads https_proxy)
NO_PROXYNoComma-separated hosts to bypass proxy

CLI flags override environment variables. Environment variables override .env file values.

Startup Options

# Standard start
deno task start

# Development mode (hot reload)
deno task dev

# Direct with environment variables
deno run --allow-all index.ts

# With optional flags
deno run --allow-all index.ts --category myproject --user-id YOUR_DISCORD_ID
FlagEnv VariableDescription
--category <name>CATEGORY_NAMEDiscord category name for channels (default: claude-code)
--user-id <id>USER_IDYour Discord user ID for mentions when tasks finish

CLI flags override environment variables. Environment variables override .env file values.

Channel Monitoring

Automatically investigate alerts from other bots or webhooks. When a monitored bot posts in the configured channel, the bot batches messages over a 30-second debounce window, creates a thread on the alert message, and streams Claude's investigation there.

Setup

  1. Enable the Message Content intent — In the Developer Portal, go to your app → Bot → enable Message Content Intent. The bot needs this to read messages from other bots.

  2. Get the channel ID — Right-click the channel in Discord (Developer Mode must be on) and copy the ID. Set MONITOR_CHANNEL_ID in .env.

  3. Get the bot/webhook user IDs — The easiest way is to look at a message from the bot in the channel, right-click the author, and copy the ID. For webhooks, check the webhook's user ID in the channel's integration settings. Set MONITOR_BOT_IDS as a comma-separated list.

  4. Bot permissions — Ensure the bot has these permissions in the monitored channel:

    • Read Messages
    • Create Public Threads
    • Send Messages in Threads

Contributors

renoschubert

149 commits

zebbern

106 commits

bnorquist

3 commits

Copilot

2 commits

zebbern/claude-code-discord

A Discord bot that brings Claude Code to your channels so you can chat, run shell/git, and manage branches. Access from any local, VM, or Docker instance with full capebilty of claude code!

229

stars

262

commits

TypeScript

primary language

Aug 1, 2026

updated

anthropic
anthropic-claude
automation-framework
awesome
awesome-list
awesome-lists
claude
claude-ai
claude-ai-bot
claude-code
claude-code-commands
claude-code-discord
developer
discord-api
discord-bot
opus
sonnet-4
tools-and-automation
Browse cluster: Curated Resource Collections and Lists

README

claude-code-discord

Run Claude Code from Discord with full SDK integration, agents, rewind, mid-session controls and more.

Found a bug or have an idea for improvement? Submit it via GitHub Issues >⩊<

FeatureDetailsStatus
Use Claude Code AnywhereHost locally (VM / Docker / cloud) and send commands via the Discord API
Thread-per-sessionEach /claude-thread conversation gets its own Discord thread with custom names
Granular sandbox configFull SDK sandbox with network rules, filesystem ACLs, and excluded commands
Local hosting & securityKeep keys and code on your infra while exposing a controlled interface through Discord
Centralized collaborationRun commands and discuss results where your team already communicates
Branch-aware organizationMaps Git branches to channels/categories so feature work stays separated
Mid-session controlsInterrupt, change model, change permissions, stop tasks, and rewind without restarting
MCP server managementView status, toggle, and reconnect MCP servers mid-session
Hooks systemPassive SDK callbacks for tool use, notification, and task completion observability
Full SDK IntegrationBuilt on @anthropic-ai/claude-agent-sdk with native agent support
AskUserQuestionClaude can ask clarifying questions mid-session via Discord buttons
Interactive permission promptsAllow/Deny buttons when Claude wants to use unapproved tools
Role-based access controlRestrict destructive commands (/shell, /git, worktree ops) to specific Discord roles
Channel monitoringWatch a channel for bot/webhook messages and auto-investigate in a thread
Audit trail & accountabilityChannel history provides an easy-to-search record of who ran what and when

v2.5.0 Security hardening, Discord UX (queue, Cancel, compact embeds), Docker SDK-only image. See CHANGELOG.

preview

Quick Start

git clone https://github.com/zebbern/claude-code-discord.git
cd claude-code-discord
cp .env.example .env
# Edit .env: DISCORD_TOKEN, APPLICATION_ID, and ANTHROPIC_API_KEY (required in Docker)
docker compose up -d

Need a Discord bot token first? See Discord Bot Setup.

Installment options (auto setup script or manual installation), see Installation Guide.

Documentation

DocDescription
Discord Bot SetupCreate a Discord app, get your token and application ID, invite the bot
InstallationDocker, one-command setup, manual setup, .env configuration
CommandsFull reference for all 45+ slash commands
FeaturesThinking modes, agents, MCP, rewind, structured output, mid-session controls
ArchitectureProject structure and SDK integration details
DockerDocker Compose, GHCR images, Watchtower auto-updates
UpdatingHow to update (Docker pull, git pull, version check)

Select Newest Model Available

/settings category:claude action:set-model value:opus
/settings category:claude action:set-model value:sonnet
/quick-model model:haiku

Configuration

Create a .env file (or copy .env.example):

# Required
DISCORD_TOKEN=your_bot_token_here
APPLICATION_ID=your_application_id_here

# Optional
ANTHROPIC_API_KEY=sk-ant-...          # Enables dynamic model discovery & refresh
USER_ID=your_discord_user_id          # @mention when Claude finishes a task
CATEGORY_NAME=claude-code             # Discord category for bot channels
WORK_DIR=/path/to/project             # Working directory (default: current dir)

# Access Control (RBAC) — leave blank to keep all commands open
ADMIN_ROLE_IDS=123456789,987654321    # Comma-separated Discord role IDs
ADMIN_USER_IDS=111111111              # Comma-separated Discord user IDs

# Channel Monitoring (optional)
MONITOR_CHANNEL_ID=123456789012345678    # Channel to monitor for alerts from other bots/webhooks/users
MONITOR_BOT_IDS=987654321,111111111      # Comma-separated bot/webhook/user IDs to trigger auto-investigation

# Proxy (optional — respected automatically if set)
# HTTP_PROXY=http://proxy:8080
# HTTPS_PROXY=http://proxy:8080
# NO_PROXY=localhost,127.0.0.1
VariableRequiredDescription
DISCORD_TOKENYesBot token from the Discord Developer Portal
APPLICATION_IDYesApplication ID from the Developer Portal
ANTHROPIC_API_KEYNoEnables dynamic model discovery; refreshes hourly
USER_IDNoYour Discord user ID — bot @mentions you when tasks finish
CATEGORY_NAMENoDiscord category name for channels (default: claude-code)
WORK_DIRNoWorking directory for Claude operations (default: current dir)
ADMIN_ROLE_IDSNoComma-separated role IDs for RBAC (shell, git, system, admin)
ADMIN_USER_IDSNoComma-separated user IDs for RBAC — grants access regardless of roles
MONITOR_CHANNEL_IDNoDiscord channel ID to watch for bot/webhook messages
MONITOR_BOT_IDSNoComma-separated bot/webhook user IDs that trigger auto-investigation
HTTP_PROXYNoHTTP proxy URL (also reads http_proxy)
HTTPS_PROXYNoHTTPS proxy URL (also reads https_proxy)
NO_PROXYNoComma-separated hosts to bypass proxy

CLI flags override environment variables. Environment variables override .env file values.

Startup Options

# Standard start
deno task start

# Development mode (hot reload)
deno task dev

# Direct with environment variables
deno run --allow-all index.ts

# With optional flags
deno run --allow-all index.ts --category myproject --user-id YOUR_DISCORD_ID
FlagEnv VariableDescription
--category <name>CATEGORY_NAMEDiscord category name for channels (default: claude-code)
--user-id <id>USER_IDYour Discord user ID for mentions when tasks finish

CLI flags override environment variables. Environment variables override .env file values.

Channel Monitoring

Automatically investigate alerts from other bots or webhooks. When a monitored bot posts in the configured channel, the bot batches messages over a 30-second debounce window, creates a thread on the alert message, and streams Claude's investigation there.

Setup

  1. Enable the Message Content intent — In the Developer Portal, go to your app → Bot → enable Message Content Intent. The bot needs this to read messages from other bots.

  2. Get the channel ID — Right-click the channel in Discord (Developer Mode must be on) and copy the ID. Set MONITOR_CHANNEL_ID in .env.

  3. Get the bot/webhook user IDs — The easiest way is to look at a message from the bot in the channel, right-click the author, and copy the ID. For webhooks, check the webhook's user ID in the channel's integration settings. Set MONITOR_BOT_IDS as a comma-separated list.

  4. Bot permissions — Ensure the bot has these permissions in the monitored channel:

    • Read Messages
    • Create Public Threads
    • Send Messages in Threads

Contributors

renoschubert

149 commits

zebbern

106 commits

bnorquist

3 commits

Copilot

2 commits

Languages

TypeScript

98.4%