Skip to main content

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.

JoBot is configured entirely through environment variables set in your docker-compose.yml or .env file. Required variables must be provided before the bot starts — the bot will fail to connect to Discord, Anthropic, or your Subsonic server if any of them are missing.

Required variables

VariableDescription
Anthropic__TokenYour Anthropic API key. Used to authenticate all Claude AI requests.
Discord__TokenYour Discord bot token from the Discord Developer Portal.
Lavalink__PassphraseThe passphrase securing your Lavalink server. You set this value; it must match LAVALINK_SERVER_PASSWORD in the Lavalink container.
ConnectionStrings__JoBotSQLite connection string. Mount a persistent volume and point this at it, e.g. Data Source=/app/config/jobot.db.
VariableDefaultDescription
Lavalink__BaseAddresshttp://lavalink:2333Internal address of the Lavalink container. Change this if you rename the service or run Lavalink on a different host/port.

Optional — AI tuning

VariableDefaultDescription
Ai__Modelclaude-sonnet-4-6Anthropic model slug to use for all AI responses. Accepts any valid Anthropic model ID.
Ai__MaxTokens4096Maximum number of tokens in a single Claude response.
Ai__Temperature0.7Global default creativity level (0.0 = deterministic, 1.0 = most creative).
Ai__MaxToolIterations50Maximum number of tool calls Claude can chain in a single message turn. Lower values reduce API costs.
Ai__MaxHistoryMessages40Global cap on conversation history messages sent to Claude per request.

Optional — Guild defaults

VariableDefaultDescription
GuildDefaults__MaxHistoryMessages20Default history message count for guilds that have not customised their setting.
GuildDefaults__AiTemperature0.7Default AI temperature for guilds that have not customised their setting.
GuildDefaults__MusicVolume0.5Default music volume for guilds that have not customised their setting (0.0–1.0, where 0.5 = 50%).

Optional — Subsonic

VariableDefaultDescription
Subsonic__BaseUrl(none)Base URL of your Subsonic-compatible server, e.g. https://music.example.com. Required to enable Subsonic music search and playback.
Subsonic__Username(none)Username for your Subsonic server.
Subsonic__Password(none)Password for your Subsonic server.

Optional — ElevenLabs / TTS

VariableDefaultDescription
ElevenLabs__ApiKey(none)ElevenLabs API key. Required to enable text-to-speech features.
ElevenLabs__VoiceId(none)ElevenLabs voice ID to use for TTS output.

Example .env file

Create a .env file alongside your docker-compose.yml and populate it before running docker compose up.
# Required
ANTHROPIC_API_KEY=sk-ant-...
DISCORD_TOKEN=...
LAVALINK_PASSPHRASE=changeme

# Optional — Subsonic (remove if you don't have a Subsonic server)
SUBSONIC_BASE_URL=https://music.example.com
SUBSONIC_USERNAME=jobot
SUBSONIC_PASSWORD=supersecret

# Optional — Lavalink
LAVALINK_BASE_ADDRESS=http://lavalink:2333

# Optional — AI tuning
AI_MODEL=claude-sonnet-4-6
AI_MAX_TOKENS=4096
AI_TEMPERATURE=0.7
AI_MAX_TOOL_ITERATIONS=50
AI_MAX_HISTORY_MESSAGES=40

# Optional — ElevenLabs TTS
ELEVENLABS_API_KEY=
ELEVENLABS_VOICE_ID=
Reference these variables in your docker-compose.yml:
services:
  JoBot:
    restart: unless-stopped
    image: ghcr.io/jeppevinkel/jobot:latest
    depends_on:
      - lavalink
    environment:
      # Required
      - Anthropic__Token=${ANTHROPIC_API_KEY}
      - Discord__Token=${DISCORD_TOKEN}
      - Lavalink__Passphrase=${LAVALINK_PASSPHRASE}
      - Subsonic__BaseUrl=${SUBSONIC_BASE_URL}
      - Subsonic__Username=${SUBSONIC_USERNAME}
      - Subsonic__Password=${SUBSONIC_PASSWORD}
      - ConnectionStrings__JoBot=Data Source=/app/config/jobot.db

      # Optional — Lavalink
      - Lavalink__BaseAddress=${LAVALINK_BASE_ADDRESS:-http://lavalink:2333}

      # Optional — AI tuning
      - Ai__Model=${AI_MODEL:-claude-sonnet-4-6}
      - Ai__MaxTokens=${AI_MAX_TOKENS:-4096}
      - Ai__Temperature=${AI_TEMPERATURE:-0.7}
      - Ai__MaxToolIterations=${AI_MAX_TOOL_ITERATIONS:-50}
      - Ai__MaxHistoryMessages=${AI_MAX_HISTORY_MESSAGES:-40}

      # Optional — ElevenLabs TTS
      - ElevenLabs__ApiKey=${ELEVENLABS_API_KEY}
      - ElevenLabs__VoiceId=${ELEVENLABS_VOICE_ID}

  lavalink:
    image: ghcr.io/lavalink-devs/lavalink:4
    environment:
      - LAVALINK_SERVER_PASSWORD=${LAVALINK_PASSPHRASE}
Guild-level settings — AI temperature, music volume, and history length — can be changed at runtime using /settings slash commands without restarting the bot. Environment variables serve as the global defaults that apply to any guild that has not overridden them.