Pimp My IDE / garage dispatchBack to the garage
October 8, 2026 / interface craft / local speech

Give voice input a customs desk.

A tiny speech model can keep audio on the device. It cannot decide whether a transcript should become a tool call. Put inspection and confirmation between the microphone and the action.

Local capture reduces exposure. It does not grant authority.

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.

Interactive makeover / speech custody

Route the transcript before it moves.

This replaces one magical microphone button with a visible input, four independent breakers, a connected custody bus, and a handoff packet. Selection defines the review structure. It does not prove that audio stayed local or that any command is safe.

Capture scopeDecoder identityTranscript reviewAction confirmation

Speech packet

Edit the proposed transcript. The signal meter represents text length only. It is not audio level, confidence, or model telemetry.

Text load68 / 180 chars
Choose voice input review sections
Custody controls / structure only

Route receipt

The bus turns blue only across a contiguous selected prefix. A red node marks a downstream section selected before an upstream section.

Capture
Decode
Inspect
Confirm
2 route sections selectedCapture and decoder sections are selected. Transcript inspection and action confirmation remain open.
Sources read / October 8, 2026

Source log

Open the evidence boundary
  1. Cactus, "Whistle: Speech to Text in 16.9 MB", October 2, 2026. Vendor release post covering model size, languages, clip format, word timing, architecture, tool-call integration, and vendor-run benchmarks.
  2. Cactus repository at revision 2cfcdb8568eb9192323b27fd0012a834517b4419, inspected October 8, 2026. We read the repository tree, README, audio-related paths, and license. We did not install or run the software.
  3. MDN, "MediaDevices: getUserMedia() method", read October 8, 2026. MDN documents secure-context requirements, permission prompts, returned streams, and common failure conditions.
  4. Hacker News discussion, "Whistle: Speech to Text in 16.9 MB", item 50008427, read October 8, 2026. Reader comments raised dictation quality, accessibility, vocabulary, and clip-length concerns. Comments are anecdotal.

Evidence boundary: Cactus is the source for Whistle's product and benchmark claims. The public repository confirms an inspectable engine artifact and its license at the named revision. MDN supports browser microphone behavior. The discussion records reader concerns, not measured results. The customs bay is an original browser demo. It captures no audio and sends no action.