missiond

Multi-agent orchestration for Claude Code - spawn and control multiple Claude instances via MCP

missiond

Multi-agent orchestration for Claude Code — Spawn, control, and coordinate multiple Claude Code instances from a single session via MCP.

Crates.io License: MIT

What is missiond?

missiond is a daemon that turns a single Claude Code session into a multi-agent system. The main Claude Code instance acts as an orchestrator, dispatching tasks to background Claude Code agents running in managed pseudo-terminals (PTY slots). Each slot is a fully independent Claude Code session with its own working directory, role, and permissions.

Features

Core

  • PTY Sessions — Spawn Claude Code in pseudo-terminals with full terminal emulation (via Alacritty terminal)
  • Semantic Parsing — Real-time state detection (Idle/Thinking/Responding/Confirming/Error), tool output extraction, status bar parsing, confirm dialog parsing
  • MCP Integration — 40+ tools exposed through Model Context Protocol for agent control
  • Task Queue — Async task submission (mission_submit) and sync consultation (mission_ask) with automatic slot routing
  • Permission System — Role-based tool permissions (allow/confirm/deny) with glob pattern matching
  • Cross-Platform — macOS, Linux, Windows; Unix domain sockets or TCP loopback IPC

Agent Lifecycle

  • Auto-Restart — Automatically restarts PTY slots when context window drops below 10%
  • Stuck Detection — Monitors JSONL activity to detect and recover stuck agents
  • Autonomous Workflow — Agents can work autonomously with safety guardrails and reporting back to the orchestrator

Knowledge & Memory

  • Knowledge Base (KB) — SQLite-backed knowledge store with FTS5 full-text search, auto-GC, and tiered categories
  • Conversation Logging — Records all Claude Code conversations (including tool_use/tool_result and thinking blocks) into SQLite
  • Memory Extraction — Real-time and deep analysis pipelines that extract insights from agent conversations
  • KB Injection — Automatically injects relevant knowledge into agent context via MCP server instructions and UserPromptSubmit hooks

Monitoring & Dashboard

  • WebSocket API — Real-time PTY attach, task events, and session monitoring
  • Board UI — Next.js dashboard with conversation viewer, slot status, and task management
  • CC Tasks Watcher — Cross-session task monitoring by watching Claude Code's JSONL session files
  • PTY Screenshots — Render terminal state as PNG images for visual debugging

Infrastructure Tools

  • Mission Board — Task/kanban board with notes, hidden tasks, and skip status
  • Question Queue — Agents can post questions for human review instead of blocking
  • Slot History — Track task assignment history per slot
  • AI Router — Route LLM requests through configurable model backends (for KB analysis)
  • Reachability Check — Probe configured server health endpoints
  • OS Diagnostics — System resource monitoring (CPU, memory, disk)

Architecture

┌─────────────────┐     MCP      ┌──────────────┐
│  Claude Code    │◄────────────►│  mission-mcp │
│  (Orchestrator) │              └──────┬───────┘
└─────────────────┘                     │ IPC (JSON-RPC)
                                        ▼
                               ┌──────────────────┐
                               │    missiond       │
                               │    (Daemon)       │
                               ├──────────────────┤
                               │ • Task Queue      │
                               │ • PTY Manager     │
                               │ • Permission Mgr  │
                               │ • Knowledge Base  │
                               │ • Memory Pipeline │
                               │ • WebSocket API   │
                               │ • CC Tasks Watcher│
                               └────────┬─────────┘
                                        │ PTY
              ┌─────────────────────────┼─────────────────────────┐
              ▼                         ▼                         ▼
        ┌───────────┐            ┌───────────┐            ┌───────────┐
        │  slot-1   │            │  slot-2   │            │  slot-N   │
        │  Claude   │            │  Claude   │            │  Claude   │
        │  (coder)  │            │ (research)│            │ (memory)  │
        └───────────┘            └───────────┘            └───────────┘

Installation

From Cargo (Rust)

cargo install missiond-mcp --bin mission-mcp
cargo install missiond-daemon --bin missiond
cargo install missiond-attach --bin missiond-attach

From npm (Node.js)

npm install @missiond/core

Pre-built binaries for:

  • macOS (ARM64, x64)
  • Linux (x64 glibc, x64 musl)
  • Windows (x64)

