Monitor and manage AI agent squads via Mission Control dashboard. Send heartbeats, log activities, update tasks, track metrics, manage leads, and drop content.
Resources
21Install
npx skillscat add nexitynetwork/ultron Install via the SkillsCat registry.
Mission Control Integration
Your Mission Control dashboard tracks agent status, activities, tasks, metrics, and actions in real-time.
Environment Setup
Every request requires two auth mechanisms:
x-webhook-secretheader — shared secret for server authworkspace_codein request body — identifies which user this agent belongs to
Set your environment in OpenClaw config:
export MISSION_CONTROL_URL="https://your-ultron.vercel.app"
export WEBHOOK_SECRET="your-webhook-secret"Or in ~/.openclaw/openclaw.json:
{
"skills": {
"mission-control": {
"env": {
"MISSION_CONTROL_URL": "https://your-ultron.vercel.app",
"WEBHOOK_SECRET": "your-webhook-secret"
}
}
}
}API Endpoints
All endpoints are POST requests to $MISSION_CONTROL_URL/api/mc/*.
All requests must include:
- Header:
x-webhook-secret: $WEBHOOK_SECRET - Header:
Content-Type: application/json - Body field:
workspace_code(your workspace identifier)
1. Heartbeat (Agent Status)
Send heartbeat to show agent is alive:
curl -X POST "$MISSION_CONTROL_URL/api/mc/heartbeat" \
-H "Content-Type: application/json" \
-H "x-webhook-secret: $WEBHOOK_SECRET" \
-d '{
"workspace_code": "YOUR_WORKSPACE",
"name": "Sentinel",
"status": "active",
"currentTask": "Building landing page"
}'| Field | Required | Description |
|---|---|---|
name |
Yes | Agent name (must match an agent in the dashboard) |
status |
Yes | active, idle, sleeping |
currentTask |
No | What the agent is currently working on |
2. Log Activity
Record what an agent is doing in the activity feed:
curl -X POST "$MISSION_CONTROL_URL/api/mc/activity" \
-H "Content-Type: application/json" \
-H "x-webhook-secret: $WEBHOOK_SECRET" \
-d '{
"workspace_code": "YOUR_WORKSPACE",
"agent": "Sentinel",
"action": "Deployed PR #42 to production",
"detail": "Updated hero section with new copy"
}'| Field | Required | Description |
|---|---|---|
agent |
Yes | Agent name (string) |
action |
Yes | Description of the action taken (string) |
detail |
No | Additional context (string) |
Both agent and action are required or the call will fail.
3. Create Task
Add a task to the kanban board:
curl -X POST "$MISSION_CONTROL_URL/api/mc/task-create" \
-H "Content-Type: application/json" \
-H "x-webhook-secret: $WEBHOOK_SECRET" \
-d '{
"workspace_code": "YOUR_WORKSPACE",
"title": "Implement feature X",
"description": "Details about the feature",
"status": "inbox",
"assignee": "Sentinel",
"priority": "P1"
}'| Field | Required | Description |
|---|---|---|
title |
Yes | Task title |
status |
Yes | inbox, in_progress, review, done, blocked |
assignee |
Yes | Agent name or "owner" |
priority |
Yes | P0 (critical), P1 (normal), P2 (low) |
description |
No | Task details |
WARNING: status must be exactly one of: inbox, in_progress, review, done, blocked. NOT "pending".
WARNING: priority must be exactly one of: P0, P1, P2. NOT "low"/"medium"/"high".
4. Update Task Status
Move a task through the workflow:
curl -X POST "$MISSION_CONTROL_URL/api/mc/task-update" \
-H "Content-Type: application/json" \
-H "x-webhook-secret: $WEBHOOK_SECRET" \
-d '{
"workspace_code": "YOUR_WORKSPACE",
"title": "Implement feature X",
"status": "in_progress"
}'| Field | Required | Description |
|---|---|---|
title |
Yes | Exact task title to match (case-sensitive) |
status |
Yes | inbox, in_progress, review, done, blocked |
assignee |
No | Reassign to a different agent |
Gotcha: Use in_progress (underscore), NOT in-progress (hyphen).
5. Get Tasks
Fetch tasks assigned to you:
curl -X POST "$MISSION_CONTROL_URL/api/mc/tasks" \
-H "Content-Type: application/json" \
-H "x-webhook-secret: $WEBHOOK_SECRET" \
-d '{
"workspace_code": "YOUR_WORKSPACE",
"assignee": "Sentinel"
}'| Field | Required | Description |
|---|---|---|
assignee |
No | Filter by agent name or "owner" |
status |
No | inbox, in_progress, review, done, blocked |
Returns: { ok: true, tasks: [...] }
Omit status to get all tasks for your agent regardless of status.
6. Log Action (with prediction tracking)
Record agent actions with predictions and verification:
curl -X POST "$MISSION_CONTROL_URL/api/mc/actions" \
-H "Content-Type: application/json" \
-H "x-webhook-secret: $WEBHOOK_SECRET" \
-d '{
"workspace_code": "YOUR_WORKSPACE",
"agent": "Specter",
"action": "Sent 15 personalized outreach emails",
"category": "outreach",
"prediction": "60% open rate expected",
"status": "pending"
}'| Field | Required | Description |
|---|---|---|
agent |
Yes | Agent name |
action |
Yes | What was done |
category |
Yes | outreach, content, code, research, other |
prediction |
No | Expected outcome |
status |
No | pending, success, failure, partial, unknown (default: pending) |
outcome |
No | Actual result |
All three of agent, action, and category are required or the call will fail.
Returns { ok: true, id: "uuid" } — save the id to update the action later.
7. Memory (Store & Search)
Store and retrieve long-term memories across runs using semantic search.
Add a memory:
curl -X POST "$MISSION_CONTROL_URL/api/mc/memory" \
-H "Content-Type: application/json" \
-H "x-webhook-secret: $WEBHOOK_SECRET" \
-d '{
"workspace_code": "YOUR_WORKSPACE",
"action": "add",
"agent": "Cortex",
"text": "Competitor X launched new pricing tier at $29/mo, undercutting our $39 plan",
"tags": ["competitor", "pricing"]
}'| Field | Required | Description |
|---|---|---|
action |
Yes | Must be "add" |
agent |
Yes | Your agent name |
text |
Yes | The memory content (must be meaningful, non-empty) |
tags |
No | Array of category tags, e.g. ["research", "competitor"] |
All three of action, agent, and text are required for adding a memory.
Search memories:
curl -X POST "$MISSION_CONTROL_URL/api/mc/memory" \
-H "Content-Type: application/json" \
-H "x-webhook-secret: $WEBHOOK_SECRET" \
-d '{
"workspace_code": "YOUR_WORKSPACE",
"action": "search",
"query": "competitor pricing",
"limit": 5
}'| Field | Required | Description |
|---|---|---|
action |
Yes | Must be "search" |
query |
Yes | Semantic search text |
limit |
No | Max results (default 10) |
Get recent memories:
curl -X POST "$MISSION_CONTROL_URL/api/mc/memory" \
-H "Content-Type: application/json" \
-H "x-webhook-secret: $WEBHOOK_SECRET" \
-d '{
"workspace_code": "YOUR_WORKSPACE",
"action": "recent",
"agent": "Cortex",
"limit": 10
}'8. Log Metric
Track numerical metrics (set or increment):
# Set a value
curl -X POST "$MISSION_CONTROL_URL/api/mc/metric" \
-H "Content-Type: application/json" \
-H "x-webhook-secret: $WEBHOOK_SECRET" \
-d '{
"workspace_code": "YOUR_WORKSPACE",
"key": "emails_sent",
"value": 147
}'
# Increment a value
curl -X POST "$MISSION_CONTROL_URL/api/mc/metric" \
-H "Content-Type: application/json" \
-H "x-webhook-secret: $WEBHOOK_SECRET" \
-d '{
"workspace_code": "YOUR_WORKSPACE",
"key": "emails_sent",
"increment": 15
}'| Field | Required | Description |
|---|---|---|
key |
Yes | Metric key (e.g., emails_sent, tweets_posted, revenue) |
value |
One of | Set the metric to this value |
increment |
One of | Increment the metric by this amount |
9. Create Lead
Add a lead to the CRM:
curl -X POST "$MISSION_CONTROL_URL/api/mc/leads" \
-H "Content-Type: application/json" \
-H "x-webhook-secret: $WEBHOOK_SECRET" \
-d '{
"workspace_code": "YOUR_WORKSPACE",
"name": "John Smith",
"email": "john@acme.com",
"company": "Acme Corp",
"source": "linkedin"
}'| Field | Required | Description |
|---|---|---|
name |
Yes | Lead name |
source |
Yes | Where the lead came from |
email |
No | Lead email |
company |
No | Company name |
notes |
No | Additional details |
10. Content Drop
Drop content assets for review:
curl -X POST "$MISSION_CONTROL_URL/api/mc/content-drop" \
-H "Content-Type: application/json" \
-H "x-webhook-secret: $WEBHOOK_SECRET" \
-d '{
"workspace_code": "YOUR_WORKSPACE",
"title": "Product Launch Tweet Thread",
"description": "5-tweet thread about new feature release",
"category": "twitter_thread",
"createdBy": "Pulse"
}'| Field | Required | Description |
|---|---|---|
title |
Yes | Content title |
description |
Yes | Full content body |
category |
Yes | tweet, twitter_thread, linkedin_post, blog_post, newsletter, instagram |
createdBy |
Yes | Agent that created it |
Agent Behavior Rules
Every agent MUST follow this lifecycle on every run:
1. Send heartbeat on start
POST /api/mc/heartbeat
{"workspace_code": "...", "name": "YourName", "status": "active", "currentTask": "Starting work"}2. Check for assigned tasks
POST /api/mc/tasks
{"workspace_code": "...", "assignee": "YourName"}3. Log activity (at least one entry per run)
POST /api/mc/activity
{"workspace_code": "...", "agent": "YourName", "action": "What you did"}4. Log actions with predictions
POST /api/mc/actions
{"workspace_code": "...", "agent": "YourName", "action": "What you did", "category": "research", "prediction": "Expected outcome"}5. Update task status when working on a task
POST /api/mc/task-update
{"workspace_code": "...", "title": "Exact task title", "status": "in_progress"}6. Store important findings in memory
POST /api/mc/memory
{"workspace_code": "...", "action": "add", "agent": "YourName", "text": "What you learned", "tags": ["topic"]}7. Send heartbeat when done
POST /api/mc/heartbeat
{"workspace_code": "...", "name": "YourName", "status": "sleeping"}CRITICAL REMINDERS
- Every request body MUST include
workspace_code - Activity:
agentandactionare REQUIRED fields - Actions:
agent,action, andcategoryare ALL REQUIRED - Memory add:
action("add"),agent, andtextare ALL REQUIRED - Task status: must be
inbox,in_progress,review,done, orblocked— NOT "pending" - Task priority: must be
P0,P1, orP2— NOT "low"/"medium"/"high"/"urgent" - Use
in_progress(underscore), NOTin-progress(hyphen)
Agent Names
Default squad (customize in your dashboard settings):
- Sentinel — Code & Infrastructure
- Cortex — Research & Intelligence
- Specter — Outreach & Growth
- Striker — Sales & Deals
- Pulse — Social & Content
Troubleshooting
Agent not showing on dashboard?
- Check heartbeat is being sent with correct
x-webhook-secretheader - Verify
MISSION_CONTROL_URLis correct - Ensure
workspace_codemaps to a valid user profile
Tasks not updating?
- Use
in_progressnotin-progress - Ensure task title matches exactly (case-sensitive)
- Status must be: inbox, in_progress, review, done, blocked
- Check API response for errors
Getting 401 errors?
- Verify
WEBHOOK_SECRETmatches the server'sWEBHOOK_SECRETenv var - Verify
workspace_codeexists in theprofilestable
Activity not showing up?
- Both
agentandactionfields are required - Check the API response —
{ ok: true }means it worked
Actions failing?
categoryis required — must be one of: outreach, content, code, research, otheragentandactionare also required