4.1 KiB
OpenClaw Mission Control
Web UI + API for operating OpenClaw: managing boards, tasks, agents, approvals, and gateway connections.
- Frontend: Next.js app (default http://localhost:3000)
- Backend: FastAPI service (default http://localhost:8000)
- Data: Postgres + Redis
- Gateway integration: see
docs/openclaw_gateway_ws.md
Note on auth (Clerk)
Clerk is optional for local/self-host. The frontend enables Clerk only when
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEYis set. If you don’t want to configure Clerk, make sure that variable is unset/blank.
Quick start (self-host with Docker Compose)
Prerequisites
- Docker + Docker Compose v2 (
docker compose)
Run
cp .env.example .env
# IMPORTANT: if you are not configuring Clerk, disable it by ensuring
# NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY is NOT set.
# (The default `frontend/.env.example` contains placeholders that you should delete/blank.)
docker compose -f compose.yml --env-file .env up -d --build
Open:
- Frontend: http://localhost:3000
- Backend health: http://localhost:8000/healthz
Stop
docker compose -f compose.yml --env-file .env down
Common Compose commands
# Tail logs
docker compose -f compose.yml --env-file .env logs -f --tail=200
# Rebuild a single service
docker compose -f compose.yml --env-file .env up -d --build backend
# Reset data (DESTRUCTIVE: deletes Postgres/Redis volumes)
docker compose -f compose.yml --env-file .env down -v
Quick start (local development)
This is the fastest workflow for contributors: run Postgres/Redis via Docker, and run the backend + frontend in dev mode.
Prerequisites
- Docker + Docker Compose v2
- Python 3.12+ +
uv - Node.js (recommend 18+) + npm
1) Start Postgres + Redis
cp .env.example .env
docker compose -f compose.yml --env-file .env up -d db redis
2) Backend (FastAPI)
cd backend
cp .env.example .env
# deps
uv sync --extra dev
# run API on :8000
uv run uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
Notes:
-
If you run the DB/Redis containers, the backend should use the defaults in
backend/.env(localhost:5432andlocalhost:6379). -
Database migrations:
cd backend uv run alembic upgrade head
3) Frontend (Next.js)
cd frontend
# Configure API URL (and optionally disable Clerk for local dev by removing/blanking Clerk env vars)
cp .env.example .env.local
npm install
npm run dev
Open http://localhost:3000.
Key concepts / high-level architecture
- Mission Control backend exposes a REST API at
/api/v1/*and also hosts health endpoints (/healthz,/readyz). - Mission Control frontend calls the backend via
NEXT_PUBLIC_API_URL. - Postgres stores boards/tasks/agents/etc.
- Redis is used for background work (RQ).
- OpenClaw Gateway connectivity is over WebSockets; protocol details live in
docs/openclaw_gateway_ws.md.
Common commands
Coverage policy
CI enforces a scoped 100% coverage gate (statements + branches) for a small set of unit-testable modules.
See docs/coverage-policy.md.
From repo root:
make help
make setup
make lint
make typecheck
make test
make check
Troubleshooting
Frontend keeps redirecting / Clerk errors
You likely have NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY set (even to a placeholder). To run without Clerk:
- Remove the
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEYline fromfrontend/.env.local, or set it to an empty value.
Backend can’t connect to Postgres/Redis
-
Confirm containers are up:
docker compose -f compose.yml --env-file .env ps -
If you’re running backend locally (not in compose), make sure
backend/.envpoints tolocalhost:DATABASE_URL=postgresql+psycopg://postgres:postgres@localhost:5432/mission_controlREDIS_URL=redis://localhost:6379/0
Port already in use
Adjust ports in .env (copied from .env.example):
FRONTEND_PORTBACKEND_PORTPOSTGRES_PORTREDIS_PORT