OpenClaw Mission Control

CI

Web UI + API for operating OpenClaw: managing boards, tasks, agents, approvals, and gateway connections.

Active development

OpenClaw Mission Control is under active development. Expect breaking changes and incomplete features as we iterate.

Note on auth (Clerk)

Clerk is optional for local/self-host. The frontend enables Clerk only when NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY is set. If you dont 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:

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:5432 and localhost: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_KEY line from frontend/.env.local, or set it to an empty value.

Backend cant connect to Postgres/Redis

  • Confirm containers are up:

    docker compose -f compose.yml --env-file .env ps
    
  • If youre running backend locally (not in compose), make sure backend/.env points to localhost:

    • DATABASE_URL=postgresql+psycopg://postgres:postgres@localhost:5432/mission_control
    • REDIS_URL=redis://localhost:6379/0

Port already in use

Adjust ports in .env (copied from .env.example):

  • FRONTEND_PORT
  • BACKEND_PORT
  • POSTGRES_PORT
  • REDIS_PORT

Star History

Star History Chart

Description
No description provided
Readme MIT 34 MiB
Languages
TypeScript 55.5%
Python 41.8%
Jinja 1%
Shell 0.9%
CSS 0.5%
Other 0.2%