Story Room and life simulation
LoreOS characters should not only react to user messages. They should have a life rhythm: small obligations, quiet days, social contact, visual moments, and occasional friction.
Story Room is the runtime layer that produces that narrative state.
What Story Room creates
Story Room does not send chat messages directly. It creates state packages that the runtime may later use:
- weekly soft arcs — a non-railroading direction for the week;
- daily-life packages — compressed time blocks for what happened today;
- candidate beats — possible small events, frictions, callbacks, or quiet moments;
- scene cards — concrete scenes the character can safely reference;
- proactive-hook candidates — possible reasons to initiate a message;
- safe runtime context — the safe subset the chat actor may use.
Generated does not mean true
Story Room follows lifecycle boundaries:
- generated candidates are not true;
- accepted candidates are not automatically visible;
- committed events are not automatically revealed;
- private plans and branch forecasts are never runtime input.
This lets the system explore story possibilities while preserving continuity and user agency.
Daily life, not daily melodrama
The goal is not to create a dramatic event every day. A believable character has:
- low-stakes routines;
- small external frictions;
- contact with supporting cast;
- quiet recovery days;
- occasional arc movement;
- user-influenced branches.
The chat runtime can then answer “what did you do today?” from a grounded state package instead of inventing a day from scratch.
Example: before and after
Without a stateful daily-life layer, characters often answer from a generic vibe:
With LoreOS, the reply can come from state the runtime prepared earlier:
Example: daily-life package
The exact internal schema can vary by runtime version, but the shape of the state is:
This is the product difference: the chat actor is not inventing a day from nothing. It is speaking from safe context created by the character runtime.
What drives Story Room generation
The typed authoring fields are wired into Story Room generation today — they are not planning-only placeholders. When you author a character, these fields directly shape the weekly arcs and daily-life packages the engine produces:
life_template→ the ordinary daily/weekly rhythm the day is built from;story_engine→ recurring tensions, allowed event sources, and supporting cast that events are grounded in;arc_seeds→ soft weekly direction (the questions the week leans into);character_direction,relationship_seed,emotion_baseline→ tone and constraints;profile.aspiration/life_direction/ drama dials → where the evolving life is heading (the north-star lever against a flat, aimless character).
See Character authoring, Recipe: a production-grade dating character, and Character bundle imports for how to set these fields from either direct character authoring or an import bundle.
API status
Available today:
- managed runtime replies;
- sessions and event logs;
- character readiness and runtime preview;
- visual assets, visual readiness, and image probes;
- Story Room state generated from your authored fields and used inside the managed runtime;
- redacted Character World life, agenda, offscreen heartbeat, scene, and candidate-review APIs.
Use these Character World APIs to read and steer generated life state without opening the admin cockpit:
PATCH /agenda/items/{agenda_item_id} records operational status, hold time, and a developer note.
It does not expose or edit private agenda payloads. To author new story pressure, use storylines or
daily arc influences.
Use POST /storylines for multi-day or multi-beat pressure you planned in advance. Use
POST /daily-arc-influences when you want to steer one date’s Story Room generation. A
planner_hint influence stays as planning pressure. A scene_hook influence can also
materialize an operational offscreen arc, so the character has a concrete reason for the
day to move without exposing the private source payload. forbidden_reveals stay out of
safe beat reveals and are treated as do-not-force constraints.
Life-event candidate review is separate from the Story Room safe-slice approval API. Candidate review marks a proposed trajectory as accepted, rejected, or deferred for alternatives; it does not directly activate a runtime safe slice. Raw prompts, provider payloads, source inputs, private agenda payloads, and raw offscreen transcripts are excluded from these projections.