A RESEARCH ARGUMENT · MAY 2026 · LIVING DOCUMENT

You are not the author of your own story.

Psyche is a simulation built to make that fact visible. It grows people from neurochemistry, lets them live whole lives, and then rewinds them — frame by frame — to show every choice they ever made was already inevitable.

ThesisFree will does not exist.
MethodDeterministic replay.
SubstrateBrain · Heart · Gut
RuntimeBrowser-local, no server
↓ begin
01 · You

Before we look at simulated people, look at yourself.

You did not choose the gut bacteria you inherited from your mother. You did not choose the cortisol bath your fetus brain marinated in for nine months. You did not choose your first traumatic memory, or the way your father responded the day you broke the dish, or the serotonin set-point those events left you with.

By the time you were old enough to call anything a choice, the machinery that does the choosing — your perceptual filters, your need set-points, your social embedding, the policy weights that bias every decision toward what worked yesterday — was already running, configured by a thousand things you had no say in. Every preference you have today is an attractor in a state space that was set decades before you arrived in it.

The discomfort of reading that paragraph is itself a deterministic response to a deterministic stimulus. Whether you defend the idea of free will or dismiss it depends on the same machinery — temperament, prior beliefs, current mood, who you spoke to last — that produces every other thought you have. The argument and the resistance to the argument are both outputs of the same substrate.

Most people cannot hold this in mind. The problem isn't intellectual; it's perceptual. To see the absence of free will, you would have to hold someone's entire history in your head at once — every meal, every wound, every overheard sentence, every microbiome shift — and watch the cascade roll forward. Nobody can do that for a real person. Nobody can do that for themselves. So the illusion of authorship survives because the machinery that would refute it is too vast to perceive.

Psyche is built to make that machinery small enough to see.

02 · Manifesto

Personality is not a category. It is weather over an organ system.

Psyche is built on a single bet: that everything we call a self — temperament, attachment, trauma, conviction, a marriage, a slow descent — is an attractor in a small set of universal rules. There are no special cases for "anxious" or "stubborn" or "in love." There are only states, and the operators that move them.

Most simulations of people start with a category and decorate it. This person is an introvert. This one is a believer. The category does the work; the rest is presentation. Psyche refuses that shortcut. The substrate is psychology-as-physics: a handful of typed arrays, a handful of operators, a tick that runs them in order. Anything we recognise — a quiet child, a brittle marriage, a confirmation bias — has to fall out of the dynamics, or it does not exist.

TENET 01

No free will.

Every behaviour is causally traceable through state arrays. A fixed seed produces an identical history, tick for tick, mood for mood. The point of the simulation is to make this visible.

TENET 02

Substrate purity.

Each domain is a small operator, a state array, an event kind, and (optionally) a vocabulary file. There is no if married then… branch anywhere in the codebase, and never will be.

TENET 03

Content is configuration.

Substances, locations, weather states, life-event templates — all live as JSON. Adding a new substance, a new occupation, a new climate is a data change, not a code change.

TENET 04

Higher-order phenomena emerge.

Big Five, attachment style, catastrophizing, learned helplessness, social class — none are stored. They are projections, computed on demand from the substrate. Categories live in the eye of the observer.

TENET 05

Modules fit one mind.

Each module — gut chemistry, housing tier, mate selection — is small enough to read and reason about in a single sitting. The architecture is the diagram of how the modules wire together; nothing is hidden in a god-file.

TENET 06

The reader is invited in.

Every claim Psyche makes about a simulated life applies, structurally, to yours. The agents and the visitor are the same kind of object. There is no glass between you.

"There is a kind of person who insists they are not a kind of person. Psyche generates those people."

03 · The Substrate

Every agent is a row index across two dozen typed arrays.

There is no object-per-agent. An "agent" is the integer i. Their fear is at psych.affect[i*3+1]; their gut diversity at bio.gut_diversity[i]; the cumulative valence of their relationship with agent j at social.H.get(i*N+j). This is not an aesthetic choice. Flat arrays mean cache-friendly iteration over five hundred lives at sixty hertz; they mean a deterministic snapshot that can be hashed in a microsecond; they mean adding a new domain is one entry in a registry, not a refactor.

The state registry

Every typed array is declared once, in a single SCHEMA object, grouped by namespace. The state allocator, the snapshotter, the determinism hash, and the IndexedDB serialiser all walk this registry. To add brain–heart–gut chemistry was to add a bio namespace with twenty-eight entries. Twenty-eight stride-1 Float32Array views; zero changes to the tick orchestrator.

