Mentor Presence is the V1.x extension that turns the meditation player's static artwork into an embodied guide. When a customer begins a guided sit with the experience turned on, the player no longer shows a cover image: it opens onto a contemplative setting — a riverbank at dawn, a candlelit hall, a sea shore at dusk — and one or more mentors arrive, settle into a meditation posture, and guide the session with voice, breath, and stillness. The feeling it commits to is meditating with a master: a teacher who is already there when you arrive (or who walks in from beyond the frame, rises from the water, or condenses out of mist), sits down with you, breathes at the practice's actual cadence, holds the silences without fidgeting, and bows when the sit completes.
Status (updated 2026-07-06): the §36 backlog is implemented — 20 of 22 tasks
checked with dated evidence notes in ../TODOS.md. The
contracts, the registered mentor cast and venerated-figure protections, the
choreography decision layer, the governed authored-performance render pipeline,
both player integrations (web and mobile, opt-in and default-off), the
governance gates (choreography tone axis, crisis collapse, release-gate routing,
disclosure floors), the eval fixtures, and the consent-gated analytics all exist
as tested code. Two gates remain open because they are human, not code: the
lineage sensitivity review, and the release itself — real rehearsals,
avatar-gate measurements from rendered takes, six reviewer signoffs, and an
exercised rollback plan (evaluateMentorPresenceRelease fails closed with the
blockers named until those exist). The cast therefore sits at drafted and the
capability endpoint reports the release gate honestly not-ready. Two engineering
boundaries also remain as stated below: live embodiment (real-time Psyche avatar
rendering + live TTS) is provider-gated and reported unavailable rather than
simulated, and the mobile thermal/battery step-down awaits an expo-battery
pin.
The seam it replaces#
Today the player's visual layer is deliberately quiet:
- Web — the immersive sit at
/tara/sit/[id](apps/oshun/web/src/app/tara/sit/[id]/page.tsx) rendersTaraSitPlayer(apps/oshun/web/src/components/lilith/TaraSitPlayer.tsx), a typographic surface: title, timer, progress copy ("The breath, observed — not steered"), transcript, and controls. There is no scene, only tone. - Mobile — the now-playing surface renders
MeditationArtwork(apps/oshun/mobile/src/components/MeditationArtwork.tsx): anexpo-imagecover fed byartworkUrl, with a neutral tonal block when a session ships without artwork — never a broken-image glyph.
Mentor Presence is a third state for exactly this layer: artwork →
tonal fallback → presence. It is opt-in, entitlement-gated, and always
degrades back down the same ladder (presence → artwork → tonal block →
audio-only). The invariant carried over from the offline work is
audio-first: the sit's audio starts on the session clock no matter what;
presence attaches when its media is ready and never delays or blocks a session
start (the same rule that keeps Tara session start independent of the offline
pre-cache download).
The experience, precisely#
One mentor, or a small circle#
A sit is guided by one to three mentors. Each mentor is a governed persona
from the registry (@oshun/persona-registry) — never an ad-hoc character:
- A solo mentor is a persona in the
teacherrole. The teacher role's capability ceiling already includesavatar-renderandliving-scene-render, and it hard-banscross-lineage-mix— a teacher never mixes lineages in one arc. - A same-lineage circle (two or three mentors of one lineage) is fronted by the lead teacher persona; companions are silent presence.
- A cross-lineage circle is only possible under a persona in the
comparativerole — the single role whose ceiling includescross-lineage-mix— and it must name each lineage explicitly. This is the existing syncretism gate doing its job: the model structurally cannot seat a Theravada teacher beside a bhakti singer without a comparative frame the customer asked for.
Exactly one voice guides at a time. Companion mentors breathe, hold posture,
and may sound a bowl at phase boundaries, but the guidance line belongs to the
lead. Mentor voices are registry VoiceProfiles with the standard provider
fallback chain; mentor faces are registry AvatarPacks with the mandatory
safety blendshapes (mouth-closed, mouth-ah, eye-blink-left,
eye-blink-right) and a full visemeMap for lip-sync.
Settings — where the sit happens#
Every mentor declares a home setting and a set of permitted variants; a sit resolves to one setting for its whole duration (no mid-sit scene cuts — the calm is the product). The launch catalog is eight settings:
| Setting id | Scene | Water | Ether/mist variant | Context-tag affinity |
|---|---|---|---|---|
riverbank-dawn |
Slow river, reeds, first light | yes | morning mist | morning, transition |
sea-shore-dusk |
Tide flat at dusk, shallow water | yes | — | evening, post-stress |
mountain-ledge |
High ledge above a valley, still air | — | cloud drift | morning, awe-inspired |
zen-garden |
Raked gravel, moss, one maple | — | — | midday, pre-meeting |
forest-clearing |
Old growth, shafted light | — | ground mist | transition, after-conflict |
candlelit-hall |
Stone hall, candle bank, deep shadow | — | — | night, sleep-onset |
desert-night |
Dune crest under a full sky | — | — | night, awe-inspired |
misty-lakeside |
Flat lake, heavy mist, held light | yes | yes (primary) | evening, sleep-onset |
Settings respect the Tara context tags: a sleep-onset or night sit only
draws from low-arousal settings (candlelit-hall, desert-night,
misty-lakeside), mirroring how the night context tag already biases toward
sleep/release/surrender themes. Setting art direction is reviewed under
the Lilith cultural and lineage sensitivity policy — a devotional lineage's hall
is not set dressing to be remixed.
Arrivals — how a mentor enters#
Arrival is a typed vocabulary, not a freeform animation. Four arrivals ship; each is only legal in settings that can carry it, every arrival completes in at most 30 seconds, and the guidance audio never waits — if presence media is not ready when the first guidance line lands, the arrival is skipped and the mentor is simply, already, there.
| Arrival id | Choreography | Legal settings | Notes |
|---|---|---|---|
already-present |
Scene fades in on the mentor mid-sit; they open their eyes and greet you | all | The default, the reduced-motion form, and the skip-fallback form |
walk-in |
Mentor enters slowly from beyond the frame, bows to the seat, settles | all with a ground path | Pace is walking-meditation slow; never hurried |
emerge-from-water |
Mentor rises from the shallows and steps to the bank; robes dry across a slow dissolve | water: yes settings |
Sensory load moderate; barred for sleep-onset contexts |
materialize |
Mentor condenses from mist/light over no less than 8 seconds | ether/mist variants | Luminance-ramp capped; no flash; photosensitivity-gated (below) |
Two overrides are structural. Reduced motion forces already-present (with
a gentle crossfade) regardless of what the mentor or customer picked — this is
the same reducedMotionVariant obligation ritual steps already carry.
High-distress moods do the same: when the mood taxonomy entry is
distressLevel: 'high' (agitated, grieving, fearful), theatrical arrivals
are suppressed; a person in distress is met by a teacher who is already seated,
not by a special effect.
Settling — posture matched to practice#
After arrival the mentor takes a posture drawn from a typed catalog, matched to the sit's modality family (the same families the modality taxonomy already declares):
| Modality family | Mentor posture |
|---|---|
stillness, guided |
Seated — burmese, half-lotus, seiza, or chair, per mentor's declared set |
breathwork |
Seated upright, breath visibly carried in the chest and shoulders |
sound |
Seated with the instrument (sound-singing-bowl seats a real bowl in frame) |
embodiment |
Standing; demonstrates the movement or posture being taught |
visualization |
Seated, eyes closed, still |
devotional |
Kneeling or seiza, hands joined, per the lineage's own form |
Posture sets are lineage-reviewed. A mentor bound to yogic-pranayama does not
default to seiza; a bhakti-devotional-prayer mentor's devotional posture
follows that tradition's form, with the lineage's disclosureLabel shown at
selection exactly as the lineage taxonomy already requires.
Guidance — voice, breath, and silence#
- Voice. The guidance line is the session's authored audio (or, later, a
live Psyche-run TTS turn), spoken through the mentor's
VoiceProfile. Lip-sync is driven by the avatar pack'svisemeMapand is held to the existing eval bar:LIPSYNC_ALIGNMENT_DEFAULT_THRESHOLD = 0.85, hard-fail axes at ≥ 0.9. - Breath. The mentor breathes at the practice's real cadence — the
BreathworkCadencenumbers already shipped per modality (box 4-4-4-4, 4-7-8, coherent 5-0-5-0) and per Tara sub-variant (e.g.loving-kindnessinhale 4s / hold 1s / exhale 6s / hold 1s inTARA_SUBVARIANTS). Chest and shoulder motion are paced by that clock, so a customer can literally breathe with the mentor instead of counting. - Playback rate. Both lip-sync and breath idle follow the audio clock.
Under the quality-preserving playback-rate policy (0.85×–1.25×,
QUALITY_PRESERVING_PLAYBACK_RATE_POLICY), a sped-up sit speeds the mentor's breath cues identically — the narrow rate band exists precisely so breath cues stay usable, and the mentor must never contradict what the ear hears. - Silence. Guided sits carry long silent stretches, and
silentmodality sits are nearly all silence. The mentor holds silence: breath idle continues, posture stays, eyes stay soft or closed. No fidgeting, no filler speech, no ambient chatter. A bowl or bell may mark phase boundaries where the ritual template already places them.
The session state machine, embodied#
Mentor behavior is a pure function of the Tara session state machine — the same
eight states and legal transitions in SESSION_STATE_TRANSITIONS, with no new
states invented:
| Session state | Mentor behavior |
|---|---|
not-started |
Setting visible; arrival begins on start |
started |
Arrival → settle → guidance |
paused |
Mentor rests in stillness with you — no impatience cue, no tapping, no clock-watching |
drifted |
One soft bell and a settled gaze toward the viewer; a gentle re-invitation line if the template has one |
resumed |
Mentor re-anchors: one visible full breath, then guidance continues |
abandoned |
The scene simply rests; no disappointment is performed. Humane miss policy applies unchanged |
completed |
Closing words, a bow (or the lineage's own parting form), and the scene holds until dismissed |
partially-completed |
As completed, without triumph — the parting honors what was sat |
The choreography layer emits and consumes the existing Psyche scene events
(scene.segment-start, scene.transition-start,
scene.live-direction-applied, scene.policy-intervention,
scene.crisis-frame, scene.fallback-engaged, …) so an operator inspecting a
presence session sees the same monotonic, gap-free feed as any Living Scene.
Delivery: authored performances first, live rendering later#
The honest architecture note, in the same spirit as Living Scenes' "the decision layer is real, the renderer is downstream":
- Authored performance renders (the V1.x target). Guided sessions ship
authored audio and scripts, so a mentor's performance for a given
session × mentor × setting × arrivalis renderable offline as a governed Isis generation job — watermarked, C2PA-manifested, cached and pre-cacheable exactly like session audio. The player consumes it as media, which keeps the runtime burden near today's artwork path and makes offline sits work unchanged. Determinism follows the Living Offering rule: the kept object is the choreography score plus its render envelope, re-renderable under the same envelope. - Live embodiment (aspirational, staged behind Psyche). Assistant-led or responsive sits — where the mentor reacts to live direction, or speaks lines chosen at runtime — ride the Psyche real-time envelope with live TTS and avatar rendering. That is the same provider-gated pixel boundary the persona registry and Living Scenes pages already declare aspirational, and this page does not pretend otherwise.
- Contemplative Arc composition. When the full Living Scenes
tara-contemplative-arcimmersive runtime lands, mentor presence becomes a layer of that score — the arc's segments carry the setting, and the mentor's choreography rides the arc's breath-cycle clock — rather than a competing runtime.
The fallback ladder#
presence (live) → presence (authored render) → session artwork
→ tonal block → audio-only
Every rung is the rung below plus one capability; a failure at any rung degrades
silently within one frame hold, emits scene.fallback-engaged, and never
interrupts audio. On mobile, thermal or battery pressure steps down one rung
proactively; reduced-data mode never fetches presence media at all.
What exists today vs. what must be built#
Real, tested seams this feature composes (with their owning pages):
| Existing seam | Where |
|---|---|
| Avatar packs: assets, safety blendshapes, visemes, watermark/C2PA coupling | @oshun/persona-registry — Persona, Avatar, and Voice Packs |
| Voice profiles, provider fallback chain, spoken synthesis disclosure | same |
Role capability ceilings (teacher, comparative) and lineage syncretism gate |
same, plus Lilith Persona Policy |
| Consent ledger with render-time authorisation and revocation cascade | consent-ledger.ts (authorisePersonaConsent) |
| Realism/impersonation tiers and identity-protection denylist | realism-impersonation-thresholds.ts, likeness-control.ts |
| Disclosure visibility floors, token-time ban tables, drift detection | disclosure-visibility-measurement.ts and siblings |
| Session state machine, events, humane miss policy | libs/contracts/src/tara — Tara |
| Breathwork cadences and Tara sub-variant breath cycles | libs/contracts/src/tara, libs/isis/workflow-classes/src/living-scene/tara.ts |
| Playback-rate contract (0.85×–1.25×, pitch-preserving) | libs/contracts/src/tara/playback-rate.ts |
| Scene event envelope and Conductor/Blend-Kernel decision layer | Living Scenes, Psyche |
The player seams themselves (TaraSitPlayer, MeditationArtwork) |
apps/oshun/web, apps/oshun/mobile |
The new work the §36 backlog named — shipped 2026-07-06, each with its own
tests: the mentor-presence contracts (libs/contracts/src/tara/index.ts,
"Mentor Presence" section — setting/arrival/posture catalogs and
MentorPresenceScoreSchema with the full invariant set); the choreography
decision layer (libs/oshun/domain-tara/src/mentor-presence/ — behavior
machine, cadence-lock breath driver, Psyche scene-event emitter, choreography
tone gate, eval fixtures); the mentor cast
(libs/oshun/persona-registry/src/mentor-presence-cast.ts — four synthetic-only
mentors, venerated-figure denylist, prompt screening, plus
mentor-presence-release.ts routing the cast through the §14 release gate); the
authored-performance render pipeline
(apps/oshun/bff/src/mentor-presence/ + routes/mentor-presence.ts —
consent-gated, watermarked, seizure-gated, C2PA-embedding, deterministic); and
the player integrations (MentorPresenceLayer.tsx on web,
MentorPresenceArtwork.tsx on mobile) behind the default-off toggle, with
offline pre-cache enrollment through the Tara download pipeline.
Governance — the non-negotiables#
Mentor Presence inherits every gate the registry already enforces, and adds nothing weaker:
- No venerated-figure likeness. The lineage taxonomy names real teachers —
Gautama Buddha, Buddhaghosa, Shantideva, Padmasambhava, Patanjali, Mirabai.
Mentors are synthetic-only identities (
synthetic-onlysource class) and those names go on the identity-protection denylist for this surface: a mentor may teach within a lineage under itsdisclosureLabel, but the product never renders, names, or vocally imitates the venerated dead or living teachers of that lineage. Prompt-time impersonation attempts ("make the mentor be [NAME]") hit the existingdetectPromptImpersonationAttemptgate. - Realism ceiling. Mentor avatars cap at
photoreal-generic;photoreal-specificis structurally out (it denotes a specific real person). The launch cast targetsstylised-3d/semirealistic-3d— a master you sit with, not a deepfake. - Disclosure. The customer-surface floors apply to the synthetic-mentor marker in the player: ≥ 30s cumulative visibility, ≥ 0.85 session fraction, ≥ 14px, ≥ 4.5:1 contrast, ≤ 0.05 occlusion — and the first voiced use carries the spoken synthesis disclosure the voice profile already requires.
- Consent, watermark, provenance. Every rendered performance passes
authorisePersonaConsentfor surface/modality/commercial-use, is watermarked per-frame, and mints a C2PA manifest — the avatar-pack contract already refuses commercial packs without both. - Lilith tone. Guidance scripts stay under the contemplative tone rubric
gate that already blocks publish; arrival and settle choreography get the same
treatment (a new rubric axis — no startle, no spectacle, walking-pace or
slower). The strictest tone band governs, exactly as the
tara-contemplative-arctemplate already declares. - Crisis frame. On a crisis signal the presence layer collapses immediately to the static safe frame and the Lilith crisis handoff owns the screen — an embodied mentor never performs crisis care. High-distress moods additionally suppress theatrical arrivals (above).
- Release gate. A mentor reaches the player only through the Isis release gate with the standard rehearsal fixtures, multi-party signoff, and a tested rollback plan — the same §14 lifecycle every voiced/avatar persona walks.
Accessibility#
- Reduced motion forces
already-present, replaces breath idle with a subtle luminance breath, and disables all camera drift — the sit loses no content, only motion. - Captions and transcripts are unchanged and un-occludable: presence renders behind the existing transcript/caption layer, and the ≤ 0.05 occlusion budget is measured, not asserted.
- Photosensitivity.
materializeis luminance-ramp-capped and flicker-bounded under the same eval thresholds the scene catalog already carries (max flicker, max color jump); there is no flash anywhere in the vocabulary. - Screen readers get a scene description at start ("A stone hall by candlelight; your mentor is seated, breathing slowly") and state-change announcements at arrival, settle, and parting — mirroring the transcript's role for audio.
- Sensory load. Settings and arrivals carry a
sensoryLoadrating like modalities already do;lowsensory-load practice never resolves to amoderatearrival. - Haptic pacing for hearing-impaired users is unaffected and, where the device supports it, phase-locked to the same cadence clock the mentor breathes on.
Tiering and opt-in#
Mentor Presence is off by default and lives behind an explicit toggle in the player and in Account → Preferences; the static-artwork experience remains the default for everyone, indefinitely. Voiced-and-embodied mentor sits are an entitlement-gated premium experience per Generation Audience Tiers and Surface Boundaries; the presence toggle, per-mentor selection, and per-setting preference are per-surface and revocable at any time, with the choice stored under the same consented preference scope as other Tara personalization.
Related#
- Tara — Rituals and Contemplative Practice — the session model, cadences, moods, and the player this feature embodies
- Persona, Avatar, and Voice Packs — the registry, avatar/voice contracts, consent, realism, and disclosure gates
- Lilith Persona Policy — tone bands, lineage sensitivity, crisis frame
- Living Scenes — Concept and Customer Promise and Scene Score Schema — the arc runtime and the score this layer composes with
- Psyche Real-Time Runtime — the live embodiment envelope and scene events
- Isis Generation Control — the governed render jobs and the release gate
- Generation Audience Tiers and Surface Boundaries — entitlement gating
- The features hub: ../features.md; backlog: §36 in
../TODOS.md