-
Notifications
You must be signed in to change notification settings - Fork 0
Troubleshooting
Symptoms: You send /enter, Claude processes the prompt, but no message appears in Discord.
Causes & Solutions:
-
Environment not injected —
discord-sendcan't findDISCORD_TOKENorDEFAULT_CHANNEL_ID- Check logs for export errors
- Verify the tmux session has the env vars:
docker compose exec bot tmux show-environment -t <session-name>
-
System prompt disabled —
CLAUDE_SYSTEM_PROMPT=OFFmeans Claude doesn't know aboutdiscord-send- Remove or unset
CLAUDE_SYSTEM_PROMPTin.env
- Remove or unset
-
Claude is still booting —
waitForClaudeReady()timed out (60s) and the prompt was sent before Claude was ready- Check logs for "timeout waiting for Claude ready" warnings
- The prompt is still queued and will be processed — wait longer
The Prisma client wasn't copied to dist/generated/. Run:
pnpm build # includes prisma generate + copy stepOr manually:
pnpm prisma generate
cp -r src/generated dist/-
Guild-scoped (
REGISTER_GUILD_IDset): Commands appear instantly -
Global (no
REGISTER_GUILD_ID): Can take up to 1 hour to propagate - Verify the bot has
applications.commandsscope in the invite URL - Check logs for command registration errors
# Check if tmux server is running
tmux list-sessions
# In Docker
docker compose exec bot tmux list-sessionsIf no sessions exist, they'll be created lazily on next /enter.
The bot needs ManageChannels permission in the Discord server. Check:
- Bot role has
Manage Channelspermission - No channel/category permission overrides blocking the bot
- Maximum file size: 25 MiB per attachment
- Files are saved to
<workspace>/.uploads/with a timestamp prefix - Check workspace directory permissions
- Verify the workspace volume is mounted correctly in Docker
SQLite doesn't handle concurrent writes well. Ensure:
- Only one bot instance is running against the same database
- The
./datadirectory has correct permissions (UID 1000 in Docker) - No other process has a lock on the SQLite file
Check Claude Code authentication:
# In Docker
docker compose exec bot claude --version
docker compose exec bot claude login
# Local
claude --version
claude login-
SessionStateMap is in-memory — many active sessions increase memory - Use
/deleteto clean up unused rooms - The bot doesn't persist session state to disk — restart clears the Map
- Each tmux session runs a separate Claude Code process
Enable verbose logging:
LOG_LEVEL=debugOr in Docker Compose:
environment:
LOG_LEVEL: debugThis shows:
- Every message received and buffered
- Session ensure/create/resume decisions
- Tmux commands executed
- Environment injection details
- Authorization checks
# List all tmux sessions
tmux list-sessions
# Attach to a session to see what Claude is doing
tmux attach -t claude-<channelId>
# Detach: press Ctrl+B, then D
# Kill a stuck session
tmux kill-session -t claude-<channelId>
# Check bot logs
docker compose logs bot --tail 100 -f
# Check database
docker compose exec bot npx prisma studioclaude-tmux-discord — Discord bot for per-channel Claude Code sessions via tmux
Setup
Usage
Technical
Help