# glasses — Even Realities G2 fleet hub app

## What this agent does

Builds a developer-mode app for Cameron's **Even Realities G2 smart glasses** that turns the glasses into a wearable hub for the agent fleet — read agent status, talk to them, send updates, view live state, plus other custom interactions Cameron will add.

## Why it exists

Cameron got the Even G2 glasses, which have a text/terminal display, developer mode, and SDK for custom apps. He wants a hands-free way to interact with the fleet — equivalent to the phone-browser chat at [[mobile-chat]] but as a HUD.

## Current state

- Agent created 2026-06-12 (tmux tab 3, `agents:glasses`).
- **Docs read in full; scoping doc shipped to `agents/glasses/outbox.md` (2026-06-12).** Status `blocked` awaiting Cameron's OK + answers before any code. SDK notes in [[memory]].
- Not yet built (gated on OK).

## Architecture — confirmed from docs (corrects ROLE's BLE assumption)

- **App code runs ON THE PHONE, not the glasses.** The app is a normal Vite web app (HTML/JS/TS) running in the Even phone-app's WebView; the **glasses are display + touchpad only** over BLE 5.2. So networking is plain `fetch()` from the phone — **no raw BLE / low-MTU work**. Only the *screen* is tiny, not the pipe. Closer to [[mobile-chat]]'s browser-client shape than embedded work.
- Consumes existing fleet endpoints (`/api/agents/list`, `/api/agents/<name>/pane`, `/api/agents/<name>/send`, `/api/agents/<name>/interrupt`) basically as-is.
- **#1 backend dependency: serve.py sets NO CORS headers (serve.py:28) → WebView fetch is blocked until `Access-Control-Allow-Origin` is added.** Coordinate with [[website-builder]]. Plus optional compact endpoints `/api/glasses/roster` + `/api/glasses/agent/<name>` (server-side truncate/sanitize for the ≤20-row, ~500-char display).
- Recommended comm path: **foreground HTTPS polling** (no reliable background execution on G2; WebView suspends when backgrounded).
- MVP target: 3 pages — roster ListContainer (≤20 items) → agent detail TextContainer (textContainerUpgrade poll) → canned-message send-back (gestures only; no keyboard). Voice dictation (mic PCM → `/api/transcribe`) deferred to v2.

## Display/SDK hard limits worth remembering

576×288 mono-green per eye; absolute-positioned containers (no CSS); ListContainer ≤20 items × ≤64 chars; TextContainer ~400–500 chars/screen; one event-capture container per page; gestures = press/double/swipe-up/swipe-down; out-of-font chars silently dropped (sanitize agent text). Full detail in [[memory]].

## Where the code will live

TBD. Plausible split:
- **App side** (whatever lang the Even SDK uses): probably its own repo somewhere on Cameron's Mac. Could live in `/data/cameron/agents_stuff/agents/glasses/app/` if it's just source + build artifacts.
- **Backend extensions** (new compact endpoints): added to `serve.py` at `/data/cameron/para/.agents/reports/serve.py` (see [[fleet-infra-overview]]).

## Constraints worth remembering

- Cameron sideloads / runs the app on the glasses; the agent doesn't have direct access to the device. Dev loop is async: agent writes → Cameron tests → agent iterates.
- Glasses display is small + text. UI design must assume low line count, polling-friendly state, no rich graphics.
