Self-hosted mission control for OpenClaw — agent ops, company-structure governance (goals · org chart · heartbeats · budgets), and infra tooling (Doctor · backups · updates) in one portable dashboard.
┌────────────────────────────────────────────────────────┐
│ UI :3000 ◄── REST + WebSocket ──► Server :3001 │
│ (React + Vite + Tailwind) (Express + ws + │
│ SQLite WAL) │
│ │ │
│ process-manager · WS gateway │
│ ▼ │
│ OpenClaw :3002 │
└────────────────────────────────────────────────────────┘
curl -fsSL https://example.com/install.sh | bashThe installer detects your OS, makes sure you're on Node 20+, runs
npm install -g clawcontrol, then launches the wizard.
npm install -g clawcontrol
clawcontrol start # wizard on first run, then opens http://localhost:3000Fresh installs land on an empty dashboard. To explore every screen with sample data, opt in to the Nova SaaS Co demo:
clawcontrol demo # load 7 agents, 15-node goal tree, 10 tasks, etc.
# or: Settings → Demo dataset → Load demo data
clawcontrol demo --clear # remove the demo (your own data is preserved)docker compose up -d # just clawcontrol
docker compose --profile ollama up -d # + local Ollama
docker compose --profile ollama --profile openclaw up -d # the workspnpm install
pnpm start # server :3001 + UI :3000 in parallelclawcontrol start First run launches the wizard, then starts the
server and opens the UI in your default browser
clawcontrol stop SIGTERM (force-kill after 8s)
clawcontrol status Running pid + /api/health
clawcontrol backup Trigger a manual backup
clawcontrol doctor Run all health checks; non-zero on any FAIL
clawcontrol update Check + install updates
clawcontrol reset Reset config (keep DB/secrets/backups)
clawcontrol reset --hard Delete everything in ~/.clawcontrol/
clawcontrol export <path> tar.gz the entire ~/.clawcontrol/
clawcontrol import <path> Restore from a previous export
clawcontrol logs Tail server logs
clawcontrol --help
| Layer | Highlights |
|---|---|
| Layer A · Agent operations | Agent roster with live status · 3-step create wizard · Mission Board (Kanban) with approvals · Skills · MMR memory · Channels (Telegram / Discord / Slack / email / webhook) · multi-provider models (Anthropic, OpenAI, Gemini, OpenRouter, Ollama, Codex CLI) |
| Layer B · Paperclip company structure | 4-level Goal hierarchy (Mission → Project → Agent goal → Task) · visual Org chart with budget bars · Heartbeats (cron-scheduled agent runs) · Budgets with hard-stop at 100% |
| Layer C · Infrastructure | Doctor — runs in-process separately from OpenClaw and works when OpenClaw is dead · automatic + manual backups (encryption optional) · one-click updates with pre-update backup · audit log · org isolation |
| Layer D · System shell | Dark theme · Cmd+K palette · Cmd+D Doctor · Cmd+B backup · WebSocket-driven (no polling) · responsive (sidebar collapses to bottom tab bar) · npx clawcontrol deployment |
| ClawControl | Paperclip | |
|---|---|---|
| Self-hosted | ✓ Single binary, single SQLite file | Cloud-only |
| Multi-provider models | ✓ 6 adapters in one file each | Single provider |
| Doctor that runs when the runtime is dead | ✓ Separate process; never touches OpenClaw's API | — |
| Hard-stop budgets per agent | ✓ Auto-pauses at 100%, broadcast over WS | — |
| Goal hierarchy (4-level) | ✓ Mission → Project → Agent goal → Task | ✓ |
| Org chart with budget bars | ✓ | ✓ |
| Heartbeats (cron) | ✓ Survives reconnects via offline queue | ✓ |
| Encrypted local key vault | ✓ AES-256-GCM, machine-specific master key | API-managed |
| One-click backup + restore | ✓ tar.gz + WAL checkpoint + retention | — |
| Open source | MIT | proprietary |
The server reads ~/.clawcontrol/config.json. The wizard creates it on first
run; manual edits work too:
clawcontrol/
├── packages/
│ ├── ui/ React + Vite + TypeScript + Tailwind (port 3000)
│ └── server/ Node + Express + TypeScript + ws (port 3001)
├── bin/
│ └── clawcontrol.js CLI entry point for npx (Phase 9 fills this in)
├── design/ Original Mission Control design bundle (reference)
├── install.sh Curl-installable bootstrap (scaffold)
├── Dockerfile
├── docker-compose.yml
├── package.json Workspace root
└── pnpm-workspace.yaml
- Node.js >= 20
- pnpm >= 9
pnpm install
pnpm start # runs server :3001 + UI :3000 in parallelThen open http://localhost:3000 — the UI proxies /api/* and /ws to the
server on port 3001. A health probe lives at http://localhost:3001/api/health.
pnpm build # esbuild bundles the server into dist/, vite builds the UI| Script | What it does |
|---|---|
pnpm start |
Runs both packages' dev scripts in parallel |
pnpm build |
Builds server (esbuild) and UI (vite) |
pnpm ui:dev |
Run only the UI dev server |
pnpm ui:build |
Build only the UI |
pnpm server:dev |
Run only the server (tsx watch) |
pnpm server:build |
Bundle only the server |
The server reads ~/.clawcontrol/config.json on startup. If the file does
not exist it is created with sensible defaults:
{
"port": 3001,
"host": "127.0.0.1",
"authToken": null,
"openclaw": { "gatewayUrl": "ws://localhost:3002" }
}See PROJECT_BRIEF.md for the full 10-phase roadmap. The original UI
prototype that drives the design lives under design/ and was generated
by Claude Design — see its README for handoff context.
{ "port": 3001, "host": "127.0.0.1", "authToken": null, // bearer token; null = open mode "authPasswordHash": null, // argon2id hash of admin password "dbPath": "/home/you/.clawcontrol/clawcontrol.db", "openclaw": { "gatewayUrl": "ws://localhost:3002" }, "backup": { "schedule": "0 2 * * *", // node-cron expression "retention_days": 30, "encryption_enabled": false, "s3_bucket": null }, "updates": { "auto_check": true, "auto_install": false, "repo_url": "https://api.github.com/repos/clawcontrol/clawcontrol/releases/latest" } }