Skip to content

Voice dictation

Talk instead of typing into the composer or Claude's and Codex's chat boxes: on this Mac, automatic language, coding words, automatic Polish, OK or Send, history.

Last updated

Talk instead of typing: into Claude's or Codex's message box, or Pairbar's composer. Speech becomes text on this Mac: with Whisper (Settings → Voice → Recognition → Best accuracy, a one-time download) or the speech recognition built into macOS; offline, with no account or key, and nothing you say leaves the Mac. Then Polish has your own Claude or Codex rewrite it into a clean prompt (it uses your plan; turn it off in Settings → Voice).

Start, Stop, Send#

HowWhat happens
⌃⌥Space (Settings → Shortcuts → Dictate)Hold it to talk; let go to stop. A quick tap starts hands-free dictation instead: it keeps listening until you press the shortcut again. Works from any app.
The dictation pillAlways on screen, in one place (bottom centre to start with; see The pill, always there). Click it to talk into the field you're in; click it again to stop. Right-click it for its menu.
The pill on Claude's or Codex's message boxA second pill, under the message box (see The pill and the card). Right-click it for the voice menu.
Double-tap Right ⌘ in Claude's or Codex's chat boxWith the cursor in the app's message box, a quick double tap of the right ⌘ key starts dictating into it; double-tap again to stop. Change the key (Right ⌃) or turn it off in Settings → Voice → Setup.
The mic next to Send in the composerClick to talk; click again to stop. The words appear in the message as you speak, after what you'd already typed. Right-click (or ⌃-click) the mic for the voice menu.
Hold Fn (🌐)Off to start with. Turn it on in Settings → Voice → Setup → More options, and set System Settings → Keyboard → "Press 🌐 key to" Do Nothing (the button there opens it), or macOS opens its own dictation or the emoji picker too. Fn with another key (Fn-← is Home) cancels.
⌘K → Start dictationDictates into the composer.

