Skip to main content
Patient state is the platform’s unified picture of a person: slow-changing baseline facts, rolling activity-driven signal, categorized memory, and generated views. Everything enters through logs. There is no parallel path that silently patches state, so every update is auditable and tied to something that happened. We split state into modules with different lifecycles instead of one giant document. That keeps agent and workflow context bounded. Each module carries timestamps and validity so it is clear as of when a fact or signal applies; agents can tell what is current versus historical instead of relying on one undated document where recency is ambiguous. Organizations enable only the regions their log types actually feed. See the log types catalog for how catalog entries map into modules.
Organization-level platform configuration decides which module types exist for your patients and which view templates are active. The mechanical split among stable, rolling, memory, and rendered views stays the same across organizations.

State modules

Patient state is grouped into four families with different update rhythms and roles. The Console explores them through observability and patient detail; engineers map log types and templates onto these regions in configuration. The module keys listed below are examples of what exists today, not a fixed set: the catalog grows as the platform adds new data domains, and your organization’s configuration determines which modules are active.

Stable profile

Baseline clinical and administrative facts that change relatively slowly: identity, conditions, medications, care relationships, coverage, and similar “current truth” that should stay valid until something explicitly updates it. Example module keys (category stable_data): demographics, condition_diagnosis, medications, treatment_phase, user_preferences, emergency_contact, care_team, insurance, social, pharmacy, procedures, allergies, immunizations, devices, family_history.

Event-driven modules

Time-varying signal derived from logs: symptoms, labs, vitals, device-derived measures, engagement, conversations, and other streams that reflect what is happening with the patient now and recently. Shape and churn differ by domain, but the idea is the same: rolling clinical and product context, not a permanent archive in one blob. Example module keys (category event_state): behavioral_state, symptoms, adherence, physical_activity, engagement, heart, sleep, lab_results, vitals, clinical_context, questionnaires, conversations, glucose, alerts_and_tasks.

Memory bank

Holds unstructured insights distilled from chats and similar sources. These are short, categorized memories the platform uses for continuity across sessions. Like other regions, memory is part of patient state, not a bolt-on store, and each insight keeps provenance back to what produced it.

Views

Timestamped, template-driven outputs per view category: the rendered layers agents and APIs read; examples include medication, symptoms, and care context. They are built from stable, event-driven, and memory content on a schedule. Views & templates separates templates, how a category is defined, from views, the patient-specific result at a point in time. To inspect the field-level models behind each module and watch your patient state fill in as you send more log types, open a patient’s state in the Console.

Time, weekly signal & longer horizons

Stable modules answer “what do we believe right now?” For historical reads you typically take a single cut at a chosen timestamp. Event-driven modules and the memory bank are intentionally high-churn: the live material holds on the order of about a week of relevant signal that rolls forward as new logs are processed, not an unbounded archive in one row. That keeps payloads sized for models and makes recency honest. When a view or job needs more than a week, the platform assembles a window: it merges versioned module snapshots across week-aligned slices inside the interval you care about, deduplicating and letting fresher data win. You get a truthful picture of how that rolling surface evolved over the range, without pretending one static row describes the whole period.
Views work differently: generation starts from the current view snapshot for the run’s timestamp, plus upstream modules; prior wording inside a block is carried through that block’s last result, not by replay-merging every old snapshot document.

Next steps

Views & templates

How blocks are built, cadence, confidence metrics, and provenance.

Accessing patient state

Read state via MCP, the Python SDK, or REST from your workflows.