Skip to content

About

The open-source Mac app that types what you say and does what you ask: screenshots, links, files, apps, the terminal, ChatGPT. By voice, in any app.

Topics

Resources

Security policy

Stars

1 star

Watchers

0 watching

Forks

Latest commit

Β 

History

8 Commits

Folders and files

Repository files navigation

SayControl app icon

SayControl

An open-source Mac app that types what you say, and does what you ask.
Take a screenshot, paste a link, attach a file, open an app or a terminal, ask ChatGPT, send the message. By voice, in any app.

Download SayControl for macOS

MIT licence macOS 13+ Apple silicon and Intel Swift 60+ languages

🌐 Website Β· ▢️ Demo video Β· πŸ—£οΈ Every spoken control Β· πŸ› οΈ Build from source


Left, a dictation app types the words 'Take a screenshot.' Right, SayControl takes the screenshot and puts it in the message.

▢️ Watch the full 50-second demo (with sound)


✨ More than dictation

Most dictation apps type whatever you say. Say "take a screenshot" and you get the words. SayControl takes the screenshot.

Hold fn, talk, let go. Your words land wherever the cursor is, and these phrases do the thing instead:

πŸ—£οΈ Say ⚑ What happens
"take a screenshot" A picture of your screen, pasted mid-sentence
"copy the link" The address of the browser tab in front of you
"attach the PDF from downloads" The newest match, attached for real. Several matches float a picker: say "the first one"
"copy the file path" Whatever Finder has selected, as a full path
"open Chrome" Apps and sites, by name
"open terminal in the downloads folder" A terminal, already standing in that folder
"ask ChatGPT how to center a div" The question opens in ChatGPT, already asked. Claude, Grok, Perplexity and Google too
"scratch that" Takes back the last paste
"send it" Presses Return for you
"add everything and commit saying ship the fix" (in a terminal) git add . && git commit -m "ship the fix", waiting at the prompt until you press Return
Hold fn + control: "make it shorter" Command mode rewrites what you selected, or the whole box
A screenshot and the page's link land in a Claude message by voice, then it's sent
πŸ“Έ Screenshot and link, straight into Claude
'Attach the image from downloads' opens a picker of four matches; the second is attached
πŸ“Ž Attach a file by saying its name
'Ask ChatGPT how to center a div' opens ChatGPT with the question already asked
πŸ’¬ Ask ChatGPT without leaving your sentence
A message is dictated into Slack, then 'scratch that' removes it
↩️ Changed your mind? "Scratch that"

Nothing runs behind your back: a terminal command waits at the prompt for your Return, and the ones you can't undo (rm, sudo, --force) won't take a spoken "send it". The full list, with every phrasing, is at saycontrol.com/controls.

πŸŽ™οΈ The dictation itself

  • 🧹 Cleans up as it goes. Ums, stutters and false starts are gone before the text lands.
  • 🎨 Writes in the right register. Tones pick casual through formal for Personal, Work, Email and Agents, by the app you're in. Your words stay yours: a tone only changes punctuation, casing and layout.
  • 🧠 Learns your words. Fix a word right after it lands and it's spelled right next time.
  • πŸ‘€ Reads the room. Names and jargon on screen are handed to the recognizer, so they come out right the first time.
  • ⚑ Phrases. Say "my email address" and the whole address is typed.
  • 🌍 60+ languages.

πŸ€– Talk to your coding agents

Claude Code and Codex tell you out loud when they finish or need a yes ("Your agent on fernly wants to run: npm test. Say allow or deny."), and you answer by voice. This runs on SayControl Cloud: 10 conversations to try on Free, 300 a month on Pro.

🧭 Three ways to run it

Pick in Settings β€Ί Models. Every route needs a free SayControl account.

☁️ SayControl Cloud πŸ’» This Mac πŸ”‘ Your own API key
Speech to text The most accurate live models we've measured, picked for you Cohere Transcribe, Qwen3-ASR, Parakeet, Nemotron, Voxtral, Whisper OpenAI, ElevenLabs, AssemblyAI, Soniox, xAI, Google, OpenRouter…
Cleanup and tones Included On your own key: Claude, OpenAI, OpenRouter, Cerebras, Groq, Google On your own key
Spoken controls & Ask Pro βœ… Free βœ… Free
Command mode Pro βœ… Free, on your own key βœ… Free, on your own key
Price Free: 2,000 words a week Β· Pro: $12/month, unlimited Free Free (your provider bills you)
Internet Needed Not needed for speech Needed

