Skip to content

Quickstart (Docker)

Run Gray on any machine with Docker.

Terminal window
git clone <gray-self-host-repo-url> gray
cd gray
Terminal window
cp .env.example .env

Fill in at minimum:

  • OPENAI_API_KEY — for voice
  • ANTHROPIC_API_KEY — for the brain (or use a logged-in Claude CLI)
  • VB_ORG_ID — from the Gray enterprise console
  • VB_SELFHOST_TOKEN — from the same console (org → Allow self-host)

To let the brain work on existing data, mount it in docker-compose.yml and point VB_BRAIN_CWD / VB_FILE_ROOT at it.

Terminal window
docker compose up -d
docker compose logs -f gray

Watch the logs — you should see the box pass the hub gate (Gray verifies your subscription is active).

The container binds to 127.0.0.1:8848. Put it behind something safe:

  • A reverse proxy with TLS (Caddy, nginx, Traefik).
  • A VPN (Tailscale →).
  • An SSH tunnel.

Don’t bind a public interface without authentication in front.

In the native app: Settings → I run my own instance → enter your URL.

Or, as a PWA: open the URL in Safari, Share → Add to Home Screen.

ActionCommand
Statusdocker compose ps
Logsdocker compose logs -f gray
Restartdocker compose restart gray
Updategit pull && docker compose pull && docker compose up -d