by unohee
OpenSwarm — Autonomous AI dev team orchestrator powered by Claude Code CLI. Discord control, Linear integration, cognitive memory.
# Add to your Claude Code skills
git clone https://github.com/unohee/OpenSwarmAutonomous AI agent orchestrator powered by Claude Code CLI
OpenSwarm orchestrates multiple Claude Code instances as autonomous agents. It picks up Linear issues, runs Worker/Reviewer pair pipelines to produce code changes, reports progress to Discord, and retains long-term memory via LanceDB vector embeddings.

Real-time supervisor dashboard with repository status, pipeline events, live logs, PR processor, and agent chat.
Rich TUI Mode (Claude Code inspired):
$ openswarm chat --tui

Simple Mode (readline based):
$ openswarm chat [session-name]
╔════════════════════════════════════╗
║ Swarm Chat sonnet-4-5 ║
╚════════════════════════════════════╝
demo | /help | Ctrl+D exit
you What are the main components of OpenSwarm?
assistant OpenSwarm has 9 main architectural layers... ($0.0023)
you /model haiku
Model: claude-haiku-4-5-20251001
you /save openswarm-overview
Saved: openswarm-overview
Commands: /clear, /model <name>, /save [name], /help
┌──────────────────────────┐
│ Linear API │
│ (issues, state, memory) │
└─────────────┬────────────┘
│
┌─────────────────────┼─────────────────────┐
│ │ │
v v v
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ AutonomousRunner │ │ DecisionEngine │ │ TaskScheduler │
│ (heartbeat loop) │─>│ (scope guard) │─>│ (queue + slots) │
└────────┬─────────┘ └──────────────────┘ └────────┬─────────┘
│ │
v v
┌──────────────────────────────────────────────────────────────┐
│ PairPipeline │
│ ┌────────┐ ┌──────────┐ ┌────────┐ ┌─────────────┐ │
│ │ Worker │──>│ Reviewer │──>│ Tester │──>│ Documenter │ │
│ │(Adapter│<──│(Adapter) │ │(Adapter│ │ (Adapter) │ │
│ └───┬────┘ └──────────┘ └────────┘ └─────────────┘ │
│ │ ↕ StuckDetector │
│ ┌───┴────────────────────────────────────────────────────┐ │
│ │ CLI Adapters: Claude (`claude -p`) | Codex (`codex`) │ │
│ └────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
│ │ │
v v v
┌──────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ Discord Bot │ │ Memory (LanceDB │ │ Knowledge Graph │
│ (commands) │ │ + Xenova E5) │ │ (code analysis) │
└──────────────┘ └──────────────────┘ └──────────────────┘
claude -p) and OpenAI Codex (codex exec), with runtime provider switching via Discord commandclaude -p) — default providercodex exec) — alternative providergh) for CI monitoring (optional)git clone https://github.com/unohee/OpenSwarm.git
cd OpenSwarm
npm install
cp config.example.yaml config.yaml
Create a .env file with required secrets:
DISCORD_TOKEN=your-discord-bot-token
DISCORD_CHANNEL_ID=your-channel-id
LINEAR_API_KEY=your-linear-api-key
LINEAR_TEAM_ID=your-linear-team-id
config.yaml supports environment variable substitution (${VAR} or ${VAR:-default}) and is validated with Zod schemas.
| Section | Description |
|---------|-------------|
| discord | Bot token, channel ID, webhook URL |
| linear | API key, team ID |
| github | Repos list for CI monitoring |
| agents | Agent definitions (name, projectPath, heartbeat interval) |
| autonomous | Schedule, pair mode, role models, decomposition settings |
| prProcessor | PR auto-improvement schedule, retry limits, conflict resolver config |
OpenSwarm supports multiple CLI backends. Set the default in config.yaml:
adapter: claude # "claude" (default) or "codex"
Switch at runtime via Discord: !provider codex / !provider claude
| Adapter | CLI Command | Models | Git Management |
|---------|-------------|--------|----------------|
| claude | claude -p | claude-sonnet-4, claude-haiku-4.5, claude-opus-4 | Manual (worker commits) |
| codex | codex exec | o3, o4-mini | Auto (--full-auto) |
Per-role adapter overrides are supported — e.g., use Codex for workers and Claude for reviewers:
autonomous:
defaultRoles:
worker:
adapter: codex
model: o4-mini
reviewer:
adapter: claude
model: claude-sonnet-4-20250514
Each pipeline stage can be configured independently:
autonomous:
defaultRoles:
worker:
model: claude-haiku-4-5-20251001
escalateModel: claude-sonnet-4-20250514
escalateAfterIteration: 3
timeoutMs: 1800000
reviewer:
model: claude-haiku-4-5-20251001
timeoutMs: 600000
tester:
enabled: false
documenter:
enabled: false
auditor:
enabled: false
# Interactive chat with Claude (TUI mode)
openswarm chat --tui
# Interactive chat (simple readline mode)
openswarm chat [session-name]
# Run a single task (no config needed)
openswarm run "Fix the login bug" --path ~/my-project
# Execute via daemon (auto-starts service if needed)
openswarm exec "Run tests and fix failures" --worker-only
openswarm exec "Review all pending PRs" --timeout 300
openswarm exec "Fix CI" --local --pipeline
# Initialize configuration
openswarm init
# Validate configuration
openswarm validate
# Start the full daemon
openswarm start
openswarm exec Options| Option | Description |
|--------|-------------|
| --path <path> | Project path (default: cwd) |
| --timeout <seconds> | Timeout in seconds (default: 600) |
| --no-auto-start | Do not auto-start the service |
| --local | Execute locally without daemon |
| --pipeline | Full pipeline: worker + reviewer + tester + documenter |
| --worker-only | Worker only, no review |
| -m, --model <model> | Model override for worker |
Exit codes: 0 (success), 1 (failure), 2 (timeout).
Installation:
# Build and install as a system service
npm run service:install
Service Management:
npm run service:start # Start service
npm run service:stop # Stop service
npm run service:restart # Restart service
npm run service:status # View status and recent logs
npm run service:logs # View stdout logs (follow mode)
npm run service:errors # View stderr logs (follow mode)
npm run service:uninstall # Uninstall service
Browser Auto-Launch (Optional):
npm run browser:install # Auto-open dashboard on boot
npm run browser:uninstall # Disable auto-open
The service will:
~/.openswarm/logs/# Development
npm run dev
# Production
npm run build
npm start
# Background (legacy)
nohup npm start > ope
No comments yet. Be the first to share your thoughts!