Accessible, Local, Deterministic Voice Navigation Engine for Zen Browser (Gecko)
zenKev provides native, zero-latency, CPU-first voice control for Zen Browser through deep integration with Gecko's Accessibility Object Model (AOM), bypassing the visual DOM and communicating with an ultra-fast Rust inference daemon.
[ User Voice Command ]
│
▼
[ Audio Pipeline: Silero VAD + Whisper STT ]
│ (Transcript text)
▼
[ Gecko Content: ZenVoiceNavChild ] ◄── Extracts actionable AOM nodes via nsIAccessibilityService
│
▼ (IPC sendQuery)
[ Gecko Chrome: ZenVoiceNavParent ]
│
▼ (Stdio NDJSON)
[ Rust Daemon: zen-voice-engine ] ◄── Lexical pruning & Intent Decision (<0.1 ms latency)
│
▼ (Target Action)
[ Gecko Actuator ] ──► Direct accNode.doAction(0) / takeFocus()
-
modules/voice-nav/(Gecko JSWindowActors):ZenVoiceNavChild.sys.mjs: Runs in content processes. Iteratively traversesnsIAccessibletrees, prunes non-interactive elements and elements outside the current viewport.ZenVoiceNavParent.sys.mjs: Runs in the parent/chrome process. Acts as the orchestrator and IPC bridge.ZenVoiceEngineClient.sys.mjs: Manages the lifecycle and Stdio NDJSON pipe to the Rust daemon.
-
modules/voice-engine/(Rust Inference Daemon):lexical_ranker.rs: Sub-millisecond pre-ranking and pruning using token n-grams and normalized similarity.nli_engine.rs: ModernBERT Natural Language Inference intent decision classifier.mimallocallocator: Zero-fragmentation memory allocation under high throughput.
zenKev does not intercept OS-level accessibility APIs (IAccessible2, UIAutomation, NSAccessibility). It queries Gecko's internal nsIAccessibilityService concurrently as a passive observer, preserving virtual cursors and focus states for external screen readers.
cd modules/voice-engine
cargo test --releasecargo build --release --manifest-path modules/voice-engine/Cargo.toml
node modules/voice-engine/tests/benchmark_throughput.mjsThe fine-tuned Kev-4B checkpoint is hosted on Hugging Face: Ttotopo27/zenkev-v6.
To start the local HTTP bridge server:
python scripts/serve_zenkev_bridge.pyNote: If no local checkpoint path is defined via ZENKEV_MODEL_PATH, the bridge will automatically download and resolve the checkpoint from Ttotopo27/zenkev-v6.
Mozilla Public License 2.0 (MPL-2.0). See LICENSE for details.