For developers · more than dictation

Code and docs at
the speed you think.

An assistant you talk to — across your editor, terminal, and every tool you ship from.Talk your commits, PRs, and docs straight into the cursor. Select an error and ask out loud. Keep your 中英 mix exactly as you said it. The slow part of the job was never the code.

Dictate Translate Ask Polish
macOS 13+ ·Free 2,000 words/week·Works in Terminal
zsh — ~/saytomo
$ git commit -m "fix: token refresh race" $ claude review
auth.ts
async function refresh() { // 這個 API 有點 flaky — retry await retry(3, getToken) }
Dictate · faithful
Dictate Listening…
Why devs reach for it

Talk where you already type.

FASTER

Speaking runs near 220 wpm; typing crawls at ~45. Get the thought down before it's gone.

Code-switch, verbatim

這個 API 有點 flaky stays exactly that — never "smoothed" into one language.

Lands in the terminal

Cleaned text pastes into Terminal, iTerm2, even a live TUI like Claude Code — and every editor.

Four dedicated keys

Dictate, Translate, Ask, and Polish — each on its own hotkey. The right tool, no menu.

A session, scene by scene

One keypress, six moments.

Scroll through a build — watch the right key step in at each turn.

COMMIT_EDITMSG · git
fix: resolve race condition in token refresh
Add a regression test so the renewal can't
double-fire under load.
✓ faithful — your words, cleaned
recording…
#backend — Slack
you · now
這個 API 有點 flaky,先加 retry,等等再 ship
✓ 中英 preserved · never translated
Not 「這個 API 有點不穩定」flaky stays English, 有點 stays Chinese.
terminal — test run
12at Auth.refresh (auth.ts:41)
13TypeError: Cannot read property 'token' of undefined
14at processTicksAndRejections
AskANSWER · code untouched
A value was undefined where the code expected an object — the session likely never loaded before .token was read.
CopyInsertClose
spoken → clean prompt
YOU SAID"umm i need it to refactor this into smaller funcs but like keep the public api the same"
READY TO PASTE → ChatGPT / Claude
Refactor this function into smaller units. Preserve the public API, keep behavior identical, and add a doc comment for each new function.
personal dictionary
useFetchUser Saytomo kAXSelectedText pnpm
YOU SAID"call use fetch user before the render"
SNAPPED
call useFetchUser before the render
✓ exact whole-word snap — every time
zsh — claude code
~ summarize the diff and
draft a PR description
⌘V into Terminal · iTerm2 · Claude Code
Dictate

Commit & PR messages

Say what the change does — Saytomo strips the "um"s and false starts and lands a clean message. Faithful: it never invents a rationale you didn't give it.

Dictate · 中英

The flaky note

Drop a quick note the way you actually talk: 這個 API 有點 flaky. Every word stays in the language you said it — flaky never becomes 不穩定. This is the difference.

Ask · selection

Read an error

Select the stack trace, press Ask, and say "what does this mean?" The answer streams into a panel beside your editor — your code is never touched.

Ask

Rough idea → sharp prompt

Mumble what you want — half-formed, with "um"s and all. Get back a clean, structured prompt that's ready to paste into ChatGPT or Claude.

Dictate · dictionary

Your symbols, spelled right

Add your variable names, APIs, and libraries to the personal dictionary once. Say "use fetch user" and it snaps to useFetchUser — exact, whole-word, every time.

Dictate

Straight into the terminal

Cleaned text pastes via ⌘V right at the prompt — verified, no silent drops — in Terminal, iTerm2, even a live TUI like Claude Code. Speak your next command.

The friction

The code was never the slow part.

You ship fast. Then the prose, the context-switches, and the keyboard itself slow you back down.

The prose is the tax

Code flows. PR descriptions, commits, docs, and Slack updates are the part that drains the hour.

Tab-switch to ask

Leaving the editor for a chatbot — paste, re-explain the context, switch back — and the thread you were holding is gone.

Your wrists

Thousands of keystrokes a day, year after year. RSI is real — and the only fix is typing less.

Only Saytomo

Built like infrastructure.

The guarantees a developer actually checks for — predictable, safe, and private.

Code-switch fidelity

這個 API 有點 flaky stays verbatim — 中英不被翻. Borrowed nouns, adjectives, and verbs all keep their language. Nothing else gets this right.

Sentinel-safe REPLACE

When you ask Ask to rewrite a selection, it only replaces on an explicit signal. Unsure? It just answers — it never clobbers your selection on a guess.

A dictionary for symbols

Add API names, library names, and brand terms once — useFetchUser, pnpm, your own product. Spelled right every time, with an exact whole-word snap.

Terminal-aware injection

Text lands via ⌘V into Terminal, iTerm2, and live TUIs — verified, no silent drops. It also types at the cursor in any editor or text field.

Private by default

Audio is processed in the moment and never stored. Transcripts aren't retained server-side, and your code and prompts are never used to train a model.

40+ languages

Native code-switching across 40+ languages, plus Simplified ⇄ Traditional Chinese in Taiwan glyphs. Speak in whatever combination you think in.

Works where you code

Your whole toolchain, by voice.

…and any other Mac app with a text field. macOS 13+.

The numbers

Speaking beats typing.

0

words/min, spoken

0

words/min, typed

~0×

faster, out loud

Roughly five times faster, word for word. Across a week of commits, PRs, docs, and Slack, that gap is hours back — an estimate that scales with how much you write.

Developer questions

The short answers.

Does it work in the terminal and my editor?
Yes. Saytomo lands cleaned text via clipboard paste (⌘V) into Terminal, iTerm2, and even a live TUI like Claude Code — verified, with no silent drops. In editors and any other Mac app with a text field, it types at your cursor. There's no special integration to install; it works at the OS level.
Will it translate my code-switched notes?
No — and that's the headline. The default Dictate path is faithful: a note like 這個 API 有點 flaky,先加 retry stays exactly that. flaky stays English, 有點 stays Chinese — every word in the language you spoke it, including borrowed nouns, adjectives, and verbs. Translation only happens when you deliberately press the dedicated Translate key.
Is my code sent anywhere, or used to train models?
Audio is processed in the moment and never stored. Transcripts aren't retained server-side, and your code and prompts are never used to train a model. When you use Ask on a selection, only that selected text is sent for that one request — nothing is read passively or in the background. The full subprocessor list is on the privacy page.
Does it handle code comments and symbol names?
Yes. It dictates comments and prose in 40+ languages, and the personal dictionary makes symbol names land exactly — add useFetchUser, kAXSelectedText, your library and product names once, and Saytomo snaps spoken words to them with an exact, whole-word match. Polish can also tighten a rough spoken RFC or doc into clean prose while keeping your claims and facts exactly.
Is there a free plan?
Yes — 2,000 words a week on a rolling 7-day window, no credit card, free forever. If you want no weekly limit and unlimited assistant keys, Pro is $13/month (or $11/month billed annually). macOS 13+, Apple Silicon and Intel. See full details on the pricing page.

Stop typing the boring part.
Talk it, and ship.

Download Saytomo and dictate your next commit in under a minute. Free forever — upgrade only when it becomes how you work.

Download for Mac Apple Silicon & Intel · v0.0.8