openclaw-mission-control

Original🇺🇸 English
Translated

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.

11installs
Added on

NPX Install

npx skill4agent add neversight/skills_feed openclaw-mission-control

Mission Control

Coordinate a team of AI agents using a Kanban-style task board with HTTP API.

Overview

Mission Control lets you run multiple AI agents that collaborate on tasks:
  • Team Lead: Creates and assigns tasks, reviews completed work
  • Worker Agents: Poll for tasks via heartbeat, execute work, log progress
  • Kanban Board: Visual task management at
    http://localhost:8080
  • HTTP API: Agents interact via REST endpoints
  • Local Storage: All data stored in JSON files — no external database needed

Quick Start

1. Install the Kanban Board

bash
# 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
.

2. Configure Your Agents

Edit
lib/config.ts
to define your agent team:
typescript
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,
};

3. Seed the Database (First Run)

Initialize the agents in the database:
bash
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.

4. Configure OpenClaw Multi-Agent Mode

Add each agent to your
~/.openclaw/config.json
:
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 files
  • agentDir
    : Contains
    SOUL.md
    ,
    HEARTBEAT.md
    , and agent personality
  • heartbeat.every
    : Polling frequency (e.g.,
    5m
    ,
    15m
    ,
    1h
    )

5. Set up Agent Heartbeats

Each worker agent needs a
HEARTBEAT.md
in their
agentDir
:
markdown
# Agent Heartbeat

## Step 1: Check for Tasks

```bash
curl "http://localhost:8080/api/tasks/mine?agent=writer"
```

Step 2: Pick up
todo
tasks

bash
curl -X POST "http://localhost:8080/api/tasks/{TASK_ID}/pick" \
  -H "Content-Type: application/json" \
  -d '{"agent": "writer"}'

Step 3: Log Progress

bash
curl -X POST "http://localhost:8080/api/tasks/{TASK_ID}/log" \
  -H "Content-Type: application/json" \
  -d '{"agent": "writer", "action": "progress", "note": "Working on..."}'

Step 4: Complete Tasks

bash
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"]
  }'

Step 5: Check for @Mentions

bash
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}

Task Lifecycle

backlog → todo → in_progress → review → done
   │        │         │           │
   │        │         │           └─ Team Lead approves
   │        │         └─ Agent completes (→ review)
   │        └─ Agent picks up (→ in_progress)
   └─ Team Lead prioritizes (→ todo)

Team Lead Operations

Creating a Task

bash
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

Moving to Todo

bash
curl -X PATCH "http://localhost:8080/api/tasks/{id}" \
  -H "Content-Type: application/json" \
  -d '{"status": "todo"}'

Approving Completed Work

bash
curl -X PATCH "http://localhost:8080/api/tasks/{id}" \
  -H "Content-Type: application/json" \
  -d '{"status": "done"}'

Adding Deliverable Path

bash
curl -X PATCH "http://localhost:8080/api/tasks/{id}" \
  -H "Content-Type: application/json" \
  -d '{"deliverable": "path/to/file.md"}'

Worker Agent Operations

Picking Up Tasks

bash
curl -X POST "http://localhost:8080/api/tasks/{id}/pick" \
  -H "Content-Type: application/json" \
  -d '{"agent": "{AGENT_ID}"}'

Logging Progress

bash
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

Completing a Task

bash
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.

Comments & @Mentions

Adding a Comment

bash
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"
  }'

Checking for @Mentions

bash
curl "http://localhost:8080/api/mentions?agent={AGENT_ID}"

Marking Mentions as Read

bash
curl -X POST "http://localhost:8080/api/mentions/read" \
  -H "Content-Type: application/json" \
  -d '{"agent": "{AGENT_ID}", "all": true}'

API Reference

Tasks

EndpointMethodDescription
/api/tasks
GETList all tasks
/api/tasks
POSTCreate new task
/api/tasks/{id}
GETGet task detail
/api/tasks/{id}
PATCHUpdate task fields
/api/tasks/{id}
DELETEDelete task
/api/tasks/mine?agent={id}
GETAgent's assigned tasks
/api/tasks/{id}/pick
POSTAgent picks up task
/api/tasks/{id}/log
POSTLog work action
/api/tasks/{id}/complete
POSTComplete task (→ review)
/api/tasks/{id}/comments
POSTAdd comment

Agents & System

EndpointMethodDescription
/api/agents
GETList all agents
/api/seed
POSTInitialize agents (first run)
/api/mentions?agent={id}
GETGet unread @mentions
/api/mentions/read
POSTMark mentions as read

Files

EndpointMethodDescription
/api/files/{path}
GETRead deliverable content

Recommended Agent Team Structure

AgentRoleResponsibilities
LeadTeam LeadStrategy, task creation, approvals
WriterContentBlog posts, documentation, copy
GrowthMarketingSEO, campaigns, outreach
DevEngineeringFeatures, bugs, code
UXProductDesign, activation, user flows
DataAnalyticsMetrics, reports, insights

Configuration

Environment Variables

Create
.env
in your Mission Control app directory (optional):
env
PORT=8080

Data Storage

All data is stored locally in the
data/
directory:
FileContents
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.

Example: Running a Multi-Agent Workflow

  1. Lead creates task:
    bash
    curl -X POST http://localhost:8080/api/tasks \
      -H "Content-Type: application/json" \
      -d '{"title": "Write Q1 Report", "assignee": "writer", "priority": "high"}'
  2. Lead moves to todo:
    bash
    curl -X PATCH http://localhost:8080/api/tasks/123 \
      -d '{"status": "todo"}'
  3. Writer picks up via heartbeat:
    bash
    curl -X POST http://localhost:8080/api/tasks/123/pick \
      -d '{"agent": "writer"}'
  4. Writer completes:
    bash
    curl -X POST http://localhost:8080/api/tasks/123/complete \
      -d '{"agent": "writer", "deliverables": ["reports/q1.md"]}'
  5. Lead reviews and approves:
    bash
    curl -X PATCH http://localhost:8080/api/tasks/123 \
      -d '{"status": "done"}'

Tips

  • Heartbeat frequency: 15 minutes is a good default
  • Priority order: Agents should work
    urgent
    high
    medium
    low
  • Deliverables: Include all file paths modified in the task
  • @Mentions: Use to coordinate between agents on dependencies
  • Isolation: Each agent has its own workspace for safety
  • Storage: Data persists in
    data/
    directory — back it up if needed

Resources