One session. Multiple developers. One AI pipeline. Zero merge conflicts.
Quick Start Β· Architecture Β· Technical Depth Β· Deploy Β· Live Demo
AI coding tools generated $15B+ in revenue last year. GitHub Copilot, Cursor, Devin β every one of them is single-player.
When 5 engineers on the same team each use their own AI coding tool:
| What happens | Cost |
|---|---|
| No shared context | Agents duplicate work across the same files |
| No coordination | Conflicting changes pile up silently |
| No merge resolution | Engineers manually resolve AI-generated conflicts |
| No visibility | "Who told the AI to change this?" becomes a daily question |
The result: teams spend more time coordinating AI outputs than writing code. The $45B developer tools market has a multiplayer-shaped hole β the same gap Figma exploited in design ($20B valuation).
Overmind is a multiplayer terminal where your entire team submits prompts to a shared AI session. A host runs overmind host in their project directory. Teammates join with a 4-letter party code. Every prompt flows through a deterministic, auditable pipeline β from scope extraction to execution to merge resolution to PR creation.
No IDE plugins. No cloud lock-in. One npm install, and your team is shipping together.
$ overmind host --port 4444
π Server listening on :4444
π Party code: XKRF β share this with your team (0/8 slots)
[XKRF] alice joined (2/8 members)
[XKRF] bob joined (3/8 members)
alice> Add rate limiting middleware to all /api routes β 100 req/min per IP
ββ Scope βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Affected: src/middleware/rateLimit.ts, src/routes/api/users.ts β
β src/routes/api/posts.ts, tests/rateLimit.test.ts β
β Complexity: moderate β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
Greenlight: safe β no destructive operations detected
β
Host approved
ββ Execution (3 parallel agents) βββββββββββββββββββββββββββββββββββ
β Task 1/3 Create rate-limit middleware ββββββββββ done β
β π Using sliding window counter pattern... β
β π§ write_file src/middleware/rateLimit.ts β
β Task 2/3 Wire into Express route handlers ββββββββββ done β
β π§ read_file src/routes/api/index.ts β
β π§ write_file src/routes/api/index.ts β
β π§ write_file src/routes/api/users.ts β
β Task 3/3 Add integration tests ββββββββββ done β
β π§ write_file tests/rateLimit.test.ts β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
Evaluation passed Β· 4 files changed Β· PR #42 opened
bob> Refactor auth module from sessions to JWT
Scope: src/auth/session.ts β src/auth/jwt.ts (+3 files) Β· complex
...executing concurrently while alice's changes merge cleanly...
Every step β scope, greenlight, execution, thinking, tool calls, merge β streams to the TUI in real time over WebSocket.
| Capability | Copilot | Cursor | Devin | Overmind |
|---|---|---|---|---|
| Real-time multiplayer sessions | β | β | β | β up to 8 devs |
| Shared execution context | β | β | β | β |
| AI merge conflict resolution | β | β | β | β with confidence scoring |
| Human-in-the-loop approval gate | β | β | β | β host-verdict |
| Scope-bounded execution | β | β | β | β max 15 files |
| Multi-agent decomposition | β | β | β | β planner β N subagents |
| Real-time agent streaming | β | β | Partial | β 8 event types |
| LLM observability (Langfuse) | β | β | β | β traces + spans |
| Feature clustering (pgvector) | β | β | β | β |
| Self-hostable | β | β | β | β |
| Automatic PR creation | β | β | β | β |
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β OVERMIND ARCHITECTURE β
β β
β Developer A βββ β
β Developer B βββΌβββΊ WebSocket βββΊ FIFO Queue βββΊ Scope Extractor β
β Developer C βββ (Zod-validated) (Gemini, β€15 files) β
β β β
β ββββββββββββββ΄βββββββββββββ β
β βΌ βΌ β
β Greenlight Story Agent β
β (AI safety) (pgvector β
β β clustering) β
β βΌ β
β Host Approval β
β (host-verdict) β
β β β
β ββββββββββββββββ΄βββββββββββββββ β
β βΌ βΌ β
β Local Agent Remote Orchestrator β
β (Gemini 2.0 Flash) (ECS Fargate) β
β β’ read_file β β
β β’ write_file Planner Agent β
β β’ list_dir (GPT-4o) β
β β ββββΌβββ β
β β S1 S2 S3 β Parallel Subagents β
β β ββββΌβββ β
β β Evaluation Agent β
β ββββββββββββ¬ββββββββββββββββ β
β βΌ β
β File Sync to Host β
β β β
β Merge Resolution β
β (3-way + confidence) β
β β β
β βββββββββ΄ββββββββ β
β βΌ βΌ β
β Commit & STORY.md β
β Open PR Updated β
β β
β ββ Observability ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β Langfuse: root trace per run β planning span β subagent spans β tool events β
β CloudWatch: /ecs/overmind log group β
β Streaming: 8 event types β WebSocket β TUI (submitter + host only) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
graph TB
subgraph Clients["Terminal Clients Β· Ink/React TUI"]
A["π€ Developer A"] --> WS
B["π€ Developer B"] --> WS
C["π€ Developer C"] --> WS
end
WS["WebSocket Server<br/>Zod-validated protocol<br/>20+ message types"] --> Q["FIFO Queue<br/>deterministic ordering"]
Q --> SC["Scope Extractor<br/>Gemini Β· β€15 files"]
SC --> GL["Greenlight<br/>AI safety check"]
GL --> HA["Host Approval<br/>host-verdict message"]
HA -->|"OVERMIND_LOCAL=1"| LA["Local Agent<br/>Gemini 2.0 Flash<br/>read_file Β· write_file Β· list_dir"]
HA -->|"OVERMIND_ORCHESTRATOR_URL"| RO["Remote Orchestrator<br/>ECS Fargate Β· FastAPI"]
RO --> PL["Planner Agent Β· GPT-4o"]
PL --> S1["Subagent 1"] & S2["Subagent 2"] & S3["Subagent N"]
S1 & S2 & S3 --> EV["Evaluation Agent"]
LA & EV --> FS["File Sync β Host Disk"]
FS --> MR["AI Merge Resolution<br/>3-way diff Β· confidence scoring"]
MR --> PR["GitHub PR<br/>auto-generated title + description"]
Q -.-> SA["Story Agent<br/>pgvector Β· prompt clustering<br/>maintains STORY.md"]
RO -.-> LF["Langfuse<br/>traces Β· spans Β· token metrics"]
style WS fill:#1a1a2e,stroke:#00d4ff,color:#fff
style PL fill:#1a1a2e,stroke:#ff6b6b,color:#fff
style MR fill:#1a1a2e,stroke:#ffd93d,color:#fff
style LF fill:#1a1a2e,stroke:#6bcb77,color:#fff
Every message crossing the wire is validated against Zod discriminated unions. 20+ message types cover the full lifecycle β from join-ack through execution-agent-thinking to merge-complete. Invalid messages are logged and dropped, never propagated.
// src/shared/protocol.ts β 20+ validated message types
export const ServerMessageSchema = z.discriminatedUnion("type", [
JoinAckMessage, MemberJoinedMessage, MemberLeftMessage,
PromptQueuedMessage, PromptGreenlitMessage, PromptRedlitMessage,
PromptApprovedMessage, PromptDeniedMessage, HostReviewRequestMessage,
FeatureCreatedMessage, ActivityMessage, ErrorMessage,
ExecutionStatusMessage, MemberExecutionUpdateMessage,
MemberExecutionCompleteMessage, MergeUpdateMessage,
MergeCompleteMessage, MergeErrorMessage, ExecutionPlanReadyMessage,
ExecutionAgentUpdateMessage, ExecutionToolActivityMessage,
ExecutionAgentThinkingMessage,
]);Prompt content is visible only to the submitter and the host. It is never broadcast to other party members β enforced server-side in Party.sendTo(). This is a critical security property maintained across every code path.
Before any file is touched, Gemini analyzes the prompt against the full file tree and returns a structured ScopeResult:
// src/server/execution/scope.ts
interface ScopeResult {
affectedFiles: string[]; // max 15 files
complexity: "simple" | "moderate" | "complex";
}This constrains the agent's blast radius. A prompt that says "refactor everything" still operates on at most 15 files.
The ECS orchestrator decomposes complex prompts through a planner β subagent β evaluation pipeline:
- Planner (GPT-4o): Breaks the prompt into named subtasks with dependencies
- Subagents (parallel): Each gets isolated workspace + tools (
read_file,write_file,list_dir,execute_command) - Evaluation: Reviews all subagent outputs, can accept (
finish) or trigger re-planning (draft-plan) - Loop: Up to
MAX_AGENT_ROUNDSiterations until evaluation accepts
Every stage emits streaming events over WebSocket β the TUI renders agent thinking, tool calls, and progress in real time.
When concurrent prompts modify overlapping files, the merge pipeline:
- Detects conflicts via
git diff - Reads
STORY.mdfor cross-prompt context - Resolves each file with AI (three-way: base, ours, theirs) + confidence scoring
- Low-confidence resolutions are flagged β never silently applied
- Commits to a new branch and opens a GitHub PR with AI-generated title and description
Every remote execution produces a hierarchical trace:
Root Trace (run_id, session_id, tags)
βββ Planning Span (query_length, task_count)
βββ Subagent Span (task_index, task_name)
β βββ Tool Use Events
β βββ Agent Thinking Events
βββ Subagent Span ...
βββ Evaluation Span (decision: finish | draft-plan)
Token counts, latency, and cost are auto-captured via the Langfuse AsyncOpenAI drop-in wrapper. Filter by session, tag, or trace to debug any execution.
PostgreSQL with pgvector stores prompt embeddings. A story agent clusters related prompts into features:
Tables: features, queries, code_chunks
Operations: assign_existing | create_new | reject
Output: STORY.md β living document of what the team has built
This gives agents cross-prompt context. When Alice adds auth and Bob adds auth tests, the story agent clusters them into one feature β so subsequent prompts have full context.
Eight event types flow from orchestrator to TUI:
| Event | Data | Rendered As |
|---|---|---|
plan-ready |
Task list with names | Multi-panel task view |
agent-spawned |
task_index, task_name | "Spawned" status indicator |
tool-use |
tool_name, task_index | π§ tool activity line |
tool-result |
success, output (truncated) | β /β result indicator |
agent-thinking |
content (β€300 chars) | π italic thinking text |
agent-finished |
summary, files_changed | Completion with file list |
run-complete |
final result | Session complete |
run-error |
error detail | Error display |
Requirements: Node.js 20+, npm
# Install globally from GitHub
npm install -g github:atharva789/Overmind
# Or: clone and link
git clone [email protected]:atharva789/Overmind.git
cd Overmind && npm install && npm run build && npm link# Set your API key
export GEMINI_API_KEY="your-key"
# Host a session (from your project directory)
overmind host --port 4444
# β Party code: XKRF (share this)
# Join from another terminal (or another machine)
overmind join XKRF --server localhost --port 4444 -u "alice"# Point at your deployed orchestrator
export OVERMIND_ORCHESTRATOR_URL="http://your-alb.us-east-2.elb.amazonaws.com"
# Host with remote execution
overmind host --port 4444# Terminal 1: host
overmind host --port 4444
# Terminal 2: tunnel
ngrok tcp 4444
# Share the ngrok host + port + party code with your teamcd infra && terraform init && terraform applyProvisions a production-ready stack:
| Resource | Name | Purpose |
|---|---|---|
| ECS Cluster | overmind-ecs-cluster |
Container orchestration |
| ECS Service | overmind-orchestrator |
Fargate tasks (auto-restart) |
| Application Load Balancer | overmind-alb |
HTTP ingress, health checks |
| ALB Target Group | overmind-tg |
Port 8000 routing |
| ECR Repository | overmind-orchestrator-repo |
Docker image registry |
| CloudWatch Log Group | /ecs/overmind |
Centralized logging |
| Security Groups | overmind-ecs-sg, overmind-alb-sg |
Network isolation |
| SSM Parameters | /overmind/* |
Secret management |
Every push to thorba-iterate or v* tag:
- Authenticates to ECR via OIDC
- Builds Docker image (
modal/.dockerfile,linux/amd64) - Tags as
sha-<commit>+latest - Pushes to ECR β ECS pulls on next deployment
# Force redeploy with latest image
aws ecs update-service \
--cluster overmind-ecs-cluster \
--service overmind-orchestrator \
--force-new-deployment \
--region us-east-2| Variable | Required | Purpose |
|---|---|---|
GEMINI_API_KEY |
β | Gemini API for local execution + scope extraction |
OVERMIND_LOCAL |
β | Set to 1 for local execution mode |
OVERMIND_ORCHESTRATOR_URL |
β | ALB endpoint for remote execution |
OPENAI_API_KEY |
β | GPT-4o for remote planner/subagents |
DATABASE_URL |
β | PostgreSQL + pgvector for story clustering |
LANGFUSE_PUBLIC_KEY |
β | Langfuse observability |
LANGFUSE_SECRET_KEY |
β | Langfuse observability |
| Layer | Technology |
|---|---|
| CLI & TUI | TypeScript, Commander, Ink (React for terminal) |
| Server | Node.js WebSocket, Zod validation |
| Local Execution | Gemini 2.0 Flash, tool-calling loop |
| Remote Execution | Python FastAPI, GPT-4o, parallel subagents |
| Infrastructure | AWS ECS Fargate, ALB, ECR, Terraform |
| Database | PostgreSQL + pgvector |
| Observability | Langfuse (traces, spans, token metrics) |
| CI/CD | GitHub Actions β ECR β ECS |
Overmind: where your entire team ships through one AI pipeline β in real time.
Get Started Β· Live Site Β· Star on GitHub Β· Feedback