Language models are good at choosing and explaining. They're bad at being trusted with authority. So Concord gives them neither the game nor the database. Each mind gets a narrow view, a menu of real options, and a structured reply. Everything that matters is decided and checked underneath.
Four layers. Authority flows downward only as validated actions, and truth flows upward as observations and receipts.
decides or proposesenforces and remembersexecutes and observesthe game, unchanged
01 · Consent loop
Offers, answers, fresh consent
The core never touches a colonist. It creates a proposal bound to one pawn, and only that pawn's decision handle can answer it: accept, refuse, counter or not now. Anything else, like a forged actor or an extra field, is rejected before it reaches the game.
A counter executes nothing. If the core adopts it, it comes back as a revised offer that needs a fresh yes, with at most two revisions per thread. Hauling agreements can cover up to three trips and stop on low needs, failure, expiry or withdrawal. Replacing running work needs its own consent, and the old job has to be confirmed stopped first.
Each mind gets a scoped perspective; the core uses an explicit allowlist rather than receiving pawn or character state wholesale. A colonist sees its own traits, skills, exact needs, surviving memories, its own history and a private outlook of up to four revisable notes, each tied to its own experiences.
The core receives explicitly shared information: addressed messages, agreement receipts, grounded opportunities, attributed local food/campfire sightings, and shared-link Food/Rest telemetry (urgent, low, satisfied, unknown) with a timestamp. Telemetry is not a visual observation. Stale readings become unknown, never zero.
Coarse bands cross the link. Thoughts don't.
The scope table
Information
The colonist
Other colonists
The core
You (crew log)
Exact needs, traits, skills
own
no
no
no
Food/Rest bands
yes
linked peers
yes
yes
Private outlook & memories
own
no
no
no
Messages addressed to them
yes
participants only
if addressed
yes
Agreement progress (receipts)
own
no
yes
yes
Local food/campfire sightings
own sightings
not automatically
attributed shared list
Supplies tab
Nearby grounded opportunities
own shortlist
no
bounded list
no
03 · Model minds
Small views, real menus, no tools
A decision is one bounded call. The model gets its perspective, where every need says what its scale means, plus a menu of executable choices with their effects spelled out. Contextual schemas constrain choices and supplied IDs where supported; runtime validation still checks every reply. Counterproposal actions have additional execution-time checks. Shared instructions are supplemented by relevant action and knowledge contracts.
The Claude route runs with no tools, no MCP servers, no plugins, and checks that at start-up before every call. Every trial has a durable attempt ledger and no rerolls. Failures keep their reserved attempt and a bounded diagnostic stage. Backends are swappable: scripted, Claude, Luna (offline contract checks so far) and Jev for fast appraisal.
Need, as the colonist sees it{ name: "Food", known: true, fractionFilled: 0.4, percentFilled: 40, meaning: "0 = empty/starving; 1 = full/well fed. Higher is LESS hunger." }
A choice, as it's offered{ choice: "counter", effect: "Suggest different implemented work; execute nothing. Adoption requires another offer and fresh consent." }
Why this shapeAn early cheaper-model check refused a job over "severe hunger" while Food read 0.9. The fix went into the data, not a longer prompt.
04 · Attention and time
Three speeds of thought
In continuous mode, native habits such as eating, sleeping and ordinary jobs can continue while a colonist deliberates, with a thinking badge over their head. Explicit inference pauses stop simulation. Fast appraisal decides whether an event deserves a thought. Deliberation handles negotiation, reconsideration and planning.
Native events are archived and routed only to the pawn who experienced them. Repeated signals coalesce, health events bypass cooldowns, and mundane chatter waits instead of cancelling a thought in progress. Reflection pacing spreads a fixed allowance over the observation window. Play is continuous by default; pausing at decisions is an explicit test mode.
Each core turn picks one of four moves: propose a listed opportunity, adopt a counter for fresh consent, ask one pawn one question, or wait. It keeps up to eight sourced topics marked open, blocked, deferred, resolved or declined. "Resolved" requires completed linked work, so its prose can't close a topic that the receipts don't close.
It wakes on public changes: finished or stopped work, requests, messages, answers, band changes. Idle time and private needs don't wake it. Every turn spends from a fixed budget with a cooldown. Refused work isn't pushed again; a colonist who said "not now" can invite exactly one fresh offer.
Model calls take seconds; players save, load and rewind. Every loaded game gets a fresh epoch, so an answer from before a reload can't act in the new timeline. Each accepted action gets an ID before dispatch, and the game's saved ledger makes a duplicate a no-op.
Paired checkpoints save the paused game, hash it and store the matching character state together. Restoring checks the hash and forks the timeline. Gameplay reports distinguish paired restore from a cold restore: a full process restart, with retained results and no extra model calls. Some experiments left restore gaps; offline checks do not demonstrate native persistence.
src/store.ts · src/lab-bridge.ts · mod/Concord.cs
Old answers can't reach into a new timeline.
07 · Evidence culture
Every claim has a receipt
Scripted game tests for every mechanic, including refusal, withdrawal and restore.
Frozen live trials with a fixed call budget decided up front, no rerolls, failures kept.
Offline snapshot banks: the same situation, varied one thing at a time, across models.
Offline typed-claims prototype that distinguishes submitted facts, forecasts and preferences; it is not a production truth checker.
Independent code review on every nontrivial PR and fact-checked diary entries for selected milestones.
Well-formed output and grounded understanding are measured separately. Passing the schema doesn't count as understanding.
docs/ACCEPTANCE.md · docs/evidence/ · trials/
Concord · crew logfirst live core
Receipt-based progress on top, addressed messages below: the core asks why a haul stopped before deciding anything.Research tree
What's built, what's next
Status as of 23 September 2026. "Verified slice" means bounded evidence for the named capability, not proven long-run reliability. Labels are qualitative, not completion percentages.
verified slicepartly therenot started
Foundation
Consent protocolidentity-bound proposals, accept / refuse / counter / not now
State & auditSQLite characters, commitments, ordered audit trail
Timeline safetyepochs, action ledger, paired and cold restore
Isolated model routetool-free calls, budgets, no rerolls
Crew log panelmessages, records and observations, never thoughts
The core hasn't turned a need into a plan live yet. In the first campfire runs, 23 of 24 core outputs were rejected by an interface mismatch. That's fixed and re-checked, but the follow-up run produced replies, not work offers. Local food supplies and prerequisites now reach the core separately from executable jobs (PR #45); scripted visibility and restore checks passed, but improved live planning remains untested.
Most live trials pause the game during model calls to keep them measurable. Continuous pawn trials have succeeded, and the third campfire trial ran the live core unpaused. Its eight core outputs were rejected, so it proves continued simulation during inference—not useful live planning.
Character continuity is early. Outlooks form, persist and show up in later reasoning. Whether they add up to stable personalities over a long game is an open question.
It's a lab harness, not a player download. The mod only activates in a configured lab environment.