Troubleshooting
“Used disallowed intents” at startup
Section titled ““Used disallowed intents” at startup”The Message Content Intent is not enabled. Developer Portal → your app → Bot → Privileged Gateway Intents → enable Message Content Intent, then restart the bot. This is the single most common setup mistake.
The bot reacts with 🔑 and doesn’t answer
Section titled “The bot reacts with 🔑 and doesn’t answer”You (or whoever sent the message) haven’t linked a Claude subscription yet.
Run /link-claude link — see Getting started.
This is per-user; one member linking doesn’t unlock the bot for anyone else.
The bot ignores mentions
Section titled “The bot ignores mentions”Checklist, in order:
- Is the bot online (green dot)? If not, check the logs.
- Does the channel/role allowlist exclude you? Check
/config show. - Can the bot read the channel (View Channel permission)?
- Was the message a reply to the bot rather than a mention? Only real @mentions trigger it outside threads.
- If you got a 🔑 reaction instead of silence, see the section above — you
need to
/link-claudefirst.
“Claude authentication failed” / /link-claude rejects your token
Section titled ““Claude authentication failed” / /link-claude rejects your token”The token is invalid, expired or revoked.
- OAuth tokens from
claude setup-tokenlast about a year, but revoking Claude Code’s access (or a password reset) invalidates them early. - Fix: run
claude setup-tokenagain and/link-claude linkwith the fresh token (or/link-claude unlinkfirst, then relink). - There is no automatic refresh for headless OAuth tokens — this is a Claude Code platform property, not something the bot can work around.
- The dashboard’s Claude subscriptions card has a Re-check button per user if you want to confirm a stored token still works without relinking.
“Usage limit reached”
Section titled ““Usage limit reached””Your own subscription’s usage window is exhausted (shared with your own
Claude Code sessions elsewhere) — this never affects other linked users. The
bot reports when the limit resets and pauses your queue briefly. Options:
wait, switch new conversations to a lighter model (/model → Haiku), or
restrict access more tightly.
Conversations lose their memory after a restart (Docker)
Section titled “Conversations lose their memory after a restart (Docker)”The ~/.claude volume is missing, so Claude Code’s session files died with
the container. See Deployment.
The dashboard shows “unauthorized” / never signs me in
Section titled “The dashboard shows “unauthorized” / never signs me in”There’s no password — see Dashboard accounts. Checklist:
- You need to run
/dashboardin Discord and open the link it replies with; there’s no way to sign in from the browser alone. - The link is single-use and expires in 5 minutes — if you opened it once
already (or waited too long), run
/dashboardagain for a fresh one. - On versions before 1.3.1: if the very first click already said
“invalid or expired,” that wasn’t you — Discord’s own link-preview crawler
fetched the link before you did and spent it. Fixed in 1.3.1, where
GET /api/auth/linkno longer spends the token; upgrade and try again. - If the dashboard is on a different machine than your browser, the operator
needs
DASHBOARD_PUBLIC_URLset to the address you actually browse to — otherwise the link points atlocalhostfrom the bot’s perspective and will never resolve for you. - Cookies are
SameSite=Strict; make sure you’re opening the link’s own origin, not a proxy/redirect that changes it. - 403 instead of the page you expected? You’re signed in but not an admin —
see Dashboard accounts for how
admin is granted (
DASHBOARD_ADMIN_IDSor claim-on-first-login).
Startup warns that env vars or secrets.json keys “are no longer read”
Section titled “Startup warns that env vars or secrets.json keys “are no longer read””You’re upgrading an install that used the old shared-credential model
(CLAUDE_CODE_OAUTH_TOKEN, ANTHROPIC_API_KEY, GITHUB_TOKEN/GH_TOKEN,
or a dashboard password). This is expected and not an error — those aren’t
read anymore, every credential is per-user now. Unset the env vars once
you’ve dealt with them, and open the dashboard as an admin: a one-time
wizard walks through adopting or discarding whatever’s left in
secrets.json. See Upgrading from the old auth
model.
Answers stop mid-sentence with ❌
Section titled “Answers stop mid-sentence with ❌”Check the logs. Common causes: the run hit maxTurns (very tool-heavy
agentic tasks), the subprocess was killed (out of memory — lower
MAX_CONCURRENT_RUNS), or a transient API error (it will usually work on
retry).
Where are the logs?
Section titled “Where are the logs?”docker compose logs -f botSet LOG_LEVEL=debug for more detail. Logs never contain tokens.