Describe the app
"I want a tile that shows tonight's dinner options and lets me vote." Plain language, from the phone, often while out.
Structured file writes
The AI replies with tagged write blocks — manifest first so the tile appears immediately, then UI, then an API router if the app needs state.
Hot reload
Every write is snapshotted for rollback, the plugin registry rescans, and the hub broadcasts the updated app list over WebSocket.
It's on the phone
The new tile is live on every connected screen. Total elapsed time: about one model response.
The write contract
The build engine's entire interface is one tag it may emit anywhere in a reply:
<WRITE_FILE slug="dinner-vote" file="plugin.json">
{ "name": "Dinner", "icon": "🍜", "description": "Tonight's options — tap to vote" }
</WRITE_FILE>
- Manifest-first convention: the tile shows up in the hub before the UI even exists, so the human sees progress instantly.
- Every write is versioned: the hub snapshots the previous file before overwriting. A bad generation is a one-step rollback, which is what makes letting an AI write production files tolerable.
- Bounded blast radius: the engine writes into the plugin tree; apps inherit the hub's auth perimeter rather than defining their own.
It can rebuild itself, too
The same contract accepts slug="portal" — the AI can patch the hub server itself. The service manager restarts it on write and picks up the new code. The platform that hosts the build engine is a valid build target of the build engine; several of the hub's own features were added this way, from the phone.
Guarded autonomy: the Nova gate
Self-building is only safe if action-taking is disciplined. The voice assistant runs behind two mechanisms built for that:
- End-of-utterance detection — a dedicated detector decides when the human has actually finished speaking, instead of firing on every pause.
- A decision gate with an audit trail — every proposed action is logged with its accept/reject verdict to append-only journals. The assistant is instructed never to claim an action happened unless the platform confirms it did.
A harder loop: coaching against reality
The most demanding AI subsystem is Code Coach: it watches a real monitor over HDMI capture, reads the learner's editor with a vision model, maintains a plan of the solution, and coaches one line at a time. Its 24 shipped versions were mostly lessons in grounding — filtering scaffolding stubs from seeded plans, refusing no-op corrections that would loop forever, and treating "replace" edits whose text already exists as moves rather than duplications. Reasoning against a live, noisy sensor is a different sport from reasoning against text.