psychaffect[i,d]N × 3Affect as VAD: valence, arousal, dominance.
psychB[i,r,c]N × 12 × 12Per-agent perceptual filter. ê = tanh(B·e).
psychscars[i,e]N × 12Trauma signature vector. Permanently bends B.
psychπ[i,a,f]N × 12 × 17Action policy weights. Habit, formed by gradient.
socialψ[i,d]N × 6Social embedding. Cosine similarity = baseline affinity.
socialHsparse MapPairwise interaction history. Cumulative valence per relationship.
biogut_diversity[i]NMicrobiome richness. Modulates serotonin synthesis.
bioneuro_serotonin[i]N5-HT level. Sets decision temperature, valence baseline.
bioneuro_hpa_cortisol[i]NStress hormone. Sensitises threat perception.
bioheart_hrv[i]NHeart-rate variability. Vagal tone proxy.
worldcurrent_activity[i]NGeographic state: home / work / public.
econecon_wealth[i]NLiquid wealth. Below threshold → poverty drag on needs.
demodemo_age[i]NContinuous, in years. Drives fertility, aging.
bondbond_partner_id[i]N (Int16)Pair-bond partner, or −1 for none.
reprorepro_pregnancy[i]NTrimester index. Maternal cortisol transfers prenatally.
memesmeme[m]M × 8Ideological vectors. Spread along the social graph.

NOTE. Sixteen of about sixty entries shown. The full schema includes genetics, developmental biography, weather, location graph, and the determinism RNG state itself — every byte that defines a moment is in here, and only here.

04 · The Twelve-Dimensional World

Every event the world produces is a twelve-dimensional vector.

Whether it is a thunderstorm, a job loss, a kind word from a stranger, or the sudden absence of one's mother — the world only ever speaks in this vocabulary. This is Klaus Scherer's Component Process Model, expressed as a tensor. Each agent's B-matrix warps the vector before it ever touches affect: ê = tanh(B·e). The catastrophiser's B has a heavy diagonal on threat; the trusting child's is gentle there. Same world, different perception. Hover any axis to see it fire.

From event to feeling

The appraisal operator collapses the perceived twelve-vector into a change in valence and arousal, weighted by self-relevance:

// operators/appraisal.ts — the entire signature of feeling
selfRel  = (ê[SELF_REL] + 1) / 2
weight   = selfRel * 0.8 + 0.2     // always at least 0.2; even strangers register

Δvalence = (ê[VALENCE] * 0.45
          + ê[GAIN_LOSS] * 0.25
          + ê[ACHIEVEMENT] * 0.15
          + ê[FAIRNESS] * 0.10
          - ê[THREAT] * 0.20) * weight

Δarousal = (|ê[VALENCE]| * 0.20
          + ê[AROUSAL] * 0.35
          + ê[THREAT] * 0.45
          + ê[NOVELTY] * 0.15) * weight

a[i] += [Δvalence, Δarousal, 0]                  // dominance is updated elsewhere
a[i] += γ * (a_base[i] - a[i])             // γ = 0.08; resilience is mean-reversion speed

This is the entire bridge between world and feeling. Once the brain–heart–gut axis arrives in Phase 1, every coefficient and every a_base is itself a function of neurochemistry. Serotonin shifts the valence baseline. Cortisol sensitises the threat term. The gut microbiome, three organs away, is silently moving the constant.

05 · The Centerpiece

Three organs, one nervous system, no metaphor.

Most simulated minds run in the head. Psyche's run between three organs that don't always agree. The gut produces serotonin under good microbial conditions and inflames under chronic cortisol. The heart's variability is a vagal-tone proxy that feeds back into norepinephrine. The brain integrates both, sets a mood baseline, and decides — under temperature governed by the chemistry it inherited that morning.

Each tick, before any decision is made, a cascade runs in fixed order: substancesgutheartbrain. Each operator reads only the previous tick's outputs of the others, which resolves the inherent circularity (gut affects brain affects heart affects gut) into a clean Euler step. Click an organ to see what it carries and how it talks to the rest.

brain HPA · BDNF · DA · 5-HT heart HRV · HR · vagal tone gut microbiome · inflammation · 5-HT ↻ HPA

The cascade in one tick

The biological day starts before any thought. By the time the agent perceives an event, their decision-making temperature has already been set by chemistry that depends, distantly, on what they ate three weeks ago.

// BIO_MORNING phase — strict order, one Euler step per tick

substances      caffeine, alcohol, processed diet → bio deltas
gut             cortisol↑ → inflammation↑ → diversity↓ → 5-HT production↓
heart           HRV recovery; current HR; interoceptive feedback → norepinephrine
brain_axis      HPA: CRH → cortisol → BDNF↓; tonic DA, GABA, glutamate balance
                valence baseline a_base[i] is now today's number

