RimWorld Concord
Deep dive

How Concord works

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.

The system map

Four layers. Authority flows downward only as validated actions, and truth flows upward as observations and receipts.

Concord architecture Model minds at the top receive perspectives and return validated choices. The TypeScript coordinator with SQLite handles perspectives, consent, attention, the core scheduler and checkpoints. A lab bridge connects it to the C# Concord mod inside RimWorld, which executes native jobs and returns receipts. MINDS · replaceable, tool-free Colonist minds one isolated call per decision Claude Sonnet 4.6 · Luna offline Core planner propose · counter · ask · wait same isolated route, own budget Fast appraisal Jev: is this worth a thought? optional, tested live Scripted backends deterministic regression baseline for every mechanic validated choice perspective + menu COORDINATOR · TypeScript + SQLite Perspectives owner-only views self-describing needs menus of current options schema = available IDs Consent & agreements identity-bound decisions counters → fresh offers standing agreements withdrawal, replacement Attention & scheduling event routing per pawn coalescing, pacing event-driven core wake budgets per trial State & checkpoints characters, outlooks, audit epochs, action IDs paired save + state pairs cold restore actions (with IDs) observations, events, receipts CONCORD MOD · C# inside RimWorld Action bridge + ledger Awareness + status Crew log panel Move · Haul · Rescue · Build · Cook RIMWORLD native jobs, needs, pathing, skills, social memories, storyteller
decides or proposesenforces and remembersexecutes and observesthe game, unchanged
02 · Knowledge boundaries

Who knows what

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

InformationThe colonistOther colonistsThe coreYou (crew log)
Exact needs, traits, skillsownnonono
Food/Rest bandsyeslinked peersyesyes
Private outlook & memoriesownnonono
Messages addressed to themyesparticipants onlyif addressedyes
Agreement progress (receipts)ownnoyesyes
Local food/campfire sightingsown sightingsnot automaticallyattributed shared listSupplies tab
Nearby grounded opportunitiesown shortlistnobounded listno
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.

src/model-perspective.ts · src/reflection-choice.ts · src/claude-decision.ts · src/decision-trials.ts

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.

src/routing.ts · src/attention.ts · src/reflection-pacing.ts · mod/Awareness.cs · mod/DecisionPause.cs

Thinking badgeearly scripted trial
RimWorld map with a small blue thinking badge above a colonist who is deliberating while the colony keeps moving.
05 · The core

A planner that waits to be needed

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.

src/core-planner.ts · src/core-scheduler.ts · mod/LinkTelemetry.cs

Public changes wake it; everything else is quiet.
06 · Timeline safety

Saves, reloads and slow thoughts

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
The Concord crew log showing receipt-based progress for three hauling agreements and the core asking Alvin why his second haul stopped.
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

Colonist minds

Self-perspectivestraits, skills, needs, memories, relations
Event awarenessper-pawn routing, coalescing, interruptions
Reflection pacingthinking spread across the window
Private outlookup to four revisable, sourced notes
Social exchangemessages work and persist; pawn-to-pawn proposals don't exist yet

Colony work

Movementnearby grounded destinations
Haulingexact stacks, up to three trips
Rescueone casualty to one medical bed
Campfire & cookingworks in scripted tests; not yet reached in a live run

Core & beyond

Live core v1event-driven, budgeted, asks and follows up
Shared status bandscoarse Food/Rest for core, peers and board
Multi-step plansneed → build → cook, live, with refusals possible
Cheaper modelsLuna passes offline contract checks; not a game backend yet
Real-time playcontinuous trials exist; sustained useful live-core planning remains unproven

Known gaps, stated plainly

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.