{"id":50718155,"url":"https://github.com/unohee/OpenSwarm","last_synced_at":"2026-06-26T22:00:34.581Z","repository":{"id":340096882,"uuid":"1164521143","full_name":"unohee/OpenSwarm","owner":"unohee","description":"OpenSwarm — Autonomous AI dev team orchestrator powered by Claude Code CLI. Discord control, Linear integration, cognitive memory.","archived":false,"fork":false,"pushed_at":"2026-06-26T09:10:31.000Z","size":2478,"stargazers_count":813,"open_issues_count":0,"forks_count":140,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-06-26T09:11:10.427Z","etag":null,"topics":["ai-agents","ai-coding","autonomous-agents","claude","claude-code","devops","discord-bot","linear","llm","multi-agent","orchestrator","pair-programming","typescript","vector-database"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/unohee.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":"unohee","tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"thanks_dev":null,"custom":null}},"created_at":"2026-02-23T07:14:58.000Z","updated_at":"2026-06-26T09:05:11.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/unohee/OpenSwarm","commit_stats":null,"previous_names":["unohee/openswarm"],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/unohee/OpenSwarm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unohee%2FOpenSwarm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unohee%2FOpenSwarm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unohee%2FOpenSwarm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unohee%2FOpenSwarm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/unohee","download_url":"https://codeload.github.com/unohee/OpenSwarm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unohee%2FOpenSwarm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34834415,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-26T02:00:06.560Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agents","ai-coding","autonomous-agents","claude","claude-code","devops","discord-bot","linear","llm","multi-agent","orchestrator","pair-programming","typescript","vector-database"],"created_at":"2026-06-09T21:00:25.961Z","updated_at":"2026-06-26T22:00:34.575Z","avatar_url":"https://github.com/unohee.png","language":"TypeScript","funding_links":["https://ko-fi.com/unohee"],"categories":["AI for *Ops"],"sub_categories":["Automation \u0026 Self-Healing"],"readme":"# OpenSwarm\n\n[![npm version](https://img.shields.io/npm/v/@intrect/openswarm.svg)](https://www.npmjs.com/package/@intrect/openswarm)\n[![npm downloads](https://img.shields.io/npm/dm/@intrect/openswarm.svg)](https://www.npmjs.com/package/@intrect/openswarm)\n[![license](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)\n[![SWE-bench Lite](https://img.shields.io/badge/SWE--bench_Lite-hybrid_3%2F3_resolved-2ea44f)](benchmarks/RUBRIC.md)\n[![GitHub Discussions](https://img.shields.io/github/discussions/unohee/OpenSwarm?logo=github\u0026label=discussions)](https://github.com/unohee/OpenSwarm/discussions)\n\n\u003e Autonomous AI agent orchestrator — Codex, GPT, **OpenRouter (any model)**, local models (Ollama/LM Studio), and Claude Code (`claude -p`)\n\n\u003e 💬 **Help shape OpenSwarm.** Share feature ideas, vote on the roadmap, and ask questions in [**GitHub Discussions**](https://github.com/unohee/OpenSwarm/discussions). The roadmap is built in the open — your feedback decides what ships next.\n\n---\n\nOpenSwarm 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.\n\n**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 \u0026 results](benchmarks/RUBRIC.md))\n\n## Quick Start\n\n```bash\nnpm install -g @intrect/openswarm\nopenswarm init         # interactive setup wizard — provider auth + Linear OAuth + config\nopenswarm doctor       # verify your environment (runtime, native deps, providers, ports)\nopenswarm              # launches the TUI chat\n```\n\n`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`.\n\n### What `openswarm init` sets up\n\nThe wizard asks three questions, detects what you already have, and writes the config for you:\n\n1. **AI provider** (worker/reviewer) — it auto-detects existing auth and offers inline login:\n   - `codex-responses` — ChatGPT subscription via OAuth (Codex models, native loop) — **easiest start**\n   - `codex` — external `codex` CLI · `openrouter` — any model (API key/OAuth) · `gpt` — OpenAI OAuth\n   - `lmstudio` / `local` — local servers, no account · `claude` — `claude -p` CLI (opt-in fallback)\n2. **Task backend** — `local` SQLite issue store (no account) **or** `linear` (OAuth browser login or API key, then an arrow-key **team → project** picker for this repo)\n3. **Notification channel** (optional) — `none` / `discord` / `slack` / `telegram` / `webhook`\n\nIt 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.\n\n\u003e Re-running in a repo that already has `config.yaml` is refused unless you pass `--force`, and `init` refuses to overwrite a `config.yaml` that symlinks into the daemon's global config. For CI / non-interactive use, `openswarm init --yes` writes a sample config only.\n\n![TUI Chat Interface](screenshots/tui.png)\n\n### TUI keyboard shortcuts\n\n| Key | Action |\n|-----|--------|\n| `Tab` | Switch tabs (Chat / Projects / Tasks / Stuck / Issues / Logs) |\n| `Enter` | Send message |\n| `Shift+Enter` | Newline |\n| `i` | Focus input |\n| `Esc` | Exit input focus |\n| `Ctrl+C` | Quit |\n\nStatus bar shows: provider · model · message count · cumulative cost\n\n---\n\n## CLI Commands\n\n```bash\nopenswarm                        # TUI chat (default)\nopenswarm chat [session]         # Simple readline chat\nopenswarm start                  # Start full daemon (requires config.yaml)\nopenswarm run \"Fix the bug\" -p ~/my-project   # Run a single task\nopenswarm exec \"Run tests\" --local --pipeline # Execute via daemon\nopenswarm init                   # Interactive setup wizard (provider auth, Linear OAuth, config)\nopenswarm doctor                 # Diagnose environment (runtime, native deps, providers, ports)\nopenswarm validate               # Validate config.yaml\n\n# Code Registry \u0026 BS Detector\nopenswarm check --scan           # Scan repo → register all entities\nopenswarm check src/foo.ts       # File brief (entities, tests, risk)\nopenswarm check --bs             # BS pattern scan (bad code smells)\nopenswarm check --stats          # Registry statistics\nopenswarm check --high-risk      # High-risk entities\nopenswarm check --search \"name\"  # Full-text search\nopenswarm annotate \"funcName\" --deprecate \"reason\"\nopenswarm annotate \"funcName\" --tag \"needs-refactor\"\nopenswarm annotate \"funcName\" --warn \"error/security: SQL injection\"\n```\n\n### `openswarm exec` options\n\n| Option | Description |\n|--------|-------------|\n| `--path \u003cpath\u003e` | Project path (default: cwd) |\n| `--timeout \u003cseconds\u003e` | Timeout in seconds (default: 600) |\n| `--local` | Execute locally without daemon |\n| `--pipeline` | Full pipeline: worker + reviewer + tester + documenter |\n| `--worker-only` | Worker only, no review |\n| `-m, --model \u003cmodel\u003e` | Model override for worker |\n\nExit codes: `0` success · `1` failure · `2` timeout\n\n---\n\n## Full Daemon Setup\n\nFor autonomous operation (Linear issue processing, Discord control, PR auto-improvement), you need a full config:\n\n### Prerequisites\n\n- **Node.js** \u003e= 22\n- **At least one LLM provider**:\n  - **OpenAI Codex** — `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 OAuth\n  - **OpenRouter** — any model; `OPENROUTER_API_KEY` or `openswarm auth login --provider openrouter`\n  - **OpenAI GPT** — `openswarm auth login --provider gpt`\n  - **Local** — LM Studio (`lmstudio`, `:1234`) or Ollama (`local`, `:11434`), auto-detected, no auth\n  - **Claude Code CLI** (`claude -p`) — opt-in fallback; an authenticated `claude` on PATH\n- **Native build toolchain** — `better-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)\n- **For autonomous mode only** (optional): **Linear** — sign in with `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 monitoring\n\n### Configuration\n\nAfter the global install, run the wizard **in the directory you want the daemon to manage** — it writes everything for you:\n\n```bash\nopenswarm init      # writes config.yaml + .env (provider, task backend, notifications)\nopenswarm doctor    # verify providers, native deps, ports\n```\n\nSee [What `openswarm init` sets up](#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):\n\n```bash\nLINEAR_API_KEY=your-linear-api-key      # or: openswarm auth login --provider linear\nLINEAR_TEAM_ID=your-linear-team-id\nDISCORD_TOKEN=your-discord-bot-token    # only if you chose the discord notifier\nDISCORD_CHANNEL_ID=your-channel-id\n```\n\n### Key configuration sections\n\n| Section | Description |\n|---------|-------------|\n| `discord` | Bot token, channel ID, webhook URL |\n| `linear` | API key, team ID |\n| `github` | Repos list for CI monitoring |\n| `agents` | Agent definitions (name, projectPath, heartbeat interval) |\n| `autonomous` | Schedule, pair mode, role models, decomposition settings |\n| `prProcessor` | PR auto-improvement schedule, retry limits, conflict resolver config |\n\n### CLI Adapter (Provider)\n\n```yaml\nadapter: codex   # one of: codex · codex-responses · gpt · openrouter · lmstudio · local  (default: codex)\n```\n\n`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`.\n\n| Adapter | Backend | Models | Auth |\n|---------|---------|--------|------|\n| `codex-responses` | OpenAI Responses API (native loop, no CLI binary) | gpt-5-codex (default), o3, o4-mini | ChatGPT OAuth |\n| `codex` | OpenAI Codex CLI (delegated) | gpt-5-codex (default), o3, o4-mini | ChatGPT OAuth / `codex` CLI auth |\n| `gpt` | OpenAI Chat API | gpt-4o (default), o3, … | OAuth PKCE |\n| `openrouter` | OpenRouter API (native agentic loop) | any OpenRouter model — gpt-5, gemini-2.5, deepseek, glm, qwen, … | `OPENROUTER_API_KEY` or OAuth PKCE |\n| `lmstudio` | LM Studio (OpenAI-compatible, local) | loaded LM Studio model (`LMSTUDIO_MODEL`) | None |\n| `local` | Ollama (local, auto-detected) | gemma, llama, qwen, mistral, … | None |\n\n\u003e **Claude Code (`claude -p`)** is supported as an **opt-in fallback** (and powers the `claude -p` chat path) — install the `claude` CLI and authenticate it; `openswarm init` and `openswarm doctor` detect it. It is **not** a selectable `adapter:` value.\n\nThe `openrouter` adapter runs OpenSwarm's own agentic tool loop (read/search/edit/bash with verification guards), enables ZDR (`data_collection: deny`) for non-OpenAI models, and applies Anthropic prompt caching automatically. Local backends are auto-detected on standard ports (Ollama `:11434`, LM Studio `:1234`); use `lmstudio` for a dedicated LM Studio endpoint (`LMSTUDIO_BASE_URL`, default `http://localhost:1234`).\n\nPer-role adapter overrides (each role may pick its own valid adapter + model):\n\n```yaml\nautonomous:\n  defaultRoles:\n    worker:\n      adapter: codex-responses\n      model: gpt-5-codex\n    reviewer:\n      adapter: openrouter\n      model: anthropic/claude-sonnet-4\n```\n\n### Agent Roles\n\n```yaml\nautonomous:\n  defaultRoles:\n    worker:\n      model: gpt-5-codex\n      escalateModel: openai/gpt-5     # escalate after repeated review failures\n      escalateAfterIteration: 3\n      timeoutMs: 1800000\n    reviewer:\n      model: gpt-5-codex\n      timeoutMs: 600000\n    tester:\n      enabled: false\n    documenter:\n      enabled: false\n    auditor:\n      enabled: false\n```\n\n### Running the daemon\n\nWith the global install, the `openswarm` CLI manages the daemon directly — no repo or `npm run` scripts needed:\n\n```bash\nopenswarm start               # start the daemon in the background\nopenswarm start --foreground  # run attached (logs stream to the terminal)\nopenswarm status              # pid, uptime, log path\nopenswarm stop                # stop the daemon\nopenswarm dash                # open the web dashboard (:3847)\n```\n\n\u003e **From source / development** (contributors): clone the repo and use the `npm run …` scripts (`npm run dev`, `npm start`, `npm run service:install` for a macOS launchd service, `docker compose up -d`). See [CONTRIBUTING.md](CONTRIBUTING.md).\n\n---\n\n## Architecture\n\n```\n                         ┌──────────────────────────┐\n                         │       Linear API          │\n                         │   (issues, state, memory) │\n                         └─────────────┬────────────┘\n                                       │\n                 ┌─────────────────────┼─────────────────────┐\n                 │                     │                     │\n                 v                     v                     v\n  ┌──────────────────┐  ┌──────────────────┐  ┌──────────────────┐\n  │ AutonomousRunner │  │  DecisionEngine  │  │  TaskScheduler   │\n  │ (heartbeat loop) │─\u003e│  (scope guard)   │─\u003e│  (queue + slots) │\n  └────────┬─────────┘  └──────────────────┘  └────────┬─────────┘\n           │                                            │\n           v                                            v\n  ┌──────────────────────────────────────────────────────────────┐\n  │                      PairPipeline                            │\n  │  ┌────────┐   ┌──────────┐   ┌────────┐   ┌─────────────┐  │\n  │  │ Worker │──\u003e│ Reviewer │──\u003e│ Tester │──\u003e│ Documenter  │  │\n  │  │(Adapter│\u003c──│(Adapter) │   │(Adapter│   │  (Adapter)  │  │\n  │  └───┬────┘   └──────────┘   └────────┘   └─────────────┘  │\n  │      │  ↕ StuckDetector                                      │\n  │  ┌───┴────────────────────────────────────────────────────┐  │\n  │  │ Adapters: Codex | GPT | OpenRouter | Local (Ollama)   │  │\n  │  └────────────────────────────────────────────────────────┘  │\n  └──────────────────────────────────────────────────────────────┘\n           │                     │                     │\n           v                     v                     v\n  ┌──────────────┐  ┌──────────────────┐  ┌──────────────────┐\n  │  Discord Bot │  │  Memory (LanceDB │  │  Knowledge Graph │\n  │  (commands)  │  │  + Xenova E5)    │  │  (code analysis) │\n  └──────────────┘  └──────────────────┘  └────────┬─────────┘\n                                                    │\n                                           ┌────────┴─────────┐\n                                           │  Code Registry   │\n                                           │  (SQLite + FTS5) │\n                                           │  + BS Detector   │\n                                           └──────────────────┘\n```\n\n## Features\n\n- **Multi-Provider Adapters** — Pluggable adapter system: **OpenAI Codex/GPT**, **OpenRouter** (any model, native agentic loop), **local models** (Ollama, LM Studio), and **Claude Code** (`claude -p`, opt-in) with runtime provider switching\n- **Code Registry** — SQLite-backed entity registry tracking every function/class/type across 8 languages, with complexity scoring, test mapping, and risk assessment\n- **BS Detector** — Built-in static analysis engine that detects bad code patterns (empty catch, hardcoded secrets, `as any`, etc.) with pipeline guard integration\n- **Autonomous Pipeline** — Cron-driven heartbeat fetches Linear issues, runs Worker/Reviewer pair loops, and updates issue state automatically\n- **Worker/Reviewer Pairs** — Multi-iteration code generation with automated review, testing, and documentation stages\n- **Decision Engine** — Scope validation, rate limiting, priority-based task selection, and workflow mapping\n- **Cognitive Memory** — LanceDB vector store with Xenova/multilingual-e5-base embeddings for long-term recall across sessions\n- **Repo Knowledge Loop** — workers learn each repository over time: task outcomes (success patterns, review-rejection pitfalls) are stored per-repo and recalled into the next worker prompt\n- **SWE-bench Verified** — the agentic harness solves real SWE-bench Lite issues, graded by the official harness; hybrid mode (frontier diagnosis + lightweight implementer) resolved 3/3 attempted instances ([benchmarks/RUBRIC.md](benchmarks/RUBRIC.md))\n- **Knowledge Graph** — Static code analysis, dependency mapping, impact analysis, and file-level conflict detection across concurrent tasks\n- **Discord Control** — Full command interface for monitoring, task dispatch, scheduling, provider switching, and pair session management\n- **Rich TUI Chat** — Claude Code inspired terminal interface with tabs, streaming responses, and geek-themed loading messages\n- **Dynamic Scheduling** — Cron-based job scheduler with Discord management commands\n- **PR Auto-Improvement** — Monitors open PRs, auto-fixes CI failures, auto-resolves merge conflicts, and retries until all checks pass\n- **Long-Running Monitors** — Track external processes (training jobs, batch tasks) and report completion\n- **Web Dashboard** — Real-time pipeline stages, cost tracking, worktree status, and live logs on port 3847\n- **Pace Control** — 5-hour rolling window task caps, per-project limits, turbo mode, exponential backoff on failures\n- **i18n** — English and Korean locale support\n\n---\n\n## How It Works\n\n```\nLinear (Todo/In Progress)\n  → Fetch assigned issues\n  → DecisionEngine filters \u0026 prioritizes\n  → Resolve project path via projectMapper\n  → PairPipeline.run()\n    → Worker generates code (via the configured adapter)\n    → Reviewer evaluates (APPROVE/REVISE/REJECT)\n    → Loop up to N iterations\n    → Optional: Tester → Documenter stages\n  → Update Linear issue state (Done/Blocked)\n  → Report to Discord\n  → Save to cognitive memory\n```\n\n### Memory System\n\nHybrid retrieval: `0.55 × similarity + 0.20 × importance + 0.15 × recency + 0.10 × frequency`\n\nMemory types: `belief` · `strategy` · `user_model` · `system_pattern` · `constraint`\n\nBackground: decay, consolidation, contradiction detection, distillation.\n\n**Repo knowledge loop** — every completed task writes repo-scoped knowledge\n(success → `system_pattern` with files changed + approach, review rejection →\n`constraint` pitfall), and the next task on the same repo recalls the most\nrelevant entries into the worker prompt as a \"Repository Knowledge\" section.\nWorkers get better at a codebase the more they work on it.\n\n### Benchmarks (L0–L6)\n\n`benchmarks/` contains a difficulty ladder for routing models by measured\ncapability — synthetic L0–L5 tasks with deterministic grading, and L6 = real\nGitHub issues (SWE-bench Lite) solved by the OpenSwarm harness and graded by\nthe official swebench harness. Headline: **hybrid mode** (frontier read-only\ndiagnosis + lightweight implementer with a verification loop) resolved 3/3\nattempted instances that every single lightweight model had failed. See\n[benchmarks/RUBRIC.md](benchmarks/RUBRIC.md) for the rubric, measured results,\nand the harness defects the benchmark uncovered.\n\n---\n\n## Discord Commands\n\n### Task Dispatch\n| Command | Description |\n|---------|-------------|\n| `!dev \u003crepo\u003e \"\u003ctask\u003e\"` | Run a dev task on a repository |\n| `!dev list` | List known repositories |\n| `!tasks` | List running tasks |\n| `!cancel \u003ctaskId\u003e` | Cancel a running task |\n\n### Agent Management\n| Command | Description |\n|---------|-------------|\n| `!status` | Agent and system status |\n| `!pause \u003csession\u003e` | Pause autonomous work |\n| `!resume \u003csession\u003e` | Resume autonomous work |\n| `!log \u003csession\u003e [lines]` | View recent output |\n\n### Linear Integration\n| Command | Description |\n|---------|-------------|\n| `!issues` | List Linear issues |\n| `!issue \u003cid\u003e` | View issue details |\n| `!limits` | Agent daily execution limits |\n\n### Autonomous Execution\n| Command | Description |\n|---------|-------------|\n| `!auto` | Execution status |\n| `!auto start [cron] [--pair]` | Start autonomous mode |\n| `!auto stop` | Stop autonomous mode |\n| `!auto run` | Trigger immediate heartbeat |\n| `!approve` / `!reject` | Approve or reject pending task |\n\n### Worker/Reviewer Pair\n| Command | Description |\n|---------|-------------|\n| `!pair` | Pair session status |\n| `!pair start [taskId]` | Start a pair session |\n| `!pair run \u003ctaskId\u003e [project]` | Direct pair run |\n| `!pair stop [sessionId]` | Stop a pair session |\n| `!pair history [n]` | View session history |\n| `!pair stats` | View pair statistics |\n\n### Scheduling\n| Command | Description |\n|---------|-------------|\n| `!schedule` | List all schedules |\n| `!schedule run \u003cname\u003e` | Run a schedule immediately |\n| `!schedule toggle \u003cname\u003e` | Enable/disable a schedule |\n| `!schedule add \u003cname\u003e \u003cpath\u003e \u003cinterval\u003e \"\u003cprompt\u003e\"` | Add a schedule |\n| `!schedule remove \u003cname\u003e` | Remove a schedule |\n\n### Other\n| Command | Description |\n|---------|-------------|\n| `!ci` | GitHub CI failure status |\n| `!provider \u003ccodex\\|codex-responses\\|openrouter\\|gpt\\|lmstudio\\|local\u003e` | Switch CLI provider at runtime |\n| `!codex` | Recent session records |\n| `!memory search \"\u003cquery\u003e\"` | Search cognitive memory |\n| `!help` | Full command reference |\n\n---\n\n## Project Structure\n\n```\nsrc/\n├── index.ts                 # Entry point\n├── cli.ts                   # CLI entry point (run, exec, chat, init, validate, start)\n├── cli/                     # CLI subcommand handlers\n│   └── promptHandler.ts     # exec command: daemon submit, auto-start, polling\n├── core/                    # Config, service lifecycle, types, event hub\n├── adapters/                # Provider adapters (codex, codex-responses, gpt, openrouter, local, lmstudio), agentic loop\n├── agents/                  # Worker, reviewer, tester, documenter, auditor\n│   ├── pairPipeline.ts      # Worker → Reviewer → Tester → Documenter pipeline\n│   ├── agentBus.ts          # Inter-agent message bus\n│   └── cliStreamParser.ts   # Claude CLI output parser\n├── orchestration/           # Decision engine, task parser, scheduler, workflow\n├── automation/              # Autonomous runner, cron scheduler, PR processor\n├── memory/                  # LanceDB + Xenova embeddings cognitive memory\n├── knowledge/               # Code knowledge graph (scanner, analyzer, graph)\n├── registry/                # Code entity registry, BS detector, entity scanner\n├── issues/                  # Local issue tracker (SQLite + GraphQL + Kanban UI)\n├── discord/                 # Bot core, command handlers, pair session UI\n├── linear/                  # Linear SDK wrapper, project updater\n├── github/                  # GitHub CLI wrapper for CI monitoring\n├── support/                 # Web dashboard, planner, rollback, git tools\n├── locale/                  # i18n (en/ko) with prompt templates\n└── __tests__/               # Vitest test suite\n```\n\n## State \u0026 Data\n\n| Path | Description |\n|------|-------------|\n| `~/.openswarm/` | State directory (memory, codex, metrics, workflows) |\n| `~/.openswarm/registry.db` | Code entity registry (SQLite) |\n| `~/.openswarm/issues.db` | Local issue tracker (SQLite) |\n| `~/.claude/openswarm-*.json` | Pipeline history and task state |\n| `config.yaml` | Main configuration |\n| `dist/` | Compiled output |\n\n---\n\n\n## Tech Stack\n\n| Category | Technology |\n|----------|-----------|\n| Runtime | Node.js 22+ (ESM) |\n| Language | TypeScript (strict mode) |\n| Build | tsc |\n| Agent Execution | Claude Code, OpenAI GPT/Codex, Ollama/LMStudio/llama.cpp |\n| Local DB | better-sqlite3 (WAL mode, FTS5) |\n| Task Management | Linear SDK (`@linear/sdk`) |\n| Communication | Discord.js 14 |\n| Vector DB | LanceDB + Apache Arrow |\n| Embeddings | Xenova/transformers (multilingual-e5-base, 768D) |\n| Scheduling | Croner |\n| Config | YAML + Zod validation |\n| Linting | oxlint |\n| Testing | Vitest |\n\n---\n\n## Changelog\n\n### v0.8.1\n- **License** — relicensed to **MIT** (was GPL-3.0)\n- **Docs** — README overhauled for first-time users (`openswarm init` walkthrough, accurate adapter registry, latest-build models) and contributor health files added (CONTRIBUTING, Code of Conduct, Security policy, PR template)\n\n### v0.8.0\n- **Interactive `openswarm init` wizard** — Linear OAuth (PKCE) sign-in with arrow-key team/project picker, provider auto-detection, and a validated `config.yaml` (INT-1808)\n- **`openswarm doctor`** — one-shot environment diagnostics: Node version, native modules, provider CLIs, ports, and config discovery\n- **Linear OAuth login** — `openswarm auth login --provider linear` (PKCE, no API-key entry)\n- **CLI polish** — ASCII banner and colored output (NO_COLOR / non-TTY aware)\n- **Autonomy hardening** — dependency-order gating + Backlog parking (INT-1809), daemon self-modify guards (INT-1810), `jobProfiles` partial roles carried through to runtime (INT-1812), and an `init` symlink guard that refuses to overwrite the daemon's global config\n- **Fix** — codex adapter `--full-auto` → `--sandbox workspace-write` (codex 0.137 deprecation) (INT-1699)\n\n### v0.5.0\n- **Native Codex Responses-API adapter** (`codex-responses`) — ChatGPT OAuth, no CLI binary required; live model discovery via the OAuth backend\n- **Linear-optional autonomy** — `ITaskSource` abstraction + local SQLite task source; the autonomous runner no longer requires Linear\n- **Notifier abstraction** — Discord / Slack / Telegram / webhook\n- **Agentic loop tools** — `web_fetch` + `web_search`\n- **Planner cockpit TUI** — `/plan` decompose → approve → dispatch\n- **Loop maturity (INT-1679)** — bad-edit guard + reflection self-repair loop\n- **Conflict-free concurrency (INT-1610)** — blocker/dependency ordering for parallel workers; worker instructions + actions logged to issue comments\n\n### v0.4.0\n- **Benchmarks (L0–L6)** — difficulty rubric, model-routing benchmark, and a real SWE-bench harness\n- **Repo knowledge loop** — workers learn each repository across tasks (per-repo success patterns + review-rejection pitfalls recalled into prompts)\n- **OpenRouter agentic adapter** — native tool loop with harness hardening from SWE-bench findings\n- **LM Studio adapter** with auto model selection\n- **CLI** — `openswarm dash`, `--tree` / `--ci` flags for `check`\n\n### v0.3.0\n- **Code Registry**: `openswarm check --scan` scans repo, registers 1000+ entities across 8 languages (TS, Python, Go, Rust, Java, C, C++, C#) with test mapping, complexity scoring, and risk assessment\n- **BS Detector**: `openswarm check --bs` — built-in static analysis for bad code patterns, pipeline guard integration\n- **Local Model Support**: Ollama, LMStudio, llama.cpp via single `local` adapter with auto-detection\n- **GPT Adapter**: OpenAI models via OAuth PKCE flow\n- **Local Issue Tracker**: SQLite + GraphQL + Kanban web UI at `:3847/issues`\n- **CLI**: `openswarm check`, `openswarm annotate` commands\n\n### v0.2.2\n- `openswarm` without arguments now launches TUI chat directly\n\n### v0.2.1\n- Security: patched lodash, picomatch, rollup, undici, yaml vulnerabilities\n\n### v0.2.0\n- Published as `@intrect/openswarm` on npm\n- Extracted `@intrect/claude-driver` as standalone zero-dependency package\n- Autonomous runner hardening and multi-project orchestration\n- Task-state rehydration from Linear comments\n- `--verbose` flag for detailed execution logging\n- Codex adapter: dropped o-series model override\n\n### v0.1.0\n- Initial release\n- Worker/Reviewer pair pipeline\n- Claude Code CLI + Codex CLI adapters\n- Discord bot control\n- Linear integration\n- LanceDB cognitive memory\n- Web dashboard (port 3847)\n- Rich TUI chat interface\n\n---\n\n## Troubleshooting\n\n### Korean / multibyte input doubles over mobile SSH (e.g. Termius)\n\nIf the chat TUI shows each Hangul (or other multibyte) character twice —\n`이이렇렇게 쓰쓰이는것` — while ASCII characters look fine, the cause is almost\nalways **client-side local / predictive echo** in the mobile SSH app drawing an\nextra copy of wide characters. The keystroke reaches OpenSwarm once; the terminal\npaints it twice.\n\nFix it in the SSH client:\n\n- **Termius** → Host/Terminal settings → turn **Local Echo** (a.k.a. predictive\n  echo) **off**, and ensure the encoding is **UTF-8**.\n- Confirm the server side is fine by running with diagnostics:\n\n  ```bash\n  OPENSWARM_DEBUG_INPUT=1 openswarm chat\n  ```\n\n  Type a few Korean characters, then inspect `~/.openswarm/input-debug.log`. If a\n  single keypress logs **one** code point (`cp=[51060]`) but you saw two glyphs,\n  the doubling is terminal echo (client-side). If it logs the code point **twice**\n  in one event, it's an app-level issue — please attach the log to\n  [a bug report](https://github.com/unohee/OpenSwarm/issues/new?template=bug_report.md).\n\n---\n\n## Contributing\n\nContributions are welcome — OpenSwarm is MIT-licensed and accepts pull requests from anyone. See **[CONTRIBUTING.md](CONTRIBUTING.md)** for development setup, the local check gates, branch/commit conventions, and the PR process. By participating you agree to the [Code of Conduct](CODE_OF_CONDUCT.md).\n\n- 🐛 [Report a bug](https://github.com/unohee/OpenSwarm/issues/new?template=bug_report.md)\n- 💡 [Share an idea](https://github.com/unohee/OpenSwarm/discussions) — the roadmap is built in the open\n- 🔧 Fork the repo, branch from `main`, and open a PR (CI runs lint → typecheck → build → test)\n- 🔒 Found a security issue? See [SECURITY.md](SECURITY.md) — please don't file it publicly\n\n---\n\n## License\n\n[MIT](LICENSE) © Heewon Oh\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funohee%2FOpenSwarm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Funohee%2FOpenSwarm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funohee%2FOpenSwarm/lists"}