Most local models write while you talk. Which ones keep up live is measured on your own Mac the first time each loads.

πŸ“₯ Install

  1. Download the DMG and drag SayControl to Applications. It's signed and notarized.
  2. Open it, sign in, and allow the Microphone, Accessibility and Input Monitoring when the setup asks.
  3. In System Settings β€Ί Keyboard, set "Press 🌐 key to" to Do Nothing.
  4. Hold fn and talk.

Needs macOS 13 or later, on Apple silicon or Intel. Updates install themselves.

πŸ› οΈ Build from source

git clone https://github.com/soorower/SayControl.git
cd SayControl
SAYCTRL_DEV=1 ./scripts/build.sh    # "SayCtrl Dev.app": every provider, plus the dev tools
./scripts/build.sh                  # SayControl.app: the build people download

You need macOS 13+, the Xcode command line tools and cmake. The first build fetches whisper.cpp, CrispASR and Sparkle at pinned versions and compiles the speech engines into the app (a few minutes, once). Without an Apple certificate the build is signed ad-hoc: it runs, but macOS asks for permissions again after every rebuild.

The two builds are separate apps to macOS, with their own settings (~/.config/sayctrl and ~/.config/sayctrl-dev), so they can sit side by side.

πŸ—‚οΈ Find your way around

Area Where
🚦 The app: key down β†’ record β†’ transcribe β†’ clean up β†’ paste Sources/main.swift
πŸ—£οΈ Spoken controls Commands.swift (the grammar), AttachFiles.swift, FinderPaths.swift, OpenTarget.swift, TerminalTarget.swift
πŸ’» Terminal commands Shell.swift: every command it can write, readable in one file
✍️ Command mode CommandMode.swift
🎧 Speech, streaming LiveTranscribe.swift (cloud and API-key providers over WebSocket)
πŸ’» Speech, on this Mac LocalEngine.swift, LocalLive.swift, LocalSpeed.swift, scripts/engines/ (C++ around CrispASR)
🧹 Cleanup and tones Refine.swift, Tones.swift, ModelKeys.swift
🧠 Learning your words Corrections.swift, Replacements.swift, Phrases.swift, ScreenVocab.swift, Hints.swift
πŸ€– Coding agents AgentBridge.swift, CodexBridge.swift, ClaudeWatcher.swift, VoiceIO.swift
☁️ Account and cloud Cloud.swift, Account.swift, SignIn.swift
πŸͺŸ Windows and settings SettingsUI.swift, SettingsPane.swift, ModelsPage.swift, Components.swift, Theme.swift
βš™οΈ Settings on disk Config.swift: ~/.config/sayctrl/.env
🎨 Design mock-ups design/: the HTML each screen was built from
πŸ“¦ Build and release scripts/: build.sh, make_dmg.sh, release.sh

Handy dev flags on the built binary: --transcribe <file.wav> runs a clip through the current model, --snapshot <dir> draws every settings pane to PNG, --modelsshot <dir> draws Settings β€Ί Models in each state.

πŸ”’ Privacy

Your history, recordings, dictionary and phrases stay on your Mac. On a local model your voice never leaves it; on your own key it goes only to that provider. On SayControl Cloud your audio passes through our servers to be written down and isn't kept there. Details: saycontrol.com/privacy.

πŸ™Œ Credits

  • whisper.cpp and ggml (MIT) run Whisper and Parakeet.
  • CrispASR (MIT) runs Cohere Transcribe, Qwen3-ASR, Voxtral and Nemotron. scripts/engines/qwen3_run.cpp and voxtral4b_run.cpp are adapted from its command-line examples, and nemotron_stream.cpp builds on its Nemotron backend. Both projects are Copyright (c) 2023-2026 The ggml authors.
  • Sparkle (MIT) installs updates.
  • Bricolage Grotesque is under the SIL Open Font License (Resources/Fonts/OFL.txt).
  • The models are their makers' work under their own licences: Cohere Transcribe, Qwen3-ASR and Voxtral (Apache 2.0), Parakeet (NVIDIA, CC BY 4.0), Nemotron (NVIDIA, OpenMDW 1.1), Whisper (OpenAI, MIT).

πŸ“„ Licence

MIT: use it, change it, ship it. The licence covers the code, not the SayControl name or icon, so a copy you ship should go by its own name. Found a security problem? See SECURITY.md.

About

The open-source Mac app that types what you say and does what you ask: screenshots, links, files, apps, the terminal, ChatGPT. By voice, in any app.

Topics

Resources

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages