Browser client · for the LUCY hub
Lucy gets a face.
LUCY-ui is the hub's web client. A face that thinks while Lucy thinks and asks when she needs you, her words streaming in as she says them, and every approval card answered in place. It speaks the hub's own event stream, nothing invented.
face (°-°) thinking…
you › play lonely at the top by asake
step music.find 1 track: Lonely At The Top — Asake
card Play what music.find found on your default speaker?
[Allow this time] [Allow for this conversation] [Deny]
lucy Playing Lonely At The Top by Asake on Study PC.
face (^-^) done
The face
Twelve moods, one rule: show what the conversation is doing.
Asleep until you sign in. Attentive while you type. Thinking while a turn runs, working through results in a second gait, speaking while text streams. A warning look when a card needs you, success and failure when a turn ends, and a lost look when the connection drops.
Alive, not busy
Blinks, eyes that follow your cursor, and idle motion come from the face itself; the moods come from the stream. The two never fight.
Reduced motion respected
The face honours your system setting, and every mood change is also spoken to assistive technology as a sentence.
Swappable
The face sits behind a one-method driver. The art is Agent Robot Avatar by CX ArtLab, MIT licensed; another face is a second driver, not a rewrite.
What you see
The whole conversation, not just the words.
The transcript, live
Messages, each plan step with its note and timing, errors in their own voice, and text arriving as Lucy says it. Anything the client has no view for is shown generically, never dropped.
Approval cards
The hub's own question, the permission, the exact calls. A standing yes can be limited to the values the card names: always, but only for this repository.
The window meter
How full the context window is, with the same numbers the hub acts on, and a note when older turns are read as a summary.
Headed mode
Watch another program talk to Lucy.
A coding agent can drive a conversation from a terminal while you watch it in the browser. Sessions it starts are badged, their messages are labelled, and Follow switches your screen to whatever is live, unless you are typing or deciding a card.
node scripts/headed.mjs new "refactor the parser"node scripts/headed.mjs say ses_0192… "run the tests and tell me what breaks"When Lucy parks on an approval mid-task, the terminal is told the card is waiting in the UI, and the answer stays yours.
Run it
Three commands against a running hub.
- Have the LUCY hub running, on port 8000 or wherever
LUCY_URLsays.git clone https://github.com/tochi-mba/LUCY-ui && cd LUCY-ui && npm install - Start the client. It proxies the hub's paths, so the hub needs no CORS policy.
npm run dev - Sign in without a password: the page shows a code, and a terminal already signed in approves it.
lucy approve ABCD-EFGH
No hub nearby? npm run dev:fake serves the same client against a scripted hub with a music card to approve, a failing turn, and a self-approving sign-in.
Safety
A client that renders, and nothing more.
Tokens stay in the tab
The sign-in lives in this tab's session storage, never a URL or a log. The chip counts its fifteen minutes down and signing in again keeps the page exactly as it was.
Lucy's words are untrusted
Markdown renders with raw HTML escaped and unsafe link schemes refused; every link opens in a new tab that carries no opener.
The card shows the hub's question
What you approve is the hub's description of the call, never a sentence a model composed, and the grant is re-checked by the hub before anything runs.