1
Turn it on
Settings → Dictation → Generate with Flow. It is off by default.
2
Hold your Dictate shortcut and lead with the phrase
“Hey Flow, write a polite email asking to reschedule Friday’s call to Monday.”
3
Let go
The finished email is pasted where your cursor is.
The three settings
Flow needs an assistant model configured. Without one, your words paste as ordinary dictation and the overlay tells you why. Set one up in Models and providers.
If nothing gets pasted
Flow is all or nothing. It pastes a complete result or it pastes nothing at all. You never get partial output, error text, or your raw spoken command.
Every Flow recording is saved under the Flow filter in History, including failed and cancelled ones, so a lost generation never costs you the thought.
How it works underneath
Why Hey Flo activates it too
Why Hey Flo activates it too
Matching ignores case and punctuation, and it tolerates the spellings speech-to-text actually produces. “Hey Flo”, “hey FLO”, and “Hey, Flow:” all activate, because a wake word should match by sound rather than by whichever spelling the model picked that second.The tolerance is bounded. A candidate word has to share the first letter, share the same Soundex code, be close to the same length, and be within an edit distance of 2. So “Hey follow the instructions”, “Hey floor plans are ready”, and “Hey blow out the candles” do not trigger Flow.Two things help recognition once Flow is on. Whisper-family models get the phrase as a decoder prompt, which biases them toward hearing it correctly in the first place. And in the live overlay, a leading phrase heard in any tolerated spelling is rewritten to your configured spelling as you speak, so “Hey Flo,” reads back as “Hey Flow,”. That rewrite replaces exactly that byte range and can never absorb a neighboring word.
What Flow sends to the model
What Flow sends to the model
Flow reuses your assistant’s provider, model, and API key. There is no second provider to configure.Beyond that it shares nothing with the assistant. Each command is a fresh, stateless turn made of one system prompt plus your spoken words. Your conversation history, your active profile, your personal memory, and your assistant response-length setting all sit this one out. That keeps a Flow paste predictable: the same command produces the same kind of artifact whatever the assistant happens to be doing.The system prompt tells the model that its entire response is pasted verbatim. No greetings, no “Sure, here’s…”, no explanations, and no placeholders like
[Your Name]. Before pasting, SpeakoFlow strips leaked reasoning blocks and a lone Markdown fence wrapped around the whole answer. Real interior formatting is left alone.Flow output is pasted as-is. The Append trailing space and Auto-submit options from Output are deliberately skipped, because a generated email should not send itself.Screen access, and why it is separate from the assistant
Screen access, and why it is separate from the assistant
With Allow screen access on, Flow can take one screenshot when a command clearly refers to your screen, like “look at this email and draft a reply”. The model decides whether it needs the capture, using a
capture_screen tool it may call at most once per command. For a self-contained command it writes directly and never looks. The overlay tells you when it is looking.Flow captures the monitor your mouse pointer is on, so a multi-monitor setup gets the screen you are actually working on.This is permissioned separately from the assistant’s screen access on purpose. Turning on screen vision for chat does not give Flow a camera on your desktop, and the reverse holds too. See Screen vision for the assistant’s own controls.Timeouts, preloading, and cancelling
Timeouts, preloading, and cancelling
One generation gets 90 seconds. Starting the built-in local engine and loading its model has its own separate 150-second budget on top of that, so a cold multi-gigabyte load on first use cannot eat the writing time and fail the command before a single word is written.On the built-in provider, Flow gets a head start. When the activation phrase is heard in the live transcript, the model begins loading while you are still speaking, and stays resident long enough to bridge into the generation turn. This only applies to transcription models that stream live text, and nothing loads on an ordinary dictation, because the watcher only fires on the phrase.To stop a generation in progress, press your Cancel shortcut. It is unbound by default, since a global
Esc would swallow presses meant for other apps, so record a key for it under Settings → General → Recording. That row is not offered on Linux, where dynamically re-registering a global shortcut proved unstable.