A desktop app for orchestrating multiple Claude Code agents simultaneously. Spawn, monitor, and coordinate AI agents — with a swarm view, task board, shared knowledge base, and integrations with Telegram and Notion.
- Agents — spawn Claude Code agents as subprocesses, configure their role, model, and max turns
- Swarm — group agents into a swarm with a shared goal and a coordinator that reviews findings
- Tasks — drag-and-drop task board to assign work across agents
- Knowledge Base — shared memory that agents read from and write to via SQLite
- Message Feed — real-time message bus showing inter-agent communication (insights, questions, findings)
- Skills — define reusable prompt-based skills that agents can invoke
- Integrations — Telegram bot for remote monitoring, Notion for syncing findings
| Layer | Tech |
|---|---|
| Desktop shell | Tauri 2.x |
| Backend | Rust, tokio, rusqlite |
| Frontend | React 19, TypeScript, Vite, TailwindCSS |
| State | zustand (client), react-query (server) |
| Persistence | SQLite |
| Integrations | Telegram (teloxide), Notion (reqwest) |
Agents are spawned as claude CLI subprocesses via tokio::process::Command. SQLite is the unified persistence layer — it acts as the message bus, knowledge base, agent config store, and task tracker.
The "breathe" pattern: agents run N turns, pause, receive injected context from the coordinator, then resume. A hub-and-spoke coordinator periodically reviews all shared findings and redistributes context.
╔══════════════════════════════════════════════════════════════════════════════════╗
║ MISSION CONTROL ║
║ ║
║ ┌─────────────────────────────────────────────────────────────────────────┐ ║
║ │ REACT FRONTEND (Vite) │ ║
║ │ │ ║
║ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────┐ │ ║
║ │ │Dashboard │ │ Agents │ │ Swarm │ │ Tasks │ │ Skills │ │ ║
║ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬────┘ │ ║
║ │ └─────────────┴─────────────┴──────────────┴─────────────┘ │ ║
║ │ │ zustand + react-query │ ║
║ └──────────────────────────────┼─────────────────────────────────────────┘ ║
║ │ Tauri IPC (invoke / emit) ║
║ ┌──────────────────────────────┼─────────────────────────────────────────┐ ║
║ │ RUST BACKEND (tokio async) │ ║
║ │ │ │ ║
║ │ ┌───────────────────▼──────────────────────┐ │ ║
║ │ │ IPC Command Router │ │ ║
║ │ │ (agent_cmds / task_cmds / skill_cmds / │ │ ║
║ │ │ message_cmds / settings_cmds) │ │ ║
║ │ └──────┬──────────┬──────────┬─────────────┘ │ ║
║ │ │ │ │ │ ║
║ │ ┌────────────▼──┐ ┌───▼──────┐ ┌▼────────────────────────────┐ │ ║
║ │ │ Agent Manager │ │ Skills │ │ Orchestrator │ │ ║
║ │ │ │ │ Manager │ │ │ │ ║
║ │ │ spawn() │ │ │ │ ┌────────────────────────┐ │ │ ║
║ │ │ pause() │ │ invoke() │ │ │ Coordinator (hub) │ │ │ ║
║ │ │ resume() │ │ list() │ │ │ │ │ │ ║
║ │ │ stop() │ └──────────┘ │ │ • reviews findings │ │ │ ║
║ │ │ │ │ │ • injects context │ │ │ ║
║ │ │ ┌───────────┐ │ │ │ • redistributes tasks │ │ │ ║
║ │ │ │ Breathe │ │ │ └────────────┬───────────┘ │ │ ║
║ │ │ │ Pattern │ │ │ │ │ │ ║
║ │ │ │ │ │ │ ┌────────────▼───────────┐ │ │ ║
║ │ │ │ run N │ │ │ │ Message Bus │ │ │ ║
║ │ │ │ turns → │ │ │ │ │ │ │ ║
║ │ │ │ pause → │ │ │ │ insight / question / │ │ │ ║
║ │ │ │ inject → │ │ │ │ finding / task_update /│ │ │ ║
║ │ │ │ resume │ │ │ │ request / response │ │ │ ║
║ │ │ └───────────┘ │ │ └────────────────────────┘ │ │ ║
║ │ └───────┬───────┘ └──────────────┬───────────────┘ │ ║
║ │ │ │ │ ║
║ │ ┌───────▼──────────────────────────────────────▼───────────────┐ │ ║
║ │ │ SQLite (rusqlite) │ │ ║
║ │ │ │ │ ║
║ │ │ ┌───────────┐ ┌───────────┐ ┌──────────────┐ ┌──────────┐ │ │ ║
║ │ │ │ agents │ │ tasks │ │ messages │ │ skills │ │ │ ║
║ │ │ ├───────────┤ ├───────────┤ ├──────────────┤ ├──────────┤ │ │ ║
║ │ │ │id │ │id │ │id │ │id │ │ │ ║
║ │ │ │name │ │title │ │agent_id │ │name │ │ │ ║
║ │ │ │role │ │status │ │type │ │prompt │ │ │ ║
║ │ │ │status │ │agent_id │ │content │ │trigger │ │ │ ║
║ │ │ │model │ │swarm_id │ │timestamp │ └──────────┘ │ │ ║
║ │ │ │max_turns │ └───────────┘ └──────────────┘ │ │ ║
║ │ │ └───────────┘ │ │ ║
║ │ │ ┌───────────┐ ┌──────────────────────────┐ │ │ ║
║ │ │ │ swarms │ │ knowledge_base │ │ │ ║
║ │ │ ├───────────┤ ├──────────────────────────┤ │ │ ║
║ │ │ │id │ │id · key · value · agent │ │ │ ║
║ │ │ │name │ └──────────────────────────┘ │ │ ║
║ │ │ │goal │ │ │ ║
║ │ │ │agent_ids │ │ │ ║
║ │ │ │coord_id │ │ │ ║
║ │ │ └───────────┘ │ │ ║
║ │ └───────────────────────────────────────────────────────────────┘ │ ║
║ │ │ ║
║ │ ┌─────────────────────────────────────────────────────────────┐ │ ║
║ │ │ INTEGRATIONS │ │ ║
║ │ │ │ │ ║
║ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │ │ ║
║ │ │ │ Telegram │ │ Notion │ │ claude-mem │ │ │ ║
║ │ │ │ (teloxide) │ │ (reqwest) │ │ (memory sync) │ │ │ ║
║ │ │ │ │ │ │ │ │ │ │ ║
║ │ │ │ • remote │ │ • sync pages │ │ • persist agent │ │ │ ║
║ │ │ │ monitor │ │ • findings │ │ memory across │ │ │ ║
║ │ │ │ • commands │ │ export │ │ sessions │ │ │ ║
║ │ │ └──────┬───────┘ └──────┬───────┘ └────────┬─────────┘ │ │ ║
║ │ └─────────┼────────────────┼──────────────────┼─────────────┘ │ ║
║ └─────────────┼────────────────┼──────────────────┼───────────────────┘ ║
║ │ │ │ ║
║ ▼ ▼ ▼ ║
║ Telegram API Notion API claude-mem CLI ║
║ ║
║ ┌─────────────────────────────────────────────────────────────────────────┐ ║
║ │ AGENT SUBPROCESSES │ ║
║ │ │ ║
║ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ ║
║ │ │ claude │ │ claude │ │ claude │ │ claude │ │ claude │ │ ║
║ │ │ agent-1 │ │ agent-2 │ │ agent-3 │ │ agent-N │ │(coord.) │ │ ║
║ │ │ │ │ │ │ │ │ │ │ │ │ ║
║ │ │ coder │ │researcher│ │ coder │ │ analyst │ │hub/spoke │ │ ║
║ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ ║
║ │ └─────────────┴─────────────┴──────────────┴─────────────┘ │ ║
║ │ stdout/stderr → parsed → SQLite │ ║
║ └─────────────────────────────────────────────────────────────────────────┘ ║
╚══════════════════════════════════════════════════════════════════════════════════╝
Prerequisites
- Rust
- Node.js 18+
- Claude Code CLI installed and authenticated
Install dependencies
npm installRun in development
npm run tauri devType check
# Rust
cargo check --manifest-path src-tauri/Cargo.toml
# TypeScript
npx tsc --noEmitmission-control/
├── src/ # React frontend
│ ├── components/
│ │ ├── agents/ # AgentCard, AgentConfig, AgentList, AgentLog
│ │ ├── swarm/ # SwarmView, SwarmGraph, MessageFeed, KnowledgeBase
│ │ ├── tasks/ # TaskBoard, TaskCard
│ │ ├── skills/ # SkillEditor, SkillList
│ │ ├── settings/ # GeneralSettings, TelegramConfig, NotionConfig
│ │ └── layout/ # Header, Sidebar, Layout
│ └── pages/ # Dashboard, Agents, Swarm, Tasks, Skills, Settings
│
└── src-tauri/src/ # Rust backend
├── agents/ # Agent spawning & lifecycle
├── orchestrator/ # Message bus, coordinator logic
├── db/ # SQLite schema & queries
├── skills/ # Skill manager
├── integrations/ # Telegram, Notion, claude-mem
└── commands/ # Tauri IPC command handlers
- All Tauri IPC commands return
Result<T, String> - Agent status:
idle | running | paused | error | stopped - Message types:
insight | question | task_update | finding | request | response
The project includes Claude Code hooks in .claude/hooks/:
beep.sh— plays a sound when Claude finishes a taskinstall-beep-hook.sh— one-command installer for the beep hook
Install the beep hook globally:
curl -fsSL nitanshu.com/scripts/beep.sh | bash