The Toronto Assembly project
Status: LIVE — page source v2, rewritten 2026-08-12 on the operator's word ("the assembly page
literally describes nothing about what we built - it should be comprehensive in every way except
the final results"). Public voice; renders through the assembly surface; chrome from site_nav.
Every factual claim below traces to the engine's own documentation (METHODS/VALIDITY memos on
the methods page, the blueprint, the imported engine's docs). This header block is stripped at
render.
What would 1,600 Torontonians decide together?
Citizens' assemblies — random residents, real evidence, structured deliberation — have a strong record of producing decisions ordinary politics can't reach. Before anyone convenes a real one, we built something unusual: a complete, working simulation of a Toronto citizens' assembly, and ran it once at full scale — 1,600 AI agents statistically raked to the city's real census, deliberating in rounds, voting on statements, authoring proposals, and requesting expert briefings.
This is a simulation. No real residents were surveyed. It cannot tell you what Torontonians think. What it can do is test the machinery of a mass assembly — the deliberation formats, the briefing designs, the consensus mathematics — cheaply and in the open, before anyone spends public money or public trust on the real thing. This page describes everything we built. The one thing it does not show is the run's results — and the section below explains exactly why.
The room: 1,600 agents raked to Toronto's census
The roster is generated, not invented. Agent profiles are drawn to match the 2021 Census for the City of Toronto across geography (all four community-council areas, all 25 wards, all 158 neighbourhoods), gender, age band, visible-minority group, immigrant status, housing tenure, household income band, education, and Indigenous identity. A largest-remainder quota method makes every one-way marginal exact to the nearest integer; a targeted-swap pass then builds realistic joint structure (seniors tend to be retired and owners; renters skew younger) against declared pairwise targets, converging within three percentage points of every target while leaving the marginals untouched. Small mandatory groups are hard-seated so they are never rounded out of the room.
Two honest disclosures ride with that. First, some lifestyle marginals (household type, commute mode, caregiving) are plausible estimates, not census-exact — each is flagged in the code and must be restated in any published result. Second, we deliberately include populations the census undercounts — people experiencing homelessness, precariously housed and non-status residents — so the simulated room is not limited to the well-counted. Their population sizes are estimates with wide uncertainty, and the research literature is clearest that language models portray exactly these groups least reliably. Those personas make the voices present; they are not a substitute for engaging real people from those communities.
The room is also stratified on attitude, not just demographics: trust in government, openness to change, political lean, and religiosity — the same move Climate Assembly UK made so the room isn't quietly stacked with enthusiasts for any particular vision.
The people: narrative-grounded personas
A demographic row is not a person. Each profile becomes an agent with ranked values, per-issue leanings, a latent opinion position, and six behavioural traits — engagement, numeracy, persuadability, risk tolerance, optimism, verbosity — all profile-conditioned with bounded noise. All of it is rendered into a one-page life narrative, and that narrative is the agent's system prompt, so behaviour is conditioned on a full, legible profile. Some agents abstain often; some over-participate; some misunderstand a briefing and ask for it re-explained. That unevenness is deliberate — it is what keeps a simulated room from collapsing into an unrealistically articulate consensus.
The architecture follows the Stanford result that narrative grounding raises fidelity and lowers demographic bias — and it is built so real interview transcripts can replace the synthetic narratives later with no interface change. Until then, these are demographic archetypes, not people; our methods page calls this the single largest fidelity gap in the whole design.
The deliberation: rounds, votes, proposals, evidence
The agenda is a question plus balanced, two-sided seed statements — 22 statements across 11 themes in the default agenda, with a built-in check that warns on any one-sided theme. Each round, every agent reads a routed subset of statements (twelve, preferring ones it hasn't seen), votes agree / disagree / pass on each, and may author one new proposal and one evidence question. Authored proposals are de-duplicated — an identical proposal already on the table records support rather than spawning a copy, and a semantic pass clusters paraphrases into distinct ideas so the output ranks genuinely different proposals instead of one idea phrased forty ways. Evidence questions go to the expert panel, and the answers flow back into agents' memory for later rounds.
The mathematics: Pol.is opinion mapping
Votes accumulate into an agents-by-statements matrix, and the analysis is the same mathematics the Pol.is platform uses in real deliberations: principal-component analysis projects the matrix to a two-dimensional opinion map; k-means clustering (k from 2 to 5, chosen by silhouette score) finds the opinion groups; and group-informed consensus scores each statement by multiplying every group's smoothed probability of agreement. Because it is a product, one dissenting group drives a statement's score toward zero — the metric structurally rewards statements every group can live with and resists tyranny of the majority. Our test suite verifies the implementation against an independent recomputation.
The expert panel and knowledge base
When agents ask for evidence, the system answers knowledge-base-first: a briefing already on file is reused at zero model cost, and a genuine miss is answered by an expert model writing from a fixed, non-partisan prompt — TL;DR, the strongest case for, the strongest case against, costs and financing, named precedents with numbers, equity effects, success factors, uncertainties, and sources to verify. Briefings are saved, reused across runs, and published as evergreen Q&As with their figures flagged for re-verification. The deliberating model and the expert model are deliberately decoupled, so a cheap local model can deliberate while a frontier model writes evidence once. This design directly patches the fact-finding gap DeepMind's own Habermas Machine paper acknowledges.
The engineering: reproducible, inspectable, tested
The engine is open along its whole length. Roster generation, agent construction, and statement routing are deterministic functions of explicit seeds — the roster is bit-for-bit reproducible. A transparent mock backend runs the full pipeline with no network for testing and ablations, and any OpenAI-compatible endpoint (local or hosted) can drive the real thing, hardened for small models with per-agent failure isolation so one malformed reply cannot abort a run. Every run writes a timestamped folder holding a structured event log, the full configuration and package versions, the roster and personas, the complete vote matrix, and the rendered report and opinion map — nothing hidden, any result re-inspectable. A 95-assertion test suite covers the sampling mathematics, the consensus metric, the de-duplication, and the knowledge-base lookup, and a browser control panel runs the whole thing locally. Region datasheets make the population swappable — Toronto is the reference; Ontario and Canada sheets ship as scaling examples, with persona wording localized so a rural agent doesn't reference the TTC.
What the full run produced — and why you can't see it
In June 2026 we ran the complete system once at 1,600-agent scale: the full pipeline, an interactive results dashboard, and a written results report. Those artifacts exist. We are not publishing them — and the reason is the point of this whole site: our own review found the prompts we used colored the deliberations. A simulation whose questions lean is a push-poll with extra steps. Our code review also logged three open validity issues, stated in full on the methods page: live agents never update opinions across rounds; the raw consensus score is not comparable across runs with different group counts; and seeded live runs are not exactly reproducible. Rather than publish impressive-looking numbers we can't stand behind, the results stay sealed until a redesigned run clears the bar.
The blueprint
The design and implementation blueprint (June 2026, published as-is with a download of the original document) sets out what this instrument is for and what convening a real Toronto citizens' assembly would take: selection by civic lottery, staffing, balanced briefing design, facilitation, and cost — and the staged path from a zero-dollar engineering run to a frontier-model run to the real thing.
What's next
The re-run is designed and queued: neutral-framing prompts rebuilt and adversarially audited by a second model; briefing inputs restricted to the balanced knowledge-base Q&As; the full analysis plan pre-registered and published on this page before the run, so you can check whether we moved the goalposts; and the three validity issues addressed first. Results publish when they survive that bar, and not before. If you work on deliberation, opinion modeling, or survey methodology and see a flaw we missed, the corrections door is open — that's how this site works.