I started Voxwire on September 14th, and today I’m open-sourcing it. It lets you talk to your computer through a throat mic: quietly, hands-free, and on your own machine. You can find it at https://github.com/66mhz/open-voxwire. MIT licensed.

I built it because I wanted to be able to give commands in disguise, using internal, subvocal sounds. Subvocal speech is something I’m personally interested in, and a throat mic is the first step toward it.

You murmur into a throat mic. Its signal and an ordinary air mic's are fused into one, transcribed on your machine, and the text is typed where your cursor is. You murmur into a throat mic. Its signal and an ordinary air mic's are fused into one, transcribed on your machine, and the text is typed where your cursor is.

Talking to your computer works until you are in an open office, on a call, next to someone asleep, or in a noisy workshop. A throat mic fixes that. It rests against your neck and picks up your voice through your skin, so you can murmur, the room stays out, and the people around you don’t hear your commands.

The idea is old. Second World War aircrews used throat mics to talk over engine noise. Today they are sold for two-way radios, motorcycle helmets, airsoft and gaming.

A throat mic, worn: a thin band around the neck holds two small round contact transducers against either side of the larynx. A throat mic, worn: a thin band around the neck holds two small round contact transducers against either side of the larynx.

The catch Link to heading

A throat mic hears your voice but not your mouth. The hiss of s, f, t, k and sh comes from your lips and tongue, not your vocal cords, so it never reaches the mic. Speech recognition then stumbles exactly where commands live: “stop the test” instead of “stop the tests”. That is why so little software supports throat mics well.

Missing data is a capture problem, not a model problem. A bigger speech model cannot recover a sound that was never recorded. It can only guess. So Voxwire does not make it guess. It pairs the throat mic with an ordinary air mic and fuses the two.

Spectrograms of one phrase from a throat mic, an air mic and Voxwire's fusion. The throat mic keeps the voice but loses the hiss of the s in 'tests'. The air mic has it, along with room noise. The fused signal keeps the voice, restores the s, and is silent before and after the phrase. Spectrograms of one phrase from a throat mic, an air mic and Voxwire's fusion. The throat mic keeps the voice but loses the hiss of the s in 'tests'. The air mic has it, along with room noise. The fused signal keeps the voice, restores the s, and is silent before and after the phrase.
One phrase, three ways, through Voxwire’s own fusion code. This is an illustration: a synthesized voice, with the throat channel simulated by a 1 kHz low-pass. On this clip the on-device recognizer heard “stop the test” from the throat channel and “stop the tests” from the fused one.

Voxwire is not another Whisper wrapper. It is built around that gap.

How it works Link to heading

  1. Capture. Hold the hotkey and murmur. Voxwire records the throat mic, and the air mic too when both come in as one 2-channel input.
  2. Fuse. The throat mic carries the band below about 900 Hz, where your voice lives and room noise can’t reach. The air mic fills in the consonants above it, but only while the throat mic says you are speaking.
  3. Transcribe. Locally. MLX (Whisper, Parakeet) on Apple Silicon, faster-whisper on Windows, Linux and Intel Macs. Your audio does not have to leave the device.
  4. Clean up, optionally. A cleanup pass fixes misheard words, and only those.
  5. Act. The text is pasted at your cursor, or routed to a plugin. Anything risky waits for you.
Fusion: the throat mic supplies the band below about 900 Hz; the air mic supplies the band above it through a voicing gate that opens only while you speak; the two are merged into one signal for speech-to-text. Fusion: the throat mic supplies the band below about 900 Hz; the air mic supplies the band above it through a voicing gate that opens only while you speak; the two are merged into one signal for speech-to-text.

The voicing gate opens 150 ms before your voice and holds 200 ms after, because sounds like the s in “stop” sit just outside the voiced part. That keeps the room out of the pauses around what you say. Three modes ship: fusion, throat-only (stealth), and air-only. Fusion needs both mics on one 2-channel device, such as a USB audio interface or a macOS Aggregate Device, so both mics share one clock.

Fix, don’t invent Link to heading

