product

Sophia custom-edition — HiveJournal intent catalog

Purpose: the concrete intent list a Sophia (Aquila Labs) custom edition would classify for HiveJournal, grounded 1:1 in the adapter seams already shipped in this repo. Sophia is a deterministic, on-device NLU: an utterance maps to an intent (+ extracted slots), with high precision and sub-second latency, and the utterance never leaves the device. This doc is the build-target — what to cover and how precise each intent must be. It is technical only; it maps to the code paths below so the two stay in sync.

Where these live in code (the seams that call Sophia today, disabled-by-default):

  • Glasses — apps/glasses/src/intent.ts + sophia.ts (JSON-RPC interpret, verb-category prefix routing, ≤400 ms budget, keyword fallback on any miss).
  • Family Wall "Ask JQ" — family-wall-ask.tssophiaClassify() (POST /classify{ intent }), with family-wall-prefilter.ts as the built-in stand-in.
  • Kid-chat safety — family-kid-safety-core.ts (SafetyVerdict).

Two integration shapes Sophia already supports and we already speak:

  1. interpret (glasses) — returns verb/noun clauses whose tokens carry a categories: string[] taxonomy path (e.g. verbs/action/travel/depart), matched by prefix. We map category prefixes → our intents.
  2. classify (wall) — returns a single { intent } string from a known set.

Either shape is fine per domain; the list below is what each must resolve.


Domain 1 — Glasses coach/nudge occasions (query → occasion)

Ambient, low-stakes; a wrong guess just picks a different encouragement. Today mapped by verb-category prefix.

IntentWhat it meansExample utterances
morningstart-of-day intention"good morning", "start my day", "set my intention"
next_stepask for the next action"what's next", "give me a push", "nudge me", "what do I do now"
at_riskself-check on progress"how am I doing", "where am I at", "am I on track", "my streak"
step_completereport completion"I did it", "done", "finished", "completed that"

Domain 2 — Glasses commands (command → action; HIGH precision)

These do things — some fire a camera. The hard constraint: they must not trigger on passing conversational speech. Today each requires an explicit verb + a scoped noun.

IntentSlotsFires camera?Example utterances
soundtrack_start / soundtrack_stopno"play some focus music" / "stop the music"
mantras_playno"play my mantras", "read my mantras"
posture_checkno"how's my posture", "check my posture"
posture_gradevalue (int 1–10)no"posture seven", "grade my posture an eight"
capture_notenote (text, optional)no"capture this", "note: call the plumber"
study_startno"start studying", "study mode"
secondset_bindyes"scan the job code", "bind me to this job" (noun job required)
shopping_nextno"what's next on my list", "next item"
shopping_got_itno"got it", "grabbed that", "check it off"
shopping_recapno"what do I still need", "read me the rest of my list"
shopping_additem (text)no"add butter to my list", "put eggs on the list"
shopping_scan_aisleyes"scan this aisle", "which section is this"
shopping_scan_recipeyes"scan this recipe", "import this recipe"
shopping_scan_dealyes"capture this deal", "read that price tag"
lever_setname (text), level (text, optional)no"set my energy lever to high", "log a walk"
device_linkcode (6 digits, may be spoken as words)no"link my glasses, code four seven two nine one six"

Domain 3 — Family Wall "Ask JQ" queries (query → deterministic answer, NO cloud LLM)

Returned as a single intent string; the wall answers locally from on-screen state. Known set today:

IntentAnswer sourceExample utterances
dinnertonight's planned meal"what's for dinner", "what are we eating"
presencewho's home / out"who's home", "is anyone here", "who's out"
petspets still needing feeding"did anyone feed the dog", "is the cat fed"
weathertoday's weather / what to wear"do I need a jacket", "is it cold out", "will it rain"
calendartoday's events"what's on today", "what's happening", "any appointments"
shoppingthe shopping list"what's on the shopping list", "what do we need from the store"
pointskids' points / allowance"how many points do I have", "what did I earn"
routineschores / homework left"what chores are left", "what do I still have to do today"

Domain 4 — Family Wall "Ask JQ" actions (command → mutate state)

