Dictate prompts into Codex CLI

Codex CLI's /voice lets you talk with Codex out loud. To dictate a prompt you can read before you send it, use ParrotFlow on a Mac. Steps and limits.

Codex CLI has a built-in voice mode, and it is for talking with Codex. Run /voice or press F8, talk, and Codex answers out loud while captions of both sides appear in the terminal. It does not type your words into the prompt box, so there is no draft to edit. To dictate a prompt and read it before you press Return, use a dictation app that pastes into the terminal. On a Mac, ParrotFlow does this: hold Right ⌘, speak, release, and the text appears in Codex’s prompt.

What Codex CLI’s voice does

These facts come from the Codex CLI source code and release notes, at version 0.164.0. OpenAI’s online docs did not describe voice in the CLI when we checked.

  • /voice starts or stops a voice conversation. /voice settings picks the voice. /voice mute and /voice stop also work.
  • F8 starts or stops voice. F9 mutes the microphone. You can change both keys.
  • Voice has been on by default since version 0.156.0, released on 22 September 2026. In 0.155.0 it was an experimental feature.
  • It needs macOS, a Windows build made with MSVC, or a Linux build that uses glibc.
  • Your audio goes to OpenAI’s realtime voice service, and Codex speaks its answers.
  • It does not work in side conversations.

To turn off the F8 key and keep /voice, add this to ~/.codex/config.toml. An empty list removes the binding.

[tui.keymap.chat]
toggle_voice = []

Which one to use

Use Codex’s voice if you want to talk a task through and hear the answer. There is nothing else to install, and no text step between what you say and what Codex does.

Use ParrotFlow if you want a text draft first. You see every word before Codex gets it. The same hotkey works in your editor, in Slack and in the browser, with the same vocabulary and rules. Speech is turned into text on your Mac. The prompt still goes to OpenAI when you send it, like any Codex prompt.

You can keep both. ParrotFlow’s default hotkey is Right ⌘, and Codex does not use it. If you change the hotkey, do not pick F8 or F9.

Dictate into Codex CLI

  1. Install ParrotFlow and grant its permissions. See Install and Permissions. Pasting into another app needs Accessibility.
  2. Start codex in your terminal and click in its window.
  3. Hold Right ⌘ and speak. Release the key.
  4. The text is pasted where the cursor is. Read it, edit it if you want, then press Return yourself.

ParrotFlow does not press Return for you.

Why the paste arrives as text

Some dictation apps fail in Codex CLI. In OpenWhispr issue #224, on Linux, Codex showed “Failed to paste image” instead of the words. The app had pressed Ctrl+V, and Codex reads Ctrl+V as a request to paste an image. Issue #2406 is a different clash on macOS. The app pressed F8 to pause music, and F8 started Codex’s voice.

ParrotFlow’s source shows what it does instead:

  • It puts plain text on the clipboard and presses ⌘V. In a Mac terminal, ⌘V is the terminal’s own paste, so Codex receives the words as pasted text.
  • It does not press F8, F9 or a media key.
  • About half a second after the paste, it puts back what was on your clipboard before.

Add your project’s names

The recogniser does not know the names in your codebase. Teach each one once:

/Applications/ParrotFlow.app/Contents/MacOS/ParrotFlow --learn "parrot flow" ParrotFlow
✓ parrot flow → ParrotFlow

If you installed with Homebrew, parrotflow runs the same binary. The first quoted part is what the recogniser writes today, and the second is what you want. Teach ParrotFlow a word covers the other ways.

ParrotFlow also reads the terminal window when you press the key, on your Mac. If Codex has just written CaretAnchor on screen and you say “carrot anchor”, ParrotFlow can write CaretAnchor.

A rule for file names

A rule is a pattern and what replaces it. This one writes spoken file names as code, and only in a terminal.

  1. Open ~/.config/parrotflow/config.yaml. From the menu bar, use Settings, then Edit Config.

  2. Add this entry under the transforms: key that is already in the file:

    transforms:
      - name: dotted
        description: spoken file names as code
        replace:
          $1.$2: ['/\b(\w+) dot (ts|tsx|js|py|md|yaml|json|swift|rs|toml)\b/']
  3. Add it to pipeline: under transcription:, after numbers_en:

        - transform: dotted
          app: /term|ghostty|iterm|warp/

    app: is matched against the name and bundle identifier of the app in front. Codex runs inside your terminal, so the pattern names terminals. Add yours if it is not in the list.

  4. Save the file. The app reloads it at once.

Check it from the terminal. --app is the app to pretend is in front.

/Applications/ParrotFlow.app/Contents/MacOS/ParrotFlow --replace "the test in parser dot rs fails" --app Ghostty
the test in parser.rs fails

With --app Slack, the rule does not run. For pull request links, see Dictate prompts into Claude Code. The same rules work in Codex CLI, because they run before the paste.

Limits

  • ParrotFlow pastes text. It does not send the prompt, start Codex’s voice, or know Codex’s slash commands.
  • Codex shows a paste of more than 1,000 characters as [Pasted Content N chars]. A long dictation looks like that in the prompt. The full text is still sent when you press Return.
  • Fixing a word after the paste, for example with the pill’s offer to learn a spelling, clears the line with Ctrl+A and Ctrl+K and types it again. This was built and tested with Claude Code’s input box, not with Codex CLI, which draws its prompt in a different way. If it goes wrong, set rewrite_line: false under transcription:. The fixed text then goes to the clipboard.
  • Both apps can listen at the same time. Stop or mute a Codex voice conversation before you dictate with ParrotFlow, or Codex hears you too.

Sources

Last checked: 24 October 2026, against Codex CLI 0.164.0 and ParrotFlow 0.18.0.