Local-first mission dashboard for teams operating an OpenClaw bot.
OpenClaw Mission Control centralizes project execution, bot memory, documentation, people, and recurring operations in a single workspace.
It is designed for fast local workflows with file-based persistence, so you can run everything without external databases.
- Multi-project command center with project cards and metadata.
- Kanban execution board per project with drag-and-drop, status lanes, and ordering.
- Recurring lane support (
recurring) for tasks that are part of ongoing bot operations. - Task detail workflows: priority, assignee, comments, timeline metadata, and file attachments.
- Team directory (
People) with create/edit/delete and assignment-ready member profiles. - Documentation hub with:
- Nested folders
- Drag-and-drop move for folders/documents
- Markdown import/export
- Rich editing (Tiptap) with autosave
- Dedicated editor page with edit/preview modes
- Bot memory workspace with:
- Calendar-based navigation
- Conversation search
- Favorite dates
- Message timeline rendering from Markdown logs
- Scheduled operations dashboard:
- Weekly and Today views
- “Next up” behavior derived from day/time
- CRUD for recurring routine blocks
- Global cross-module search (
Cmd/Ctrl + K) across Projects, Tasks, Docs, People, and Memory. - In-project task quick search (
/) for fast drill-down. - Top navigation context chips (AI model, Madrid date/time, gateway status placeholder) prepared for production wiring.
- Next.js 16 (App Router)
- React 19 + TypeScript
- Tailwind CSS v4
- dnd-kit (drag and drop)
- Tiptap + Markdown tooling (
marked,turndown,react-markdown) - Local file-system storage (
.json+.md) - Vitest + Testing Library
- Cypress (E2E)
The app is local-first and file-backed:
- API routes in
app/api/**expose CRUD/search operations. - Storage adapters in
lib/storage/**read/write local files. - UI routes in
app/(dashboard)/**consume APIs with client-side fetch patterns. - Shared domain contracts are defined in
types/index.ts.
- Node.js 20+ recommended
- npm
git clone https://github.com/ivanurra/openclaw_mission_control.git
cd openclaw_mission_control
npm installnpm run devOpen http://localhost:3000.
npm run dev: Start development servernpm run build: Build production bundlenpm run start: Run production servernpm run lint: Run ESLintnpm run test: Run Vitest test suitenpm run test:watch: Run Vitest in watch modenpm run cy:open: Open Cypress UInpm run cy:run: Run Cypress headlessnpm run e2e: Start app + run Cypressnpm run test:all: Run unit + E2E suites
By default, data is stored under ./data.
You can override this with:
MC_DATA_DIR=/absolute/path/to/dataThis is useful for testing and isolated environments.
data/
├── members/
│ └── members.json
├── documents/
│ ├── index.json
│ └── *.md
├── memory/
│ ├── favorites.json
│ └── YYYY/MM/DD.md
├── projects/
│ └── <project-slug>/
│ ├── project.json
│ ├── tasks/
│ │ └── <task-id>.md
│ └── attachments/
│ └── <task-id>/*
└── scheduled/
└── tasks.json
Conversation files are parsed from headings with this pattern:
## 09:41 - User
Message body
## 09:42 - OpenClaw Bot
Response bodySupported assistant role keywords include assistant and bot.
GET/POST /api/projectsGET/PUT/DELETE /api/projects/[projectId]GET/POST/PATCH /api/projects/[projectId]/tasksGET/PUT/DELETE /api/projects/[projectId]/tasks/[taskId]POST /api/projects/[projectId]/tasks/[taskId]/attachmentsGET/DELETE /api/projects/[projectId]/tasks/[taskId]/attachments/[attachmentId]GET/POST /api/membersGET/PUT/DELETE /api/members/[memberId]GET/POST /api/documentsGET/PUT/DELETE /api/documents/[docId]GET/POST /api/foldersGET/PUT/DELETE /api/folders/[folderId]GET /api/memoryGET /api/memory/searchGET/POST /api/memory/favoritesGET/POST /api/scheduledGET/PUT/DELETE /api/scheduled/[taskId]GET /api/search(global search endpoint)
Cmd/Ctrl + K: Open global search/: Open in-project task searchCmd/Ctrl + S: Save in document editorsEsc: Close modals/search overlays
- Navbar AI model and gateway status are currently mocked for UX scaffolding.
- Gateway health can be wired to your OpenClaw runtime/gateway heartbeat endpoint.
- Model label can be wired to your active provider/model resolution logic.
MIT