-
Notifications
You must be signed in to change notification settings - Fork 1
Attention Model
"Always on" is not a boolean. COMSTAR climbs a ladder of attention states, each with a different cost and a different tolerance for false positives.

| State | Trigger in | What's running | What's captured |
|---|---|---|---|
| Ambient | idle | wake word model, low-rate presence polling | nothing persisted |
| Noticed | YOLO person class in frame |
presence tracking | nothing persisted |
| Engaged | face match returns a known userid
|
AO session opened under that identity | greeting emitted |
| Listening | wake word · follow-up window · face-attention | VAD; utterance sent to STT after silence | utterance only |
| Responding | end of speech, ~700ms+ silence | orchestration → TTS → avatar | response + transcript to session |
| Sleeping | terminal MCP sleep_enter
|
wake word armed; vision/speech ignored | dormant (not OS suspend) |
Formal machine: Contracts — Attention State Machine.
Fires on the YOLO person class, never on motion. Motion triggers on curtains and pets.

The moment that carries the whole product. You walked into frame and it addressed you by name without being summoned.
Requires recognize_votes consecutive matches above face_confidence. Identity is cached with a TTL bound to continuous presence — recognition runs on transition, not per frame.
-
Wake word —
hey comstar(four syllables → lower false-accept rate than two-syllable words). - Follow-up window — 8–25 s (config) after any response; no wake word needed.
- Face-attention (feature flag) — matched face looking at the screen while speaking counts as being addressed. Behind a flag because it is the difference between magic and an assistant that answers your phone calls.

Follow-up opens on kiosk speak.ended (not when TTS finished generating). After the window closes and the person leaves frame, state decays to Ambient and the AO session stops.
Sleep is not OS suspend. Processes keep running. Only WakeWord exits sleep. See Terminal Control.
- AO session exists iff state ∈ {engaged, listening, responding} (may remain open while sleeping until teardown).
- Wake word armed unless listening / half-duplex playback (always armed in sleeping).
- At most one in-flight
directAgentcall. -
turn_idnon-null iff listening or responding. - Identity TTL refreshed only by positive
FaceRecognized. - No transition awaits I/O inside the machine — effects are dispatched.
Full table: Contracts — Attention State Machine.

| Mode | Behaviour |
|---|---|
restricted (default) |
Stay Noticed; wake still armed; no personal session |
greet |
Open guest session with restricted overlay |
ignore |
No engagement path for unknowns |
- Vision & Face Enrollment
- Wake Word
- Architecture
- Dev Loop — inject events without walking into frame
COMSTAR AI — Not a mystical AI. A tool you engineered — transparent, hackable, fast.
Home · Architecture · Admin Console · Runbook · Contracts
Apache-2.0 · Pre-alpha · Raspberry Pi 4 terminal + local AI server
COMSTAR AI
Start here
Product
Build & configure
Interfaces
- Contracts Overview
- Bridge ↔ Kiosk
- Bridge ↔ Audio
- CodeProject.AI
- AO Reach
- MCP Tools
- Attention State Machine
Features
- Speech (STT/TTS)
- Vision & Face Enrollment
- Directory Identity
- Wake Word
- MCP Topology
- Terminal Control
- Google Workspace
Decisions (ADRs)
- ADR Index
- 0001 Audio Routing
- 0002 Render Path
- 0003 Speech on Ada
- 0004 Terminal Control
- 0005 LDAP Identity
- 0006 House Presence
- 0007 Full-Duplex AEC
- 0008 TTS Engine
- 0009 Proactivity
- 0010 Text Channel
- 0011 Road VPN
- 0012 Admin Network
- 0013 AO mTLS
- 0014 Fallback Hotspot
Operate
Plan
Meta