missiond
Claude Code的多代理编排 --通过MCP从单个会话生成、控制和协调多个Claude Code实例。
 
什么是missiond?
missiond是一个守护进程,它将单个Claude Code会话转换为多代理系统。主Claude Code实例充当编排器,将任务分派给在托管伪终端(PTY插槽)中运行的后台Claude Code代理。每个插槽都是一个完全独立的Claude Code会话,具有自己的工作目录、角色和权限。
特性
核心
- PTY会议 --伪终端中的Spawn Claude代码,具有完整的终端仿真功能(通过Alacritty终端)
- 语义分析 --实时状态检测(空闲/思考/响应/确认/错误)、工具输出提取、状态栏解析、确认对话框解析
- MCP集成 --通过模型上下文协议公开了40多种用于代理控制的工具
- 任务队列 --异步任务提交(
mission_submit)并同步咨询(mission_ask)具有自动插槽布线功能 - 权限系统 --基于角色的工具权限(允许/确认/拒绝)与glob模式匹配
- 交叉平台的 --macOS、Linux、Windows;Unix域套接字或TCP环回IPC
代理生命周期
- 自动重启 --当上下文窗口降至10%以下时,自动重新启动PTY插槽
- 卡住检测 --监控JSONL活动以检测和恢复卡住的代理
- 自主工作流 --代理可以使用安全护栏自主工作,并向协调器报告
知识与记忆
- 知识库(KB) --SQLite支持的知识库,具有FTS5全文搜索、自动GC和分层类别
- 对话记录 --将所有Claude Code对话(包括tool_use/tool_result和思考块)记录到SQLite中
- 内存提取 --从代理对话中提取见解的实时和深度分析管道
- KB注入 --通过MCP服务器指令和UserPromptSubmit挂钩自动将相关知识注入代理上下文
监控和仪表板
- Websocket API --实时PTY连接、任务事件和会话监控
- 板UI --Next.js仪表板,带有对话查看器、插槽状态和任务管理
- CC任务监视器 --通过查看Claude Code的JSONL会话文件进行跨会话任务监控
- PTY屏幕截图 --将终端状态渲染为PNG图像以进行可视化调试
基础设施工具
- 任务委员会 --带有注释、隐藏任务和跳过状态的任务/看板
- 问题队列 --客服可以发布问题供人工审核,而不是屏蔽
- 老虎机历史 --跟踪每个插槽的任务分配历史记录
- AI路由器 --通过可配置的模型后端路由LLM请求(用于KB分析)
- 可达性检查 --探测配置的服务器运行状况终结点
- 操作系统诊断 --系统资源监控(CPU、内存、磁盘)
建筑
┌─────────────────┐ 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) │
└───────────┘ └───────────┘ └───────────┘
安装
来自货物(生锈)
cargo install missiond-mcp --bin mission-mcp
cargo install missiond-daemon --bin missiond
cargo install missiond-attach --bin missiond-attach
来自npm(Node.js)
npm install @missiond/core
预构建的二进制文件用于:
- macOS(ARM64,x64)
- Linux(x64 glibc,x64 musl)
- Windows(x64)
快速开始
1.配置MCP
增添 ~/.claude/settings.json:
{
"mcpServers": {
"mission": {
"command": "mission-mcp",
"args": [],
"env": { "MISSION_LOG_LEVEL": "warn" }
}
}
}
2.配置插槽
创建 ~/.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.使用克劳德代码
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工具
任务操作
| 工具 | 说明 |
|---|
mission_submit | 向代理提交异步任务(具有可选的slotId目标) |
mission_task | 批量查询提交任务状态 |
mission_ask | 同步专家咨询 |
mission_status | 查询任务/代理状态 |
mission_cancel | 取消正在运行的任务 |
mission_spawn | 生成一个新的代理插槽 |
mission_kill | 杀死代理插槽 |
mission_restart | 重新启动代理插槽 |
mission_agents | 列出所有代理及其状态 |
mission_slots | 获取插槽配置 |
mission_inbox | 检查收件箱中的邮件 |
PTY控制
| 工具 | 说明 |
|---|
mission_pty_spawn | 开始PTY会话 |
mission_pty_send | 发送消息,等待响应 |
mission_pty_screen | 获取当前终端屏幕 |
mission_pty_screenshot | 将终端渲染为PNG图像 |
mission_pty_confirm | 处理工具确认对话框 |
mission_pty_interrupt | 发送Ctrl+C |
mission_pty_kill | 关闭PTY会话 |
mission_pty_status | 获取会话状态和元数据 |
mission_pty_history | 获取会话消息历史记录 |
mission_pty_logs | 获取PTY日志文件内容 |
知识库
| 工具 | 说明 |
|---|
mission_kb_remember | 存储知识条目 |
mission_kb_forget | 删除知识条目 |
mission_kb_search | 跨KB的全文搜索 |
mission_kb_get | 按ID获取条目 |
mission_kb_list | 列出具有筛选功能的条目 |
mission_kb_import | 批量进口条目 |
mission_kb_discover | 从基础设施中发现知识 |
mission_kb_gc | 垃圾回收陈旧条目 |
mission_kb_analyze | AI驱动的知识库分析(通过可配置的LLM后端) |
董事会和任务
| 工具 | 说明 |
|---|
mission_board_list | 列出板任务 |
mission_board_create | 创建董事会任务 |
mission_board_update | 更新板任务 |
mission_board_get | 获取任务详细信息 |
mission_board_delete | 删除板任务 |
mission_board_toggle | 切换任务完成 |
mission_board_note_add | 向任务添加注释 |
mission_board_summary | 获取董事会摘要 |
监控
| 工具 | 说明 |
|---|
mission_cc_sessions | 列出所有Claude Code会话 |
mission_cc_tasks | 获取会话任务 |
mission_cc_overview | 全局任务统计 |
mission_cc_in_progress | 所有正在进行的任务 |
mission_cc_trigger_swarm | 触发群体协调 |
mission_slot_history | 每个插槽的任务分配历史记录 |
对话与记忆
| 工具 | 说明 |
|---|
mission_conversation_list | 列出录制的对话 |
mission_conversation_get | 获取对话消息 |
mission_conversation_search | 搜索对话内容 |
mission_memory_pending | 检查挂起的内存队列 |
mission_memory_pause | 暂停内存提取(带自动恢复TTL) |
mission_memory_done | 标记内存处理完成 |
mission_token_stats | 代币消费统计 |
权限
| 工具 | 说明 |
|---|
mission_permission_get | 获取当前权限策略 |
mission_permission_set_role | 设置插槽角色权限 |
mission_permission_set_slot | 按插槽设置覆盖 |
mission_permission_add_auto_allow | 添加自动允许规则 |
mission_permission_reload | 重新加载权限配置 |
基础设施
| 工具 | 说明 |
|---|
mission_infra_list | 列出已配置的基础架构 |
mission_infra_get | 获取基础设施详细信息 |
mission_health | 守护进程健康检查 |
mission_reachability | 探测服务器运行状况端点 |
mission_os_diagnose | 系统资源诊断 |
mission_skill_list | 列出可用技能 |
mission_skill_search | 按关键字搜索技能 |
mission_context_build | 从技能构建情境 |
问题队列
| 工具 | 说明 |
|---|
mission_question_create | 特工向人类提问 |
mission_question_list | 列出未决问题 |
mission_question_get | 获取问题详细信息 |
mission_question_answer | 人类回答问题 |
mission_question_dismiss | 驳回一个问题 |
AI路由器
| 工具 | 说明 |
|---|
mission_router_chat | 通过配置的LLM后端路由聊天完成 |
贾维斯(测井)
| 工具 | 说明 |
|---|
mission_jarvis_logs | 查询日志中心条目 |
mission_jarvis_trace | 按ID跟踪请求 |
语义终端解析
该守护进程包括对Claude Code的TUI进行复杂的终端解析:
- 状态机 --通过反抖动跟踪空闲、思考、响应、工具运行、确认、错误、SlashMenu状态
- 确认对话框解析 --从权限提示中提取工具名称、参数、文件路径
- 状态栏解析 --从底部行读取微调器状态和状态文本
- 工具输出提取 --解析两个盒子(
───)以及内联工具输出 - 标题解析 --监控终端标题更改以获取会话信息
pub enum SessionEvent {
StateChange { new_state, prev_state },
ConfirmRequired { prompt, info },
StatusUpdate(ClaudeCodeStatus),
ToolOutput(ClaudeCodeToolOutput),
TitleChange(ClaudeCodeTitle),
TextComplete(String),
}
Websocket API
PTY附件
ws://localhost:9120/pty/
连接以实时观看PTY会话或与之互动。接收终端单元数据以进行渲染。
任务事件
ws://localhost:9120/tasks
订阅任务生命周期事件:
cc_tasks_changed --任务已更新cc_task_started / cc_task_completedcc_session_active / cc_session_inactive
Node.js客户端
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();
配置
环境变量
| 变量 | 默认值 | 描述 |
|---|
MISSIOND_HOME | ~/.missiond | 配置目录 |
MISSION_DB_PATH | $MISSIOND_HOME/mission.db | SQLite数据库 |
MISSION_SLOTS_CONFIG | $MISSIOND_HOME/slots.yaml | 插槽定义 |
MISSION_IPC_ENDPOINT | Unix套接字/TCP(Windows) | IPC端点 |
MISSION_WS_PORT | 9120 | WebSocket端口 |
MISSION_LOG_LEVEL | warn | 日志级别 |
跨平台IPC
- Unix (macOS/Linux):Unix域套接字(
~/.missiond/missiond.sock) - 视窗:TCP环回(
127.0.0.1:port)
权限
在中配置工具权限 ~/.missiond/permissions.yaml:
roles:
coder:
allow:
- "Bash(*)"
- "Read(*)"
- "Write(*)"
confirm:
- "Edit(*)"
deny:
- "Bash(rm -rf*)"
researcher:
allow:
- "Read(*)"
- "WebSearch(*)"
deny:
- "Bash(*)"
- "Write(*)"
AI路由器(可选)
使用 mission_kb_analyze 和 mission_router_chat,在中配置LLM后端 ~/.missiond/credentials.json:
{
"auth_url": "https://your-llm-api-endpoint.com",
"api_key": "your-api-key"
}
秘密决议(可选)
插槽环境变量支持 ${secret:path} 在生成时通过可配置命令解析机密的语法。
板条箱
| 板条箱 | 描述 |
|---|
missiond-core | 核心库:PTY管理、语义终端解析、任务队列、知识库、IPC |
missiond-mcp | MCP服务器二进制文件(mission-mcp)——工具定义和JSON-RPC协议 |
missiond-daemon | 守护进程二进制文件(missiond)--所有子系统的主流程 |
missiond-runner | 用于插槽进程管理的Claude CLI包装器 |
missiond-attach | PTY连接CLI(missiond-attach)--连接到正在运行的会话 |
semantic-terminal-napi | 用于语义终端解析的Node.js N-API绑定 |
包(npm)
| 包装 | 描述 |
|---|
@missiond/core | 带自动守护进程管理的Node.js客户端库 |
@missiond/board | Next.js用于监控和管理的仪表板 |
@missiond/semantic-terminal | Node.js语义终端解析器 |
发展
# 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
许可证
MIT许可证——见 许可证 了解详情。