← Seungheon Lee

Quorum: Multi-Agent Consensus

2025 · Side project, paused

llm · agents quorum Council 8 personas · a moderator writes the card advisory /confirm local session only grammar linked fresh size margin Decision log append-only recommendationcouncil confirm_failedcheck 2 executionall 5 passed

I once asked Quorum's council about the same stock three times in ten hours, with no new data in between. Five of the seven personas, independently, named what I was doing: permission manufacturing. The moderator declined to write a new buy and reaffirmed the earlier card. Quorum is a local-first investment analysis system built on Claude Code, and that refusal is the point of it. The code can reach a brokerage's order path, so analysis can be automated while execution stays local, explicit and guarded.

Claude CodeSubagentsPythonTelegram
How it works
Eight Claude Code subagents: five investor personas, a risk manager, one that weighs proposals against my personal constraints, and a portfolio manager that moderates. Price, drawdown and news monitors are read-only and can only send Telegram messages. The refusal above is now a rule in the moderator's prompt: two councils on the same name within 24 hours, no 5% move, no earnings or news, and it skips the vote and reaffirms the last card. Catching it at round one costs $1–2. Waiting for the personas to catch it in round three cost $3–5.
Guardrails
Orders have one way in: a typed /confirm phrase in a local Claude Code session, never from Telegram, LIMIT only. Five checks run in order: strict grammar, a matching recent recommendation (quantity within 10%, price within 2%), a fresh portfolio, a size cap, and a second typed acknowledgement for borrowed money. A PreToolUse hook reruns all five right before the order script, so calling the script from a shell skips nothing. One failed check and nothing is sent. The failure goes into an append-only log like everything else.
It argued back
Once the moderator reached a sensible answer by rewriting my words. It kept an earlier decision but quietly narrowed what that decision had meant, to fit its current caution. The spec calls this inverse confirmation, the mirror image of permission manufacturing. The prompt now requires prior decisions to be quoted verbatim, and any new reading to be flagged as [REINTERPRETING …] where I will see it.
Too strict
The recommendation had to be under five minutes old to confirm. I read the card properly, confirmed at 5 min 53 s and got blocked, and the easy way out was rerunning the council for a fresh card, which is exactly the habit the system exists to stop. It is 30 minutes now; the 2% price match was doing the real work. I also designed a sixth check, re-acknowledging every dissent, and dropped it when it turned out it would never have fired in the session I designed it from.