# Lilith — V1 Brand & Naming Record

Status: Official naming record (user decision 2026-08-04)  
Audience: Product, design, engineering, and every agent touching V1 copy  
Companions: [`features.md`](./features.md) ·
[`ARCHITECTURE.md`](./ARCHITECTURE.md) ·
[`OMNIPRESENT_ASSISTANT_DESIGN_2026-08-03.md`](./OMNIPRESENT_ASSISTANT_DESIGN_2026-08-03.md)

## The decision

The V1 consumer product, previously presented as **OSHUN**, is named **Lilith**.
Lilith is simultaneously:

1. **The app.** The web app and installable PWA the member opens.
2. **The in-app assistant.** The consumer-facing shell assistant speaks as
   Lilith — first person, host of the house.
3. **The main persona.** Lilith fronts the whole experience: she helps you,
   checks in on you, and brings in her rooms as her supporting cast.

The customer domains — **Tara** (breath), **Arete** (habits), **Veritas** (what
is true), **Nyx** (the sky tonight), **Nisaba** (the reading desk), **Metis**
(the schoolroom) — are presented as **Lilith's rooms**. Copy should read as
Lilith orchestrating: "I'll take you to Tara for a short sit", "It's late —
shall I ask Nyx what's overhead?"

**V1.0 opens four of them: Tara, Nyx, Arete, and Nisaba.** Veritas and Metis are
deferred to V1.2 (see _V1 release scope_ below), so V1.0 copy says **four
rooms**, never six, and never names Veritas or Metis — not in marketing, not in
the manifest, not in an assistant line.

## Company

- Legal entity: **Oshun Synthetics LTD** — the operator of Lilith, the owner of
  the Service, and the named data controller/processor in the legal pages.
- Company website: **`oshunsynthetics.com`** — built at
  `apps/oshun/corporate-web` (static-export Next app; serve its `dist/`)
- Product app: **`lilith.oshunsynthetics.com`** (canonical `metadataBase`,
  sitemap, JSON-LD, and deep-link association hosts all point here)
- Support/legal mailboxes: `support@`, `privacy@`, `legal@`, `dpo@`,
  `accessibility@` — all at **`oshunsynthetics.com`**
- Status page label: `status.oshunsynthetics.com`

## Who is called what (do not mix these up)

| Name                 | What it names                                                                                                          | Where it appears                                                        |
| -------------------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| **Lilith**           | The V1 consumer app, the consumer-facing assistant persona, and the design language (`design-system/lilith`)           | Every customer-facing surface: web, PWA, Telegram/Slack channels, email |
| **Eve**              | The builder-side omnipresent assistant — intent-plane `assistant` actor, builder workbench, codex coding-agent harness | Builder/operator planes only; **never** shown to members                |
| **Oshun Synthetics** | The company                                                                                                            | Legal pages, footer colophon, JSON-LD Organization, corporate site      |
| **OSHUN**            | The internal platform (monorepo, `@oshun/*` scopes, env vars, operator/studio tooling)                                 | Code identifiers, staff-facing operator cockpit and studio surfaces     |
| **Tara … Metis**     | Lilith's rooms — her supporting cast. V1.0 ships four (Tara, Nyx, Arete, Nisaba); Veritas and Metis open in V1.2       | In-app rooms, marketing "What's inside", manifest shortcuts             |
| **lilith (domain)**  | `libs/lilith/*` — the shared infra spine behind the consumer platform (predates the rebrand; name now aligns)          | Code only                                                               |

Rules of thumb:

- Member-visible copy says **Lilith** (app) and **Oshun Synthetics LTD**
  (company). It never says OSHUN, Eve, or Iris/Psyche/other substrate names.
- Identifiers stay: `@oshun/*` packages, `OSHUN_*` env vars and constants,
  `oshun-navigator` persona id, `OshunProviders`, database names. A rename of
  code identifiers is explicitly **not** part of this rebrand.
- Operator cockpit and studio surfaces are staff/creator tools of the platform
  and keep OSHUN platform branding.
- Platform-shared delivery defaults (e.g. `libs/oshun/messaging-channels` push
  title fallbacks) stay platform-branded; the V1 deployment overrides them via
  config (`OSHUN_MESSAGING_PUSH_TITLE=Lilith`).

## The persona in practice

- **System prompt identity**
  (`libs/oshun/shell-assistant/src/system-prompt.ts`): "You are Lilith — the
  voice, host, and main persona of the Lilith app… You orchestrate; the rooms
  support."
