Artificial Person Pipeline · Asher Pfeifer

Artificial Person Pipeline

How one simulated person moves from a world event to an action and a thought, every body tick, and how a run of that person becomes an experiment. Drawn from CLAUDE.md §5 to §7 and the Stage 2 code as of 3 November 2026.

Figure 1. One body tick: six layers, twelve channels

WORLD DIRECTOR scenario script, identical across runs world engine: consequences, rooms, objects, characters narrator: wording written offline, cached by id knows the whole timeline; she knows only expectations A Perception access rules location · channels B Attention read + capacity cap stress threat boost C Fast appraisal read → recalibrate → Prelec · κ·stress · dread AWARENESS GATE p = sal × avail THOUGHT STREAM LLM, first-person continuation no role framing sees only what passed the gate prompt builder, the only door identity · sensations in words intentions · focal memories inbox · episode stem episode → text, focus, absorption, intentions, belief proposals, speech, halts tempo coasting · normal · elevated · acute; rises fast, falls slowly reflection when accumulated importance crosses a threshold checks on every episode meta-awareness monitor knowledge boundary belief stance vs no-news base Qwen3.5-4B-Base, NF4, same weights as the decision reads BODY arousal · fear · anger · stress fatigue · hunger · mood · pain · DA closed-form decay toward baseline allostatic load L, capacity C breaking point: L + s > C → override G Interrupt monitor code thresholds on urgency · novelty · pain D Memory priming ACT-R activation + embeddings → focal set, shrinks w/ stress E Habit & action cue habits · intentions → actions valuation V · softmax selection F Social-automatic imitation · conformity contagion · trust PERSISTENT MIND SQLite per run, Parquet per tick 12: every layer writes here; models remember nothing between calls persons · memories · beliefs (log-odds) · relationships · habits · modes · intentions · expectations · state_history · events · episodes · actions · model_calls GATEWAY every model call from a dashed or tinted box passes here: live · replay (cache miss is fatal) · mock · baseline cache key sha256(request · model · adapter · template version · decoding · seed); each call logged with permutation, seed, latency 1 events 2 percepts 3 attended 5 salience inbox absorption 4 urgency · valence sensation words sit in every read prefix (§3.2) sensations as words 11 thought → body rumination ↑ stress 6 interrupt, bypasses the gate 7 focal memories, K_eff ≈ 4, shrinks under stress memories · habits 8·9 intentions (priority, decay) → actions; body can veto 63 of 1,539 started actions came from intentions in freeze-5 (§3.4) 10 actions, speech (two-phase apply) actions · learning episodes · beliefs
code only decision read, then code LLM generation finding from the 3 Nov review

Numbers are the channels of CLAUDE.md §6. The body acts before thought engages: a tick runs the whole upward chain and the action step before the gate fills the thought inbox, so thought learns what the body did as a fact about itself. Actions just taken also enter the gate, at low salience when habitual. Interrupts and primed memories reach thought without passing the gate. Thought never picks fine-grained actions; it sends intentions, and habit and action code converts them.

The two marked findings: stress reaches the appraisal read both as sensation words in the prompt prefix and as κ·stress in code, which is the rule 7 double count the world session now plans to measure by replay; and intentions account for about four percent of started actions, so thought barely steers behaviour yet.

Figure 2. From seed to experiment

INPUTS seed, per SEED_SCHEMA.md scenario script + narration config: default · traits · dials one root seed per run placeholder Maria, 20 seeds RUN sim/person.py mock 00:00 to 08:10 (D51) live 08:10 to 21:00 batched decode across runs world v2 rooms and characters about 24 h GPU for 20 seeds LOGS SQLite per run Parquet per tick model_calls, full input/output provenance: commit, config hash, lockfile, template versions REPLAY model outputs served from log cache miss is fatal no GPU; bit-identical code-side params can be swept with model outputs frozen ANALYSIS distributions over seeds, never single runs; criteria tiers A/B/C Morris screen → Sobol on dials ablations: system 2 off, habits off… steering Phase 0: 200 blind labels change one automatic parameter, rerun the identical event hundreds of times, common random numbers across conditions

The research question is how automatic, pre-conscious processes shape what a person does and thinks. The automatic layer is the manipulation, so the loop changes one code-side parameter at a time while the scenario, the narration wording and the random streams stay fixed. Body-only runs skip the LLM and can run thousands of times. Replay lets code-side sweeps reuse logged model outputs.

Order inside one body tick (§7.1)

  1. World update: advance scripted events, deliver messages through access rules
  2. Body relaxation: closed-form decay for the elapsed time
  3. Perception
  4. Attention: decision read plus capacity cap
  5. Fast appraisal: read, recalibrate, distort; update body
  6. Breaking-point check: enter override if load plus stress exceeds capacity
  7. Memory priming
  8. Habit and action: cue habits, intentions, social pull, softmax
  9. Apply actions to a frozen world snapshot, canonical order
  10. Interrupt check
  11. Awareness gate fills the thought inbox
  12. Learning and decay: prediction errors, habit accessibility, memory strength, intentions

Order inside one thought episode (§7.2)

  1. Trigger: interrupt, span expired, or context change; span set by tempo
  2. Build the prompt through the prompt builder only, under a token budget
  3. Generate a structured episode with the LLM, scaffold by scaffold
  4. Apply in code: store the episode as memory, send intentions down, set absorption, apply body effects, update beliefs in log-odds, apply halts
  5. Reflect when accumulated importance crosses a threshold: revise self-concept, possibly write a new decision mode

Tempo sets the episode span: one compressed episode for a routine stretch, a step every 30 to 60 simulated seconds when stakes and surprise are both high. The world clock follows it.