> ## 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.

# Get started with JoBot in five minutes

> Deploy JoBot to your Discord server using Docker Compose. This guide walks you through bot registration, configuration, and first interaction in five steps.

JoBot runs entirely inside Docker, so you don't need to install .NET or any other runtime. You will need a machine that can run Docker, three API credentials, and about five minutes to get your first AI response in Discord.

<Steps>
  <Step title="Register a Discord application and bot">
    1. Go to the [Discord Developer Portal](https://discord.com/developers/applications) and click **New Application**.
    2. Give it a name (e.g. "JoBot"), then navigate to the **Bot** tab.
    3. Click **Reset Token** and copy the token — this is your `DISCORD_TOKEN`.
    4. Under **Privileged Gateway Intents**, enable **Message Content Intent**.
    5. Navigate to **OAuth2 → URL Generator**. Select the `bot` scope, then grant these bot permissions:
       * Read Messages / View Channels
       * Send Messages
       * Connect (voice)
       * Speak (voice)
    6. Copy the generated URL, open it in your browser, and invite the bot to your server.
  </Step>

  <Step title="Pull the Docker image">
    Pull the latest JoBot image from the GitHub Container Registry:

    ```bash theme={null}
    docker pull ghcr.io/jeppevinkel/jobot:latest
    ```
  </Step>

  <Step title="Create docker-compose.yml">
    Create a `docker-compose.yml` file in a new directory. JoBot requires a Lavalink sidecar for audio routing — the snippet below sets both up:

    ```yaml docker-compose.yml theme={null}
    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 (defaults shown)
          - Lavalink__BaseAddress=http://lavalink:2333

          # Optional — AI tuning (defaults shown)
          - Ai__Model=claude-sonnet-4-6
          - Ai__MaxTokens=4096
          - Ai__Temperature=0.7
          - Ai__MaxToolIterations=50
          - Ai__MaxHistoryMessages=40

          # Optional — per-guild defaults (defaults shown)
          - GuildDefaults__MaxHistoryMessages=20
          - GuildDefaults__AiTemperature=0.7
          - GuildDefaults__MusicVolume=0.5

      lavalink:
        image: ghcr.io/lavalink-devs/lavalink:4
        environment:
          - LAVALINK_SERVER_PASSWORD=${LAVALINK_PASSPHRASE}
    ```
  </Step>

  <Step title="Create .env with required variables">
    In the same directory as your `docker-compose.yml`, create a `.env` file. Docker Compose reads this file automatically and substitutes the values into the service environment.

    ```env .env theme={null}
    # Required
    DISCORD_TOKEN=your-discord-bot-token
    ANTHROPIC_API_KEY=your-anthropic-api-key
    LAVALINK_PASSPHRASE=choose-any-secure-passphrase

    # Optional — remove if you don't have a Subsonic server
    SUBSONIC_BASE_URL=https://music.example.com
    SUBSONIC_USERNAME=your-subsonic-username
    SUBSONIC_PASSWORD=your-subsonic-password
    ```

    `DISCORD_TOKEN` and `ANTHROPIC_API_KEY` are always required. `LAVALINK_PASSPHRASE` can be any string you choose — it only needs to match between the two containers. The Subsonic variables are optional; remove or leave them blank if you don't have a Subsonic server.
  </Step>

  <Step title="Start the bot">
    From the directory containing your `docker-compose.yml`, run:

    ```bash theme={null}
    docker compose up -d
    ```

    Both the JoBot and Lavalink containers will start in the background. Check the logs if something doesn't come up:

    ```bash theme={null}
    docker compose logs -f JoBot
    ```
  </Step>
</Steps>

## First interaction

Once the bot is online in your server, @mention it in any text channel to start a conversation:

> **@JoBot** what can you help me with?

JoBot replies to direct @mentions and to replies on its own messages. It does not respond to messages that don't mention it. If you'd like it to join a voice channel and play music, ask it directly:

> **@JoBot** join my voice channel and play something from YouTube

<Note>
  The environment variables above cover the essentials. For a full reference of every configuration option — including ElevenLabs TTS, AI model tuning, and per-guild defaults — see [Environment variables](/configuration/environment-variables).
</Note>
