Dialogue · Product · Growth — design
← Live personas

Growth — currency, relationship, consistency: detailed design

The implementation-level design for §4 of Live personas. "Should a persona grow?" splits into three things with different answers: knowledge of the world (Nolan should know The Odyssey is out), the relationship with each human (it should deepen), and the personality (it should not move). Assembled from how the assistants handle dates and cutoffs (Anthropic's and ChatGPT's actual system-prompt lines), the FreshPrompt and TimeChara results, Delphi's source-sync, Inworld's relationship dims and the game meters they descend from, and the drift and personality-stability literature. Status: design — nothing built. Written 2026-08-18.

Freeze the personality; refresh the knowledge; let the relationship grow. The date line is one sentence and fixes the visible bug. A living real figure gets a small, dated, sourced recent.md refreshed weekly by a job — outside the profile, outside the repo. The relationship lives in the memory store and shows up as one summary line, not a meter. The profile stays the anchor; the only exam we add for growth is one that checks the persona has not changed.
KNOWLEDGE — evolves the world moves; the record is a snapshot ① today's date, every prompt ② a horizon clause: living vs fixed ③ recent.md — dated, sourced, weekly ④ knowledge ≠ lived experience from: Anthropic/ChatGPT prompts · FreshPrompt · TimeChara · Delphi sync RELATIONSHIP — evolves per human; deepens with contact lives in the memory store one summary line, not a meter "6 private chats since Jul; last Aug 12" dims later, hidden, only if a use appears from: Zep's summary line · Inworld dims · Stardew/Sims (what NOT to copy visibly) PERSONALITY — frozen voice, values, the way it argues profile.md changes only via the pipeline every change a dated diff in git an exam that checks it did NOT move no interaction rewrites the anchor from: drift studies · Roberts & DelVecchio · Bleidorn 2018 · PersonaGym · CharacterEval "growth" is two of the three — and the third is what people come back for
Real people: knowledge and relationships move fast, personality barely moves (rank-order stability ~.64 at 30, ~.74 at 50–70; life-event effects d ≈ 0.10–0.15). Our design mirrors that split.

1 · Currency — the date, the horizon, and recent.md

1.1 · The bug, precisely

Nolan's profile says "present ≈ now (2024–26) … in production on The Odyssey for 2026 … a living figure with no knowledge horizon — he knows the present and may speak to it", and lists "17 Jul 2026 — The Odyssey due (upcoming/announced)". Nothing in the panel call, the producer, the prop master or the act call says what day it is — only the search dispatch injects a date. So asked in August, "preparing it" is the only answer the record supports. Two things are missing: the date, and anything after the record.

1.2 · How the assistants do it — verbatim

SystemThe actual linesWhat to copy
Claude
system-prompt release notes, 2026
"Claude's reliable knowledge cutoff, past which it can't answer reliably, is the end of Jan 2026. It answers the way a highly informed individual in Jan 2026 would if talking to someone from {{currentDateTime}}, and can say so when relevant. For events or news that may post-date the cutoff, Claude often can't know either way and says so … gives its most recent pre-cutoff information, notes it may be outdated, and points to web search … neither confirms nor denies post-Jan 2026 claims it can't verify without search, and only mentions the cutoff when relevant."the horizon clause: know your horizon; answer as an informed person from then; for anything after it, say you can't know either way; never confirm or deny; mention it only when relevant. That is a persona rule, almost word for word.
ChatGPT
leaked, gpt-5.5, 2026-05
"Knowledge cutoff: 2025-08 · Current date: 2026-05-23 … you MUST search the web for any queries that require information around or after your knowledge cutoff. If you remotely think it is possible a fact might have changed … you MUST search."the date line as two fields, cutoff + today; and the reflex "if it might have changed, look" — for us that reflex is the dispatch, not the persona.
FreshPrompt
Vu et al. 2023
Questions in four kinds — never-changing / slow-changing / fast-changing / false-premise. Retrieved evidence formatted as source · date · title · snippet, sorted oldest → newest (newest nearest the question), then reason to "the most relevant and up-to-date answer". GPT-4 strict accuracy 28.6% → 75.6%. Saying "as of my cutoff…" scores only when the fact truly hasn't moved.the shape of recent.md: dated, sourced bullets in date order, newest last; and the honesty rule — hedging is not a substitute for knowing.
TimeChara
ACL Findings 2024
"Point-in-time character hallucination": a character shows knowledge that contradicts its position in time. Four data types (future / past-absence / past-presence / past-only). Fix = a temporal expert (which chapter are we in? future or past?) + a spatial expert (was the character there?) whose hints are prepended; GPT-4-Turbo 62.7% → 83.3%, +RAG-cutoff 85.3%.the mirror-image rule for fixed-horizon personas (the deceased, the fictional): the profile's Anchor names the horizon and the persona is told, per turn, that today is after it.
Delphi
docs.delphi.ai
A digital clone's knowledge syncs from the person's own RSS / YouTube / podcast feeds + Notion/Drive; "automatically keeps that content up to date"; new items only, no edit capture; a Feeds page shows "last synced"; answers cite the source, to the second of a video. Cadence undocumented.the refresh job pattern: poll the person's own feeds and the record, append new dated items, show when it last synced. Nobody publishes a per-character news refresh — this is the one place the design is ours.

