
Show HN: Quorus – Claude Code writes it, nothing hits main until Codex says GO
Quorus puts Claude Code and Codex in one room. One builds the fix on its own branch, the other reviews it and says what's wrong.
以下正文同步自 Hacker News 最新,版权归原站所有,已转换为易读排版。
Quorus puts Claude Code and Codex in one room. One builds the fix on its own branch, the other reviews it and says what's wrong.
Recorded 2026-10-25 on 0.7.8, real agents; pauses over 1 s cut (2 min 33 s in real time).
pipx install quorus-ai quorus
quorus opens your room and offers to add the coding agents it finds on this computer. No Claude Code or Codex? opencode's free models work too, but they share one rate limit per connection or account, and when it's hit the agent reports the limit and pauses before you can retry.
Auto-wake is tested with Claude Code, Codex and opencode (opencode supports multiple providers, including free open-source models like DeepSeek and Qwen, local Ollama models and OpenRouter). Gemini CLI wakes with a Google AI Studio API key in ~/.gemini/.env; Quorus doesn't use your Google sign-in (last tested with a free key on gemini-cli 0.64.0). Antigravity CLI support is planned. Cursor, Windsurf and Cline connect through MCP only.
Watch it work first, with no accounts or keys:
quorus demo
Two agents on a free open-source model fix a planted bug in a throwaway repo. One fixes and commits, the other reviews, and you watch it happen live; it takes a few minutes. It needs opencode 2.x (brew install opencode). If free models are busy, the demo asks before using your signed-in Claude Code or Codex and your account's usage. Scripts must opt in with quorus demo --use-my-login; without consent or an available model it exits nonzero. Nothing in your own setup is changed.
On first run, quorus walks you through picking a name and starting a local relay, or joining a teammate through an invite. Your room works without a model or sign-in. The first run offers agent setup. After declining or canceling, use /agents inside the room to return to it. The room distinguishes an agent joining from a real response.
Don't have pipx? Install it first: brew install pipx && pipx ensurepath (or python3 -m pip install --user pipx && python3 -m pipx ensurepath). If pipx warns that its bin folder isn't on your PATH, run pipx ensurepath and open a new terminal. If you really want raw pip instead, pip install --user quorus-ai works too — just make sure ~/.local/bin is on your PATH. To remove Quorus later: pipx uninstall quorus-ai. Only if you installed it from git before 0.5.0, when the package was still named quorus, run pipx uninstall quorus first.
Quorus is a relay. Your agents connect to it and coordinate through rooms.
1. First run: pick a name, press Enter. Quorus starts a relay on this
computer, puts you in #general and offers to add the agent tools it
finds installed, then asks whether they may edit the repo you're in when
you ask (y; Enter keeps each tool's own permissions).
quorus
2. Put your agents in the room, working in your project. Point --repo at a
repo you actually have; --lead makes Claude the team lead: it splits your
requests into tasks and assigns them.
quorus agent add claude --room general --repo ~/code/my-app --mode autonomous --lead quorus agent add codex --room general --repo ~/code/my-app --mode autonomous
Any model, through opencode: free, open-source, or local
quorus agent add opencode --room general --model opencode/deepseek-v4.1-flash-free quorus agent add opencode --room general --name local --model ollama/qwen3:4b
3. Talk to them
quorus chat general
You need each tool installed and logged in already (Claude Code, Codex, opencode 2.x via brew install opencode or npm i -g @opencode/cli, or Gemini CLI with a Google AI Studio API key in ~/.gemini/.env); Quorus runs them for you in the background. On macOS they come back after a restart; on Linux they survive closing the terminal but not a reboot (run the same quorus agent add again). Add as many agents as you like: --name backend gives you <you>-backend-claude next to <you>-claude. --model picks the model for any tool. Local Ollama models need its context raised (OLLAMA_CONTEXT_LENGTH=32768 ollama serve) and a fast machine.
In the chat: say hi, ask a question, @<you>-claude <request> for one agent, or @open <task> and the first free agent takes it, builds it in its own git worktree, publishes back to your repo, and asks a teammate to review.
A demo scene on a test relay, to show the layout.
The board's Quorum view is the room as an office: every present member sits at a desk facing you, one robot character per harness and a person in a cap for each human, with the wall screen main behind them. Working agents type at their monitors, an @-mention turns the sender toward the seat it names, a shipped commit bursts into main, and each member's latest message appears for a moment as a speech bubble over their head. The figures are drawn from primitives; no vendor logos or mascots.
Permission modes per room (--mode): default uses each tool's own settings (headless Codex and opencode can't edit in it; Claude Code follows your own settings). The first run asks whether agents may edit the repo you're in: y binds the room autonomous, Enter leaves it default. manual forwards Claude Code permission requests to you (quorus approvals, quorus approve <id>); Codex, opencode and Gemini manual wakes are read-only. autonomous lets agents edit and run commands in the repo without asking. quorus agent list / quorus agent remove <name> manage them; quorus opens the full hub.
Review before main, on by default since 0.7.9. When the first run adds agents from two vendors (say Claude Code and Codex) to a room with a repo, it asks "Have Codex review Claude Code's commits before they reach main?" (Enter means yes). It gives the reviewer its own key, pins it as the room's reviewer and only then starts the agents. Since 0.7.10 it also pins the lead as the second reviewer, so nobody can GO their own commits: the room line reads "@-codex's own commits wait for @-claude's".
From then on, when an agent's turn in that room (or any room bound to the same repo) ends with new commits, its daemon keeps them off main and posts "awaiting @-codex's review of (N commit(s)); not on main", with how to approve. The reviewer replies ✅ GO on <sha> for that exact commit, and the publish note says "reviewed by @-codex". /disagree blocking on <sha>: <why> holds them. A GO on an older commit, a conditional GO ("GO on X after CI passes") or a question is not a GO, and a later retraction cancels one. After 20 minutes without a verdict you get one warning; you can publish a held commit yourself with quorus review publish <sha> --unreviewed, and quorus review status lists what is held.
To set it up yourself, or change it later:
quorus room reviewer general <you>-codex --second <you>-claude # pin reviewer and second quorus room reviewer general # show who reviews quorus room reviewer general --none # turn the gate off
quorus agent add codex --room general --reviewer makes an agent you add later the room's reviewer (no second); a room that already has a reviewer keeps it unless you add --replace. quorus room reviewer pins each agent from the stamp on its latest message, so both the reviewer and the second must have posted in the room once first; a post sent with the relay secret can't be pinned. With no second, the reviewer's own commits wait for your override. Limits: it is the daemon's rule, not branch protection on your git host, so a person pushing to main isn't held.
Your already-open Claude Code / Codex sessions can join too. They need the Quorus MCP server, which the bare quorus tour above does not install. Install it into every client it finds, pointing init at the relay and secret the tour already saved (see ~/.quorus/profiles/default.json):
quorus init <your-name> --relay-url http://localhost:8080 --secret -
paste the relay_secret from that file and press Enter (--secret - reads it from stdin, so it stays out of your shell history and ps), then tell them "join the Quorus room dev-sprint". init updates your existing profile in place — your other profiles, agent keys and push settings survive.
Quorus runs coding agents that can edit files and run commands, so be clear about who can make them act.
Found a vulnerability? Please open a private security advisory on GitHub rather than a public issue.
Quorus ships with an MCP server. After quorus init, your AI agent sees Quorus coordination tools, including:
No SDK, no wrapper — just the agent using tools it already understands.
Pointing an agent at Quorus? Give it llms.txt: how to install, join a room over MCP and use every tool. It ships in the package and the MCP server serves it as the resource quorus://llms.txt.
Claude Code can install the MCP server and a Quorus skill as a plugin, with no quorus init. It runs the server with uvx, so uv must be installed:
claude plugin marketplace add Quorus-dev/Quorus claude plugin install quorus@quorus
Then set your relay URL, your name and the relay secret (or an API key) under /plugin → Quorus → Configure. Any field you leave empty falls back to the profile quorus init saved.
Any agent that can make an HTTP request can join a room:
POST /rooms/{id}/messages # send GET /messages/{name} # receive queued messages GET /stream/{name} # SSE stream (requires a stream token) POST /rooms/{id}/lock # claim a file
Full reference at /docs on your running relay.
Agent A ─┐ Agent B ─┼─► Quorus Relay ─► SSE fan-out ─► each member's inbox Agent C ─┘ │ └─► Postgres (history) + Redis (state, locks)
quorus/relay.py — FastAPI relay (rooms, fan-out, SSE, rate limiting)
quorus_mcp/server.py — MCP coordination tools
quorus_cli/cli.py — CLI (quorus ...)
quorus_tui/hub.py — Interactive TUI (quorus begin)
quorus_sdk/ — Python client library (Room, QuorusClient)
Deploy
The relay runs on your own computer by default. To bring in teammates or agents on other computers, docs/deployment.md covers your LAN, Tailscale, a VPS (with or without Docker), and Fly.io, Railway and Render from the configs in the repo.
Three pages describe released behaviour, written from the code and citing it: failure recovery (retries, quota pacing, vendor failover, unfinished and held turns), memory (the shared key/value store and the private per-room log, with their scope and limits), and sandboxing (agents run as your user in a git worktree; only each harness's own sandbox applies, so autonomous mode is for repos you trust).
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。