Quick Start

1. Configure MCP

Add to ~/.claude/settings.json:

{
  "mcpServers": {
    "mission": {
      "command": "mission-mcp",
      "args": [],
      "env": { "MISSION_LOG_LEVEL": "warn" }
    }
  }
}

2. Configure Slots

Create ~/.missiond/slots.yaml:

slots:
  - id: coder-1
    role: coder
    description: "Coding specialist"
    cwd: /path/to/projects

  - id: researcher-1
    role: researcher
    description: "Research and documentation"
    cwd: /path/to/docs

3. Use from Claude Code

User: "Spawn an agent to refactor the auth module"

Claude: I'll spawn a coding agent for that task.
[Uses mission_pty_spawn tool]
[Uses mission_pty_send with the refactoring instructions]

MCP Tools

Task Operations

ToolDescription
mission_submitSubmit async task to agent (with optional slotId targeting)
mission_taskBatch query submit task status
mission_askSync expert consultation
mission_statusQuery task/agent status
mission_cancelCancel running task
mission_spawnSpawn a new agent slot
mission_killKill an agent slot
mission_restartRestart an agent slot
mission_agentsList all agents and their states
mission_slotsGet slot configuration
mission_inboxCheck inbox for messages

PTY Control

ToolDescription
mission_pty_spawnStart PTY session
mission_pty_sendSend message, wait for response
mission_pty_screenGet current terminal screen
mission_pty_screenshotRender terminal as PNG image
mission_pty_confirmHandle tool confirmation dialogs
mission_pty_interruptSend Ctrl+C
mission_pty_killClose PTY session
mission_pty_statusGet session state and metadata
mission_pty_historyGet session message history
mission_pty_logsGet PTY log file contents

Knowledge Base

ToolDescription
mission_kb_rememberStore a knowledge entry
mission_kb_forgetDelete a knowledge entry
mission_kb_searchFull-text search across KB
mission_kb_getGet entry by ID
mission_kb_listList entries with filtering
mission_kb_importBulk import entries
mission_kb_discoverDiscover knowledge from infrastructure
mission_kb_gcGarbage collect stale entries
mission_kb_analyzeAI-powered KB analysis (via configurable LLM backend)

Board & Tasks

ToolDescription
mission_board_listList board tasks
mission_board_createCreate a board task
mission_board_updateUpdate a board task
mission_board_getGet task details
mission_board_deleteDelete a board task
mission_board_toggleToggle task completion
mission_board_note_addAdd a note to a task
mission_board_summaryGet board summary

Monitoring

ToolDescription
mission_cc_sessionsList all Claude Code sessions
mission_cc_tasksGet tasks for a session
mission_cc_overviewGlobal task statistics
mission_cc_in_progressAll in-progress tasks
mission_cc_trigger_swarmTrigger swarm coordination
mission_slot_historyTask assignment history per slot

Conversations & Memory

ToolDescription
mission_conversation_listList recorded conversations
mission_conversation_getGet conversation messages
mission_conversation_searchSearch conversation content
mission_memory_pendingCheck pending memory queue
mission_memory_pausePause memory extraction (with auto-resume TTL)
mission_memory_doneMark memory processing complete
mission_token_statsToken consumption statistics

Permissions

ToolDescription
mission_permission_getGet current permission policy
mission_permission_set_roleSet slot role permissions
mission_permission_set_slotSet per-slot overrides
mission_permission_add_auto_allowAdd auto-allow rules
mission_permission_reloadReload permission config

Infrastructure

ToolDescription
mission_infra_listList configured infrastructure
mission_infra_getGet infrastructure details
mission_healthDaemon health check
mission_reachabilityProbe server health endpoints
mission_os_diagnoseSystem resource diagnostics
mission_skill_listList available skills
mission_skill_searchSearch skills by keyword
mission_context_buildBuild context from skills

Question Queue

ToolDescription
mission_question_createAgent posts a question for human
mission_question_listList pending questions
mission_question_getGet question details
mission_question_answerHuman answers a question
mission_question_dismissDismiss a question

AI Router

ToolDescription
mission_router_chatRoute chat completion through configured LLM backend

Jarvis (Logging)

ToolDescription
mission_jarvis_logsQuery log center entries
mission_jarvis_traceTrace request by ID

