What Handy does well
Handy runs on more machines. Its download page has Mac builds for Apple silicon and Intel, Windows builds for x64 and ARM, and Linux builds for x64 and ARM as AppImage, DEB and RPM. ParrotFlow needs an Apple silicon Mac with macOS 15 or later.
You pick the speech model. The list has four Whisper sizes, Parakeet V3 and others, such as Moonshine and SenseVoice. Some are English only. Others cover many languages. Speech recognition runs on your computer, and the privacy page says Handy has no analytics.
Setup happens in a settings window. You grant the microphone and Accessibility, choose a model and set a shortcut. The website sums it up as “One tool, one job.” Filler sounds such as “uh” and “hmm” are removed by default.
Handy is MIT-licensed and in active work. Version 0.9.8 shipped on 3 October 2026, and its main branch has changed since. This page describes 0.9.8.
Your own steps after the transcript
This is the main difference.
Handy has one extra step, LLM post-processing. It sits in the Experimental settings group and is off by default. Once on, a second shortcut sends the transcript to a model with the one prompt you selected. The default prompt asks the model to fix spelling, capitals and punctuation, turn number words into digits and drop filler words. Providers include OpenAI, Anthropic, OpenRouter, Groq, Apple Intelligence on supported Macs, and a custom OpenAI-compatible URL. On Linux, a script of yours can do the paste.
ParrotFlow runs a pipeline of steps you write in config.yaml. A step is a rule, a script or a prompt. Rules and scripts need no model.
“PR 478”
#478
“Siobhan”
@siobhan
A step can carry app: /slack/, so it runs in Slack and nowhere else. Scripts that ship with the app turn spoken numbers, dates and prices into digits, so “nine fifteen AM” becomes “9:15 AM”. Prompts run on a model you choose, on your Mac through Ollama or with a remote provider. In both apps, a remote provider receives the text it works on.
See programmable dictation and your first rule.
Names and jargon
Handy has a custom words list that you fill in. With a Whisper model, the list goes to the model as a prompt. With other models, Handy puts in a custom word when a transcribed word is close to it in spelling or in sound. Its settings say this fuzzy correction only works for words made of A–Z and numbers. The main branch, not yet released, sends the list to more models.
When you fix a word in the text, ParrotFlow offers to learn it. It matches by spelling and by sound, then checks the sentence before it writes the word. So the ordinary word stays where it belongs.
“upgrade view”
upgrade Vue
“re-render the whole view”
re-render the whole view
ParrotFlow also spells names the way the screen does. It is on by default. When you press the key, it reads the window you dictate into, in any app. It skips known password managers, System Settings and password fields. When it gets no screen, it uses the text above the caret in the field.
“caret anchor”
carrot anchor
CaretAnchor
More in custom vocabulary and screen context.
What ParrotFlow asks of you
ParrotFlow keeps its behaviour in ~/.config/parrotflow/config.yaml. You edit the file and save it, and the app reloads it. ParrotFlow --check-config prints what the app will run. ParrotFlow --pipeline runs a pipeline file on a sentence, with no microphone, so you can test a rule first.
This is the setup Handy does not ask of you. A coding agent can do it for you. Add the ParrotFlow skill, then describe the rule in your own words:
npx skills add znat/parrotflow --skill parrotflow
Install ParrotFlow. Also see the Wispr Flow alternative and ParrotFlow vs VoiceInk.