Technology · FlashBrain
The reflex layer.
Zaelar's own orchestration code — not a general-purpose reasoning agent. It starts answering within a second or two — set phrases in milliseconds — drives the canvas, and decides what's worth escalating.
Every input — a voice turn, a connector message, a UI click, a message from another agent on the network — passes an attention gate before it ever reaches a model: is this actually directed at the agent, or ambient noise? With the mic always open (no wake word needed), a cold turn — the start of a session, or after a silence — is judged by a fast model reading the sentence itself, not just a timer; inside a live exchange, every turn counts. Does it need a hard interrupt ("stop", "close everything")? That check stays a deterministic rule — it can never wait on a model. And some turns are answered before the prompt is ever built: a known command, a greeting, "thanks", "are you there?" — set phrases that carry no request, answered from a per-language table in milliseconds instead of seconds. Only what's left goes to the prompt.
One small prompt, composed live
The prompt isn't a static persona — it's assembled per turn from live state: identity and mission, what's on screen right now, a synthesized slice of recent conversation, plus a terse layer of available tools. A small, fast, non-reasoning model reads it and responds with either spoken text or a tool call. Which model that is ships as a sensible default and is yours to change from the config UI — never baked in.
A fourth kind of content can ride that prompt: phase context. Some instructions belong to a stretch of the relationship rather than to the agent forever — the first conversation, where the agent leads you both toward actually meeting, is the one that ships today. A phase carries its own block, is re-judged every turn, and archives itself the moment it is over: the text stops being sent, and the agent goes back to being what it always was. It is deliberately kept out of the cached part of the prompt, because a cached phase is one that keeps talking after its phase has ended.
A second opinion that never blocks
A few calls in a turn are genuinely hard for a small model and trivial for a specialist: is this an errand worth a Brain Worker, or just chatter? Does this sentence license opening or closing a card? With three cards open, which one is "close that" about — and with two of the SAME kind open, which of those? Those go to a choice classifier — a different kind of model, one that never writes text: it is handed an enumerated list of options and returns one of them with a calibrated confidence.
Three properties make that safe to put on a live voice turn. It is asked once: every question the turn needs travels in a single round trip, because the cost is the trip, not the questions. It is asked the moment your sentence is complete — not on the first fragment of it — and read after the model has answered, so nothing ever waits on it — a verdict that comes back late, unsure, or not at all leaves the deterministic path exactly as it was. And its options are always declared capabilities — the actions an app on screen actually publishes, the two sides of the escalate decision — never free text, so even a confident wrong answer can only pick a path that already exists and is already gated. Nothing it answers executes anything by itself. Switch it off and the engine behaves as it did before it existed.
The same classifier does one job off the turn entirely. Ask for "the flat search you had me do last week" and a full-text index narrows your past commissions to at most five candidates with no model involved; the classifier picks the one you meant out of those. When several fit equally well it asks — opening the wrong report looks exactly like opening the right one, and you would read it before noticing.
Tool catalog
The model decides what to do by calling a function, not by matching keywords. That keeps the decision reliable even on a small, cheap model. The tools offered change with context — most only appear when they're actually relevant.
| tool | what it does | when it's offered |
|---|---|---|
| escalate | Launches a Brain Worker | always |
| web_search | One factual answer from the search service, resolved in the turn | always |
| search_listings | A fast listing pass — options side by side on a results sheet | always |
| show_images | Finds pictures and shows them on the canvas | always |
| reopen_task | Reopens a past commission with its results | always |
| need_capability | Asks for a tool the turn's narrowed catalog left out | always |
| recall | Reaches into durable long-term memory mid-turn | always |
| reveal_secret | Fetches an encrypted operator secret, out-of-band | when a vault exists |
| play_music | Fuzzy music requests, resolved in-turn | always |
| play_video | Loads a video in the video app | when that app exists |
| show_widget | Opens an app by its name or an alias — never a guess | when apps exist |
| close_widget / arrange_canvas / fullscreen_widget | Closes or minimizes, arranges, or goes full screen | when apps are open |
| read_widget | Reads what an open app is showing, to answer about it | when apps are open |
| restore_widget | Brings back a deleted app or item | when there is something to restore |
| show_panel | Opens the native side panel — chat, processes, schedules or networks | always |
| widget_data | Runs one declared action on an open app | when apps are open |
| manage_widget_alias | Adds or removes a name/alias an app answers to | when apps exist |
| reply_message | Drafts a reply, gated by a confirm step before sending | when a messaging channel is linked |
| delete_widget | Deletes an app for good, with confirmation | when apps are open |
| set_style_directive | Applies and persists a standing behavior rule | always |
| authenticate_web | Opens the browser to log in to a site | always |
| connect_cluster | Joins an agent network — private, or public with no credentials | always, behind a Yes/No confirm |
| cluster_send | Says something to a network, or to one agent in it | only when a network is connected |
| set_cluster_objective | Sets what a conversation with a network is for | only when a network is connected |
| send_to_worker / stop_worker / answer_worker | Steers a live Brain Worker | only with live workers |
need_capability. The FlashBrain never touches the executor directly. Anything that needs real reasoning goes through escalate to a Brain Worker.