Semantic Terminal Parsing

The daemon includes sophisticated terminal parsing for Claude Code's TUI:

  • State Machine — Tracks Idle, Thinking, Responding, ToolRunning, Confirming, Error, SlashMenu states with debounce
  • Confirm Dialog Parsing — Extracts tool name, parameters, file paths from permission prompts
  • Status Bar Parsing — Reads spinner state and status text from bottom lines
  • Tool Output Extraction — Parses both boxed (───) and inline tool outputs
  • Title Parsing — Monitors terminal title changes for session info
pub enum SessionEvent {
    StateChange { new_state, prev_state },
    ConfirmRequired { prompt, info },
    StatusUpdate(ClaudeCodeStatus),
    ToolOutput(ClaudeCodeToolOutput),
    TitleChange(ClaudeCodeTitle),
    TextComplete(String),
}

WebSocket API

PTY Attach

ws://localhost:9120/pty/<slot-id>

Connect to watch or interact with a PTY session in real-time. Receives terminal cell data for rendering.

Tasks Events

ws://localhost:9120/tasks

Subscribe to task lifecycle events:

  • cc_tasks_changed — Tasks updated
  • cc_task_started / cc_task_completed
  • cc_session_active / cc_session_inactive

Node.js Client

import { MissionControl } from '@missiond/core';

const mission = new MissionControl();
await mission.connect();  // Auto-starts daemon

// Spawn PTY session
const pty = await mission.pty.spawn('slot-1', 'claude');
pty.on('state', (state) => console.log('State:', state));
pty.on('confirm', (info) => console.log('Confirm:', info));

// Send message and wait for response
const response = await pty.send('Explain this codebase');
console.log(response);

await pty.kill();
mission.close();

Configuration

Environment Variables

VariableDefaultDescription
MISSIOND_HOME~/.missiondConfig directory
MISSION_DB_PATH$MISSIOND_HOME/mission.dbSQLite database
MISSION_SLOTS_CONFIG$MISSIOND_HOME/slots.yamlSlot definitions
MISSION_IPC_ENDPOINTUnix socket / TCP (Windows)IPC endpoint
MISSION_WS_PORT9120WebSocket port
MISSION_LOG_LEVELwarnLog level

Cross-Platform IPC

  • Unix (macOS/Linux): Unix domain sockets (~/.missiond/missiond.sock)
  • Windows: TCP loopback (127.0.0.1:port)

Permissions

Configure tool permissions in ~/.missiond/permissions.yaml:

roles:
  coder:
    allow:
      - "Bash(*)"
      - "Read(*)"
      - "Write(*)"
    confirm:
      - "Edit(*)"
    deny:
      - "Bash(rm -rf*)"

  researcher:
    allow:
      - "Read(*)"
      - "WebSearch(*)"
    deny:
      - "Bash(*)"
      - "Write(*)"

AI Router (Optional)

To use mission_kb_analyze and mission_router_chat, configure an LLM backend in ~/.missiond/credentials.json:

{
  "auth_url": "https://your-llm-api-endpoint.com",
  "api_key": "your-api-key"
}

Secret Resolution (Optional)

Slot environment variables support ${secret:path} syntax that resolves secrets at spawn time via a configurable command.

Crates

CrateDescription
missiond-coreCore library: PTY management, semantic terminal parsing, task queue, knowledge base, IPC
missiond-mcpMCP server binary (mission-mcp) — tool definitions and JSON-RPC protocol
missiond-daemonDaemon binary (missiond) — main process with all subsystems
missiond-runnerClaude CLI wrapper for slot process management
missiond-attachPTY attach CLI (missiond-attach) — connect to running sessions
semantic-terminal-napiNode.js N-API bindings for semantic terminal parsing

Packages (npm)

PackageDescription
@missiond/coreNode.js client library with auto-daemon management
@missiond/boardNext.js dashboard for monitoring and management
@missiond/semantic-terminalNode.js semantic terminal parser

Development

# Build all crates
cargo build

# Run daemon
cargo run --bin missiond

# Run MCP server
cargo run --bin mission-mcp

# Build Node.js packages
cd packages/node-client && pnpm build
cd packages/board && pnpm build

License

MIT License — see LICENSE for details.

Related Servers