Install

Install in 60 seconds.

npm i -g openclaw@latest gets you the CLI. The onboarding wizard installs the daemon, creates your first tenant, and walks you through pairing your first channel.

1. Install the CLI

Pick your package manager.

npm
npm install -g openclaw@latest
pnpm
pnpm add -g openclaw@latest
bun
bun add -g openclaw@latest

2. Onboard

The onboarding wizard installs the daemon as a user service (systemd on Linux, launchd on macOS), provisions the data directory, generates the admin key, and creates your first tenant.

bash
openclaw onboard --install-daemon

The wizard asks for:

  • Your default LLM provider (Anthropic / OpenAI / custom)
  • The API key for that provider (stored in the gateway config, never in tenant overlays)
  • The first tenant's name
  • Optional S3 backup destination

3. Create another tenant

Once the gateway is running, provision more tenants one at a time or in bulk via the control-plane API.

bash
openclaw tenants create globex
openclaw tenants create initech --quota.tokens-per-day 2_000_000

4. Pair a channel

Pair each tenant to one or more messaging channels. The CLI walks the channel-specific flow.

bash
# WhatsApp (scan QR with your phone)
openclaw channels pair whatsapp --tenant acme

# Telegram (paste BotFather token)
openclaw channels pair telegram --tenant acme --token 1234567:ABCdefGHI...

# Slack (opens OAuth in your browser)
openclaw channels pair slack --tenant acme

# Discord (paste bot token)
openclaw channels pair discord --tenant acme --token <bot-token>

5. Verify

bash
# is the gateway up?
openclaw status

# what tenants exist?
openclaw tenants list

# tail the audit log
openclaw audit tail

Alternative: Docker

For containerized deployments, run the official Docker image. Mount a host volume for tenant data so you can survive container restarts.

docker run
docker run -d --name openclawmu \
  -p 18789:18789 \
  -v ~/.openclaw:/data \
  -e OPENCLAW_DATA_DIR=/data \
  -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \
  --restart unless-stopped \
  neullabs/openclawmu:latest

Alternative: docker compose

docker-compose.yml
services:
  openclawmu:
    image: neullabs/openclawmu:latest
    restart: unless-stopped
    ports:
      - "127.0.0.1:18789:18789"
    volumes:
      - ./data:/data
    environment:
      OPENCLAW_DATA_DIR: /data
      ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY}
      OPENCLAWMU_ADMIN_KEY: ${OPENCLAWMU_ADMIN_KEY}

Exposing the gateway

The gateway binds 127.0.0.1:18789 by default. To accept inbound channel webhooks (Slack, Telegram, etc.) from the public internet, front it with one of:

  • Tailscale Funnel — easiest, single command, free for personal use.
  • Cloudflare Tunnel — also single-command; nice if you're already on Cloudflare.
  • nginx / Caddy — classic reverse-proxy with your own TLS cert.
  • SSH tunnel — fine for dev and small ops.
Tailscale Funnel example
tailscale funnel 18789
# → https://<your-machine>.<tailnet>.ts.net is now public

EXFOLIATE!

Trouble installing?

Open an issue on GitHub or hop into Discord. The maintainer reads both.