Skip to content
SayCtrl

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 page

    A 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 path

    Whatever 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 downloads

    The 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 folder

    Name 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 pdf

    Count 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 documents

    Any 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 screenshot

    Screenshots 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 desktop

    A whole folder, attached as a folder.

    The “folder” kind attaches the directory itself rather than something inside it.

  • the first one

    the second onenumber threesecondcancel

    Answers 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 path

    The 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 address

    The 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 this

    The 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.com

    Apps, 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 desktop

    A 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 directory

    Wherever 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 everything

    git 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 everything

    The 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 I

    Listing, 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 3000

    Any 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 parser

    Prose 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 sentence

    Takes 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 English

    Hold 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 screenshot

    Four 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 there

    Twelve 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 branch

    Handed 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 path

    Prose 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.