Introduction
Voice to action, as fast as dictation.
Voice to action, as fast as dictation
You say "reply to Lawrence, I'll see him tomorrow" — and it happens at the speed of speech. That's the goal. Today's voice control lags because of three things, and each has a fix:
- Vision models. Agents screenshot the screen and ask a vision model where to click. Your computer already exposes every button and field as text — the accessibility tree. Reading text beats looking at pixels.
- Waiting for the full response. Models stream token by token, yet agents wait for the whole plan before acting. Stream the actions instead, and execute each one the moment it arrives.
- Figuring out what you meant. Which app? Who's Lawrence? This is the real latency killer — and most of what you do, you've done before. Learn it once; next time, skip the model entirely.
The idea
axstream is a small structured language — one action per line — that a model can stream, a runtime can replay, and a person can read:
{"op":"act","do":"open","target":"Notes"}
{"op":"act","do":"wait","ms":500}
{"op":"act","do":"type","text":"remember to buy milk"}
{"op":"done","status":"success"}Each line executes the instant its newline arrives — the open fires while the
model is still generating the type. A line either arrives whole and valid or
it doesn't execute, so streaming is safe by construction.
One language, three speeds:
- Instant — commands you've used before replay directly, ranked by frequency and recency (zoxide's trick, applied to actions). A local 350M model matches your words to a learned command in ~100ms. No LLM in the loop.
- Fast — novel commands are planned by a streaming LLM over the accessibility tree, executing as lines arrive. Every success is captured into the instant tier — the system gets faster the more you use it.
- Fallback — apps with no clean accessibility surface get driven by computer use.
Hold ⌃⌥ and talk
The reference surface is AxstreamBar, a native menu bar app: hold control-option, speak, release. Local whisper hears you (~450ms), an embedding shortlist plus the fine-tuned matcher pick the workflow (~140ms), and the verified replay runs — with a HUD narrating every step. Compound commands chain ("open blender and add a sphere then delete the shape"), slots fill from your words, and anything unknown is constructed once by an LLM and saved as a workflow with its variables identified. → The voice menu bar
Not just voice: your coding agent's fast hands
The same replay layer plugs into Claude Code and Codex — one
axstream install gives the agent a skill plus MCP tools: read the screen as
text instead of screenshots (~200ms), execute whole batches of verified
actions in one call, and compile any task it has done once into a macro that
replays in seconds with zero model calls. Clicks resolve through a verified
ladder (accessibility element → OCR text anchor → visual patch →
window-relative pixels) and a macro is never trusted until a live replay
passes its outcome assert. → For coding agents
Measured, not promised
From the reference implementation, on a live macOS machine:
| stage | measured |
|---|---|
| Scoped accessibility-tree observation | ~150ms |
| Full plan from a fast LLM (Groq, one burst) | ~0.4s |
| Streaming execution vs wait-then-act | 37% wall-clock saved |
| Instant tier: match a spoken command | ~100ms |
| Instant-tier accuracy (open fine-tuned 350M matcher, v2) | 96% on the live-library battery |
| Wrong-action rate on unknown commands (v2 vs v1) | 23% → 4.8% |
| Embedding shortlist recall@3 over the live library | 100% |
The format is model-agnostic and transport-agnostic: any LLM that can stream text can produce it; any runtime that can parse a line can perform it.
The voice menu bar
Hold ⌃⌥, speak, release — the native app.
The Spec
The action language: wire format, actions, execution contract.
Quickstart
See it run in two minutes, no keys required.
For coding agents
Fast verified computer use for Claude Code & Codex — one install.
Roadmap
What's shipped, what's next.