While you talk:

  • Stop (letting go of the shortcut, the second press or double tap, or the composer's mic) ends the recording and finishes the words: the last word is never lost (Pairbar waits for the speech model to finish everything it heard), then Polish rewrites it. Polish gets more time for longer text: about 3 seconds for 10 words, 8.5 for 100, and 24.5 for 300 with Claude or on-device; Codex gets at least 15 seconds for its fresh CLI startup (up to 60 seconds for very long dictations): your words are shown and usable at once, and Whisper and Polish only improve them in place if they're quick enough (see How long Stop takes). In the composer the words stay in the message. On Claude or Codex, what happens next is Settings → Voice → Setup → When you stop talking: Review first (the default: the card keeps them for you to read), Send right away, or Insert without sending.
  • Return (or the card's ↑) stops and sends: the last words, Polish, then in and sent. The card says "Sending…" meanwhile, with the shimmer over your words, within the length-scaled Polish budget; then the best words there are go: Polish's if it answered in time, else Whisper's, else macOS's. Pressing Return again while it polishes still waits for Polish. ⌥↩ meanwhile puts your words in at once, as they are, without sending; ⌘↩ sends them as they are at once; Esc calls the send off and keeps the words in the card to read. In Pairbar's composer Return is the composer's own: ⌘↩ (or its Send) sends there, at once.
  • ⇧Return (or the card's ■) stops and keeps the words in the card to read, whatever When you stop talking says.
  • 1–6 switch the mode while you talk (Prompt, Message, Verbatim, Code, Notes, Translate to English), from the next words on.
  • ⌃⌥⇧V, from any app, puts your latest dictation where you're typing again.
  • Esc cancels: nothing goes in, and the composer's message goes back to what it was. What you said is still kept in your voice history, marked "Not inserted".

While the card is up, Return, ⇧Return, ⌥Return, ⌘Return and Esc are Pairbar's: they never reach Claude or Codex (Return there would send whatever was in its box). Pairbar takes them the moment the card comes up and gives them back the moment it goes, as shortcuts macOS hands to Pairbar (no permission, nothing listening to your typing); if another app already holds one of them, the card's buttons still work. Hover its buttons to see the shortcuts: ↩ Send, ⇧↩ Review, ⌥↩ Insert and Esc Cancel. While it finishes or polishes, ⌥↩ puts the words in as they are at once (not sent). Send only ever presses Return into Claude's or Codex's message box while it has the cursor.

The two double taps don't clash: Pairbar's peek pins with a double tap of ⌥, dictation uses ⌘ (or ⌃). Each tap is shorter than the peek's hold, so a ⌘ double tap never peeks.

The pill, always there#

One dictation pill is always on screen, in one place, so you never have to look for it: in every app, Claude, Codex and Pairbar included, and with no app in front. It's a small pill of Liquid Glass with the mic, readable in light and dark over any wallpaper; it never takes the keyboard, and Pairbar reads nothing of other apps to show it (only which window is in front, from the window list, to know your display).

The pill covers only its own small area at rest. Hiding it or stepping aside for a message box removes its window; it leaves no invisible window over other apps. The dictation card grows in place without moving its window as new words arrive.

  • Hover it: it shows the shortcut (⌃⌥Space to start with). It's one piece of glass that changes shape: an edge tab slides out and stretches into a capsule, a pill at the bottom or top grows into a wider capsule, and the shortcut fades in beside the mic.
  • Click it, or press the shortcut, to dictate into the field you're in: Claude's or Codex's message box, Pairbar's composer, or a text field in any other app. While you talk, the microphone grows into one recording capsule covering the Notes position: vertical at a side, horizontal at the top or bottom. Hover it or click the level lines to open the transcript at the same anchor. Stop, review, copy and send stay there; there is no second recording indicator under the app. The destination icon and name identify the app chosen at the start.
  • Where the pill lives: one of four places, nowhere in between. Pick it in Settings → Voice → Setup, in the voice menu (right-click either pill), or by dragging it:
    • Bottom (the default): at the bottom centre, above the Dock, clear of an auto-hidden Dock when it slides up.
    • Left or Right: a tab half tucked into the edge of the screen, halfway up (Wispr Flow style). It slides out when you hover it and while you're recording.
    • Top (under the notch): on a display with a notch it hangs just under the notch; on one without (Top), at the top centre under the menu bar.
    • Dragging: it becomes a capsule under your pointer, and the four places show as faint glass outlines on the display under it, the nearest one lit, the capsule pulled a little toward it as it gets close. Let go and it glides from exactly where you dropped it into the nearest place on a spring, turning into that place's shape as it arrives (the edge tab, or the capsule at the bottom or top); with Reduce Motion, it fades there. Esc, or a drag of only a few points, glides it back where it was. Drag it onto another display and that display's four places show.
    • Each display remembers its own place. A place saved by an earlier build at some height along an edge becomes that edge's middle.
  • How it moves: it never flies across the screen. When it shows (after a full-screen video, the hour's hide, a restart), moves to another display, another place or another app, it fades and grows in where it is, and fades out where it was. Let go after a drag and it glides into its place at your display's own refresh rate (120 Hz, 165 Hz or 60 Hz alike), turning into its shape on the way. With Low Power Mode on, the motion is shorter and simpler (a quick glide, the card fading in at its size); with Reduce Motion, fades only.
  • Which display (Settings → Voice → Setup): The display you're working on (the default) follows the window you're working in, so the pill is never on a display you aren't using; or Always on a display you pick, remembered even while it's unplugged (meanwhile the pill is on the display you're working on).
  • It steps aside only for a full-screen video or a slideshow (a full-screen app at rest keeps it), while Hide the pill for an hour is on (right-click it), and while Pairbar is locked.
  • At the bottom centre with Claude or Codex in front and their window reaching down there, it would sit on their message box, its toolbar row or the pill under it: it fades out while that's so, and back in when it isn't (another app in front, the window moved). Never while you're recording. On an edge or at the top it stays unless it would actually touch them.
  • Its transcript grows inward from the microphone's captured position: up from the bottom, down from the top, and inward at a side. The outside edge stays fixed as it expands, with the whole panel kept inside its screen.
  • The dictation pill (Settings → Voice → Setup) chooses how it shows at rest: Always visible, in one place (the default), Next to text fields, or Off (shortcut only). With Claude or Codex in front there's also the pill under their message box (Also under Claude and Codex's message box, on to start with); both can show at once, by design.
  • Earlier builds had a thin sliver at the bottom of the screen, only in other apps, remembered per app; an install updated to this one starts with the pill at the bottom centre of each display.

In other apps#

Dictation works in any app: WhatsApp, Telegram, Mail, Notes, Slack, a browser. With the cursor in a text field there, press the shortcut (or click the pill), talk, and the words go into that field. They're never sent: Return in the card puts them in, and you send them yourself. Never into a password field.

Pairbar puts nothing inside other apps' windows by default: the pill is in its one place (above).

  • Next to text fields (if you'd rather; instead of the always-visible pill): a small dot just above the right end of the field you're in, in apps other than Claude, Codex and Pairbar, 400 ms after you click into it, out of the way while you type. Apps built on Chrome (Slack, Chrome, Brave, Figma, VS Code, Discord) don't say where their fields are, so there's no dot in them: use the shortcut. With this choice the card shows by the field: above a message box, growing up; below a search field, growing down. Right-click the dot: Not in this app (Settings → Voice → Setup → Not in these apps lists them; password managers are left out to start with).
  • Off (shortcut only): nothing at rest; the shortcut shows the card.
  • How the words go in: through Accessibility where the field takes it; otherwise pasted: Pairbar keeps what's on your clipboard, puts the words there, pastes them into that app only, and puts your clipboard back a moment later. If you copied something else meanwhile, that stays.

The pill and the card#

On Claude's or Codex's window, while the app is in front, a small pill (the level meter's five lines, in Liquid Glass) sits under the message box, in the free middle of the app's own toolbar row. It's part of that window, like Pairbar's sidebar: it follows the window as it moves and resizes, and the message box itself when the app moves it without the window moving (Claude opening its browser, terminal or an artifact beside the chat: the pill glides to the box's new middle when that's a short way, fades out and in there when it's further, and goes if the box gets too narrow for it), goes when the window is minimised, hidden or on another Space, and never shows over other apps or without Claude or Codex in front. It's as well as the always-visible pill, which may sit in the same window; turn this one off with Settings → Voice → Setup → Also under Claude and Codex's message box, or in the voice menu.

Claude and Codex don't tell other apps where their message box is, so Pairbar finds it in a picture of the bottom of their window, with the Screen Recording permission (Settings → Voice → Setup → Find Claude's message box: only that strip, on this Mac, looked at and dropped, never saved). It looks only at the chat's own column, so a side pane's content (a preview, a toast, the pane's own field) is never taken for the message box, and it moves the pill only once two looks agree: while Claude lays out a pane or another chat, the pill steps aside for a moment instead of jumping. Without it the pill goes by an estimate from the window's size, a little dimmer, and steps aside for a moment after you click in the window (a pane may be opening). The pill stays on the display the message box is on, never across two; it steps aside while the window goes into or out of full screen or you change Space, and comes back once the window holds still. Where Claude has no message box (its settings, an empty window) there's no pill; a new chat's box in the middle of the window has it under it, like the box at the bottom.

Right-click the pill for the voice menu: Hide the pill for an hour is in it (the shortcut still works); Settings → Voice shows when it comes back and Show the pill again.

When you start talking, the pill turns into the card, in one movement: the card grows up out of the pill where it is at that moment (also when the pill is turned off: from where it would be), its glow growing in with it, and folds back into the pill when you're done:

  • Listening: one native Liquid Glass capsule at the microphone you clicked, with the destination app icon replacing the microphone and larger live level lines. The compact capsule grows to 100 pt along its dock, with 6 pt gaps between the app icon, wave and Stop. On a side dock the level lines form a vertical wave, expanding evenly around its centre; at the top or bottom they run horizontally. The wave eases between levels and respects Reduce Motion. Notes steps aside while you record. Hold the pointer over the capsule for 0.8 seconds to reveal your text; leaving sooner cancels expansion. Clicking its level lines opens the text immediately.
  • The words: as they're heard, they show in the card (they're not typed into the app yet), as heard. In Automatic, the first words may stay lighter while the language is identified; a wrong initial language guess can be corrected. Confirmed words stay put, including when you change language later in the dictation. The last few words the model may still change are drawn lighter and update at most ten times a second. Known technical names can use their written spelling while you talk when Vocabulary is on; the sentence is not polished until you stop. Then the cleaned, Whisper and Polish text blurs in over it. The transcript opens from the same anchored capsule instead of appearing separately above the message box. Longer text scrolls inside it. The unified card uses bright white text, a softer white provisional tail, native tinted glass and a quiet gradient along its edge. Its wave runs horizontally and stays centred at the top, regardless of the dock; Stop is a visible red circle in the top-right corner. Copy and Review share the bottom row with a white Send circle, with shortcut hints in tooltips.
  • Polishing: a shimmer runs over the words in the same capsule; when the rewrite arrives, the old words blur out and the new ones blur in. The words are usable meanwhile: Insert now, ⌥↩ or ⌘↩ takes them as they are at once, and a rewrite that comes later is dropped. It never takes more than 2.5 seconds plus 40 ms for each of the first 50 words, then 80 ms per additional word (at most 60 seconds); if it would, the words stay as they are and the card says "Polish skipped (slow)".
  • Ready: review and edit the text directly in the capsule. Send (Return or ⌘↩) puts them in and sends, Insert without sending (⌥Return) puts the words into the message box without sending (to edit them there), Copy copies them, ✕ (Esc) closes the card; it folds back into the microphone that opened it, following an attached window if it moved. It does not travel to another input-box microphone.

The expanded card labels its bottom actions Copy, Review while recording or Insert during review, and Send. Insert puts the text into the destination without sending it; Send sends it. Hover over an action for its keyboard shortcut.

Cancelling the unified capsule folds it back into the microphone without reopening a separate history notification. Your words remain in voice history.

A note on the card (Not inserted, Polish skipped, Didn't catch anything, Inserted but not sent…) starts a new dictation into the same place when you click it. Every warning has a Copy icon on its right that copies the words (polished if they were) and turns into a ✓. Whatever happens, the card never gets stuck: if a dictation has nothing on screen for two seconds (the composer it was going into closed, say), it's put back to rest, what you said kept in the history.

The card's keys are Pairbar's only while the app it's on is in front: in any other app, Return and Esc are that app's.

If there's no message box to put them in (you started from another app, or the app closed), the card waits at the top of the screen with the words. Click into Claude's or Codex's message box (or Pairbar's composer) and it moves there; then Send or ✓. Or Copy. Closing it keeps them in the history; the note that says so has Copy and Open history.

With Reduce Motion on, the card changes with a quick fade and the glow pulses instead of turning. With Reduce Transparency, the glass is a solid surface. While listening, the cursor stays in the target app. The review editor accepts focus so you can correct the text.

Dictating into Pairbar's composer, the composer is the card: the mic becomes the meter, the words stream into the message, and the line under it says what's going on.

The voice menu#

Right-click (or ⌃-click) the always-visible pill, the pill under Claude's or Codex's message box, or the composer's mic. It's the same menu in all three, a small card that opens next to what you clicked (above a pill at the bottom, below one at the top, beside one on an edge; never off the display):

  • Mode: Prompt — tidy for an AI chat; Message — light cleanup for a person; Verbatim — exactly what you said; Code — symbols and names, said literally; Notes — each sentence becomes a bullet; Translate to English — speak any language, get English. The current one is ticked; the keys 1–6 next to them also switch the mode while you're recording (see Modes).
  • Language: Automatic (with what it listens for and the language it heard last, "last heard French"), your first two languages by their own names in their own names, and More… (Settings → Voice → Languages).
  • Polish: Claude (recommended) · Codex · On-device (free) · Off, in words. An engine that can't polish now (not installed, signed out, out of plan, Apple Intelligence off) is greyed out and says why. The line under it says what the pick means: "Recommended · uses your Claude plan · longer text gets more time", "Low Power Mode: may take longer", or "Verbatim is never polished".
  • Where the pill lives: a little display with its four spots, Bottom, Left, Right and Top (Top (under the notch) on a display with one): click one to move the pill there (with the always-visible pill off, a spot turns it on there). Next to it: Also under Claude and Codex's message box (on or off), Hide the pill for an hour (Show the pill again while it's hidden; the shortcut still works), and on the dot next to a text field, Not in that app. Show Notes button toggles Notes separately. Hide both buttons turns off both resting controls until you restore The dictation pill and, optionally, Also under Claude and Codex's message box in Settings → Voice; the dictation shortcut still works.
  • At the bottom: Copy last and Insert last (⌃⌥⇧V) once you've dictated something, History (Voice history), and Settings… (Settings → Voice).

The keyboard works in it: ↑↓ (or Tab) move between the rows and controls, ←→ change a segmented control or the pill's spot, Return or Space picks, 1–6 pick a mode, Esc closes. VoiceOver reads each item with what it does. Choices keep the menu open so you can change several; Copy last, Insert last, History, Settings… and Hide close it, as does a click anywhere else. Settings → Voice uses the same names, in the same order.

Where the words go#

Pairbar decides when you start:

  • The shortcut, Fn and the pill, with Settings → Voice → Setup → Insert text into set to "The box you're typing in" (the default): Pairbar's composer when you're typing in it; otherwise Claude's or Codex's message box when that app is in front; otherwise nowhere yet (the card waits, as above).
  • Insert text into "Always Pairbar's composer": always the composer (it opens if it's closed).
  • The double tap: the message box the cursor is in.
  • The composer's mic and ⌘K: the composer.

Into Claude's or Codex's message box, Pairbar types the text where the cursor is, with ⇧↩ between lines, when you press OK or Send. Typing into another app needs the Accessibility permission (the one window layouts use); without it the text is copied, and the card tells you to press ⌘V.

Modes#

A mode decides how the words are cleaned and shaped. One mode for everywhere to start with (Prompt): change it in Settings → Voice → Polish → Default mode, or the voice menu. With Different mode per place on, Pairbar's composer, Claude's chat box and Codex's chat box each keep their own.

ModeWhat it does
Prompt (default)A clear instruction for Claude or Codex: fillers and stutters out, punctuation and capitals fixed, spoken layout and symbols turned into text, numbers as digits.
MessageLight cleanup: fillers, stutters, punctuation and capitals. Symbols stay words.
VerbatimExactly what you said; only spaces are tidied.
CodeSymbols, flags and names said literally: "camel case user id" → userId, "snake case max retries" → max_retries, "kebab case", "pascal case", "constant case", "open paren", "close paren", "equals", "arrow", "dot"… Numbers are always digits; no capitals or full stop added.
NotesEvery sentence becomes a "- " bullet.
Translate to EnglishSpeak a supported language, get English. The translation runs on this Mac with macOS's own translation; it needs a one-time download (Settings → Voice → Languages → Translate to English) and works offline after that. If it isn't downloaded, Polish translates; without Polish the words go in untranslated and Pairbar says so.

What the local cleanup does#

Every mode except Verbatim runs these rules on this Mac, instantly, when you stop (the card shows your words as heard while you talk; the composer, too):

  • Fillers: "um", "uh", "erm", "hmm"; "эээ", "ммм", and "ну", "типа", "короче", "как бы" where they start a sentence or sit between commas ("что-то типа кеша" keeps its "типа").
  • Stutters: "the the" → "the" (words people double on purpose, like "that that", stay).
  • Layout: "new line", "new paragraph", "bullet" (or "bullet point"); "новая строка", "новый абзац", "новый пункт".
  • Punctuation said aloud: "comma", "full stop", "question mark", "exclamation mark", "colon", "semicolon"; "запятая", "вопросительный знак", "восклицательный знак", "двоеточие".
  • Symbols (Prompt and Code): "slash review" → /review, "dollar paseo" → $paseo (for a skill Pairbar knows, or "dollar sign"), "dash dash help" → --help, "dash v" → -v, "package dot json" → package.json, "snake underscore case" → snake_case, "at sign claude" → @claude, "hash 42" → #42, "tilde slash" → ~/. Russian works too: "слэш ревью" → /review, "доллар пасео" → $paseo, "дефис дефис" → --.
  • Skill names: after / or $, the words are matched to the skills Pairbar knows: "slash code review" → /code-review, and a near miss ("paseeo") snaps to the real name.
  • Numbers (Prompt): as digits where they're clearly numbers: "line forty two" → "line 42", "five seconds", "ten percent" → "10%", "version two point five" → "version 2.5". "One of the tests" stays words.
  • Capitals and spacing: sentences and lines start with a capital, "i" → "I", stray spaces and doubled punctuation go, and words with their own casing come out right (GitHub, your dictionary's words).

Languages#

Pairbar starts with Language: Automatic and your Mac’s preferred languages. It listens in the first two configured languages supported by macOS and chooses from the speech it hears; with Best accuracy, Whisper also supplies a language hint. Initial words may stay provisional while the language is being identified. If the first assumption was wrong, the confirmed transcript corrects that initial guess. You can add, reorder or remove languages in Settings → Voice → Languages, or select one language for a session. Support depends on the recogniser and the speech models available on your Mac; automatic detection does not mean every language is supported by every engine.

  • Your languages start as your Mac's own languages that macOS can transcribe; add, reorder or remove them in Settings → Voice → Languages. Each is Ready, or downloads once (Download…, or the first time you use it: the card says "Getting the speech model… 42 %", and what you say is kept and transcribed once it's ready). A language macOS can't transcribe is marked "Not on this Mac".
  • Whisper's extras: credits and sound tags Whisper invents on silence or noise ("Субтитры сделал…", "Продолжение следует…", "Thanks for watching!", "[Музыка]") are dropped unless macOS's live dictation heard them too. Quiet speech is raised before Whisper hears it (by at most 24 dB, without clipping); when it had to be raised a lot, the card says "You were quiet: speak up or move closer to the microphone". After the Mac wakes or unlocks, Whisper is loaded again in the background if you dictated in the last hour.
  • Recognition:
    • Best accuracy (Whisper, 650 MB download), the default on Apple silicon: macOS's dictation shows your words live as you speak, and when you stop, Whisper (large-v3-turbo, on this Mac's Neural Engine) hears the whole dictation again, primed with your project's names, and its text replaces the live one (the card says "Finishing…" for a second or two). While you talk, Whisper already hears what you've said in pieces, cut in your pauses (a piece every 5 to 25 seconds), so when you stop only the last few seconds are left: a long dictation gets Whisper's text as quickly as a short one. The live words stay macOS's until you stop. It uses a multilingual model and your project’s names to refine the final transcript. The model downloads the first time you dictate (the card says "Getting the Whisper speech model… 42 %"; that dictation uses macOS's recognition), or with Download under Whisper model; it's kept in ~/Library/Application Support/Pairbar/models and checked after downloading. Delete removes it. Whisper is loaded when you start dictating and let go after an hour without a dictation or when the Mac is critically short of memory; its first load on a Mac (and after a macOS or Pairbar update, or when macOS has cleared its caches to free disk space) prepares it for the chip, which can take a few minutes in the background (Settings shows "Preparing Whisper… Apple dictation is used meanwhile"), and until then macOS's text stands. After a Pairbar or macOS update, Pairbar starts that preparation by itself about 30 seconds after launch (only if you use Best accuracy), so it's usually done before you next dictate. Stop never waits for it: if Whisper isn't loaded, or hasn't finished 2.5 seconds after you stop, macOS's text stands.
    • Fast (Apple, built in) knows your project's names (below) and uses the languages supported by macOS on this Mac.
    • Fastest (Apple, no vocabulary) shows words a little sooner but doesn't take your project's words. A language without the faster speech model uses the dictation model.

Your project's words#

Speech models get coding words wrong. Pairbar gives the model a short list of what you're likely to say, from what it already knows where you're dictating:

  • the project's name and the branch (also in words: feature/voice-dictation → "voice dictation"), and your other recent projects;
  • the files git says changed in that folder, and those of the last commits (read in the background, kept for two minutes);
  • the skills (the focused chat's first) and agents Pairbar knows;
  • your Personal dictionary (Settings → Voice);
  • hundreds of common developer and product names (GitHub, Pairbar, worktree, rebase, SwiftUI, JSON…).

It's refreshed when the focused chat changes. The list also teaches the cleanup which /name and $name exist, primes Whisper (as a short sentence in your language with the names written as they should come out), and tells Polish which names it may correct to.

Technical names across languages#

Your project’s file, branch and skill names retain their written form even when ordinary speech uses another language. The built-in vocabulary, personal dictionary and project context give the recognisers short hints; local cleanup can restore known spellings such as Claude Code, Xcode, GitHub and package.json.

Spelling correction is language-dependent and is not translation. Built-in aliases cover known variants; add your own spoken forms in the personal dictionary when a name is regularly misheard. Ordinary words remain in the language you spoke. The dictionary and available speech models determine which corrections work.

Personal dictionary#

Settings → Voice → Languages → Vocabulary shows one list for words you add and corrections learnt from dictation. Choose Add, enter a Word or phrase and optionally Write as, then Add word. Leaving Write as blank adds a recognition hint. Each entry has Edit and Remove buttons; Cancel leaves the dictionary unchanged. More than six entries adds a search field. Names and replacements wrap in narrow sidebars.

For bulk changes, Edit as text replaces the list with the text editor; Done returns to the list. Existing entries, snippets and comments stay in the same dictionary. In text mode, use one entry per line:

  • a word or name to recognise: Tournated;
  • said -> written to correct or expand: pair bar -> Pairbar, or a snippet, my sign off -> Thanks, Rob (\n for a new line);
  • # starts a note.

Rate and correct: after insertion, green thumbs up and red thumbs down appear for 10 seconds. They also stay on every history entry. Thumbs up saves a local rating. Thumbs down opens Improve this dictation with the inserted words. Click a word, or click the first and last words of a phrase, enter its replacement, then Learn correction. After saving, corrected words are marked green and cannot be selected again. Choose Add another to correct the remaining words or phrases, then Done. The feedback stays open while you correct. Its word area fits short dictations and scrolls longer ones. History action icons remain visible before hovering; hover an icon to see its action name. The cursor icon opens the same editor.

Corrections update the history copy and your personal dictionary (heard -> written). If your replacement includes punctuation already beside the selected phrase, Pairbar keeps one shared copy of that punctuation in history and future dictations. For example, replacing Жиро with JIRA. in Жиро. produces JIRA., while an existing ellipsis is preserved. The original inserted text is preserved under Original inserted text. Already sent messages are not changed. Future dictations apply the dictionary during cleanup and supply its names to recognition and Polish. This is local correction memory, not training the model's weights. You can remove a correction in Settings → Voice → Vocabulary → Learnt words. Ratings follow history retention; dictionary corrections remain until you remove them.

Learning from your fixes: when you fix a dictated word by hand in Pairbar's composer before sending, and the new word sounds like what was heard ("ларкспур" → Larkspur, "nimbus web" → nimbus-web), it's added to the dictionary the same way, and the composer says "Learnt: …". Rewording or translating a word teaches nothing.

Polish#

After the local cleanup, Polish has your own Claude or Codex correct the words with the fewest edits: punctuation, capitals, filler, and a word only when it's clearly a misheard name or term it was told about (your project's names, the names above). It never rephrases, reorders, adds or drops what you said; a word it isn't sure of stays as heard. It's told where you're dictating (Claude Code, Codex or the composer), the project and the chat's title, for the topic. It's on to start with:

  • Polish with: Claude (recommended) (claude -p with Haiku, no tools, nothing saved, no extended thinking, and none of your Claude settings: your own hooks don't run for a rewrite), Codex (codex exec with a lightweight model from its own list (Luna, or mini in older versions; otherwise its default) at low effort, read-only, nothing saved), or On-device (free): Apple's model on this Mac (Apple Intelligence; offline, nothing leaves the Mac; English and the other languages Apple supports, not Russian). Pick it (or Off) in the voice menu or Settings → Voice → Polish → Polish; it's kept, and changes the dictation you're in if its Polish hasn't started. Claude is the default; with only Codex installed, Codex.
  • The fallback: when Claude (or Codex) can't polish (not installed, signed out, out of plan, no answer in time) or its answer isn't used, Apple's on-device model polishes instead, held to the same rules, if Apple Intelligence is on and supports the language; otherwise your words as cleaned on this Mac go in. They share one deadline: the fallback only runs with time left (or alongside a Claude or Codex that has to start cold), so a slow answer is never followed by another wait.
  • Not for a few words: three words or fewer ("yes, go on") go in as cleaned, at once.
  • Self-corrections and lists: "…в пятницу, нет, точнее в четверг" keeps only the corrected part; a spoken enumeration ("во-первых…, во-вторых…") becomes a list.
  • It rewrites, never answers: your words go to it marked as a transcript to rewrite, so a dictated question ("can you hear me?") or request comes back tidied, not answered, in any language. It never asks you questions or comments on your text, and keeps the language you spoke: only Translate to English makes English. An answer that isn't a rewrite (a question back, a note about your text, another language than you spoke, too few of your words, more than about a third of your words changed beyond names and filler, or far longer than what you said) isn't used: your words go in as said and the card says "Polish skipped: kept your words". A note before the rewrite ("Here's the rewritten text:") is dropped. The card shows the mode while you talk when it isn't Prompt.
  • It uses your plan and takes about a second on the warm Claude (longer for a large transcript). It starts on macOS's words the moment they're in, while Whisper is still on its last piece: if Whisper's words turn out only slightly different (at most about one word in five, punctuation aside), the rewrite stands; if Whisper heard something else (names, numbers), Polish starts again on Whisper's words with the time that's left. You can always take the plain text: Insert now, ⌥↩ or ⌘↩ while it's polishing. If it doesn't answer within its time (the length-scaled budget, capped at 60 seconds), the plain text stands (Whisper's, punctuated, when it's in) and the card says "Polish skipped (slow)"; if it fails, "Polish didn't finish". An answer that comes later never replaces words you've already put in, sent or edited.
  • Ready in the background: so that it's quick, Pairbar keeps one Claude ready while Polish is on (started about 10 seconds after launch; in Low Power Mode too, since it costs almost nothing while it waits and a cold start is too slow for the deadline). It's sent one short warm-up message when it starts, then waits without using your plan until a dictation arrives; it handles one dictation and a fresh one replaces it at once, so it's ready again a second or two later. If none is ready when you start dictating (it stopped, or was restarting), one starts then and gets ready while you talk. It's replaced after the Mac wakes, the network changes, or half an hour unused, and restarted if it quits. Settings → Voice → Polish → Claude warm-up shows Ready, Starting, or Off with a reason below it when it is not already explained above. This row appears for Claude or the automatic app choice; it is hidden for Codex, On-device and Off. The Rewrite with menu and mode menus sit below their labels; descriptions wrap at the full card width. Codex's Polish starts when you stop, so a cold start can use more of the budget. Long text gets additional time with every provider, including the on-device model.

The result goes into the message box like any dictation: nothing is sent until you send it. Polish isn't used in Verbatim and Code modes. Turn it off in Settings → Voice → Polish: then the local cleanup is all.

How long Stop takes#

Your words are usable while Polish runs. The maximum processing time grows with text length; it is a timeout, not a delay added to every dictation:

StepAt mostIf it's slower
macOS's last words1 s after Stop (usually 0.2 s)the words heard so far stand
Whisper's last piece (Best accuracy)2.5 s after Stop (the rest was heard while you talked); not used while it's loading or being prepared, or when it has lately been too slow for pieces that long (on battery in Low Power Mode, say: it's tried again now and then)macOS's text stands
Polish (beside Whisper, from macOS's last words)2.5 s + 40 ms for each of the first 50 words + 80 ms per additional word, capped at 60 s; Codex gets at least 15 s because its CLI starts fresh; the overall deadline adds 1.5 s after StopWhisper's text (or the plain text) stands: "Polish skipped (slow)"

With Claude or on-device, a 10-word dictation gets 2.9 seconds of Polish, 65 words get 5.7, 100 get 8.5, 300 get 24.5, and 500 get 40.5. Codex gets at least 15 seconds; longer dictations use the same length-scaled maximum. Processing finishes immediately when a valid rewrite arrives. Provider fallbacks and retries share the same deadline.

Your words are usable as soon as macOS's last words are in: Insert now, ⌥↩ and ⌘↩ take them as they are at once, and nothing that arrives later replaces them. Return (stop and send) waits for Polish within these limits, then sends the best words there are.

History#

The correction form labels both fields and shows how many whole-word matches it will change in the current dictation. A saved correction applies to every matching word or phrase. If there are no matches, it is saved only for future dictation. Add another keeps earlier corrections marked while you select the next phrase.

Each entry puts its text above the feedback, destination and action controls. Status controls and actions wrap at narrow widths; the date, language and destination remain readable beneath the text.

Hover a history action icon to see its name immediately below the buttons: Copy text, Insert into chat, Copy original, Transcribe again, Correct words or Delete dictation. The standard tooltip explains the action in more detail. The label has reserved space, so hovering does not move the buttons.

Every dictation is kept on this Mac, inserted or not: what was heard (the original), the text it became, when, where it went (or "Not inserted"), the project and the language. No audio is kept, unless you turn on Keep audio for 24 hours.

  • The sidebar's Voice history (⌘K → Voice history, Open history on the card's note, or Settings → Voice → History → Open voice history): newest first, with search. Each shows the text that went in (a long one: its first four lines and Show more, which opens it in place and lets you select it), with Original to see what was heard; Copy, Insert (into the message box you're in, or the composer), Copy original, Delete.
  • Settings → Voice → History: the same list, how long to keep it (Forever, 30 days (the default), 7 days, or "Don't keep"), and Delete all… (every dictation and any kept audio). Transcribe again (for one whose audio is kept) hears it again with today's language and words.
  • ⌘K: type a few words to find a dictation ("Dictation: fix the flaky…"); Enter puts it in the composer again.

The history is ~/.pairbar/voice/history.jsonl (the folder and its files are readable only by you); kept audio is ~/.pairbar/voice/audio/, deleted after 24 hours.

Settings → Voice#

The four tabs wrap into two rows in a narrow sidebar. Language names appear above their status and reorder/remove controls. Hover a menu for its full selected value.

Four tabs (⌘1–⌘4; the last one is remembered, and Settings search opens the right one):

  • Setup: the microphone, the pill, sounds; how to start (the shortcut, the double tap, where the text goes; Fn under More options).
  • Languages: Automatic and your languages, Recognition and the Whisper model, Translate to English, the personal dictionary.
  • Polish: on or off, whose plan, Claude warm-up; Default mode (and Different mode per place).
  • History: how long it's kept, Open voice history, Delete all, the list.

Permissions#

Nothing is asked at launch or in the welcome. The first time you dictate, Pairbar says what the microphone is for, with Allow microphone…; that button brings up macOS's own prompt. If access is off, the mic shows crossed out and Pairbar offers Open System Settings (Privacy & Security → Microphone). Settings → Voice → Microphone shows Allowed, Not asked yet, or Off with Open Settings…, re-checked every couple of seconds while it's open. Find Claude's message box (Screen Recording) works the same way, and once you've asked and it's still off it offers Open Settings… and Restart Pairbar: macOS applies Screen Recording only to a fresh launch (see Troubleshooting).

macOS's speech recognition runs on this Mac and normally needs no permission of its own; if macOS asks for "Speech Recognition", allow it for dictation to work.

When things go wrong#

You seeWhat happened
"Didn't catch anything."Nothing was heard: check the input level in System Settings → Sound. It goes by itself.
"Polish skipped: kept your words"Claude or Codex answered with something that isn't a rewrite of what you said (a question, a note, another language): your words went in as said. Nothing to do; if it happens often, try Verbatim or Message mode for that kind of dictation.
"Polish skipped (slow)"Polish didn't answer within its time (the length-scaled budget, capped at 60 seconds): your words went in as heard (Whisper's, when they were in) and cleaned on this Mac. Nothing to do. If it happens every time, check that Claude warm-up in Settings → Voice → Polish says Ready (Codex has no ready process and is often too slow).
"Polish didn't finish: plain text"Claude or Codex failed: the plain text is there. If it keeps happening, check that claude (or codex) works in Terminal and that you're signed in; the voice menu says if an app can't polish.
"The microphone was disconnected. What was heard is kept."The mic was unplugged mid-dictation and no other input took over. If you switch to another microphone mid-dictation, Pairbar carries on with it.
"The microphone can't be used right now"Another app holds it exclusively, or there's no input. Close the other app or pick an input in System Settings → Sound.
"None of your languages can be heard on this Mac"Add a language macOS can transcribe in Settings → Voice → Languages.
"Pairbar is locked…"Dictation stops while Pairbar is locked (see Trial, licence and updates).
"Copied: Accessibility is off…"Pairbar can't type into Claude or Codex without Accessibility: paste with ⌘V, or allow it in Settings → General → Permissions.
"Inserted, not sent: press ↩ in Claude"Send wouldn't press Return with the keyboard verifiably elsewhere (another app in front, or the cursor in another field, still after a moment's wait): the text is in the box; press Return there yourself. The note's Copy copies the words.
The pill isn't thereThe always-visible pill is on the display with the window you're working in (or the one it's pinned to), at its dock: look at the bottom centre, the screen's edges and under the notch. It steps aside for a full-screen video or slideshow and while it's hidden for an hour (Settings → Voice and the voice menu show Show the pill again). The pill under Claude's or Codex's message box shows only with that app in front, when its box leaves room for it, and while Also under Claude and Codex's message box is on. The shortcut works anyway.

Vocabulary and microphone#

Settings → Voice → Languages → Vocabulary has Built-in names (on by default): built-in names such as TestFlight, Xcode and Wispr Flow, selected for the destination app and project. Names are corrected in the live text too; ordinary words stay as spoken. Verbatim does not apply these replacements. Your vocabulary combines manual entries and learnt corrections in one editable list; it does not show the same dictionary twice. Edit as text is available for bulk changes. Under More options, recording actions wrap to fit narrow sidebars.

In Setup, Microphone to use chooses Automatic or a connected device. Automatic keeps the system input unless it is Bluetooth and a wired or usable built-in microphone is available. A missing selected microphone falls back to the system input. The card warns about Bluetooth or a very quiet signal.

Polish receives the known names and, when available, both Apple and Whisper transcripts. A rewrite that drops a negation in the chosen transcript is rejected; the original words remain. This protects editing, but cannot recover a word both speech engines missed.

Under Vocabulary → More options, Keep my last 20 recordings on this Mac to improve recognition is off by default. When enabled, the audio and recognition notes stay in ~/Library/Application Support/Pairbar/recordings. The oldest is removed after 20; Delete recordings removes them, and switching the option off clears them. These recordings are separate from history's Keep audio for 24 hours.

Automatic language keeps an assumed language’s words in the provisional tail. If later evidence confirms the other recogniser, the correct transcript replaces that initial guess from the beginning; the incorrect guess is not prepended to it. Confirmed speech and explicit later language switches retain their existing behaviour.

Dictating notes#

The Notes circle beneath the microphone forms a vertical pair with equal 36 pt circles and a 6 pt gap. They share their window and drag owner. Hover to reveal Capture (Coming Soon) beside Notes, or click to create a note in the focused compact Liquid Glass card. At the bottom dock, the pair stays above the macOS Dock. Drag the Notes title when the card is expanded to move the pair. Hover the microphone to see its configured dictation shortcut. Notes shows ⌘N and Capture (Coming Soon) shows ⌘⇧C, labelled as shortcuts within Notes; they do not intercept those keys in other apps. Both circles respond to hovering; docking previews are circular and match the landing position.

The microphone in a Notes editor uses the same recognition settings and automatic language. It writes into that note, without sending a chat message. See Notes.

The attached circular microphone reserves at least 2 pt below the message box, including when its diameter is taller than the app’s toolbar row. Floating controls also reserve space for the Notes circle above the Dock.