The vocabulary
Everything you can say.
Said inside a dictation, each of these lands its result where you said it. Said mid-sentence as ordinary words, each stays ordinary words.
36 of 36
Capture
Pictures of your screen, pasted where you said the words.
“take a screenshot”
grab a screenshotcapture a screenshottake another screenshotscreenshot this pageA picture of your screen, pasted mid-sentence.
The screen your mouse is on, taken the instant you say the words. SayCtrl hides its own pill first, so it never appears in its own screenshot.
“take a screenshot… take a screenshot”
Say it three times, get three different pictures.
While live streaming, each shot is grabbed the moment you say it, not at the end. Move between screens mid-sentence and each picture is of the screen you were on.
“take a screenshot”
In a terminal, a real PNG file and its path.
A pasted image is useless at a prompt, so the shot is written to disk and its path typed in the picture's place. Exactly the form Claude Code, Codex and aider read.
Files
Any file or folder on the Mac, by name, out loud.
“copy the file path”
insert the file pathpaste the file pathgrab the pathcopy the folder's pathWhatever Finder has selected, as a full path.
Finder need not be in front. Whatever was last selected is still the selection. Several files come out one per line; with nothing selected you get the front window’s folder.
“attach the PDF from downloads”
upload the image from desktopinsert the markdown file from documentsattach the video from downloadsThe newest match, attached for real.
The file rides in as a file reference, so a chat app turns it into a proper attachment, and the words you said around the command still get typed.
“attach the payout PDF from downloads”
attach the quarterly report pdf from downloadsupload the resume pdf from the job applications folderName the file as you talk.
A word or two before the kind word narrows the match by filename. If nothing in the folder contains it, the word is treated as a mishearing and quietly dropped rather than failing.
“attach the second PDF from downloads”
attach the first image from downloadsattach the latest screenshotattach the newest pdfCount down from the newest, skip the picker.
Files are always sorted newest first, so “the first” is the newest. Tack the ordinal on afterwards, as in “…the second one”, and it folds into the command instead of being typed.
“attach the pdf from the stocks folder in desktop”
attach the pdf from the stocks folderupload the image from the redfin folderattach the file from the notes folder inside documentsAny folder on the Mac by name, however deep.
Spotlight and a breadth-first walk both run and the results are merged, because a folder you made a minute ago is not in Spotlight yet, and a folder buried six levels down is not in a quick walk.
“attach the screenshot”
attach the latest screenshotattach the second screenshotinsert the screenshotScreenshots need no folder word at all.
SayCtrl reads your actual macOS screenshot-location setting, so a custom folder is honoured, and prefers real screenshot filenames over anything else sitting there.
“upload the Redfin folder from the ideas folder”
upload the ideas folderattach the folder from desktopA whole folder, attached as a folder.
The “folder” kind attaches the directory itself rather than something inside it.
“the first one”
the second onenumber threesecondcancelAnswers the picker without touching the mouse.
When several files or folders match, a strip of up to five numbered thumbnails floats above the pill. Say which, or click. It never takes focus from the app you were in.
“copy the pdf path from downloads”
grab the zillow folder pathcopy the json file path on desktopget the latest screenshot pathThe same hunt, but you get the path as text.
Identical search to “attach”, different delivery: the file’s path is typed at your cursor instead of the file riding in.
Web & AI
The tab in front of you, and the AI you want to ask.
“copy the link”
copy the URLpaste the linkgrab the linkcopy the web addressThe address of the tab in front of you.
Safari and the whole Chromium family answer: Chrome, Arc, Brave, Edge, Vivaldi, Opera. Each link gets its own line so chat apps unfurl it.
“ask ChatGPT what is the capital of France”
ask Claude how to fix thisask Grok what happenedask Perplexity about swift concurrencyask Google who wrote thisThe question opens in that AI, already asked.
Five services: ChatGPT, Claude, Grok, Perplexity, Google. It needs no permission at all, because the link does the typing. Known mishearings are baked in, so “ask cloud” reaches Claude.
“…and ask ChatGPT”
Take a screenshot and ask Claude.Everything you just composed becomes the message.
End on a bare “and ask …” with no question after it and the whole dictation, words and paths and links and screenshots, is routed to the AI instead of pasted where you were.
“open Chrome”
open Slackopen Spotifyopen facebookopen reqkey.comApps, sites and domains, by name.
Curated names try the Mac app first and fall back to the website. A spoken domain opens exactly that domain. A name SayCtrl doesn’t know stays ordinary text rather than doing something surprising.
Terminal
Speak at the prompt. Nothing runs until you press Return.
“open terminal in the downloads folder”
open iTerm in the projects folderfire up ghostty in the projects folderlaunch warp in the stocks folder in desktopA terminal, already standing in that folder.
Said from Slack, a browser, anywhere, with Finder nowhere in sight. Ten terminals answer to their own names: iTerm, Ghostty, Warp, WezTerm, kitty, Alacritty, Hyper, Tabby.
“open a terminal here”
open terminal in this folderopen terminal in the current directoryWherever Finder is showing.
The selected folder, the folder holding the selected file, or the front window’s folder.
“add everything and commit saying ship the fix”
add everything and then commit with the message fixed itstage everythinggit add . && git commit -m "ship the fix"
Two commands in one breath, joined the way a shell joins them. Up to four in one utterance. The message keeps the case you spoke it in, because there the capital means something.
“what changed”
push to mainshow me the diffwhat branch am I onmake a branch called fix loginstash everythingThe git you run all day, without saying “git”.
add, commit, push, pull, fetch, status, diff, log, branch, checkout, stash, all triggered by the phrasings people actually say.
“what's in here”
list the filesshow me everythinggo up onemake a folder called draftswhere am IListing, making, moving, orienting.
ls, ls -la, cd, cd .., cd ~, mkdir, pwd, all from plain English.
“docker compose up dash d”
pnpm run devpytest dash k logintail dash f logs slash server dot lognpm run dev double dash port 3000Any tool you can name, typed as spoken.
Spoken punctuation resolves into real symbols, so “dash m” → -m, “package dot json” → package.json, “node underscore modules” → node_modules. The line comes out lower case, the way commands are typed.
“can you add a test for the login flow”
move the retry logic into its own functionlet's add a retry to the fetchfind the bug in the parserProse at a coding agent stays prose.
A terminal is where Claude Code, Codex and aider read. Anything not unmistakably a command is pasted as ordinary dictation, decided by a grammar gate rather than a guess.
“rm dash rf node underscore modules, send it”
Typed. Not run. “Send it” refuses.
Nothing SayCtrl writes ever executes. The line sits at the prompt until you press Return. On the half of the shell you cannot undo (rm, sudo, --force, reset --hard) even “send it” declines and tells you to press it yourself.
Text
Take it back, send it, rewrite it.
“scratch that”
scratch the last sentenceTakes back the last paste.
Works on its own or inside a dictation, so “…and I am building. Sorry, scratch that.” erases the words just spoken before anything is typed.
“send it”
Presses Return for you.
On its own, or as the tail of a dictation: say the message and “send it” in one breath.
“polish it”
polish the promptmake it shortermake it longerfix the grammarfix the spellingfix typosmake it an emailmake it a listbullet pointsnumbered listmake it formalmake it casualmake it politesummarize itrewrite itsimplify ittranslate to EnglishHold fn + control to rewrite what is on screen.
Command mode edits text that is already there: the selection, the whole field, or fresh text if the field is empty. The target is captured the moment recording starts, so the text you were looking at is the text that gets edited.
“my email address”
A few spoken words, the whole thing typed.
Phrases expand exactly as you wrote them, line breaks and all, and the AI polish never gets to reword them. Sign-offs, wallet addresses, the support reply you send twice a day.
Model
Switch where the words are recognised, mid-flow.
“use the local model”
Transcription moves onto this Mac.
Switches to the largest model you have downloaded. From there the audio goes nowhere at all, because it is recognised on your own Neural Engine.
“use the paid model”
Back to the cloud provider.
Switches transcription back to the provider you configured.
Stays text
Say a command’s words in a sentence and they stay words.
“the screenshot looks wrong”
I want to take a screenshot latersay take a screenshotFour ordinary words. Nothing fires.
Every family only fires at the start of an utterance, as its own clause after punctuation, or after a bare connective. In the middle of a sentence it is prose.
“Run it against copy the file path and paste me the output.”
I need to copy the file path from thereTwelve ordinary words.
Dictating instructions about a command to an AI is exactly the case a naive matcher breaks. The clause rule keeps it text.
“copy the address”
Your street address stays your street address.
“copy the web address” fires; bare “copy the address” deliberately does not, so a dictated postal address is never swapped for a URL.
“ask Cloudflare about workers”
Cloudflare is not Claude.
The ask-AI grammar accepts “cloud” as a mishearing of Claude, but a word-break assertion keeps Cloudflare, cloud storage and cloud cover out of it.
“can you add a test for the login flow”
move the retry logic into its own functionwhich one should we useuse the local branchHanded to Claude Code, word for word.
At a prompt, anything not unmistakably a command is pasted as ordinary dictation. A grammar gate decides, not a classifier that might have a bad day.
“add the file to git”
you should attach the imageattach the file pathProse that only looks like a command.
Phrasings that read as ordinary English are refused on purpose rather than misfiring on your text.
The terminal set is finite and printed inside the app, and nothing SayCtrl types into a terminal runs until you press Return.