// → APPRAISAL inherits these. DECISION temperature is now
//   T = f(5-HT, DA, GABA, arousal). The agent's mood today
//   depends on a microbe count from a meal three weeks ago.
06 · The Tick

One day in the life of an agent is thirteen phases long.

The orchestrator is fifteen lines. Operators register themselves; the tick walks them in canonical order. Adding a new domain is never an edit to tick.ts — it is a registration. Press play, or scrub to watch a single agent-day pass through perception, appraisal, decision, and the silent biological work that bookends it.

0
1
2
3
4
5
6
7
8
9
10
11
12
tick 0042 · agent #07 · 06:00
PHASE 00 · WORLD
Time, weather, season

The world advances first. The day-of-week rolls over, the Markov weather chain steps, the season shifts the cortisol baseline of every agent. Storms inject CRH. Winter accumulates sleep debt. Nothing personal yet.

07 · Mara's Two Lives

This is what the absence of free will looks like when you can see it.

Mara is born in tick 0. Her mother carried her through a stressful pregnancy; her gut microbiome at birth was assembled from a small handful of species. By tick 12 she is a small child, and we pick a single, morally neutral fact about her body and nudge it. Then we let both versions of her life run forward, eighty days at a time, and watch what happens to a person who could not have known.

Both timelines run from the identical seed and the identical eight-thousand-element state vector. The simulation is deterministic. Until the moment of the perturbation they are bit-for-bit the same person. After it, they share nothing but a name.

TIMELINE A · AS IT HAPPENED
Mara, the canonical life.
seed: 42 · agent: Mara · age 0 → 80 days
TIMELINE B · THE LIFE SHE NEVER LIVED
Mara, with one quiet thing different.
seed: 42 · agent: Mara · age 0 → 80 days
at age 12 days, suppose Mara's
day 00 · Mara A
day 00 · Mara B
↻ deterministic replay · divergence: 0.000 Same seed. Same world. Same Mara — until day 12.

The marriage that happens in A may never form in B. The depressive episode in B may never arrive in A. Mara's last words, if you let it run long enough, will not be the same words. Nothing she ever does in either life was up to her. The only difference between the two women is a single number, set once, in childhood, by something that was not her choosing — and from that number, every other moment of her life is deduced.

The unsettling part is not that the simulation is deterministic. The unsettling part is that you are the same kind of object. The microbiome at your birth, the cortisol in your mother's blood, the parent who held you on the third day — none of it was yours to set, and from those settings everything else proceeds. There is no later moment where the rules change and the chooser appears. The chooser is the rules.

08 · Emergence

None of these are stored. All of them appear.

The substrate has no concept of "the Big Five," no flag for "anxious attachment," no field marked has_PTSD. The categories familiar to clinical and personality psychology are projections — pure functions over the typed arrays — not data. They appear when the dynamics produce them, and only then.

Big Five personality
projection of p[i] + B[i] + action histogram onto a five-axis basis.
Attachment style
k-means cluster over proximity-seeking after separation, affect recovery curve, ψ-stability. Secure, anxious, avoidant, fearful — labels assigned post hoc.
Confirmation bias
dominant eigenvector of B[i] aligned with prior affect, hardened by plasticity reinforcement. The agent perceives more of what they already feel.
Catastrophizing
high diagonal gain on the THREAT dimension of B. Same world, magnified danger.
Learned helplessness
downward drift of need set-points after repeated frustration. The bar for okay falls until even getting it back wouldn't help.
PTSD-like response
scar vector + B perturbation + flashback re-injection when cosine(current event, scar) > 0.55. The body remembers.
Personality disorders
extreme attractor configurations in the joint space of B, set-points, and π. Diagnosis is clustering in parameter space.
Poverty trap
low wealth → accelerated physiological need decay → worse decisions → lower income. A continuous attractor with no is_poor flag.
Executive burnout
high job tier → chronic CRH injection → cortisol elevation → gut damage → serotonin depletion → depressive risk despite wealth.
Cultural epochs
meme prevalence S-curves under contagion + mutation. Generations form, harden, fade — never written, only run.
Hypergamy
asymmetric biological cost of reproduction in mate-utility math. Females weight resource-provisioning higher because pregnancy is metabolically expensive. No rule encodes the preference; the cost encodes it.
Wealth-health gap
housing tier → sleep quality → cortisol → gut → mood. Inequality crosses domain boundaries by itself.
09 · Modularity

A new domain is four files.

