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.
81
77%
Does it follow best practices?
Impact
99%
3.41xAverage score across 3 eval scenarios
—
The risk profile of this skill
Fix and improve this skill with Tessl
tessl review fix ./data/skills-md/0xindiebruh/openclaw-mission-control-skill/openclaw-mission-control/SKILL.mdCoordinate 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 devThe 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/seedThis 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=8080All 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/examplesNeverSight/learn-skills.dev
e941209
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.