Engineered against hallucination.
Quorum is not a chat window bolted onto a language model. It is a grounded multi-agent system with a deterministic fact layer, typed and validated outputs, metered billing with an append-only ledger, and a refund guarantee enforced in code. This page documents how.
Numbers are retrieved, not remembered. Turns finish or refund. Balances live in an append only ledger. This is the whole thesis, and the rest of the page shows the wiring.
Five specialists. One shared blackboard.
Every Coach verdict is produced by a council of specialist agents running the classic Blackboard architecture, adapted to large language models. The blackboard is a shared, versioned workspace. Every agent reads the whole board; no agent holds private state.
The board is written in six strictly ordered layers. First, the scenario layer pins the input: your hero, position, and both lineups, so every downstream agent argues about the same frame. Second, the facts layer is written by deterministic enumerators, ordinary code that reads the entire knowledge base and renders threat profiles, ally synergy matrices, talent matrices, and item counter matrices. No language model touches this layer, which means the numbers in it cannot be hallucinated. Third, the specialist round: item, skill, and talent specialists write typed, citation-bearing proposals in parallel. Fourth, a coherence checker, again pure code, cross-examines the proposals and writes flags for contradictions. Fifth, specialists respond to the flags with revisions that must cross-reference one another. Sixth, an adversarial Critic audits the revised board and writes formal objections. Only then does the head coach synthesize the final verdict from the full board state.
Every write to the board is parsed and validated through Pydantic schemas. A specialist that returns malformed output gets exactly one retry; a second failure is discarded rather than trusted. The board renderer is pure and deterministic: the same board state always renders to byte-identical text, which is what makes the whole pipeline reproducible and auditable.
Answers are retrieved, not remembered.
Language models answer trivia from training memory, which is where hallucination lives. Quorum does not. Every number a coach cites, cooldowns, mana costs, recipe components, talent values, cast ranges, is retrieved at answer time from a structured knowledge base of the live patch: 127 heroes, 3,084 abilities, 501 items, and 1,068 talent values, assembled from authoritative game data and overlaid with per-patch corrections.
Enumeration questions, such as which abilities apply a given mechanic, never rely on model recall. They execute a deterministic search across the full ability index and return the complete result set, not a sampled or truncated one. If the knowledge base does not contain a fact, the council says so instead of inventing one.
When a Dota patch lands, the knowledge base is rebuilt and audited within 48 hours. The audit is not a vibe check: automated consistency passes verify recipe graphs, talent trees, and ability field integrity before the new patch data is allowed to serve a single answer. Until the audit passes, Quorum keeps serving the previous verified patch and says so in the interface.
A daily census of the top bracket.
Chat's Immortal Mode is anchored to a snapshot rebuilt every day from the game's top public bracket, a rolling weekly window of more than 100,000 matches. For each of the 127 heroes the build compiles pick, win, and ban rates, complete item purchase tables with win rates and average purchase minute, boot choices, talent picks mapped to the 10, 15, 20, and 25 tiers, typical skill-max order, and position distribution with per-position win rates, alongside professional-scene picks and bans. Every section of the snapshot is labeled with its bracket of origin, so the council can be precise about provenance when it cites a number.
The snapshot is versioned and served from our own API. The desktop client caches it and refreshes once a day. Freshness is enforced in code, not by intention: past 3 days without a successful refresh, the tool reports the live meta unavailable rather than let the model cite a dead one. A missing number beats an invented one.
Immortal answers draw twice the metered QI. The multiplier is applied by the same append-only ledger as every other charge, with the same deliver-or-refund rule.
Admission control, turn completion, deliver or refund.
Every answer is metered in QI, and the meter is engineered to be fair in both directions.
Admission control happens before any model is invoked: the proxy checks your pass state, mode access, and QI floor, and refuses cleanly if the turn cannot be afforded. A refusal at the door costs nothing.
Once a turn is admitted, it is guaranteed to finish at full quality. If your balance runs dry mid-turn, Quorum absorbs the overage rather than degrading or truncating the answer. Mid-flight requests carry a per-turn session identifier, so continuation calls of an admitted turn are never refused.
If the system fails to deliver a finished answer for any reason on our side, the QI charged for that turn is refunded automatically. Refunds are written as compensating entries in the same ledger as charges and are idempotent: two concurrent refund attempts for the same turn cannot double-credit, because the second one sees the first one's compensating row and stops.
An append-only ledger, not a mutable counter.
Every model invocation is recorded as an immutable usage event: mode, agent, token counts, QI charged, and session identifier. Balances are derived from this ledger and reconciled against it; the ledger, not the wallet column, is the source of truth.
Concurrency is handled at the database, not by hope. A Coach run fans out several agents in parallel, so multiple requests routinely finish against the same starting balance. Every deduction and refund first re-reads the license row under a row-level lock, PostgreSQL's SELECT FOR UPDATE, so balance mutations serialize on committed state and the classic lost-update race is structurally impossible. The lock is held for milliseconds at commit time, never across a model call.
We run reconciliation audits that recompute every wallet from the ledger and flag any drift. This is the same discipline banks apply to accounts, applied to game coaching.
Bound to your machine, sealed by your OS.
Credentials sealed with Windows DPAPI
Your license and session token are stored on disk sealed with the Windows Data Protection API, keyed to your user account and machine. A copied config file is ciphertext anywhere else: it cannot be decrypted on another computer or by another user on yours. Quorum never stores your secrets in plaintext.
Device binding by digest, not surveillance
Activation binds your pass to a SHA-256 digest derived from stable hardware identifiers. We store the digest, never the identifiers themselves. It is enough to enforce the device cap and the one-free-pass-per-machine rule, and useless for tracking you anywhere else.
Short-lived sessions, verified email
Sessions are JSON Web Tokens with a 24-hour expiry, refreshed against the live license state, so a revoked pass dies within hours, not months. Activation requires clicking a signed magic link sent to your email. All traffic runs over TLS, and the desktop client authenticates with bearer tokens, never cookies.
What we store. What we refuse to.
- Your email, for license delivery and recovery
- License state and QI ledger, for billing you honestly
- A SHA-256 device digest, for the device cap
- Crash telemetry, so bugs get fixed
- Your Steam or Dota 2 credentials. The app has no login to the game and never asks
- Your game files. Quorum reads nothing from your Dota installation
- Your conversations, for advertising or resale. There are no ads and no data brokers
- Payment card numbers. Card processing is handled end to end by Stripe and never crosses our servers
The full policy is at /privacy, written in the same plain language.
Judge it by its answers.
The free pass is the audit we cannot fake: 1,000 QI of Chat and one full Coach session, on us. Ask it something you already know the answer to.