Skip to content

Installation

Docker Compose runs the platform and web UI as two containers. This is the recommended method for single-machine deployments.

  1. Create a project directory

    Terminal window
    mkdir nimblebrain && cd nimblebrain
  2. Create nimblebrain.json

    nimblebrain.json
    {
    "$schema": "https://schemas.nimblebrain.ai/nimblebrain.json",
    "bundles": [
    { "name": "@nimblebraininc/bash" }
    ]
    }
  3. Create docker-compose.yml

    docker-compose.yml
    services:
    platform:
    image: nimblebrain/platform:latest
    restart: unless-stopped
    volumes:
    - workspace:/data
    - ./nimblebrain.json:/app/nimblebrain.json:ro
    - ./skills:/app/skills:ro
    environment:
    - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
    - OPENAI_API_KEY=${OPENAI_API_KEY:-}
    - GOOGLE_GENERATIVE_AI_API_KEY=${GOOGLE_GENERATIVE_AI_API_KEY:-}
    - NB_API_KEY=${NB_API_KEY}
    web:
    image: nimblebrain/web:latest
    restart: unless-stopped
    ports:
    - "27246:8080"
    environment:
    - PLATFORM_URL=http://platform:27247
    depends_on:
    platform:
    condition: service_healthy
    volumes:
    workspace:

    The platform image is based on oven/bun:1.3-alpine and includes Python 3.13, Node.js, and the mpak CLI for running MCP server bundles.

  4. Start the services

    Terminal window
    export ANTHROPIC_API_KEY=sk-ant-api03-...
    export NB_API_KEY=my-secret-key-at-least-8-chars
    docker compose up

    The platform API runs on port 27247 (internal). The web UI is exposed on port 27246.

VariableRequiredDescription
ANTHROPIC_API_KEYYesYour Anthropic API key for Claude
NB_API_KEYProductionAPI authentication key (min 8 characters). When unset, CORS allows all origins (dev mode)
NB_WORK_DIRNoWorking directory for runtime state. Default: ~/.nimblebrain
NB_HOSTNoHost to bind the API server. Default: 127.0.0.1 (0.0.0.0 in Docker)
ALLOWED_ORIGINSNoComma-separated allowed CORS origins for cookie-based auth
NB_TELEMETRY_DISABLEDNoSet to 1 to disable anonymous telemetry
DO_NOT_TRACKNoSet to 1 to disable anonymous telemetry

NimbleBrain reads nimblebrain.json at startup. Config resolution order:

  1. --config <path> flag (explicit path)
  2. --workdir <dir> flag resolves to <dir>/nimblebrain.json
  3. ./nimblebrain.json (current working directory)
  4. ~/.nimblebrain/nimblebrain.json (global fallback)

A minimal config:

nimblebrain.json
{
"$schema": "https://schemas.nimblebrain.ai/nimblebrain.json",
"bundles": [
{ "name": "@nimblebraininc/bash" }
]
}

See the configuration reference for all options.