Skip to content

T0mSIlver/localvoxtral

Repository files navigation

localvoxtral

localvoxtral app icon

Talk to your coding agents. Keep every word on your Mac.
Realtime, fully local dictation for the menu bar. Press a key and speak — your words appear while you're still talking.

GitHub stars   Latest release   License

demo.mp4

Unlike tools that transcribe after you stop speaking, localvoxtral streams text as the audio arrives, powered by Mistral AI's Voxtral Mini 4B Realtime running on your own Apple Silicon. It is built first for prompting coding agents by voice, and it stays a solid general dictation app everywhere else. Everything runs on-device — no account, no subscription, nothing leaving your Mac (see Privacy).

Install

curl -fsSL https://raw.githubusercontent.com/T0mSIlver/localvoxtral/main/scripts/install.sh | bash

Or download the latest .dmg from Releases.

On first launch, a setup wizard walks you through the microphone and Accessibility permissions and downloads the local engine with live progress. Dictate the moment it finishes. You can re-run the wizard any time from Settings.

Note

Requirements: an Apple Silicon Mac running macOS 15 or later.

Important

Releases are ad-hoc signed, not notarized yet (see Roadmap). The installer script handles Gatekeeper for you. If you install the DMG by hand and macOS blocks or stalls the first launch ("damaged", Open Anyway, or a hang on macOS 26), clear the quarantine flag:

xattr -cr /Applications/localvoxtral.app

Features

  • Built for coding agents — terminals are first-class targets and polishing understands developer speech (details)
  • One-key dictation — a single modifier key (Fn/Globe, Right Command, or Right Option) drives both modes, or use classic per-mode keyboard shortcuts (details)
  • Two output modes — Overlay Buffer (review, then commit on stop) or Live Auto-Paste (words land in the focused app while you speak)
  • Automatic cleanup — an exact-match replacement dictionary in both output modes, plus optional LLM polishing with editable prompts when an Overlay Buffer dictation commits
  • Bring your own server — dictation and polishing can each point at any OpenAI-compatible endpoint instead of the built-in local engines
  • Menu bar native — instant popover with dictation status at a glance, microphone picker, auto-copy of the final text, and the raw transcript one click away after a polished commit

Tip

If localvoxtral is useful to you, a ⭐ on this repo helps others find it.

Privacy

In the default Managed local mode, nothing you say or write is sent anywhere. Audio capture, transcription, and LLM polishing all run as local processes on your Mac, and the only network traffic is the one-time engine and model download. There is no telemetry, no account, and no cloud fallback. The context-aware polishing features (repo vocabulary, clipboard context) are opt-in and only ever talk to a loopback polishing endpoint, never a remote server. If you point localvoxtral at your own External URL server instead, your data goes only where you send it.

Shortcuts

Two ways to trigger dictation, configured in Settings → Dictation:

Single modifier key — Fn/Globe, Right Command, or Right Option. One key, two gestures:

Gesture Behavior
Tap Toggle Overlay Buffer dictation on/off
Hold (past the hold delay, default 350 ms) Live Auto-Paste push-to-talk — dictates while held, stops on release

The gesture selects the output mode, so both workflows are always one key away. A tap commits through optional LLM polishing, while a hold streams words in real time (the replacement dictionary applies in both). Pressing any other key while the modifier is down cancels the gesture, so regular keyboard combos involving the modifier are unaffected. Requires Accessibility permission.

Per-mode keyboard shortcuts — separate shortcuts for Overlay Buffer and Live Auto-Paste; behavior follows the Toggle / Push to Talk setting.

Escape cancels an in-progress dictation.

Terminals & coding agents

Most dictation tools fall apart in a terminal. localvoxtral treats it as its primary target: prompt Claude Code — or any CLI coding agent — by voice and watch the words stream in live. SSH sessions work too, since text is typed into your local terminal. Terminal apps are detected automatically (Terminal, iTerm2, Ghostty, Warp, WezTerm, kitty, Alacritty, cmux, and more), and apps that embed a terminal can be added in terminal_apps.toml. Live dictation adapts:

  • Prompt-safe output — newlines and tabs are typed as spaces, so a stray line break never submits a half-finished prompt and a tab never triggers shell completion
  • Replacements without rewriting — dictionary replacements are applied before text is typed; localvoxtral never backspaces over what the terminal has already drawn
  • Secure input handling — if Secure Keyboard Entry is active (a sudo password prompt, say), a live session refuses to start instead of typing into the void, and an overlay commit falls back to copying the text to the clipboard

