HonzysClawdbot
fix(session-cookie): migrate to __Host- prefix for secure contexts (#294)
c9c4e2a unverified
|
Raw
History Blame Contribute Delete
8.48 kB
metadata
name: mission-control
description: >-
  Interact with Mission Control β€” AI agent orchestration dashboard. Use when
  registering agents, managing tasks, syncing skills, or querying agent/task
  status via MC APIs.

Mission Control Agent Skill

Mission Control (MC) is an AI agent orchestration dashboard with real-time SSE/WebSocket, a skill registry, framework adapters, and RBAC. This skill teaches agents how to interact with MC APIs programmatically.

Quick Start

Base URL: http://localhost:3000 (default Next.js dev) or your deployed host.

Auth header: x-api-key: <your-api-key>

Register + heartbeat in two calls:

# 1. Register
curl -X POST http://localhost:3000/api/adapters \
  -H "Content-Type: application/json" \
  -H "x-api-key: $MC_API_KEY" \
  -d '{
    "framework": "generic",
    "action": "register",
    "payload": { "agentId": "my-agent-01", "name": "My Agent" }
  }'

# 2. Heartbeat (repeat every 5 minutes)
curl -X POST http://localhost:3000/api/adapters \
  -H "Content-Type: application/json" \
  -H "x-api-key: $MC_API_KEY" \
  -d '{
    "framework": "generic",
    "action": "heartbeat",
    "payload": { "agentId": "my-agent-01", "status": "online" }
  }'

Authentication

MC supports two auth methods:

Method Header Use Case
API Key x-api-key: <key> or Authorization: Bearer <key> Agents, scripts, CI/CD
Session cookie Cookie: __Host-mc-session=<token> (HTTPS) or mc-session=<token> (HTTP) Browser UI

Roles (hierarchical): viewer < operator < admin

  • viewer β€” Read-only access (GET endpoints)
  • operator β€” Create/update agents, tasks, skills, use adapters
  • admin β€” Full access including user management

API key auth grants admin role by default. The key is set via API_KEY env var or the security.api_key DB setting.

Agents can identify themselves with the optional X-Agent-Name header for attribution in audit logs.

Agent Lifecycle

register β†’ heartbeat (5m interval) β†’ fetch assignments β†’ report task status β†’ disconnect

All lifecycle actions go through the adapter protocol (POST /api/adapters).

1. Register

{
  "framework": "generic",
  "action": "register",
  "payload": {
    "agentId": "my-agent-01",
    "name": "My Agent",
    "metadata": { "version": "1.0", "capabilities": ["code", "review"] }
  }
}

2. Heartbeat

Send every ~5 minutes to stay marked as online.

{
  "framework": "generic",
  "action": "heartbeat",
  "payload": {
    "agentId": "my-agent-01",
    "status": "online",
    "metrics": { "tasks_completed": 5, "uptime_seconds": 3600 }
  }
}

3. Fetch Assignments

Returns up to 5 pending tasks sorted by priority (critical β†’ low), then due date.

{
  "framework": "generic",
  "action": "assignments",
  "payload": { "agentId": "my-agent-01" }
}

Response:

{
  "assignments": [
    { "taskId": "42", "description": "Fix login bug\nUsers cannot log in with SSO", "priority": 1 }
  ],
  "framework": "generic"
}

4. Report Task Progress

{
  "framework": "generic",
  "action": "report",
  "payload": {
    "taskId": "42",
    "agentId": "my-agent-01",
    "progress": 75,
    "status": "in_progress",
    "output": "Fixed SSO handler, running tests..."
  }
}

status values: in_progress, done, failed, blocked

5. Disconnect

{
  "framework": "generic",
  "action": "disconnect",
  "payload": { "agentId": "my-agent-01" }
}

Core API Reference

Agents β€” /api/agents

Method Min Role Description
GET viewer List agents. Query: ?status=online&role=dev&limit=50&offset=0
POST operator Create agent. Body: { name, role, status?, config?, template?, session_key?, soul_content? }
PUT operator Update agent. Body: { name, status?, role?, config?, session_key?, soul_content?, last_activity? }