An early version asked an LLM to reconstruct the intended command from a degraded transcript. It hallucinated: “continue” became “okay, start execution”. For a tool that sits between your voice and your machine, that is the worst possible failure.

So the cleanup may fix a word but never invent one, and that is enforced structurally, not by a prompt. The reply is aligned word for word with the transcript, and it is kept only if every changed word is a close spelling of the one that was heard. If anything is added, dropped, or swapped in, you get the raw transcript back. There is still a known limit: a close-spelled word can flip the meaning (“not” → “now”). That is why the cleanup is off by default.

Safe to wire up Link to heading

An always-on mic that can run commands is a real attack surface. The agent cannot approve its own risky actions. Approval belongs to the executor, in a native dialog, and is denied by default. Tools that touch your shell, files or desktop stay off on every OS until that dialog provably rejects synthetic clicks. It is not built yet, so today Voxwire cannot run shell commands, edit files, or drive your desktop. I’d rather ship it that way than the other way around.

Status Link to heading

Voxwire is early software.

Works today:

  • Local dictation with a throat mic or a regular mic, pasted at your cursor
  • Pluggable speech-to-text backends
  • Dual-mic fusion from a 2-channel device
  • The optional cleanup pass
  • Plugins, including ones that live outside the repo
  • A menubar app on macOS that starts at login, a tray app on Windows and Linux, and a web config at 127.0.0.1:8123

In progress:

  • Measuring fusion’s word-error rate on real throat-mic recordings. Until then, no accuracy claims.
  • Throat-only enhancement for stealth mode
  • Shell, file and desktop tools behind the confirm dialog
  • An authenticated listener for a Wi-Fi capture node
  • A bundled Voxwire.app
Voxwire's web config: a throat + air Aggregate Device selected, the speech-to-text model, the fixup switch, dual-mic fusion turned on, global push-to-talk dictation, and a hold-to-talk button.

In its first two weeks: 98 commits, 13 merged pull requests, and about 6,800 lines of Python. Every pull request runs lint, tests, a leak check and a secret scan. Nobody should ship software without tests, verification, and documentation, and a repo that is about to go public needs the leak check on top.

Where it could go Link to heading

Under the hood, Voxwire is a quiet voice channel into a machine you control, with a gate in front of anything risky. That could enable a lot more than dictation. None of this ships today. Each one is a plugin, a board, or a model away:

  • Coding agents. Murmur a task without reaching for the keyboard. Any risky step waits at the gate.
  • Hands-busy, noisy work. A workshop, a lab, the field. The throat mic barely hears the noise around you.
  • Home and lab automation. A Home Assistant or MQTT plugin, without waking the house.
  • Robots. Robots are loud, and a throat mic mostly ignores airborne noise.
  • Wearables. The Wi-Fi capture node has a build spec: one small board that streams the throat and air mics on a shared clock.
  • Accessibility. A private, local voice path for people who find typing painful or can only speak quietly. Nobody has tested Voxwire for this yet.

Research directions Link to heading

Two open questions. Both would be trained on paired throat and air recordings, which the capture node is designed to collect.

  • Throat-only accuracy. A model that restores the consonants from the throat channel alone would make stealth mode as accurate as fusion.
  • Small speech-to-text models. Voxwire already runs models from Whisper base (about 150 MB) to Whisper large-v3 (about 3 GB). The question is how small a model can get when it only has to handle one speaker, one throat mic and a short list of commands. If it fits on the wearable, only text would leave it.

Try it Link to heading

git clone https://github.com/66mhz/open-voxwire && cd open-voxwire
./scripts/install.sh
cd voxwire && ./run.sh app

Hold ⌥ + ⌘, murmur, release. The first time, macOS asks for Microphone, Accessibility and Input Monitoring.

Any throat mic your computer sees as a microphone works for dictation and stealth mode. For fusion, the easy route is a wired throat mic and an air mic on a 2-channel USB audio interface.

If you have a throat mic in a drawer, try it and tell me how it goes. If you want to build one of the ideas above, most of them start as a plugin; see CONTRIBUTING.md. Reach out.