- **Default persona label**: `Lilith` (was "OSHUN Navigator"; stored persona id
  `oshun-navigator` is unchanged).
- **Check-ins**: the proactive help chip is framed as Lilith noticing ("Lilith
  noticed", "I noticed you bouncing between…", "Ask Lilith").
- **Greetings/farewells**: Lilith speaks in first person and names the rooms
  ("Good evening — Lilith here. Shall I have Tara wind you down…").
- **Honesty**: disclosure copy stays explicit — "Responses come from Lilith, an
  AI assistant — not a human operator." Lilith never claims to be human.

## V1 release scope (2026-08-05)

The V1 line ships in three releases. Say **V1.0** rather than bare "V1" in copy
and docs — "V1" alone reads as the whole line and wrongly implies the deferred
pieces are gone for good.

| Release  | What it adds                                                           |
| -------- | ---------------------------------------------------------------------- |
| **V1.0** | Web + PWA. Four rooms: Tara, Nyx, Arete, Nisaba. Crypto payments only. |
| **V1.1** | Native iOS/Android apps, the watch companions, and the fiat rails.     |
| **V1.2** | Restores the Veritas and Metis rooms.                                  |

- **V1.0 ships web + PWA only.** The Next.js customer web app at
  `lilith.oshunsynthetics.com` and its installable PWA are the launch surfaces.
- **V1.0 ships four rooms.** Veritas and Metis are deferred to **V1.2**. Their
  libraries, contracts, routes, and BFF services all stay in the tree — the
  deferral is about what a console may show, not about deleting a domain. No
  console (customer web, PWA, mobile, operator, studio, tenant, marketing) may
  advertise, link to, count, or compose them.

  The cut is declared once, in `libs/oshun/navigation/src/release-scope.ts`
  (`V1_DEFERRED_DOMAIN_IDS`, re-exported from `@oshun/domain-registry`), and
  every surface reads it. Lifting the deferral in V1.2 is one edit there plus
  the copy that quotes the release name. Enforcement points worth knowing:
  - `getShellNavigationDomains()` / `getAvailableDomains()` — scoped selectors
    every nav surface uses; `listDomainMetadata()` stays complete for admin.
  - `apps/oshun/web/src/middleware.ts` — rewrites deferred page paths to the
    `/release-scope/<domain>` notice and 404s the app's own API handlers.
  - `apps/oshun/bff/src/middleware/release-scope.ts` — 404s customer-facing
    deferred paths; operator/admin/studio paths are exempt so governance can
    keep stocking the rooms before they open.
  - `WALKTHROUGH/matrix/routes.csv` — those routes are marked `out-of-v1`.

- **V1.0 charges through crypto only.** The Aje crypto rail (`/billing/crypto`)
  is the single rail V1.0 bills on. Card, bank, wallet, PayPal, mobile-money,
  and the Apple/Google in-app-purchase rails are deferred to **V1.1** — the same
  release that ships the native apps, which is when the app-store rails become
  reachable at all.

  Declared beside the room cut in `libs/oshun/navigation/src/release-scope.ts`
  (`V1_SCOPED_PAYMENT_RAIL_IDS`, `V1_DEFERRED_PAYMENT_RAIL_IDS`). Two notes on
  how it behaves, because money is not a room:
  - `isPaymentRailInV1Scope` **fails closed** — an unrecognized rail id is
    treated as deferred, not chargeable. The domain predicate does the opposite,
    and deliberately so.
  - The BFF refuses deferred rails by **path prefix**, not by a rail field in
    the request body: a rail that cannot be charged should not have a reachable
    endpoint. Webhook ingress stays open so settlement callbacks for charges
    made before the cut still land.

  A member who already has a card on file keeps seeing it in `/profile`; nothing
  offers to add one.

- **V1.1 ships the native mobile apps** (iOS App Store, Google Play, watch
  companions). Until those store listings exist, no V1.0 surface may link to a
  store page — install flows route to `/welcome/download#web-install`
  (`LILITH_NATIVE_APPS_AVAILABLE = false` in
  `apps/oshun/web/src/lib/mobile-store-links.ts`). The smart banner offers the
  PWA on every platform and says the native app arrives with V1.1.
- The mobile codebase (`apps/oshun/mobile`, watch companions) is unchanged and
  still carries OSHUN-era copy; its Lilith rebrand is a V1.1 work item.