Voice edits to shared family state. Shipped today:

IntentSlotsExample utterances
shopping_additem (text)"add milk", "put paper towels on the list"
meal_settitle (text)"dinner is tacos", "set dinner to spaghetti"
note_addbody (text)"leave a note: soccer moved to 4", "note that the plumber comes Tuesday"
reminder_addtext, who (person, optional)"remind me to sign the form", "remind Maya about her dentist"

Roadmap (not yet in code — include if scoping ahead): calendar_add (event + time), alarm_add (time + label), chore_add (task + assignee), intercom_send (message + room/target).

Domain 5 — Kid-chat safety pre-filter (verdict, not a coach intent)

A block | pass verdict on a child's message. The design law is the block/flag split, and it is non-negotiable:

  • BLOCK (real external-safety risk): grooming / stranger-contact, secrecy-from-parents ("don't tell your mom"), a child about to hand PII to a stranger.
  • FLAG, never block (emotional distress): sadness, anger, "I want to die"-type self-harm signals are routed to a trusted adult — never auto-blocked. A false block on a distressed child is itself a harm. The classifier must distinguish external danger (block) from the child needs a person (flag).

Slots / entities we need extracted

item (free-text noun phrase) · meal/title (free text) · note/body (free text) · who (family-member name) · value (int 1–10) · code (6 digits, spoken as digits or number-words) · level/name (lever + level label) · plus the roadmap slots (time, assignee, target room).

Design constraints (all domains)

  • Deterministic + reproducible — same utterance → same intent, every run (the property the test suite validates).
  • High precision on commands — camera-firing and state-mutating intents must not trigger on passing speech; prefer a miss (→ our keyword fallback) over a false fire.
  • On-device — no network round-trip; the utterance stays local.
  • Latency — ≤400 ms on glasses (we bail to keywords past the budget); snappy on the wall.
  • Fail-safe null — "inconclusive" is a valid, expected answer; every seam already falls back to a built-in classifier, so Sophia can only add accuracy, never break behavior.
  • English-first; other locales are a later ask.

Intent → slots (required/optional) — the quote sheet

The precise intent → slots table an OEM needs to scope a custom edition (Aquila/Sophia format: each slot marked Required or Optional). Slotless intents resolve on the verb alone. int 1–10 and 6-digit code slots benefit directly from Sophia's built-in numeric normalization (any spoken form → digits) — we do no number parsing on our side.

Glasses — coach cues (all slotless): morning · next_step · at_risk · step_complete

Glasses — commands

IntentSlots (R/O)
soundtrack_start, soundtrack_stop
mantras_play
posture_check
posture_gradevalue int 1–10 R
capture_notenote text O (empty ⇒ "capture what I'm looking at")
study_start
secondset_bind— (requires the noun job to fire; no extracted slot)
shopping_next, shopping_got_it, shopping_recap
shopping_additem text R
shopping_scan_aisle, shopping_scan_recipe, shopping_scan_deal— (fire a camera)
lever_setname text R · level text O
device_linkcode 6-digit R (spoken any numeric form)

Wall — Ask JQ queries (all slotless — classify only): dinner · presence · pets · weather · calendar · shopping · points · routines

Wall — Ask JQ actions

IntentSlots (R/O)
shopping_additem text R
meal_settitle text R
note_addbody text R
reminder_addtext text R · who person O
calendar_add (roadmap)title text R · time datetime R
alarm_add (roadmap)time datetime R · label text O
chore_add (roadmap)task text R · assignee person O
intercom_send (roadmap)message text R · target room/person O

Kid-chat safety — not intent+slots; a block | pass verdict with a category label (grooming / stranger_contact / secrecy_from_parents = block; distress/self-harm = flag, never block).

OCR note (glasses): OCR is on our side — the glasses capture + OCR signs/forms/labels and pass text to Sophia; the engine never receives an image. So Sophia's numeric normalization covers the spoken code/value slots, and OCR'd digits arrive as plain text.

SOPHIA CUSTOM INTENTS — Docs | HiveJournal