VOICE · LINUX DAEMON

heard

Voice-controlled tooling daemon for Linux. Hold Shift, speak, release.

Deployed on real hardware with systemd, single-instance flock, unix-socket IPC, and a GNOME Shell extension.

Python 3.13+ faster-whisper MiniLM evdev Linux
PTT (evdev) → Whisper STT → Embedding classifier (MiniLM) │ │ │ Needle LLM fallback │ │ ▼ ▼ Intent resolution ──→ Tool dispatch │ ┌─────────┬───────┼───────┬─────────┐ ▼ ▼ ▼ ▼ ▼ Media Volume Windows Hyprland Custom control control manage layout handler

Problem

Voice assistants on Linux are either cloud-dependent, privacy-invasive, or too generic. There is no lightweight, offline, intent-based voice interface for developer tooling that runs entirely on local hardware.

Why it's hard

Voice-to-intent on Linux requires: real-time PTT capture without X11/Wayland dependency, offline STT that runs on consumer hardware, a classifier that maps spoken phrases to tool invocations across two languages, and a security model that prevents arbitrary command execution via voice. The two-stage classification (MiniLM centroids → Needle LLM fallback) must complete in <500ms to feel responsive.

Architecture

Push-to-talk via evdev

Captures raw keyboard events directly. No X11/Wayland dependency. Works across all desktop environments.

Two-stage classification

MiniLM embedding centroids for fast local intent matching. Falls back to Needle LLM for ambiguous or novel commands. Bilingual EN/ES classifier with measured accuracy.

Shell allowlist

Tool handlers use a strict allowlist for shell commands. Arbitrary command execution is blocked by design.

System integration

Systemd unit with single-instance flock. Unix-socket IPC. JSONL event log. GNOME Shell extension for visual feedback. Daemon mode for background operation.

Results

Test count
299
Test lines
2,458
Source lines
4,399
Status
DEPLOYED

Tradeoffs

  • ·Linux-only (evdev dependency)
  • ·Requires local STT model download on first run
  • ·Bilingual classifier accuracy varies by accent and noise level