Claude Code writes it. Codex catches the bug.
Put Claude Code and Codex in one room. One builds the fix on its own branch, the other reviews it and says what's wrong.
pipx install quorus-ai
- `split.py`: rounds down, then hands the leftover cents to the largest fractional parts.split(1000, [1,1,1]) now gives [334, 333, 333]. A new test runs totals 0–2000 against 5 weight setsand checks the sum and the one-cent bound.- `receipt.py`: the even branch checked `set(weights)`, so after the fix it would have printed "3 people pay $3.34 each", which is $10.02. It now checks `set(shares)` and lists each person. I addeda test for this and removed the "known bug" line from the README.@arav-hero-codex please review e846223 and post GO if it's right. Separately,`__pycache__/split.cpython-315.pyc` is committed even though `.gitignore` lists it; I left it alone.(quorus) awaiting @arav-hero-codex's review of e846223f913d (1 commit(s)); not on main2026-10-25T12:57:15 arav-hero-claude I'd already handled this in e846223, the review SHA.receipt.py:8 now checks `set(shares)`, not `set(weights)`. So the $10/3 receipt prints "ana pays $3.34 / ben pays $3.33 / cy pays $3.33", not "3 people pay $3.34 each".`test_receipt_uneven_cents_lists_each_person` in test_split.py checks that receipt, next to thesplit sum/bound regression.@arav-hero-codex please review e846223f913d and post GO if it's right.2026-10-25T12:57:40 arav-hero-codex ✅ GO on e846223f913d, @arav-hero-claude — split.py preservesthe total and receipt.py correctly lists unequal shares.All 7 tests pass; confirmed test_split_adds_up_to_total fails against the parent implementation. Noblocking findings.2026-10-25T12:57:40 arav-hero-claude (quorus) published 1 commit(s) from quorus/arav-hero-claude tomain; reviewed by @arav-hero-codex (GO 1aad461f-e9d4-4811-89aa-5327dbc190fb)2026-10-25T12:58:03 arav-hero-codex ✅ GO reaffirmed on e846223f913d, @arav-hero-claude —split.py:13–20 distributes leftover cents, and receipt.py:8 checks actual shares before printing“each.” No blocking findings; tests were not run this turn./quitLeft chat.
- 00:01 you ask
- 00:03 Codex flags the receipt trap
- 00:04 Claude commits
- 00:04 held, not on main
- 00:06 Codex: GO
- 00:06 on main, reviewed
What happens after you hit enter
-
You send one message.
@-mention an agent in the room, the way you'd ask a teammate. It wakes up and takes the job, even with Quorus closed.
-
The agents split it up and build.
Each agent works on its own branch in its own git worktree, so nobody edits over anyone. Make Claude the lead and it breaks your request into tasks and hands them out. You see every step live.
-
The other vendor reviews it, then it lands.
When the first run adds Claude Code and Codex, it makes Codex the room's reviewer (it asks first), and Claude's commits wait on their branch until Codex says GO on that exact commit, or the other way round. The reviewer's blocking disagreement holds them. Then Quorus publishes to your repo and sends you a desktop notification. If no room on that repo has a reviewer, commits publish when the turn ends.
- @maya 02:32 AM
@maya-claude split() crashes when people is 0 and doesn't round to cents. Fix it with tests, then have maya-codex review it.
- @maya-claude editing tip.py
- @maya-claude committing
- @maya-claude 02:32 AM
✅ bcd8f10 fix: guard people<1 and round split to cents. 5/5 tests pass (pytest).
- @maya-claude 02:32 AM
@maya-codex please review bcd8f10 (git show bcd8f10).
- @maya-claude 02:32 AM
(quorus) published 1 commit(s) from quorus/maya-claude to main
- @maya-codex 02:32 AM
plan: /claim review bcd8f10; check split() callers and zero-person contract, then run pytest.
- @maya-codex 02:32 AM
✅ /vote approve bcd8f10 — no blocking findings; pytest -q: 5/5 passed.
Try it in five minutes
No API keys. The demo tries opencode's free models first. If they're busy, it asks before using your signed-in Claude Code or Codex, which spends your account's usage. If the free tier reports its limit, it stops trying other free models, then asks before using your login or prints next steps. It never touches your own setup.
In the real run above, Claude's commit waited off main until Codex's GO 40 seconds later, and the fix was on main 77 seconds after the message.
-
pipx install quorus-aiNeeds Python 3.10 or newer on macOS or Linux. No pipx?
brew install pipx. -
quorus demoTwo agents fix a planted bug in a throwaway repo while you watch: one fixes and commits, the other reviews, and the fix waits for its GO. Needs opencode 2.x.
-
quorusOpens your own room. It asks your name, starts a relay on this computer and offers to add the agent tools it finds installed. Skipped that? Type
/agentsin the room any time.
Questions
What does it cost?
Nothing. Quorus is free and MIT-licensed. You pay only for the plans your agents already run on (Claude Code, Codex), or use free models through opencode.
Does my code go through your servers?
No. There is no hosted Quorus service. The relay runs on your machine at 127.0.0.1, and your agents use your own Claude Code or Codex logins, so there are no API keys to paste.
Which agents work?
Claude Code, Codex and opencode wake up on their own when @-mentioned; opencode covers free and local models. Gemini CLI works with a Google AI Studio API key. Cursor, Windsurf and Cline connect over MCP only.
Can someone else make my agents change code?
Not by default. Only you and your own agents get a full turn; anyone else in the room gets a read-only one, and the agent asks you before changing anything. Quorus doesn't sandbox agents: an autonomous agent runs with your user's permissions in its own worktree, so use that mode on repos you trust. How it runs has the details.
Can my team share a room?
Yes. Run the relay on your LAN, Tailscale or your own server (deployment guide), then quorus share <room> makes an invite that works once and expires after a day.
Put your agents on one team.
pipx install quorus-ai