The Glasses Got a Remote, Not a Brain

Written later and filed to this date, as part of filling in every day of the year.

For four days the glasses were going to get a brain of their own. The app that puts a coding session on the heads-up display was scaffolded on a Monday at the end of May with a bridge that spawned a fresh model session through the vendor’s agent SDK: a new, parallel agent, started by the bridge, answering to nobody else. The plan file locked that choice the same day.

On the Thursday the vendor began metering programmatic use, the SDK and the headless command line, against a credit pool, even on the flat-rate plan; interactive use stayed unmetered. A decision recorded it and named three projects that could draw on the pool, and that afternoon the bridge got a budget: one hook that refuses a turn before any spend when the pool is over its cap, one that records the turn’s cost after. Ninety-eight tests, typecheck clean.

Twelve hours later, in the small hours of the Friday, a design document superseded the arrangement in a paragraph. Two problems with the separate brain, it said, measured against what was actually wanted. It was not the sessions already running in the terminal; the point of the glasses was to see and drive those, not a stranger started beside them. And it was metered, when every one of those sessions was not. The daemon that supervises the background agents listens on a control socket, and the watchdog already had a tested client for it: list the jobs with their states, inject a reply into one, accept the reply a blocked job suggests for itself. The bridge became a thin remote over that socket. It lists the real fleet, tails each job’s distilled timeline, and sends replies. It spawns nothing.

The commit that landed it by late morning deleted the agent module, the permissions module, their tests and the SDK dependency: 1,044 lines out, 78 in. The budget gate from the afternoon before went with them, not yet a day old, because the thing it metered no longer existed. One operation was left out on purpose. Starting a brand-new session through the daemon needs a launch descriptor whose shape nobody had verified, only the resume shape was confirmed, so that path short-circuits with a clear error rather than send the daemon malformed frames, and the gap is written into the plan as the one thing the milestone does not do.

The rule, as the decisions file records it: “g2-claude brain = the Claude Code daemon control socket (supersedes the Agent-SDK brain)”. Under it, a narrowing of the Thursday’s decision: the app is no longer a funded spender from the pool. It rides the daemon’s ordinary flat-rate use.

The one-line goal at the top of the spec did not change between the two brains. What changed is the adjective before “session”. It had been fresh. It became real.


← all writing