The model got small. The input path did not.
Cactus says Whistle puts speech recognition in one 16.9 MB model file. The vendor says it runs on a CPU, handles seven languages, accepts up to 30 seconds of 16 kHz mono audio, and can return word timing and probability. Its published speed figures come from the vendor's own Apple M4 Pro test, not an independent benchmark.[1]
That size matters for local tools. A coding cockpit could transcribe a short request without sending the recording to a remote speech service. The more important design question starts after transcription. What can the resulting text do?
Speech is input. A transcript is a proposal. Neither one is permission.
Keep four records separate.
Record the audio capture state, the model and revision that produced the transcript, the text a person inspected, and the exact action a person confirmed. If the product collapses these records into one glowing microphone button, a recognition mistake can jump straight into a command.
Whistle's own example can feed audio into a model that returns tool calls. That is useful plumbing. It also makes the review boundary part of the product, not an optional note in documentation.[1]
Local needs a visible definition.
A browser microphone starts with permission. MDN documents that getUserMedia() requires a secure context, prompts for access, and can fail when permission is denied, the device is absent, or the hardware cannot be read.[3]
The interface should state whether raw audio stays in memory, is written to disk, or leaves the device. It should also show when the microphone is live and provide one direct stop control. "Runs locally" does not explain retention, logs, crash reports, or the action system that receives the transcript.
Read the artifact and the license.
We inspected the public Cactus repository at revision 2cfcdb8568eb9192323b27fd0012a834517b4419. The repository contains the engine, platform bindings, audio preprocessing code, and installation material. Its license allows defined personal, educational, nonprofit, and smaller commercial use. Other organizations need a separate commercial license.[2]
We did not install the engine, download model weights, or run Whistle. This dispatch reports source-observable behavior and the vendor's measurements. It does not claim recognition quality on accents, noisy rooms, accessibility use cases, or coding vocabulary.
Size is one constraint, not the verdict.
The Hacker News discussion quickly moved beyond binary size. Readers raised dictation cleanup, disfluencies, uncommon names, accessibility, and the 30-second clip limit. Those comments are user reports, not controlled evidence. They still point to the right acceptance test: use the voices, rooms, languages, and command vocabulary the product will face.[4]
- Test names, file paths, symbols, and commands that a coding session uses.
- Keep confidence and word timing as review clues, not automatic approval.
- Save a corrected transcript separately from the raw model output.
- Require a new confirmation when the action target or arguments change.
The customs bay below combines a transcript field, four route breakers, a visible custody bus, and a copyable review packet. It does not access a microphone or execute a command.