Codex notifications on Mac
Codex fires a signal every time the agent finishes a turn and hands back to you. On macOS you can surface that three ways: the built-in terminal notification (a real desktop banner only in Ghostty, iTerm2, Kitty, Warp, and WezTerm — a bell everywhere else), a DIY notify script that runs in any terminal, or a notch monitor that also clicks you back to the exact terminal, or the right thread if you use the Codex desktop app. Here is how each one works, and when each is enough.
When Codex notifies you
Codex emits a signal at the moment that matters during a long run: when the agent finishes a turn — that is, when it is done processing your submission and waiting on you again. Its built-in terminal notifications can also fire when Codex pauses for an approval. The question is never whether the signal exists, but whether it actually reaches you once you have tabbed away to do something else. The three methods below are just different ways to catch it.
Method 1: the built-in notification
Codex ships with terminal notifications on. But whether one becomes a real macOS banner depends on your terminal. In Ghostty, iTerm2, Kitty, Warp, and WezTerm, Codex posts a desktop notification when a turn finishes. In every other terminal, including Apple Terminal and the VS Code integrated terminal, it falls back to the terminal bell — audible, but no banner. It also fires only while that terminal is unfocused by default.
The setting lives under [tui] in
~/.codex/config.toml. It is on by default; this is how you
would set it explicitly, or flip it to false to silence it:
[tui]
notifications = true
You can also scope it to specific moments by passing an array instead of
a boolean — for example notifications = ["agent-turn-complete"]
for completion only, or add "approval-requested" to include
approval pauses.
The catch
The built-in path gives you a bare banner or a bell. It cannot play a custom sound, the banner is not clickable to anywhere useful, and in any terminal outside the five above all you get is the bell. If a long run spans several terminal windows, "which one just finished?" is still a manual hunt.
Method 2: a DIY notify script
For a real notification in any terminal, Codex can run a
program every time it finishes a turn. Point the top-level
notify key in ~/.codex/config.toml at your
script; Codex appends one argument containing a JSON payload that
describes the turn:
notify = ["python3", "/Users/you/.codex/notify.py"]
Then a small script turns that payload into a macOS notification. This
one uses osascript, which is built into macOS, so there is
nothing to install:
#!/usr/bin/env python3
import json
import subprocess
import sys
payload = json.loads(sys.argv[1]) if len(sys.argv) > 1 else {}
if payload.get("type") == "agent-turn-complete":
message = payload.get("last-assistant-message") or "Turn complete"
subprocess.run([
"osascript",
"-e",
f'display notification {json.dumps(message)} with title "Codex"',
])
The payload Codex passes carries the turn type, the
input-messages you sent, and the
last-assistant-message the agent ended on — so you can drop
the agent's final line straight into the banner, as above.
Gotcha most guides miss
osascript posts through the built-in Script Editor app.
If Script Editor does not have notification permission, the command
fails silently and macOS never prompts you. Run
osascript -e 'display notification "test"' once in
Terminal, then open System Settings, Notifications, find Script Editor,
and turn on Allow Notifications.
Want a sound too? Add a line that runs
afplay /System/Library/Sounds/Glass.aiff. Want a richer,
clickable banner? Run brew install terminal-notifier and
call terminal-notifier -title "Codex" -message "Turn complete"
-sound default instead.
This is genuinely enough if you run one agent in one terminal and just want a ping when it stops. Be honest about the ceiling, though: it fires on every completed turn, and it is still a plain notification. It tells you a turn ended, not which session, and clicking it can at best raise an app, never the exact terminal tab or the right Codex thread. And you own the upkeep, the config, the script, the Script Editor permission, on every Mac you work from.
Method 3: alerts that jump you back
Vibe Island turns your Mac's notch into a live monitor for every Codex session. When a task finishes or Codex needs your input, the notch surfaces it, with a sound if you want one, and one click takes you straight back — to the exact terminal window, tab, or split for a CLI session, or to the matching thread in the Codex desktop app. There is no config file to edit and no permission to grant: it configures itself the first time you launch it.
Two things the DIY paths cannot do:
Land you on the exact session. A plain notification cannot route you anywhere. Vibe Island opens the precise terminal tab for a CLI session, or the exact thread for a desktop-app session, so you never have to hunt for where Codex was running.
Watch every terminal and agent at once. The same panel covers 13+ terminals and every agent you run, so you are never guessing which window finished, and one setup replaces a per-terminal, per-machine pile of scripts.
Which method should you use
The built-in bell or banner
Best if you run Codex in Ghostty, iTerm2, Kitty, Warp, or WezTerm, work in a single window, and only need to know a turn finished. Zero install, but in any other terminal it is only a bell.
A DIY notify script
Best if you are comfortable editing config and want a real notification (or a sound) in a terminal the built-in path only bells. Enough for one agent in one terminal, as long as you do not mind maintaining it.
A notch monitor
Best if you run long tasks, juggle more than one terminal or agent, or want one click back to the exact terminal tab or desktop thread. It trades a one-time download for zero ongoing setup, and it is the only option that routes you to the right session.
Common questions
Does Codex notify me when it finishes?
Yes. Codex fires a signal every time the agent finishes a turn — when it is done processing your request and handing back to you. The built-in setting turns that into a desktop banner in a handful of terminals (Ghostty, iTerm2, Kitty, Warp, and WezTerm) and a bell everywhere else; a notify script turns it into a banner in any terminal; and a notch monitor like Vibe Island shows it and clicks you back to the session.
Why am I not getting Codex notifications on my Mac?
Two causes are common. First, the built-in notification only becomes a real desktop banner in Ghostty, iTerm2, Kitty, Warp, and WezTerm; in Apple Terminal, the VS Code integrated terminal, and others it falls back to the terminal bell with no banner. Second, if you wrote a notify script that calls osascript, the banner is posted through the built-in Script Editor app, which fails silently until you grant it notification permission in System Settings. Note too that the built-in notification only fires while that terminal is unfocused by default.
Do notifications work with the Codex desktop app as well as the CLI?
The built-in setting and the notify script are CLI options in your config file, so they apply when you run codex in a terminal. A notch monitor covers both surfaces: it tracks CLI sessions and desktop-app sessions in one panel, and clicking a finished session takes you to the exact terminal tab for a CLI session, or straight to the matching thread in the desktop app.
Can I get a sound with a Codex notification?
Yes. In a notify script, add a command that runs afplay on a system sound, such as afplay /System/Library/Sounds/Glass.aiff, or install terminal-notifier and pass -sound default. The built-in path can only ring the terminal bell. A notch monitor like Vibe Island plays a completion sound with nothing to configure.
One notch for every agent, not just Codex
Notifications are one part of it. Vibe Island watches Codex alongside every other agent you run: Claude Code, ZCode, Gemini CLI, Antigravity CLI, Cursor Agent, Trae, OpenCode, MiMoCode, Factory Droid, Qoder, Qwen, Grok Build, Kimi Code, DeepSeek, Mistral Vibe, Copilot, CodeBuddy, WorkBuddy, Kiro, Hermes, Amp, Pi Agent, Oh My Pi, and Gajae Code. It surfaces completion and status in a single notch, and clicks you back to the exact session every time. See the AI coding session monitor, start with Codex monitoring, or read how it tracks several agents at once.
Vibe Island · macOS 14+
Never miss a Codex task finishing on your Mac
Download Free Trial2-day free trial · all features included · no card required