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/OpenSwarmLast scanned: 5/8/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-05-08T05:57:33.455Z",
"semgrepRan": false,
"npmAuditRan": true,
"pipAuditRan": true
}OpenSwarm is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by unohee. OpenSwarm — Autonomous AI dev team orchestrator powered by Claude Code CLI. Discord control, Linear integration, cognitive memory. It has 814 GitHub stars.
Yes. OpenSwarm passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/unohee/OpenSwarm" and add it to your Claude Code skills directory (see the Installation section above).
OpenSwarm is primarily written in TypeScript. It is open-source under unohee on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh OpenSwarm against similar tools.
No comments yet. Be the first to share your thoughts!
Autonomous AI agent orchestrator — Codex, GPT, OpenRouter (any model), local models (Ollama/LM Studio), and Claude Code (
claude -p)
💬 Help shape OpenSwarm. Share feature ideas, vote on the roadmap, and ask questions in GitHub Discussions. The roadmap is built in the open — your feedback decides what ships next.
OpenSwarm orchestrates multiple AI agents as autonomous code workers. It picks up issues from Linear or a built-in local tracker, runs Worker/Reviewer pair pipelines, reports through a pluggable notifier (Discord, Slack, Telegram, webhook), and retains long-term memory via LanceDB. Workers run on OpenAI Codex/GPT, any OpenRouter model, local open-source models (Ollama, LM Studio), or Claude Code (claude -p, opt-in) — with cost-aware routing measured on an L0–L6 benchmark ladder.
Verified on real GitHub issues: the agentic harness solves SWE-bench Lite instances graded by the official harness. Hybrid mode — a frontier model diagnoses read-only, a lightweight model implements with a verification loop — resolved 3/3 attempted instances that every single lightweight model had failed, at a fraction of frontier-only cost. Workers also learn each repository over time: task outcomes are stored as per-repo knowledge and recalled into future prompts. (benchmark rubric & results)
npm install -g @intrect/openswarm
openswarm init # interactive setup wizard — provider auth + Linear OAuth + config
openswarm doctor # verify your environment (runtime, native deps, providers, ports)
openswarm # launches the TUI chat
openswarm init walks you through provider authentication, optional Linear OAuth (team/project picker), and writes a validated config.yaml. Prefer wiring a provider by hand? You need one first: openswarm auth login (ChatGPT OAuth, used by codex/gpt), openswarm auth login --provider openrouter (or export OPENROUTER_API_KEY=…), or just have an authenticated claude on PATH. Check what's wired with openswarm auth status, and diagnose any gaps with openswarm doctor.
openswarm init sets upThe wizard asks three questions, detects what you already have, and writes the config for you:
codex-responses — ChatGPT subscription via OAuth (Codex models, native loop) — easiest startcodex — external codex CLI · openrouter — any model (API key/OAuth) · gpt — OpenAI OAuthlmstudio / local — local servers, no account · claude — claude -p CLI (opt-in fallback)local SQLite issue store (no account) or linear (OAuth browser login or API key, then an arrow-key team → project picker for this repo)none / discord / slack / telegram / webhookIt then writes .env (secrets, chmod 600), config.yaml (validated), and — if you mapped a Linear project — openswarm.json (this repo → Linear team/project). Finally it prints next steps and can launch browser OAuth.
Re-running in a repo that already has
config.yamlis refused unless you pass--force, andinitrefuses to overwrite aconfig.yamlthat symlinks into the daemon's global config. For CI / non-interactive use,openswarm init --yeswrites a sample config only.

