Requirements
| Mac | Apple silicon |
| macOS | 15 or later |
| Disk | about 3 GB |
| Memory | about 1 GB |
ParrotFlow is free and open source, under the GPL-3.0 license.
Install with Homebrew
brew install znat/tap/parrotflow
The cask also puts a parrotflow command on your PATH, for the command line flags.
Install with the script
If you do not use Homebrew, the script installs the same app in the same place.
curl -fsSL https://raw.githubusercontent.com/znat/parrotflow/main/scripts/install.sh | sh
It installs ParrotFlow.app in /Applications and starts it. It checks the download’s checksum and signature before it installs anything.
Releases are signed with a Developer ID and notarized by Apple, so macOS opens the app whichever way you installed it.
What happens on first launch
ParrotFlow is a menu bar app. It has no Dock icon. Look for its icon at the top right of your screen.
- macOS asks for the Microphone. Say yes. Dictation needs it.
- ParrotFlow asks for Accessibility. It needs it to type the text into the app you are using. You grant it yourself in System Settings.
- The models download in the background, about 1.5 GB in total. They start at launch. The speech model, Parakeet, is about 470 MB.
- The setup window offers to install eSpeak NG with Homebrew. It helps ParrotFlow with your own terms, such as jargon and names. You can skip it.
- The last screen says “Ready” and shows the key to hold.
The default key is Right Command. Hold it, talk, and let go. The text appears where your cursor is.
If you do not want to give Accessibility, set insert_mode: clipboard. ParrotFlow then copies the text and you press ⌘V. See permissions for what each permission does.
A language model is optional. You only need one for spoken commands (“hey parrot, …”) and for prompt: transforms. Dictation, replace: and command: rules, context spelling and vocabulary work without one.
Next steps
- Install reference: the install script options, updates and where files live.
- Configuration: what you can change in
config.yaml. - Your first rule: turn “P zero” into “P0”.