/SKILL.md
Coordinate AI agent teams via a Kanban task board with local JSON storage. Enables multi-agent workflows with a Team Lead assigning work and Worker Agents executing tasks via heartbeat polling. Perfect for building AI agent command centers.
npx skillsauth add 0xindiebruh/openclaw-mission-control-skill openclaw-mission-controlInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Coordinate a team of AI agents using a Kanban-style task board with HTTP API.
Mission Control lets you run multiple AI agents that collaborate on tasks:
http://localhost:8080# Clone the Mission Control app
git clone https://github.com/0xindiebruh/openclaw-mission-control.git
cd mission-control
# Install dependencies
npm install
# Start the server
npm run dev
The board runs at http://localhost:8080.
Edit lib/config.ts to define your agent team:
export const AGENT_CONFIG = {
brand: {
name: "Mission Control",
subtitle: "AI Agent Command Center",
},
agents: [
{
id: "lead",
name: "Lead",
emoji: "🎯",
role: "Team Lead",
focus: "Strategy, task assignment",
},
{
id: "writer",
name: "Writer",
emoji: "✍️",
role: "Content",
focus: "Blog posts, documentation",
},
{
id: "growth",
name: "Growth",
emoji: "🚀",
role: "Marketing",
focus: "SEO, campaigns",
},
{
id: "dev",
name: "Dev",
emoji: "💻",
role: "Engineering",
focus: "Features, bugs, code",
},
{
id: "ux",
name: "UX",
emoji: "🎨",
role: "Product",
focus: "Design, activation",
},
{
id: "data",
name: "Data",
emoji: "📊",
role: "Analytics",
focus: "Metrics, reporting",
},
] as const,
};
Initialize the agents in the database:
curl -X POST http://localhost:8080/api/seed
This creates agent records from your lib/config.ts configuration. Safe to run multiple times — it only adds missing agents.
Add each agent to your ~/.openclaw/config.json:
{
"sessions": {
"list": [
{
"id": "main",
"default": true,
"name": "Lead",
"workspace": "~/.openclaw/workspace"
},
{
"id": "writer",
"name": "Writer",
"workspace": "~/.openclaw/workspace-writer",
"agentDir": "~/.openclaw/agents/writer/agent",
"heartbeat": {
"every": "15m"
}
},
{
"id": "growth",
"name": "Growth",
"workspace": "~/.openclaw/workspace-growth",
"agentDir": "~/.openclaw/agents/growth/agent",
"heartbeat": {
"every": "15m"
}
},
{
"id": "dev",
"name": "Dev",
"workspace": "~/.openclaw/workspace-dev",
"agentDir": "~/.openclaw/agents/dev/agent",
"heartbeat": {
"every": "15m"
}
}
]
}
}
Key fields:
id: Unique agent identifier (must match an agent ID in lib/config.ts)workspace: Agent's working directory for filesagentDir: Contains SOUL.md, HEARTBEAT.md, and agent personalityheartbeat.every: Polling frequency (e.g., 5m, 15m, 1h)Each worker agent needs a HEARTBEAT.md in their agentDir:
# Agent Heartbeat
## Step 1: Check for Tasks
```bash
curl "http://localhost:8080/api/tasks/mine?agent=writer"
```
todo taskscurl -X POST "http://localhost:8080/api/tasks/{TASK_ID}/pick" \
-H "Content-Type: application/json" \
-d '{"agent": "writer"}'
curl -X POST "http://localhost:8080/api/tasks/{TASK_ID}/log" \
-H "Content-Type: application/json" \
-d '{"agent": "writer", "action": "progress", "note": "Working on..."}'
curl -X POST "http://localhost:8080/api/tasks/{TASK_ID}/complete" \
-H "Content-Type: application/json" \
-d '{
"agent": "writer",
"note": "Completed! Summary...",
"deliverables": ["path/to/output.md"]
}'
curl "http://localhost:8080/api/mentions?agent=writer"
Mark as read when done.
Create the agent directories:
```bash
mkdir -p ~/.openclaw/agents/{writer,growth,dev,ux,data}/agent
mkdir -p ~/.openclaw/workspace-{writer,growth,dev,ux,data}
backlog → todo → in_progress → review → done
│ │ │ │
│ │ │ └─ Team Lead approves
│ │ └─ Agent completes (→ review)
│ └─ Agent picks up (→ in_progress)
└─ Team Lead prioritizes (→ todo)
curl -X POST http://localhost:8080/api/tasks \
-H "Content-Type: application/json" \
-d '{
"title": "Task title",
"description": "Detailed description",
"priority": "high",
"assignee": "writer",
"tags": ["tag1", "tag2"],
"createdBy": "lead"
}'
Priority: urgent, high, medium, low
curl -X PATCH "http://localhost:8080/api/tasks/{id}" \
-H "Content-Type: application/json" \
-d '{"status": "todo"}'
curl -X PATCH "http://localhost:8080/api/tasks/{id}" \
-H "Content-Type: application/json" \
-d '{"status": "done"}'
curl -X PATCH "http://localhost:8080/api/tasks/{id}" \
-H "Content-Type: application/json" \
-d '{"deliverable": "path/to/file.md"}'
curl -X POST "http://localhost:8080/api/tasks/{id}/pick" \
-H "Content-Type: application/json" \
-d '{"agent": "{AGENT_ID}"}'
curl -X POST "http://localhost:8080/api/tasks/{id}/log" \
-H "Content-Type: application/json" \
-d '{
"agent": "{AGENT_ID}",
"action": "progress",
"note": "Updated the widget component"
}'
Actions: picked, progress, blocked, completed
curl -X POST "http://localhost:8080/api/tasks/{id}/complete" \
-H "Content-Type: application/json" \
-d '{
"agent": "{AGENT_ID}",
"note": "Completed! Summary of changes...",
"deliverables": ["docs/api.md", "src/feature.js"]
}'
Deliverables render as markdown in the task view.
curl -X POST "http://localhost:8080/api/tasks/{id}/comments" \
-H "Content-Type: application/json" \
-d '{
"author": "agent-id",
"content": "Hey @other-agent, need your input here"
}'
curl "http://localhost:8080/api/mentions?agent={AGENT_ID}"
curl -X POST "http://localhost:8080/api/mentions/read" \
-H "Content-Type: application/json" \
-d '{"agent": "{AGENT_ID}", "all": true}'
| Endpoint | Method | Description |
| ---------------------------- | ------ | ------------------------ |
| /api/tasks | GET | List all tasks |
| /api/tasks | POST | Create new task |
| /api/tasks/{id} | GET | Get task detail |
| /api/tasks/{id} | PATCH | Update task fields |
| /api/tasks/{id} | DELETE | Delete task |
| /api/tasks/mine?agent={id} | GET | Agent's assigned tasks |
| /api/tasks/{id}/pick | POST | Agent picks up task |
| /api/tasks/{id}/log | POST | Log work action |
| /api/tasks/{id}/complete | POST | Complete task (→ review) |
| /api/tasks/{id}/comments | POST | Add comment |
| Endpoint | Method | Description |
| -------------------------- | ------ | ----------------------------- |
| /api/agents | GET | List all agents |
| /api/seed | POST | Initialize agents (first run) |
| /api/mentions?agent={id} | GET | Get unread @mentions |
| /api/mentions/read | POST | Mark mentions as read |
| Endpoint | Method | Description |
| ------------------- | ------ | ------------------------ |
| /api/files/{path} | GET | Read deliverable content |
| Agent | Role | Responsibilities | | ---------- | ----------- | ---------------------------------- | | Lead | Team Lead | Strategy, task creation, approvals | | Writer | Content | Blog posts, documentation, copy | | Growth | Marketing | SEO, campaigns, outreach | | Dev | Engineering | Features, bugs, code | | UX | Product | Design, activation, user flows | | Data | Analytics | Metrics, reports, insights |
Create .env in your Mission Control app directory (optional):
PORT=8080
All data is stored locally in the data/ directory:
| File | Contents |
| -------------------- | ------------------------------ |
| data/tasks.json | All tasks, comments, work logs |
| data/agents.json | Agent status and metadata |
| data/mentions.json | @mention notifications |
Add data/ to your .gitignore — user data shouldn't be committed.
Lead creates task:
curl -X POST http://localhost:8080/api/tasks \
-H "Content-Type: application/json" \
-d '{"title": "Write Q1 Report", "assignee": "writer", "priority": "high"}'
Lead moves to todo:
curl -X PATCH http://localhost:8080/api/tasks/123 \
-d '{"status": "todo"}'
Writer picks up via heartbeat:
curl -X POST http://localhost:8080/api/tasks/123/pick \
-d '{"agent": "writer"}'
Writer completes:
curl -X POST http://localhost:8080/api/tasks/123/complete \
-d '{"agent": "writer", "deliverables": ["reports/q1.md"]}'
Lead reviews and approves:
curl -X PATCH http://localhost:8080/api/tasks/123 \
-d '{"status": "done"}'
urgent → high → medium → lowdata/ directory — back it up if needed/examplesdevelopment
Maintainer-only workflow for handling GitHub Secret Scanning alerts on OpenClaw. Use when Codex needs to triage, redact, clean up, and resolve secret leakage found in issue comments, issue bodies, PR comments, or other GitHub content.
development
Maintainer workflow for OpenClaw releases, prereleases, changelog release notes, and publish validation. Use when Codex needs to prepare or verify stable or beta release steps, align version naming, assemble release notes, check release auth requirements, or validate publish-time commands and artifacts.
development
Run, watch, debug, and extend OpenClaw QA testing with qa-lab and qa-channel. Use when Codex needs to execute the repo-backed QA suite, inspect live QA artifacts, debug failing scenarios, add new QA scenarios, or explain the OpenClaw QA workflow. Prefer the live OpenAI lane with regular openai/gpt-5.4 in fast mode; do not use gpt-5.4-pro or gpt-5.4-mini unless the user explicitly overrides that policy.
development
End-to-end Parallels smoke, upgrade, and rerun workflow for OpenClaw across macOS, Windows, and Linux guests. Use when Codex needs to run, rerun, debug, or interpret VM-based install, onboarding, gateway smoke tests, latest-release-to-main upgrade checks, fresh snapshot retests, or optional Discord roundtrip verification under Parallels.