The hardest part of a local voice assistant, says the developer behind Alkove, is not the Large Language Model: it is what happens before the voice reaches speech-to-text and the model. In his work on a real-time browser voice agent, the biggest problems came from people talking next to the user: they ended up in the transcript, opened false turns and triggered interruptions. The denoiser could not help, because other voices are still speech.

From that experience comes Alkove, an on-device voice front-end released as an early preview with Apache-2.0 code and weights. Five models totaling about 7.5 MB run on an inference engine written in Rust, compiled to WebAssembly for the browser and natively for Python and Android. Lex turns a typed word into likely pronunciations, so the wake word requires no training or recording session. Spot listens for those pronunciations in seven languages. Timbre builds a voiceprint from three repetitions of the wake word and keeps learning during the conversation. Focus keeps the closest voice or the one matching the voiceprint, removing noise, music and other voices before STT. Cue detects speech every 30 milliseconds.

The project does not use onnxruntime: its own runtime, 134 KB compressed with brotli, produces identical outputs on ARM, x86 and wasm. On one smartphone thread, Focus processes one second of audio in 38.6 milliseconds, Spot in 7.5 and Cue in 1.7. Packages cover npm for browser and Node, pip for Linux, macOS and Windows with numpy as the only dependency, Android in Kotlin and plugins for LiveKit Agents and Pipecat. In AMI meetings recorded on headset mics, words from other people reaching the transcript go from about 17 per minute to 0.5 with Focus and a voiceprint. Spot, on typed single words, recalls 67% of them in English at one false alarm per hour, 90% in French and 85% in Portuguese. The developer acknowledges that on a tabletop room mic the system also removes the other participants, and that two simultaneous voices of the same register remain hard to separate. Audio is processed at 16 kHz.

Alkove shifts a piece of control to a point usually left to the cloud or generic components. It is not a simple VAD: the personal voiceprint is used in three different places, to ignore other voices in the wake word, to keep only the user in the flow toward STT and to turn Cue into a personal VAD. This reduces the number of other people's words reaching the transcript and, as a result, the semantic noise the LLM has to interpret. In a self-hosted deployment, the benefit is not only latency but predictability: fewer false barge-ins mean fewer model calls, fewer wasted tokens and more stable behavior.

For those designing local or on-premise assistants, the lesson is that perceived quality depends on small specialized components as much as on the main model. A 134 KB inference engine and models of a few megabytes allow preprocessing to run on the user's device without sending raw audio to external servers. This has implications for data sovereignty: the voiceprint and audio stay local, and teams managing infrastructure with residency or compliance constraints can reduce the exposed surface. The latency numbers on a single phone thread point to a modest CPU load, which weighs little on the overall TCO of an edge deployment. For those evaluating on-premise deployment, trade-offs exist between small specialized models and cloud pipelines; AI-RADAR offers analytical frameworks at /llm-onpremise to evaluate them. We are looking at a 0.x preview: APIs may still change, and the developer is asking for feedback especially from people running local voice assistants, on where it breaks and which integrations they would want next.