JoBot has a small set of hard requirements and two optional integrations that unlock music and voice features. This page lists what you need before you start, explains what each credential is used for, and provides a full reference table of every environment variable.Documentation Index
Fetch the complete documentation index at: https://docs.jobot.jeppdev.com/llms.txt
Use this file to discover all available pages before exploring further.
Required
| Requirement | Where to get it | Used for |
|---|---|---|
| Docker and Docker Compose | docs.docker.com | Running JoBot and its Lavalink audio sidecar |
| Discord bot token | Discord Developer Portal → Bot → Reset Token | Connecting JoBot to your Discord server |
| Anthropic API key | console.anthropic.com | All Claude AI chat functionality |
| Lavalink passphrase | Choose any string yourself | Authenticating the JoBot container to its Lavalink sidecar |
Optional integrations
Subsonic
A Subsonic-compatible personal music server lets JoBot search your private library, play random tracks, and manage share links. Without Subsonic credentials, JoBot can still play music from YouTube. You need three values from your Subsonic server:- Base URL — the root URL of your server, e.g.
https://music.example.com - Username — the Subsonic account JoBot will authenticate as
- Password — the password for that account
ElevenLabs
ElevenLabs provides the text-to-speech voice JoBot uses when speaking aloud in voice channels. Without an ElevenLabs API key, TTS is unavailable. You need two values from your ElevenLabs account:- API key — found in your ElevenLabs profile settings
- Voice ID — the ID of the voice you want JoBot to use (visible in the ElevenLabs voice library URL)
Environment variable reference
All configuration is passed to JoBot through environment variables. In Docker Compose, these map to theenvironment: block in docker-compose.yml and are typically stored in a .env file.
| Variable | Required | Default | Description |
|---|---|---|---|
Discord__Token | Yes | — | Discord bot token |
Anthropic__Token | Yes | — | Anthropic API key for Claude AI |
Lavalink__Passphrase | Yes | — | Shared passphrase between JoBot and Lavalink |
ConnectionStrings__JoBot | No | Data Source=/app/config/jobot.db | SQLite connection string |
Lavalink__BaseAddress | No | http://lavalink:2333 | URL of the Lavalink server (change if not using the sidecar) |
Ai__Model | No | claude-sonnet-4-6 | Claude model ID |
Ai__MaxTokens | No | 4096 | Maximum tokens per AI response |
Ai__Temperature | No | 0.7 | Global AI temperature (0.0–1.0) |
Ai__MaxToolIterations | No | 50 | Maximum tool-call loops per AI turn |
Ai__MaxHistoryMessages | No | 40 | Maximum messages kept in global AI history |
GuildDefaults__MaxHistoryMessages | No | 20 | Default per-guild conversation history length |
GuildDefaults__AiTemperature | No | 0.7 | Default per-guild AI temperature |
GuildDefaults__MusicVolume | No | 0.5 | Default per-guild music volume (0.0–1.0) |
Subsonic__BaseUrl | No | — | Base URL of your Subsonic server |
Subsonic__Username | No | — | Subsonic account username |
Subsonic__Password | No | — | Subsonic account password |
ElevenLabs__ApiKey | No | — | ElevenLabs API key for TTS |
ElevenLabs__VoiceId | No | — | ElevenLabs voice ID to use for TTS |
Per-guild settings (
GuildDefaults__*) set the starting values for new guilds. Server admins can override them at any time using the /settings set slash commands without restarting the bot.