When an Overlay Buffer dictation commits, optional LLM polishing understands how developers talk:

  • Agent prompt profile (on by default) — when the target is a terminal, polishing switches to an agent-tuned prompt. Spoken symbol forms become written ones ("dash dash force" → --force, "src slash auth" → src/auth, "the dot env file" → .env), code-like tokens (and only those) get backticks, filler words are stripped, self-corrections resolve to the final intent, and explicit enumerations become lists
  • Model-first polishing — both prompt profiles trust the model's final wording and technical formatting so useful Markdown and reconstructed identifiers survive; only explicit clipboard-paste placeholder-count integrity remains as a post-model fallback
  • Repo vocabulary (opt-in) — when the terminal sits in a git repo, localvoxtral indexes the repo's file list (a single sandboxed git ls-files, cached briefly) and passes up to 12 relevant terms as hints to the polisher, so "use auth dot t s" comes out as useAuth.ts. Hints only, never automatic replacement
  • Clipboard as context (opt-in) — the polisher sees a sanitized excerpt of your clipboard to ground technical spellings
  • "Paste clipboard" macro (on by default) — say it mid-dictation and the clipboard content is embedded as a code block when the text commits

The overlay shows a Polished badge whenever the LLM touched your text, and the raw transcript stays one click away in the menu bar popover.

Settings

Open Settings from the menu bar popover:

  • General — permission status for Microphone and Accessibility (with grant buttons), copy-final-segment toggle, and Re-run Setup
  • Endpoints — Dictation and Polishing each switch independently between Managed local (a model picker for polishing, plus a status light) and External URL (endpoint URL, model name, API key)
  • Dictation — the trigger (single modifier key with tap/hold gestures, or per-mode keyboard shortcuts) and the menu-bar output mode
  • Text Processing — exact-match replacements, plus the LLM Polishing switch and its agent-dictation features (agent prompt profile, repo vocabulary, clipboard context, spoken clipboard paste)
  • About — version, link to this repository, and Export Diagnostics (writes a redacted local report to the Desktop)

The config folder at ~/Library/Application Support/localvoxtral/config holds replacement_dictionary.toml, the LLM prompt TOMLs (including the agent variants), and terminal_apps.toml. When an update ships improved defaults, files you haven't edited are refreshed automatically; files you have edited are never touched without asking — the app offers to update them and keeps your versions as .backup files alongside.

Under the hood

In Managed local mode (the default), localvoxtral launches and supervises two inference engines for you — no terminal required:

  • Dictation — voxmlx streaming Voxtral Mini 4B Realtime in 4-bit. localvoxtral ships a tuned build that adds a native OpenAI Realtime WebSocket server and memory-management optimizations for long dictation sessions.
  • Polishing — a bundled native engine built on Apple's MLX Swift, running Qwen3.5-4B-OptiQ in 4-bit by default (a lighter 0.8B and a larger 9B are one click away in Settings). A warm prompt cache keeps polish latency low, and the engine runs as a supervised helper process, so turning polishing off frees its memory immediately.

The dictation engine installs from pinned, checksum-verified releases into ~/Library/Application Support/localvoxtral; the polishing engine ships inside the app bundle. Model weights download from Hugging Face at an exact pinned commit, so an upstream edit to a model repo can never change what your install runs. Neither engine ever outlives the app (a watchdog stops them even after a crash), and uninstalling means deleting the app and that one folder.

Prefer your own hardware? Switch Dictation or Polishing to External URL in Settings → Endpoints: any OpenAI Realtime-compatible server works for dictation, any chat-completions server for polishing.

Example: Voxtral Realtime on vLLM (NVIDIA GPU)
VLLM_DISABLE_COMPILE_CACHE=1
vllm serve mistralai/Voxtral-Mini-4B-Realtime-2602 --compilation_config '{"cudagraph_mode": "PIECEWISE"}'

The settings recommended on the model page, tested against an NVIDIA RTX 3090.

Build from source

./scripts/package_app.sh release
open ./dist/localvoxtral.app

Screenshots

localvoxtral menubar icon Menubar icon

General Endpoints
localvoxtral general settings localvoxtral endpoints settings
Dictation Text Processing
localvoxtral dictation settings localvoxtral text processing settings

Roadmap

  • Developer ID signing + notarization — install with no Gatekeeper workarounds
  • End-to-end quality evals — realistic audio → transcription → polish benchmarks driving technical-dictation quality (in progress)
  • Documentation website — a visual, end-user guide beyond this README
  • More streaming ASR models beyond Voxtral Realtime — e.g. NVIDIA Nemotron 3.5 ASR Streaming 0.6B

License

MIT

About

Native macOS menu bar app for realtime dictation with optional LLM polishing. Connects to any OpenAI Realtime-compatible backend — fully local on Apple Silicon with voxmlx + mlx-swift-lm.

Topics

Resources

License

Stars

45 stars

Watchers

1 watching

Forks

Packages

 
 
 

Contributors