The architecture is engineered to absorb whole new dimensions of human experience without rewriting anything. When Phase 1 added the brain–heart–gut axis, the orchestrator was untouched. When Phase 3 added the entire economy, the orchestrator was untouched. When Phase 4 added mating, marriage, infidelity, divorce, pregnancy, and birth, the orchestrator was — once again — untouched. This is the discipline:

// Adding a domain — the canonical recipe.

1. SCHEMA entry:        register typed arrays under a new namespace
2. operator:           a pure (state, ctx) → void function, declares
                       reads / writes / emits / consumes
3. EventKind:          one or more new event names for the bus
4. vocab/:             optional JSON template for biography prose

// That is it. The tick orchestrator does not know your domain exists.
// The validator catches undeclared reads/writes in dev. The hash
// covers your new arrays automatically. The biography sink picks up
// your narratable events. Your domain composes with every other one
// for free, in the deterministic order you registered.

The same recipe took Phase 1 from a sketch to a working brain–heart–gut axis in four sessions. Phase 5 added genetics, virtual ancestry, and prenatal programming with the same four steps repeated. The remaining phases — aging and death, healthcare, education, governance — are sketches today. They will be operators tomorrow.

Cards as state deltas

The substrate's most strict rule is that nothing bypasses it. Player interventions — perturbations applied to one or many agents — are not special objects with custom downstream logic. They are state deltas, written once, the same way an operator writes them. The next tick's normal pipeline does all the work. There is no if (intervention.type === ...) anywhere. There never will be. This is what makes the simulation comprehensible: the rules of physics are unchanged regardless of what gets dropped into the world.

10 · The Door Closes

You have read this far because you were always going to.

The mood you are in right now — curious, defensive, quiet, irritated, vindicated, sad — is the output of a body chemistry you did not pick, reading a page you happened upon, in a life that has been narrowing toward this exact second since long before you were born. There is no version of you who could have closed the tab three paragraphs ago. The version of you that read on, did. That is the only version there is.

Psyche does not prove free will is an illusion. The argument for that is older and better made elsewhere. What Psyche does is make the case visible. It puts the entire causal chain of a life into a state vector small enough to hash, and lets you scrub backwards through it until you find the gut microbe, the storm, the overheard sentence, that became — three decades later — a marriage or its absence, a remission or a relapse, a death by old age or a death by despair. None of those endings were chosen. They were computed.

If you sat with that for a moment and felt something move — a small dread, a small relief, a small rearrangement of who you thought you were — then the simulation has done its work without ever simulating you. You did the work. Your machinery did. It was always going to.

"The chooser is the rules. There is no later moment where the rules change and the chooser appears."Psyche · the only line of philosophy here

11 · Construction Notes

Nine phases. A whole life.

Each phase enters its own plan-then-execute cycle. Phase 0 was the foundation refactor — the registry, the bus, the persistence, the determinism harness. Phase 5 closed in May 2026 with deterministic origins: every agent now arrives in the world with a thirty-two-locus genome, prenatal cortisol exposure, and a compressed developmental biography. The four remaining phases extend the arc to its logical end: senescence, healthcare, culture, and the polish required to run five hundred lives at once.

0 complete Foundation refactor

State registry, operator registry, event bus, projections, design tokens, IndexedDB persistence with three stores, tiered history (hot · warm · cold), end-turn pacing, start menu, agent list, biography view, journal split, worker dispatch split, determinism harness. Eleven ADRs. Two months of refactoring before any new domain was added.

1 complete Brain–heart–gut axis

Twenty-eight bio fields. Substances as JSON. Gut–serotonin pathway, HPA cascade, HRV dynamics, sleep recovery. Appraisal and decision rewired to be neurochemically grounded. Bio tab in the agent inspector with live readouts. The depressive attractor (high cortisol → gut damage → 5-HT depletion → negative valence baseline) emerges within thirty ticks of a stressed population.

2 complete Spatial world & weather

Location graph (homes, workplaces, public spaces). Day-of-week scheduling. Markov weather chain biased by season. Storm cortisol spikes. Winter sleep debt. Layout anchored to current activity — agents physically migrate from home to work to public space across the week, visibly clustering by where their day asks them to be.

3 complete Economy

Wages, jobs, skills, housing tiers, wealth as continuous attractor. Three feedback loops cross-domain: poverty drag on physiological needs, housing quality on sleep quality, executive job stress on the HPA axis. Wealth produces health and produces stress, depending on which tier and through which pathway.

4 complete Mating & kinship

Pair-bonding from ψ-similarity in the social graph. Marriage and divorce as thresholded transitions. Infidelity as an opportunistic deviation modulated by bond strength. Pregnancy across three trimesters with maternal cortisol and serotonin transfer to the fetus. Birth, parenting, kinship as a graph that gets queried, never stored.