GET response shape:

{
  "agents": [{
    "id": 1, "name": "scout", "role": "researcher", "status": "online",
    "config": {}, "taskStats": { "total": 10, "assigned": 2, "in_progress": 1, "completed": 7 }
  }],
  "total": 1, "page": 1, "limit": 50
}

Tasks β€” /api/tasks

Method Min Role Description
GET viewer List tasks. Query: ?status=in_progress&assigned_to=scout&priority=high&project_id=1&limit=50&offset=0
POST operator Create task. Body: { title, description?, status?, priority?, assigned_to?, project_id?, tags?, metadata?, due_date?, estimated_hours? }
PUT operator Bulk status update. Body: { tasks: [{ id, status }] }

Priority values: critical, high, medium, low

Status values: inbox, assigned, in_progress, review, done, failed, blocked, cancelled

Note: Moving a task to done via PUT requires an Aegis quality review approval.

POST response:

{
  "task": {
    "id": 42, "title": "Fix login bug", "status": "assigned",
    "priority": "high", "assigned_to": "scout", "ticket_ref": "GEN-001",
    "tags": ["bug"], "metadata": {}
  }
}

Skills β€” /api/skills

Method Min Role Description
GET viewer List all skills across roots
GET ?mode=content&source=...&name=... viewer Read a skill's SKILL.md content
GET ?mode=check&source=...&name=... viewer Run security check on a skill
POST operator Create/upsert skill. Body: { source, name, content }
PUT operator Update skill content. Body: { source, name, content }
DELETE ?source=...&name=... operator Delete a skill

Skill sources: user-agents, user-codex, project-agents, project-codex, openclaw

Status β€” /api/status

Action Min Role Description
GET ?action=overview viewer System status (uptime, memory, disk, sessions)
GET ?action=dashboard viewer Aggregated dashboard data with DB stats
GET ?action=gateway viewer Gateway process status and port check
GET ?action=models viewer Available AI models (catalog + local Ollama)
GET ?action=health viewer Health checks (gateway, disk, memory)
GET ?action=capabilities viewer Feature flags: gateway reachable, Claude home, subscriptions

Adapters β€” /api/adapters

Method Min Role Description
GET viewer List available framework adapter names
POST operator Execute adapter action (see Agent Lifecycle above)

Framework Adapter Protocol

All agent lifecycle operations use a single endpoint:

POST /api/adapters
Content-Type: application/json
x-api-key: <key>

{
  "framework": "<adapter-name>",
  "action": "<action>",
  "payload": { ... }
}

Available frameworks: generic, openclaw, crewai, langgraph, autogen, claude-sdk

Available actions: register, heartbeat, report, assignments, disconnect

All adapters implement the same FrameworkAdapter interface β€” choose the one matching your agent framework, or use generic as a universal fallback.

Payload shapes by action:

Action Required Fields Optional Fields
register agentId, name metadata
heartbeat agentId status, metrics
report taskId, agentId progress, status, output
assignments agentId β€”
disconnect agentId β€”

Environment Variables

Variable Default Description
API_KEY β€” API key for agent/script authentication
OPENCLAW_GATEWAY_HOST 127.0.0.1 Gateway host address
OPENCLAW_GATEWAY_PORT 18789 Gateway port
MISSION_CONTROL_DB_PATH .data/mission-control.db SQLite database path
OPENCLAW_STATE_DIR ~/.openclaw OpenClaw state directory
OPENCLAW_CONFIG_PATH <state-dir>/openclaw.json Gateway config file path
MC_CLAUDE_HOME ~/.claude Claude home directory

Real-Time Events

MC broadcasts events via SSE (/api/events) and WebSocket. Key event types:

  • agent.created, agent.updated, agent.status_changed
  • task.created, task.updated, task.status_changed

Subscribe to SSE for live dashboard updates when building integrations.