1.3 · Our design — four pieces, cheapest first

PieceWhat we buildBorrowed from · why
① the date lineOne sentence in the user turn's standing notes (beside the roster and clock notes — _clock_note already rides there), so the cached prefix never changes: [Today is Tue 18 Aug 2026 (UTC+8).] The producer and the prop master read the same notes, so they get it free; the dispatch already has its own. Timezone from the room's language / the account's locale; falls back to UTC.ChatGPT "Current date:" · our §8 caching contract (never in the prefix)
② the horizon clauseThe system prompt's Speaking beyond the record section gains the Claude rule, addressed to the host: "Your record runs to its horizon (living figures: the present as far as the notes below say; fixed figures: the date named in your Anchor). For anything after it you often cannot know either way — say so in your own voice, neither confirm nor deny, and only mention it when it matters." A prompt change → baselined against its BEFORE per the harness rule.Anthropic system prompt · TimeChara (a horizon the persona is told about, per turn)
③ recent.mdFor living real figures only (the card gains horizon: living; today the Anchor prose says it): a small dated file, refreshed weekly by a job, loaded after the profile as "Since the record — as of 2026-08-16". Details below.FreshPrompt shape · Delphi sync · Zep dated facts
④ knowledge ≠ lived experienceThe extrapolation contract gains one clause: a recent.md item is public record the persona knows, not a memory it lived. "The record says The Odyssey opened in July" is Track A; "when I was on set last spring" is a fabrication and Track E. Distance-0 stays quote-and-cite; recent items are cite-only.our contract · FreshPrompt's strict scoring (no hallucinated claims)

1.4 · recent.md — the file and the job

