Always-On Dictation for Handy: Just Keep Talking

I added always-on dictation to Handy, the open-source local speech-to-text app: press once, keep talking, and each pause gets typed while the mic keeps listening. Download the macOS build and see what went into it.

Handy app icon

Handy is an open-source, fully local speech-to-text app. I use it a lot. But for long-form dictation it had one friction point: you press the shortcut, speak, press it again to get your text, and repeat for every sentence.

So I built always-on dictation. Press its shortcut once and the microphone stays open. Each time you pause, what you just said is transcribed and typed at your cursor, while Handy keeps listening. No wake word, no pressing anything between sentences. Press the shortcut again to stop.

Download (macOS, Apple Silicon)

Handy-Always-On-Dictation_0.9.8_aarch64.dmg (zipped, 14.4 MB)

SHA-256 of the zip: c5efbd2e5e7b60b9404fe4769b37deb95de1aa00c3b315fdbd1b6990e0cdcac8

Before you install:

  • It isn’t signed or notarized by Apple. macOS will block it the first time. Go to System Settings → Privacy & Security and click Open Anyway, or run xattr -dr com.apple.quarantine /Applications/Handy.app.
  • It replaces the official Handy. It uses the same app identifier, so it installs over an existing Handy and shares its settings.
  • Apple Silicon (M-series) Macs only.

To turn it on: Settings → Advanced → Always-On Dictation. Set a shortcut, and adjust Pause Before Typing (default 2 seconds) to set how long a pause ends a stretch of speech.

The effort behind it

Checking whether anyone had already done it. Before writing code, I went through the upstream Handy repo: commits, code, issues, pull requests and discussions. The closest things were:

  • An “always-on microphone” setting, hidden in the debug menu. It only keeps the mic warm so recording starts faster. You still press the shortcut for every sentence.
  • A hands-free pull request that only types speech beginning with a wake word.
  • A continuous-dictation pull request, closed the same day under the project’s feature freeze, and two wake-word pull requests, also closed.

So the idea had been asked for, but nothing that does “just keep talking” exists upstream, and new features aren’t being accepted. That made a fork the right place for it.

Building it. The core change is in the audio pipeline:

  • The recording never stops. The capture sink now cuts segments at the pauses its voice-activity detection (VAD) finds, so the mic keeps listening between stretches of speech.
  • Text arrives in order. A dedicated worker transcribes each segment, runs post-processing when that’s enabled, and pastes the results in the order you spoke them.
  • It has its own shortcut, separate from push-to-talk, plus a settings panel with a configurable pause length.
  • Unit tests cover the new segment-cutting logic.
  • Every UI string is translated into all 26 languages Handy ships.
  • A cleanup on the way: shortcut gating now goes through one shared check instead of five copies of the same logic.

In total: 43 files changed, 1,069 lines added and 41 removed, including a new 291-line dictation module. Full diff: the commit on GitHub.

Source and credit

The code is open source at github.com/mathewvarghesemanu/always-on-dictation (branch always-on-dictation). Handy itself is created by CJ Pais and released under the MIT license. All credit for the app goes to him and its contributors; this fork only adds always-on dictation.