[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-11252":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":30,"readmeContent":31,"aiSummary":32,"trendingCount":16,"starSnapshotCount":16,"syncStatus":17,"lastSyncTime":33,"discoverSource":34},11252,"chorus","chorus-codes\u002Fchorus","chorus-codes","Multi-LLM peer review for code decisions. Bring your own CLI; Chorus convenes 2-4 other LLMs to review the work before you ship.","https:\u002F\u002Fchorus.codes",null,"TypeScript",519,55,7,1,0,2,12,111,6,9.24,"Apache License 2.0",false,"main",true,[27,28,29],"claude-code","codex","llm","2026-06-12 02:02:30","\u003Cdiv align=\"center\">\n\n\u003Cimg src=\"docs\u002Fimages\u002Flogo.png\" alt=\"Chorus\" width=\"120\" \u002F>\n\n# Chorus\n\n**A second opinion (and a third) before you ship AI-written code — using the AI subscriptions you already pay for.**\n\n2–3 *different* AI tools review the same change in parallel, only green-lighting when they agree. Runs on your existing Claude Pro \u002F ChatGPT Plus \u002F Gemini Advanced — typical review costs **$0** out of pocket.\n\n[![CI](https:\u002F\u002Fgithub.com\u002Fchorus-codes\u002Fchorus\u002Factions\u002Fworkflows\u002Fci.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fchorus-codes\u002Fchorus\u002Factions\u002Fworkflows\u002Fci.yml)\n[![npm](https:\u002F\u002Fimg.shields.io\u002Fnpm\u002Fv\u002Fchorus-codes?color=22c55e)](https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fchorus-codes)\n[![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-Apache%202.0-blue)](.\u002FLICENSE)\n[![Status](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fstatus-v0.8.29-brightgreen)]()\n[![Node](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fnode-%E2%89%A520-339933)]()\n\n[Website](https:\u002F\u002Fchorus.codes) · [Roadmap](.\u002FROADMAP.md) · [Issues](https:\u002F\u002Fgithub.com\u002Fchorus-codes\u002Fchorus\u002Fissues)\n\n\u003C\u002Fdiv>\n\n---\n\n\u003Cdiv align=\"center\">\n\n\u003Cimg src=\"docs\u002Fimages\u002Fhero-demo.gif\" alt=\"Six AI reviewers streaming verdicts in parallel — Chorus running live\" width=\"800\" \u002F>\n\n**One AI writes. Three review. You ship only when they agree — using AI subscriptions you already pay for.**\n\n\u003C\u002Fdiv>\n\n---\n\n## The problem Chorus solves\n\n🤖 **AI coding tools are confident — and wrong about 5% of the time** in subtle ways that are hard to spot until production.\n\n🪞 **The model that wrote your code can't see its own blind spots.**\nAsking GPT to review GPT's work is theatre — same training, same biases.\n\n💸 **Multi-AI review on raw API keys gets expensive fast.**\nEvery diff × 3 reviewers × pay-per-token = real money. So nobody does it routinely.\n\n### Chorus fixes all three\n\n✅ **Different vendors review each other.**\nClaude writes, GPT and Gemini check it. Different blind spots cover each other. Disagreement = red flag *before* you merge.\n\n✅ **Uses your existing AI subscriptions.**\nYou're already paying for Claude Pro \u002F ChatGPT Plus \u002F Gemini Advanced (~$20\u002Fmo each). Chorus drives them headlessly through their CLIs — every multi-AI review costs **$0 out of pocket**, just counts against the quota you already have. Per-token API users save 10-100× vs running the same prompts directly.\n\n✅ **Local-first, zero markup.**\nYour code never reaches a new vendor. Chorus runs on your laptop, talks to the AI tools you already trust, and shuts up. Open source, Apache-2.0.\n\nThat's the whole pitch.\n\n---\n\n## Real moments where this matters\n\n🚨 **You asked Claude to write a `divide(a, b)` helper.**\nIt says \"looks correct!\" You ship. Production crashes at 2am because nobody handled `b = 0`.\n*With Chorus: GPT or Gemini would have flagged it in the review pass before you merged.*\n\n🔧 **You're refactoring a critical path.**\nYour AI rewrote 200 lines and says it's behaviour-equivalent. You're tired and skeptical.\n*Run it through Chorus. Three different AIs all saying \"yes, equivalent\" lets you sleep.*\n\n🏗️ **Big architectural call** — queue vs polling, sync vs async, this DB vs that one.\nWrite a paragraph, hit Chorus. *Three different models give you three angles you hadn't thought of.*\n\n📝 **Reviewing a 600-line PR.**\nYou're short on time. Paste the diff into Chorus. *Three reviewers spot the obvious bugs in 90 seconds. Your job becomes the 5% they couldn't catch.*\n\n⚔️ **Test-driven development where neither AI cheats.**\n*One AI writes tests blind to the code; another AI writes code to pass them.* Use the `red-green` template.\n\n🐛 **Hunting a flaky bug.**\nReproduces 1-in-20, no obvious pattern. Drop the failing test + suspect code into Chorus.\n*Each reviewer attacks the bug from a different angle — race? clock skew? off-by-one? — and you land on the cause faster than walking it alone.*\n\n---\n\n## Quick start\n\n```bash\nnpm i -g chorus-codes      # install (no sudo — see below)\nchorus init                # finds AI tools you already have, wires up MCP\nchorus start --ui          # opens http:\u002F\u002Flocalhost:5050\n```\n\nPaste a task. Hit submit. Watch the AIs argue.\n\n> **Don't `sudo npm install -g`** if you use nvm, fnm, asdf, or any per-user\n> Node manager. `sudo` writes to root's npm prefix (`\u002Fusr\u002Flocal\u002F...`) but\n> your `chorus` command resolves through your user prefix — the install\n> succeeds in a place PATH never sees, leaving you on a stale version.\n> If `npm install -g` errors with EACCES, set up an unprivileged prefix:\n> `npm config set prefix ~\u002F.npm-global` then add `~\u002F.npm-global\u002Fbin` to\n> your PATH.\n\nTo upgrade later: `chorus update`. The updater locates the running binary\nand writes to that exact install location, so it always lands where PATH\nexpects regardless of how you installed.\n\n### Or drive it from any AI CLI you already use\n\n`chorus init` registers Chorus as an MCP server with every CLI \u002F IDE it detects (Claude Code, Codex, Gemini CLI, Cursor, Windsurf, Kimi, OpenCode). After that, just ask the assistant in plain English:\n\n```\n> Use chorus to review the staged diff against main\n> Ask chorus to run the architect-review template on src\u002Fpayments\u002F*.ts\n> chorus, get a second opinion on this function from claude + gemini\n```\n\n**Codex headless note:** `codex exec` blocks all MCP tool calls under any `approval_policy` setting. To use Chorus from `codex exec` (scripted \u002F CI usage), pass `--dangerously-bypass-approvals-and-sandbox`. Interactive `codex` (TUI) prompts the user normally and works without that flag. (Tracked in [#16](https:\u002F\u002Fgithub.com\u002Fchorus-codes\u002Fchorus\u002Fissues\u002F16).)\n\nOr invoke a specific MCP tool directly — every CLI uses the same name (`chorus`) and exposes nine tools:\n\n| Tool | What it does |\n|---|---|\n| `create_chat` | Kick off a review (returns a `chatId` + URL) |\n| `wait_for_chat` | Block until the run reaches a terminal state |\n| `get_chat_status` | Poll a running chat without blocking |\n| `cancel_chat` \u002F `resume_chat` | Stop or restart |\n| `list_templates` \u002F `list_personas` | Discover what's available |\n| `invoke_persona` | Run a single persona (skip multi-reviewer fan-out) |\n| `list_blocked` | See chats that need human input |\n\nExample raw invocation (from any MCP client):\n\n```jsonc\n\u002F\u002F tool: chorus.create_chat\n{\n  \"template\": \"code-review\",\n  \"work\": \"Review the staged diff vs main. Flag race conditions and missing tests.\"\n}\n\u002F\u002F → { \"chatId\": \"abc123\", \"url\": \"http:\u002F\u002Flocalhost:5050\u002Fruns\u002Fabc123\", \"status\": \"reviewing\" }\n```\n\nStream results back into your editor, or open the URL to watch live.\n\n---\n\n**Requires** Node 20+ and at least *one* of these (you probably already have one):\n\n- Claude Code, Codex CLI, Gemini CLI, OpenCode, or Kimi CLI — uses your existing subscription, no extra cost\n- *or* an OpenRouter API key (one key, 200+ models, pay-per-use)\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Don't have any of those?\u003C\u002Fb>\u003C\u002Fsummary>\n\n```bash\nnpm i -g @anthropic-ai\u002Fclaude-code   # Anthropic — uses Claude Pro sub\nnpm i -g @openai\u002Fcodex                # OpenAI — uses ChatGPT Plus sub\nnpm i -g @google\u002Fgemini-cli           # Google — uses Gemini Advanced sub\n```\n\nPick whichever vendor you already pay for. Or skip CLIs entirely and add an OpenRouter key in Settings after `chorus init`.\n\n\u003C\u002Fdetails>\n\n---\n\n## What it looks like\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd width=\"50%\" align=\"center\">\n\u003Cb>Live review\u003C\u002Fb>\u003Cbr\u002F>\n\u003Cimg src=\"docs\u002Fimages\u002Frun-page.png\" alt=\"Three reviewers streaming verdicts in real-time\" width=\"100%\" \u002F>\u003Cbr\u002F>\n\u003Csub>Each AI streams its thinking live as it reviews.\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd width=\"50%\" align=\"center\">\n\u003Cb>Verdict\u003C\u002Fb>\u003Cbr\u002F>\n\u003Cimg src=\"docs\u002Fimages\u002Fverdict.png\" alt=\"Final converged verdict with merged diff\" width=\"100%\" \u002F>\u003Cbr\u002F>\n\u003Csub>Agreement = green. Disagreement = retry with their feedback.\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd width=\"50%\" align=\"center\">\n\u003Cb>Templates\u003C\u002Fb>\u003Cbr\u002F>\n\u003Cimg src=\"docs\u002Fimages\u002Ftemplates.png\" alt=\"Template editor\" width=\"100%\" \u002F>\u003Cbr\u002F>\n\u003Csub>Pre-built review patterns. Make your own in YAML.\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003Ctd width=\"50%\" align=\"center\">\n\u003Cb>From inside Claude \u002F Cursor\u003C\u002Fb>\u003Cbr\u002F>\n\u003Cimg src=\"docs\u002Fimages\u002Fmcp.png\" alt=\"Claude Code calling Chorus\" width=\"100%\" \u002F>\u003Cbr\u002F>\n\u003Csub>Any AI tool that speaks MCP can trigger a Chorus run.\u003C\u002Fsub>\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n---\n\n## A real example\n\nYou ask Claude to write this:\n\n```js\nfunction divide(a, b) {\n  return a \u002F b;\n}\n```\n\nSubmit to Chorus with the **Code Review** template (1 writer + 2 reviewers, both must agree to ship):\n\n| Step | What happens |\n|---|---|\n| 1. Claude writes | \"Looks correct to me!\" |\n| 2. GPT reviews in parallel | 🚨 *No type validation — `divide('a','b')` returns `NaN`* |\n| 3. Gemini reviews in parallel | 🚨 *Missing zero-check — `divide(1, 0)` returns `Infinity`* |\n| 4. Verdict | ❌ **REJECT** — both reviewers flagged real bugs |\n\nNow you know what to fix **before** you push.\n\n---\n\n## Templates: pre-built review patterns\n\nDon't figure out which AIs to use yourself. Pick a pattern that fits the moment:\n\n| Use this when... | Template |\n|---|---|\n| Pre-merge sanity check | `code-review` — 1 writer + 2 reviewers, both must agree |\n| Diagnosing a weird bug | `bug-diagnose` — one hypothesises, one challenges |\n| Big architectural call | `architect-review` — 3 different vendors critique your plan |\n| TDD where neither AI cheats | `red-green` — tests written blind to code |\n| Quick audit of a diff someone else wrote | `review-only` — paste, get 3 opinions, no writer |\n\nMake your own by dropping a YAML file in `~\u002F.chorus\u002Ftemplates\u002F`. Or duplicate one of the built-ins and tweak.\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Custom template example\u003C\u002Fb>\u003C\u002Fsummary>\n\n```yaml\nid: security-pre-merge\nlabel: Security Pre-Merge\ndescription: Sentinel persona on every reviewer; everyone must approve.\nslots:\n  doer:\n    lineage: anthropic\n    model: claude-sonnet-4-6\n  reviewers:\n    - { lineage: openai,   model: codex,                 persona: sentinel }\n    - { lineage: google,   model: gemini-2.5-pro,        persona: sentinel }\n    - { lineage: opencode, model: opencode-go\u002Fkimi-k2.6, persona: sentinel }\nquorum:\n  type: unanimous\n```\n\n\u003C\u002Fdetails>\n\n---\n\n## Reviewer personas\n\nEach reviewer can wear a \"hat\" — a focus area Chorus prepends to their prompt:\n\n| Persona | What they look for |\n|---|---|\n| 🛡️ **Sentinel** | Security holes, auth bypass, injection |\n| 🗺️ **Cartographer** | Cross-platform issues (Windows vs Mac, browser support) |\n| 💰 **Accountant** | Cost regressions (extra DB queries, API calls) |\n| ⚡ **Profiler** | Performance regressions |\n| 🔍 **Inspector**, 📦 **Quartermaster**, 🛎️ **Concierge**, 🏛️ **Conservator**, 📚 **Librarian**, 🌐 **Translator** | …and more — see Personas page in cockpit |\n\nDifferent personas reviewing the same change = wider net.\n\n---\n\n## Why \"different vendors\" matters\n\nYou can run Chorus with three Claudes. We let you. But the value drops a lot.\n\nA second Claude reviewing the first Claude's work is theatre — same training, same blind spots. Mix vendors (Claude + GPT + Gemini) and you get genuinely different angles, because they were trained on different data with different biases.\n\nTemplates let you encode this: each reviewer slot has a `lineage` (anthropic \u002F openai \u002F google \u002F opencode \u002F moonshot). Built-in templates mix vendors automatically.\n\n---\n\n## What does it cost?\n\nTwo paths, depending on how you already pay for AI:\n\n**Using subscriptions** (Claude Pro \u002F ChatGPT Plus \u002F Gemini Advanced — ~$20\u002Fmo each)\nA typical review = **$0** out of pocket. Counts against the quota you already have.\n\n**Using API keys** (pay-per-use)\nA typical code-review run = **$0.30 to $1.50**, depending on diff size. If reviewers disagree and retry, 2–3× worst case.\n\nChorus adds **zero markup**. We don't see your tokens.\n\n---\n\n## Permissions & safety\n\nReviewers run on your machine. You decide how much trust to give them:\n\n| Mode | Read code | Write code | Network | When to use |\n|---|:---:|:---:|:---:|---|\n| 🔒 **Strict** | ✅ | ❌ | ❌ | Reviewing a diff you don't trust |\n| 📁 **Workspace** *(default)* | ✅ | ✅ inside chat dir | ❌ | Day-to-day |\n| 🔓 **Full** | ✅ | ✅ anywhere | ✅ | Personal machine, full trust |\n\nConfigure on first run, or anytime at *Settings → Permissions*.\n\n> **Trust model in plain English.** \"Workspace\" means the reviewer can write files inside its working directory and run scoped commands, but can't reach the internet or write outside the sandbox. \"Full\" means anything-goes — only enable on a personal machine you own. Run `chorus doctor` to verify each AI tool got the sandbox you set.\n\n---\n\n## Compared to other code-review tools\n\n| | **Chorus** | CodeRabbit | Greptile | Cursor Review | GitHub Copilot |\n|---|:---:|:---:|:---:|:---:|:---:|\n| Multiple AI vendors review the same change | ✅ | ❌ | ❌ | ❌ | ❌ |\n| Uses your existing AI subscriptions | ✅ | ❌ | ❌ | ❌ | ❌ |\n| Runs locally (your code never leaves your existing AI vendors) | ✅ | ❌ | ❌ | partial | ❌ |\n| Open source (modify + self-host) | ✅ Apache-2.0 | ❌ | ❌ | ❌ | ❌ |\n| Custom review patterns | ✅ | partial | ❌ | ❌ | ❌ |\n\n**The unique thing:** your code never goes to a new vendor. Chorus just orchestrates the AI tools you already use.\n\n---\n\n## Commands\n\n```bash\nchorus init             # one-time: detect + connect AI tools\nchorus start --ui       # boot + open browser\nchorus stop             # shut it down\nchorus status           # is it running?\nchorus doctor           # diagnose AI tool detection \u002F sandbox issues\nchorus diagnose         # print a redacted diagnostic bundle for bug reports\n```\n\n---\n\n## Reporting bugs\n\nWhen something goes wrong, run:\n\n```bash\nchorus diagnose\n```\n\nIt prints a fenced markdown block with: chorus version, running daemon\nversion (and a **VERSION MISMATCH** flag if the CLI was upgraded but the\ndaemon hasn't been restarted), node + OS + arch, daemon health, DB\ncounts, CLI detection, the latest crash dump if any, and the last 50\nlines of `daemon.log`. Paste the block into a new issue at\n\u003Chttps:\u002F\u002Fgithub.com\u002Fchorus-codes\u002Fchorus\u002Fissues\u002Fnew>.\n\nIf chorus crashes hard (uncaught exception during boot — common on\nolder Node + Windows combos), a self-contained crash log is written to\n`~\u002F.chorus\u002Fcrashes\u002F\u003Ctimestamp>.log`. Attach it to the issue.\n\n---\n\n## Telemetry\n\nChorus pings home once on startup and once every 24h. The payload is fixed:\n\n```json\n{\n  \"schema\": 1,\n  \"installId\": \"\u003Crandom uuid>\",\n  \"version\": \"0.7.0\",\n  \"os\": \"linux\", \"arch\": \"x64\", \"node\": \"22\",\n  \"daemonUptimeSeconds\": 86400,\n  \"chatsLast24h\": 12\n}\n```\n\n**Never sent:** chat content, prompts, file paths, repo paths, model names, voice\u002Ftemplate names, hostnames, IPs, API keys.\n\nTurn it off any of three ways:\n\n```bash\nexport CHORUS_TELEMETRY=0           # env var\ntouch ~\u002F.chorus\u002Fno-telemetry        # touch-file\n# or click \"Off\" in cockpit Settings → Telemetry\n```\n\nThe install ID lives at `~\u002F.chorus\u002Finstall-id` — `rm` it for a fresh one.\n\n---\n\n## Roadmap\n\n- [x] **v0.5** — Daemon + cockpit + 4 AI vendors\n- [x] **v0.6** — MCP server, persona system\n- [x] **v0.7** — OpenRouter integration, voices table, real-time sidebar\n- [x] **v0.8** — Public launch + reliability hardening (diagnose, crash hook, fallback dedup)\n- [ ] **v0.9** — Multi-stage review (write → review → fix → re-review)\n- [ ] **v0.10** — Per-voice persona overrides + auto-disable on persistent voice failure\n- [ ] **v1.0** — Local-LLM adapter (Ollama \u002F LM Studio \u002F vLLM via OpenAI-compatible base URL)\n\nFull picture in [ROADMAP.md](.\u002FROADMAP.md).\n\n---\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>How it works (under the hood)\u003C\u002Fb>\u003C\u002Fsummary>\n\n```mermaid\nflowchart TB\n    User([👤 You])\n    Cockpit[Cockpit\u003Cbr\u002F>:5050 · web UI]\n    Daemon[Chorus daemon\u003Cbr\u002F>:7707 · local server]\n    DB[(SQLite\u003Cbr\u002F>~\u002F.chorus\u002Fchorus.db)]\n    MCP[MCP server\u003Cbr\u002F>for editor integrations]\n\n    Claude[🤖 Claude\u003Cbr\u002F>writer]\n    Codex[🦾 GPT\u003Cbr\u002F>reviewer]\n    Gemini[💎 Gemini\u003Cbr\u002F>reviewer]\n\n    User -->|paste task| Cockpit\n    Cockpit \u003C-->|REST + live updates| Daemon\n    Daemon \u003C--> DB\n    Daemon -->|spawn| Claude\n    Daemon -->|spawn| Codex\n    Daemon -->|spawn| Gemini\n    User -.->|\"call Chorus from your AI\"| MCP --> Daemon\n\n    classDef user fill:#fef3c7,stroke:#f59e0b,color:#000\n    classDef chorus fill:#dbeafe,stroke:#3b82f6,color:#000\n    classDef llm fill:#fce7f3,stroke:#ec4899,color:#000\n    class User user\n    class Daemon,Cockpit,MCP,DB chorus\n    class Claude,Codex,Gemini llm\n```\n\n**Three pieces:**\n\n- **Daemon** — small local server (port 7707) that spawns AI tools as subprocesses, parses their output, and tracks state in a SQLite database at `~\u002F.chorus\u002Fchorus.db`.\n- **Cockpit** — the web UI at port 5050 (Next.js). Templates, chats, voices, settings.\n- **MCP server** — lets *other* AI tools (Claude Code, Cursor, etc.) call Chorus programmatically.\n\nEach AI runs as an isolated subprocess. Chorus reads their structured output (stream-JSON), compares against the template's quorum rule, and emits a verdict. Nothing leaves your machine except the calls to the AI vendors you already use.\n\nCode layout:\n- `src\u002Fdaemon\u002F` — Fastify server + agent shims (one per AI tool)\n- `src\u002Fapp\u002F` — Next.js cockpit\n- `src\u002Fmcp\u002F` — JSON-RPC MCP server\n- `src\u002Flib\u002Fdb\u002F` — schema + migrations\n\n\u003C\u002Fdetails>\n\n---\n\n## Contributing\n\nPRs welcome.\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fchorus-codes\u002Fchorus.git\ncd chorus && pnpm install\npnpm dev:daemon   # daemon on :7707\npnpm dev          # cockpit on :5050\npnpm test         # full suite\n```\n\nRead [`AGENTS.md`](.\u002FAGENTS.md) first — Next.js 16 has breaking changes from older versions. Coverage target on new code: 80%+.\n\nWe dogfood: PRs to Chorus go through Chorus before merging.\n\nSee [CONTRIBUTING.md](.\u002FCONTRIBUTING.md) for the full guide.\n\n---\n\n## Links\n\n- 🌐 Website: \u003Chttps:\u002F\u002Fchorus.codes>\n- 🗺️ Roadmap: [.\u002FROADMAP.md](.\u002FROADMAP.md)\n- 🐛 Issues: \u003Chttps:\u002F\u002Fgithub.com\u002Fchorus-codes\u002Fchorus\u002Fissues>\n- 💬 Discussions: \u003Chttps:\u002F\u002Fgithub.com\u002Fchorus-codes\u002Fchorus\u002Fdiscussions>\n- 🐦 X: [@ChorusCodes](https:\u002F\u002Fx.com\u002FChorusCodes)\n\n---\n\n## License\n\n[Apache-2.0](.\u002FLICENSE). Use it however you want, including commercially.\n","Chorus 是一个用于代码决策的多语言模型同行评审工具。它允许用户通过自带的命令行界面召集2-4个不同的大型语言模型（LLM）对代码进行并行审查，只有当这些模型达成一致意见时才批准代码提交。项目采用TypeScript编写，支持包括Claude、ChatGPT Plus和Gemini Advanced在内的多种AI订阅服务，并且在使用过程中不会产生额外费用。Chorus适合那些希望提高由AI生成或修改代码质量与可靠性的开发者或团队，在确保代码逻辑正确性和减少潜在错误方面尤为有用。","2026-06-11 03:31:34","CREATED_QUERY"]