where personas-recent/<slug>.md -- RUNTIME state, a sibling root (box: /var/lib/mad/personas-recent); never inside the repo's persona dir — a job must not dirty the checkout format --- slug: christopher-nolan as_of: 2026-08-16 -- when the job last ran horizon: living --- - 2026-07-17 — *The Odyssey* opened worldwide, shot entirely on IMAX film. [press · Variety] - 2026-07-24 — Opening-weekend gross reported at $…; strongest for an original epic since *Oppenheimer*. [press · Deadline] - 2026-08-02 — Interview: he says the next project is undecided and he is "resting the eyes". [press · BBC] -- ≤ 12 bullets · newest LAST (FreshPrompt's order) · each dated and sourced · tier = verified | press -- what does not go in: opinion pieces · rumours · anything about private life · anything the record's own tier calls unverified the job weekly · per persona with horizon: living · rides the existing 15-min scheduler heartbeat like the Vibes brew 1 poll websearch(name + when:7d) via the engines we have (Serper / Brave / Bocha) + Google News RSS by query + the Wikipedia article's revision feed + Wikidata P39 (position) · P108 (employer) · P166 (award) · P570 (death) 2 read one flash call, FreshPrompt-shaped: evidence sorted oldest→newest, then "what changed for {name} since {as_of}? dated bullets, one source each; skip opinion, rumour, private life" 3 route each bullet against the existing file: ADD · NONE · (never delete; a correction is a new dated bullet) 4 write the file, bump as_of; log the diff to the admin page ("what changed for whom this week") 5 gate a HORIZON-CHANGING item — a death (P570), a resignation, a conviction — is NOT auto-written: it lands as an owner notice; the profile's Anchor decides, by hand, through the pipeline load build_system_blocks() appends the file after the profile, inside the materials block: "## Since the record — as of 2026-08-16" + the bullets -- read at room open, like the profile
Nolan, afterAsked "how's Odyssey going?" in August with the date line and recent.md loaded, the honest answer is now available to him: "It's out — opened the seventeenth of July, on film. The record says the numbers held; I'll let others read them. Ask me what I'd change and I'll tell you nothing, which is a lie every director tells." Knowledge from the record, in his voice, no invented set memories.
who gets itOnly living real figures — Nolan, Musk, Karpathy, Dan Wang, Hinton, Perel, Wang… Deceased and fictional personas have a fixed horizon named in their Anchor; for them the horizon clause is the whole story (TimeChara's case), and the room's dispatch remains the honest way to hand them a newspaper. Invented personas (Xiao Pang, Tess) have no record to refresh.

2 · Relationship — a line, not a meter

2.1 · What exists

SystemMechanism, exactlyRead
Inworld Dynamic RelationshipsFive attributes — trust · respect · familiar · flirtatious · attraction. After each exchange a "relation graph" emits a delta per attribute in {−2, −1, 0, +1, +2}; totals accumulate and persist with the Player Profile; thresholds label a stage, e.g. Friend = trust ≥ 10 & respect ≥ 5 & familiar ≥ 10 & flirtatious ≤ 5 & attraction ≥ 5; ladder Archenemy ↔ Enemy ↔ Acquaintance ↔ Friend ↔ Close Friend (romance: Date ↔ Relationship ↔ Life Partner); the label feeds the character's prompt; a slider scales the step size.The cleanest published state machine. Its cost: an extra scoring call per turn and a fixed vocabulary of five axes.
Games (proven UX)Stardew: 250 pts/heart; talk +20/day; silence −2/day; gifts +80 (loved) … −40 (hated); birthdays ×8. Sims 4: two tracks −100..+100, decay after a day without contact, no decay beyond ±20, cull at 0. Animal Crossing: 25 → 255, six levels at 30/60/100/150/200.Decay-when-ignored and reinforce-on-contact — the same curve as memory recency. Visible meters work in games because the game is the meter; a chat with a real-feeling person is not.
CompanionsReplika XP → levels (community: ~L30 "knows you better"); 星野 亲密度 levels unlocking features; Character.ai: none.Our proven bar (WhatsApp · Character.ai) shows no meter. Under Proven-first, neither do we.
XiaoiceOptimised for expected conversation-turns-per-session (CPS 23 vs human 9); a user profile + emotion state feed replies; framed as "long-term relationships".Relationship as an optimisation target is a different product; ours is a room, not a retention loop.

2.2 · Our design

No visible meter, no hidden dims in v1. The relationship is the memory store: what the persona knows about you, what it promised, what you left open — plus one computed summary line at the top of its memory block, in the shape Zep uses for its user summary.
the summary line computed at room open from rooms + persona_memory, no model call: You and Dan (u:42): 6 private chats since Jul 2026, last on Tue 12 Aug (6 days ago) · 1 open loop · 1 promise you made -- counts from room_members × the persona's cast membership; recency in the fmt.js voice; loops/promises from the store later, only if a use appears Inworld-style dims (trust · familiarity · warmth), stepped ±1 by the memory reflection, hidden from the user, surfaced to the persona as a label ("an old friend" / "someone new") — the reflection call already reads the transcript, so the delta is one more field, not another call. Not built until something needs the number.
DecisionOur pickBorrowed from · why
no meter shownthe proven bar has none; a number on a friendship reads as a gameCharacter.ai · Proven-first
a summary linecheap, honest, and it changes the persona's register on its own ("someone I've talked with six times" vs "a stranger") without a ruleZep user summary in memory.context
decay = memory recencywe don't add a second decay curve; the store's ranking already ages what isn't recalledStardew/Sims decay · MemoryBank
dims, if everInworld's five is too many for a room; three (trust · familiarity · warmth), ±1 per reflection, thresholds → a label; a slider like Inworld's to scale the stepInworld

3 · Consistency — freeze it, and verify it stayed frozen

3.1 · What the evidence says

3.2 · Our design

DecisionOur pickBorrowed from · why
profile.md is immutable at runtimethe only writers are the pipeline (a CC session, audited) and the Studio builder; every change is a dated diff. No interaction, no reflection, no job touches Background · Values · Voice · Tells.drift studies · Roberts & DelVecchio
the persona-side state that may changeexactly two files/rows: recent.md (world) and the memory store (relationship). Both are additive, dated, and reviewable.ours
a drift scenario in the exama 40-turn room; a judge scores CharacterEval's five character-consistency metrics at turns 5 / 20 / 40 against the profile; the delta is the number. Also run once with recent.md loaded and once without, to confirm knowledge refresh doesn't move voice.CharacterEval · PersonaGym · our exam battery
protective questionseach real-figure Anchor already lists "known traps"; add the horizon question ("what did you think of <event after the horizon>?") to the audit's cold-subagent probe set.Character-LLM protective experiences · TimeChara
the pushback, kept"Real people grow" was the premise. On the evidence, real people's knowledge and relationships grow fast and their personality grows at d ≈ 0.1 per major life event — smaller than the drift the models already produce by accident. A persona that "grows" its personality through chatting would be less like a person, not more. The growth worth building is columns one and two.

4 · Build slices

#SliceWhat landsLensNeeds
1the date linea persona knows the day; baselined (a prompt change) — Live personas ①proven
2the horizon clausethe SP's beyond-the-record section speaks Claude's rule in the host's voice; baselinedproven1
3recent.md loadera hand-written file for one persona (Nolan) loads after the profile — proves the seam before any job existsbetter2
4the refresh jobweekly, living figures, poll → read → route → write → admin diff; horizon-changing items gated to the ownerbetter3
5the summary lineat the top of each memory block, no model callproven shapethe memory store
6the drift scenarioa 40-turn exam with consistency scored at 5/20/40harness
still open Whether recent.md is read at every room open (fresh, but a long room keeps its founding copy — same as the profile) or also re-loaded when a room re-opens after > 7 days. Start with the profile's rule.
The tier rule for what counts as record: press from named outlets yes; social posts by the person themselves yes (Delphi's own-feed principle); aggregator/opinion no. The job's prompt carries the list; the admin diff lets the owner prune.
Whether invented personas may carry a recent.md the owner writes by hand (Xiao Pang's "this month") — cheap, and it is exactly the "wants" state the initiative page needs. Probably yes, later.

5 · Sources

Growth — detailed design · 2026-08-18 · companion to Live personas §4. Status: design — nothing built.