| Key | Action |
|---|---|
Tab |
Switch tabs (Chat / Projects / Tasks / Stuck / Issues / Logs) |
Enter |
Send message |
Shift+Enter |
Newline |
i |
Focus input |
Esc |
Exit input focus |
Ctrl+C |
Quit |
Status bar shows: provider · model · message count · cumulative cost
openswarm # TUI chat (default)
openswarm chat [session] # Simple readline chat
openswarm start # Start full daemon (requires config.yaml)
openswarm run "Fix the bug" -p ~/my-project # Run a single task
openswarm exec "Run tests" --local --pipeline # Execute via daemon
openswarm init # Interactive setup wizard (provider auth, Linear OAuth, config)
openswarm doctor # Diagnose environment (runtime, native deps, providers, ports)
openswarm validate # Validate config.yaml
# Code Registry & BS Detector
openswarm check --scan # Scan repo → register all entities
openswarm check src/foo.ts # File brief (entities, tests, risk)
openswarm check --bs # BS pattern scan (bad code smells)
openswarm check --stats # Registry statistics
openswarm check --high-risk # High-risk entities
openswarm check --search "name" # Full-text search
openswarm annotate "funcName" --deprecate "reason"
openswarm annotate "funcName" --tag "needs-refactor"
openswarm annotate "funcName" --warn "error/security: SQL injection"
openswarm exec options| Option | Description |
|---|---|
--path <path> |
Project path (default: cwd) |
--timeout <seconds> |
Timeout in seconds (default: 600) |
--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
For autonomous operation (Linear issue processing, Discord control, PR auto-improvement), you need a full config:
codex-responses (ChatGPT OAuth, native loop, no extra binary) is the smoothest start; codex delegates to the external Codex CLI. openswarm auth login handles the ChatGPT OAuthOPENROUTER_API_KEY or openswarm auth login --provider openrouteropenswarm auth login --provider gptlmstudio, :1234) or Ollama (local, :11434), auto-detected, no authclaude -p) — opt-in fallback; an authenticated claude on PATHbetter-sqlite3 and @lancedb/lancedb are native modules. Prebuilt binaries cover common platforms; if yours lacks one, npm install builds from source and needs python3 + a C/C++ toolchain (build-essential on Linux, Xcode Command Line Tools on macOS)openswarm auth login --provider linear (OAuth PKCE) or use an API key + team ID; Discord bot token (message content intent); GitHub CLI (gh) for CI monitoringAfter the global install, run the wizard in the directory you want the daemon to manage — it writes everything for you:
openswarm init # writes config.yaml + .env (provider, task backend, notifications)
openswarm doctor # verify providers, native deps, ports
See What openswarm init sets up for the prompts. Prefer to edit by hand? config.yaml supports ${VAR} / ${VAR:-default} substitution (resolved from .env) and is validated with Zod. A minimal .env (the wizard writes only what your choices need):
LINEAR_API_KEY=your-linear-api-key # or: openswarm auth login --provider linear
LINEAR_TEAM_ID=your-linear-team-id
DISCORD_TOKEN=your-discord-bot-token # only if you chose the discord notifier
DISCORD_CHANNEL_ID=your-channel-id
| 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 |
adapter: codex # one of: codex · codex-responses · gpt · openrouter · lmstudio · local (default: codex)
adapter accepts one of the six values below (validated by Zod). For a ChatGPT subscription, codex-responses is the smoothest first-run choice — it runs OpenSwarm's native loop over the Responses API with no extra binary. Switch at runtime via Discord, e.g. !provider codex-responses / !provider openrouter.
| Adapter | Backend | Models | Auth |
|---|---|---|---|
codex-responses |
OpenAI Responses API (native loop, no CLI binary) | gpt-5-codex (default), o3, o4-mini | ChatGPT OAuth |
codex |
OpenAI Codex CLI (delegated) | gpt-5-codex (default), o3, o4-mini | ChatGPT OAuth / codex CLI auth |
gpt |
OpenAI Chat API | gpt-4o (default), o3, … | OAuth PKCE |
openrouter |
OpenRouter API (native agentic loop) | any OpenRouter model — gpt-5, gemini-2.5, deepseek, glm, qwen, … | OPENROUTER_API_KEY or OAuth PKCE |
lmstudio |
LM Studio (OpenAI-compatible, local) | loaded LM Studio model (LMSTUDIO_MODEL) |
None |
local |
Ollama (local, auto-detected) | gemma, llama, qwen, mistral, … | None |
Claude Code (
claude -p) is supported as an **opt