Skip to content
edict
Guides

Dictate to Codex, fully offline.

The Codex CLI lives in a terminal, which makes it one of the easier agents to talk to: anything that types can drive it. Here is the setup where the speech never leaves your Mac, and the one PATH problem that will make it look broken.

To dictate into OpenAI’s Codex CLI without sending audio to a server: run an on-device dictation app and speak into the prompt as though typing. Edict registers with Codex by running codex mcp add, which writes ~/.codex/config.toml, the only TOML config of the agents Edict supports. Codex has to be restarted afterwards for the registration to take effect.

Last verified 2026-07-25

Talking to Codex

  1. 01

    Install Edict. It ships with its speech models already inside it, which is why the first run works on a plane. Grant the microphone and accessibility prompts macOS raises.

  2. 02

    Put your cursor in the Codex prompt, tap or hold Right Command, and talk. The transcript pastes where the cursor is. The pill names the app it is pasting into, which for a terminal agent is your terminal rather than Codex itself, since Codex is a process inside it.

  3. 03

    Feed the dictionary. It’s a CSV in Settings, one line per correction, and it’s the difference between dictating a flag name once and dictating it every time.

  4. 04

    Optional: allowlist your terminal for auto-send. Auto-send is keyed to applications, and Codex is a command running inside one, so the entry you add is Ghostty or iTerm or Terminal. A finished dictation then submits itself rather than waiting for Return.

Connecting Codex to Edict over MCP

Open Edict’s Agent pane and press Connect next to Codex. Behind that button it runs Codex’s own registration command, the equivalent of typing codex mcp add edict and pointing it at the helper binary inside the app bundle. Then restart Codex. Edict’s own pane tells you to, and it is the step people skip; a session that was already running when you pressed Connect will not have the server.

Codex is the odd one out in how it stores that. Every other agent Edict supports keeps MCP servers in JSON; Codex uses TOML, in ~/.codex/config.toml, under an [mcp_servers.edict] table with a single command line pointing at the binary. If you keep your Codex configuration somewhere else via CODEX_HOME, Edict reads that variable too, with one catch worth knowing: it reads the value its own process can see. Set it in your shell profile and launch Edict from Finder and Edict won’t see it, so the pane can keep offering Connect. Setting it with launchctl setenv, or launching Edict from a terminal, fixes that.

What that buys you is a Codex that can reach into your own dictation: the transcript history is searchable from inside the agent, the dictionary is editable by it, and you can hand it a recording and get the text back without either of you uploading anything. The transcription happens on your Mac in both directions, whether you are dictating into Codex or Codex is asking Edict to read a recording.

When Codex says Not detected but is definitely installed

This is the one that wastes an afternoon, and it is worth knowing before it happens. Edict decides Codex is present by running command -v codex in an interactive login shell, which is what makes it see the PATH your profile sets up rather than a bare one. That is the right check for a command-line tool, but it means anything that moves Codex off your PATH makes it disappear from the Agent pane, whether or not the thing is still on disk.

The common cause is nvm. Installing Codex with npm under nvm puts the executable under the Node version you were using at the time, at a path like ~/.nvm/versions/node/v24.14.0/bin/codex. Upgrade Node, or switch to another version for a different project, and that directory leaves your PATH. Codex is still installed under the old Node version, and still runs if you type its full path, but nothing that goes through PATH can find it, Edict included. Reinstall it under the Node version you actually use, or install it somewhere version-independent.

One thing that follows from how the check works, and saves some confusion: Edict spawns its own interactive login shell each time it scans, so it reads whatever your shell profile builds rather than anything an open terminal is holding. If you’ve just installed Codex, you don’t need a new terminal window. Click back into Edict and the pane re-scans.

What the terminal changes

Dictating into a terminal agent is different from dictating into an app with a chat box, in a way that works in your favour. There is no field to focus, no panel that can lose focus, and no rich-text layer to fight: the transcript arrives as characters, exactly as if you had typed them. That also means it survives things a tighter integration would not, including an SSH session, since Edict types into your local terminal and the remote end receives ordinary input.

The other half is that nothing rewrites you on the way in. Codex sees the sentence you said, with your dictionary applied and no second model’s opinion of it. Terminal instructions are mostly punctuation and proper nouns, which is precisely the material a tidy-up pass gets wrong.

The same setup covers Claude Code and Cursor, and the wider case for voice in agent work covers how the built-in options compare.

Common questions

How do I connect Codex to Edict’s MCP server?

Open Edict’s Agent pane and press Connect next to Codex, then restart Codex. Edict runs Codex’s own mcp add command, which writes the server into ~/.codex/config.toml. Don’t skip the restart: a session that was already open when you connected won’t have picked the server up.

Why does Edict say Codex is Not detected when I have it installed?

Almost always PATH. Edict checks with command -v codex in an interactive login shell, so if Codex isn’t on your PATH it can’t be seen. The usual cause is installing it with npm under nvm, which pins it to one Node version; upgrade or switch Node and it drops off PATH while still sitting on disk. Reinstall it under the Node version you use day to day. If you’ve only just installed it, click back into Edict and the pane re-scans.

Where does Codex keep its MCP configuration?

In ~/.codex/config.toml, under an [mcp_servers.edict] table. It is the only agent Edict supports that uses TOML rather than JSON. If CODEX_HOME is set the file lives there instead, and Edict follows it as long as the variable is visible to Edict’s own process rather than only to your shell.

Does dictating to Codex work offline?

The dictation does, entirely. Edict’s speech models are bundled in the app, so your speech is transcribed on your Mac with no network involved. Whether Codex needs the network is a separate question, and depends on the model provider you have pointed it at.

Does dictation work with Codex over SSH?

Yes. Edict types into your local terminal, so a Codex session running on a remote machine receives the characters as ordinary input and behaves no differently from a local one.

Apple Silicon (M1 or newer) · macOS 15 Sequoia or later · 7-day full trial · one-time purchase