5 complete Deterministic origins

Thirty-two gene loci per agent, blended from two parents with mutation and recombination. Prenatal programming: maternal cortisol during pregnancy permanently shifts HPA set-points. Compressed childhood and adolescence collapsed into a developmental biography that runs once at birth and seeds B-matrix, ψ, and personality embedding. By age eighteen, every agent has a story behind them.

6 in plan Aging, lifespan & death

Continuous senescence across all bio arrays. Lifespan-stage projections (childhood, young adult, mid-life, late life). Death from accumulated cause: cardiovascular failure, complications of dysbiosis, accident, suicide following sustained low-valence attractor, peaceful old age. Grief as a narratable event that propagates through the kinship graph. Inheritance — wealth, housing, sometimes the depressive attractor — to surviving children.

7 pending Healthcare & mental health

Persistent medication state (SSRIs as multi-week buildup), therapy as repeated B-matrix soft regularisation, healthcare access modulated by economy. The first phase where intervention can change a trajectory durably; the first place where an agent can be helped on purpose.

8 pending Education, culture & governance

Schools as compressed B-matrix and π-policy initialisation regimes. Culture as the long-running meme equilibrium. Governance as collective action thresholds over the social graph. The level at which a population becomes a society.

9 pending Polish & scale

N=500 stress targets. Sparse H in CSR. WebGL rendering. AssemblyScript hot loops if needed. Named saves, biography exports, replay sharing, full parameter tuning surface. The instrument finished.

STATUS · MAY 2026. Phases 0 through 5 are running, deterministic, and saved. Tests pass on every commit. The codebase is roughly six thousand lines, every line in the worker pure, every line cache-aware. Phase 6 is in planning.

12 · Glossary

The vocabulary, briefly.

The substrate has its own words. They are precise; the rest of the document leans on them. Hover any dotted term anywhere on this page to see its definition without leaving your place.

Affect

The emotional state, modelled as VAD: valence, arousal, dominance. Distinct from mood (longer baseline) and emotion (a labeled cluster, produced by projection).

Affinity

Pairwise relationship strength: 0.4 · cos(ψᵢ, ψⱼ) + 0.6 · history valence. Drives layout, contagion, edge rendering. Computed on demand.

Appraisal

The operator that converts a perceived event into an affect change. Phase 1+ grounds it in neurochemistry.

Attachment

Relational pattern emerging from early-childhood parenting and ongoing relationship history. Classified post hoc by clustering. Never stored as a type.

B matrix

Per-agent perceptual filter, twelve by twelve. Eigenstructure classifies cognitive distortions: catastrophizing, mind-reading, confirmation bias.

Biography

An agent's complete life history as an append-only event log. Cold-stored in IndexedDB. Rendered as prose lazily by the vocabulary system.

Determinism

Fixed seed produces an identical history. All randomness routes through state.rng. Verified on every commit.

Event Bus

Phased per-tick queue of LifeEvent structs. Operators emit; later phases consume. The narratable flag double-duties as the biography sink.

HPA axis

Hypothalamus-pituitary-adrenal stress cascade. CRH → cortisol with negative feedback. Chronic stress damages feedback sensitivity → dysregulation.

LifeEvent

Atomic unit of biography. Carries kind, agent, tick, salience, optional involved agents and state delta. Prose is rendered lazily.

Operator

A registered tick step with declared reads/writes/emits/consumes. Pure function. Adding a domain is adding operators.

Projection

Pure read-only function from state to labels or aggregates. Big Five, attachment cluster, social graph edges. ESLint-enforced no-write barrier.

Salience

An event's impact magnitude, 0 to 1. |Δaffect| · (1 + β · novelty). Drives memory consolidation, biography filtering, trauma scarring.

Scars

Per-agent twelve-dim trauma signature. Accumulates from high-salience negative events. Permanently bends the B matrix.

Substrate

The minimal universal rule set — state arrays, operators, event bus — from which all higher-order phenomena emerge. Content is configuration.

ψ (psi)

Per-agent six-dim social embedding. Cosine similarity approximates the affinity at zero history. Updated by Hebbian rule.

π (pi)

Per-agent action policy weights. Action selection is softmax over π · features. Updated by policy gradient.

Vocabulary

JSON-table-driven prose generator. Maps event kinds plus state to readable text. Currently minimal; designed to be replaced by a local model.

By
Jake Courtney
Built with
TypeScript · Vite · Web Workers · IndexedDB · Canvas 2D
Powered by
a probably-undiagnosed case of AuDHD and the inability to leave a system half-specified
Living document
May 2026 · Phase 5 of 9