Blog · August 15, 2026 · 6 min read · by Vilva Athiban P B
Get a Ding the Moment Codex Needs Your Response
There are two moments when a coding agent should make noise. When it's done — and, far more urgently, when it has stopped to ask you something. A Codex CLI session sitting at an approval prompt isn't working; it's waiting. Every silent minute there is a minute of compute and momentum lost because a yes/no question printed to a terminal you weren't looking at.
The good news: you don't need scripts, tmux tricks, or terminal bell hacks for this anymore. Codex has a built-in setting that fires a desktop notification at exactly that moment — it's just not the setting most guides talk about. Here's how to get a reliable ding when Codex needs your response, plus the matching setup for Claude Code and Cursor.
Why your notify hook stays silent at approval prompts
Most Codex notification setups use the notify hook in ~/.codex/config.toml — an external program Codex runs when an event happens. It's a great tool, and we cover it in depth in our Codex CLI notifications guide. But it has a blind spot that surprises almost everyone: the external notify hook fires on agent-turn-complete — when Codex finishes a turn — and not when Codex pauses mid-task to request approval.
So you set up a lovely chime, confirm it rings when a task ends, and then still come back to a session that spent twenty minutes stuck on "allow this command?" with no sound at all. The done-ding works; the needs-you ding never fires.
The built-in fix: tui.notifications
Codex's terminal UI has its own notification channel, separate from the external hook, and it understands two event types: agent-turn-complete and approval-requested. Turn it on in ~/.codex/config.toml:
# ~/.codex/config.toml
[tui]
notifications = trueWith notifications = true you get desktop notifications for both events. If you only want the ding when Codex is blocked on you — and silence when it simply finishes — filter it down to the one event that matters:
# ~/.codex/config.toml
[tui]
notifications = ["approval-requested"]That single line is the answer to the "ding when prompt response needed" problem: Codex pauses for approval, your desktop pings, you tab over, hit yes, and the agent keeps moving. The inverse filter (["agent-turn-complete"]) exists too, if approval noise ever gets excessive on a permissive config.
The catch: your terminal has to cooperate
Unlike the external hook — which runs any program you point it at — TUI notifications are delivered through terminal escape codes. Your terminal emulator has to translate them into system notifications, and support varies:
- Works well: iTerm2, WezTerm, Kitty and Ghostty all understand the relevant escape sequences. In iTerm2, also allow notifications in Settings → Profiles → Terminal.
- Doesn't work: macOS Terminal.app ignores these sequences entirely — no amount of config.toml editing will make it ding.
- Extra rule: most terminals only surface the notification when the window is unfocused — which is what you want, since that's precisely when you're not watching.
If you're on a terminal that doesn't play along, you have two options: switch terminals, or skip the plumbing entirely with a native notifier app — more on that below.
The same setup for Claude Code
Claude Code solved this from the other direction: its hook system has a dedicated Notification event that fires when Claude needs permission to use a tool or has been idle waiting for your input. A minimal ~/.claude/settings.json entry:
{
"hooks": {
"Notification": [
{
"hooks": [
{
"type": "command",
"command": "afplay /System/Library/Sounds/Funk.aiff"
}
]
}
]
}
}That plays a distinct sound whenever Claude Code is waiting on you — use a different sound for the Stop hook and you'll know without looking whether it's done or blocked. Full recipes, including banners and phone pings, are in our copy-paste notification scripts post.
Cursor's agent sits somewhere in between: it can notify when a run finishes, but the waiting-for-confirmation case is exactly where its built-in options are thinnest — our Cursor notification guide walks through what's possible there.
One agent is config. Three agents is a chore.
Notice what just happened: three tools, three completely different mechanisms — a TOML table read by a TUI, a JSON hooks file, and an IDE's notification settings. Each breaks differently, each lives on one machine, and none of them share a definition of "needs input." The config is easy once; maintaining it across every agent, terminal and laptop you touch is the part that quietly stops happening.
However you wire it up — tui.notifications, a Claude Code hook, or a native app that watches everything — the principle is the same: the expensive resource in an agentic workflow isn't the model, it's your attention. A ding at the moment an agent needs a response is the cheapest productivity upgrade available this year. Set it up once and stop paying the waiting tax.
Keep reading
Desk Exercises for Programmers: 15 Moves to Do While Your AI Agent Codes
7 min read
Exercise While Coding: Turn Claude Code Wait Time Into Micro-Workouts
7 min read
Claude Code Notch Notifications on Mac: See When Claude Is Done Without Watching the Terminal
7 min read
Claude Code Tips and Tricks: 12 Ways to Use Claude Code Effectively
8 min read
Claude Code Multiple Sessions: How to Run Agents in Parallel Without Losing Track
6 min read
A Claude Code Workflow That Doesn't Involve Watching the Terminal
5 min read
Claude Code Hooks: A Practical Guide to Automating Your Agent Workflow
7 min read
Claude Code Auto Mode: Fewer Permission Prompts Without Living Dangerously
7 min read
Claude Code Subagents: How to Delegate Work to Specialized Agents
7 min read
Claude Code Context Management: Treat the Context Window Like a Budget
6 min read
Per-Subagent Model Selection: Route the Grunt Work Down, Keep the Judgment Up Top
7 min read
Skills and Plugins: How to Teach Claude Code Your Way of Working
7 min read
Claude Code Background Tasks: Run Long Commands Without Blocking Your Session
6 min read
Codex CLI Notifications: How to Get a Ding When Codex Is Done or Needs Input
7 min read
Cursor Notification When Done: Every Way to Get Notified When Cursor Finishes
6 min read
Claude Code Notifications: How to Get Notified When Claude Code Finishes or Needs Your Input
6 min read
Want to Be Notified When Claude Responds? How Claude Notifications Work on Web, Desktop, and Mobile
5 min read
Claude Code Notification Scripts: Copy-Paste Recipes for Every Platform
6 min read
Get Notified the Moment Claude Code Is Waiting for Your Input
6 min read
“Notifications Are Turned Off for Claude” — Here Is the Fix
6 min read
Codex Sound When Done: Make Codex CLI Play a Sound When It Finishes
6 min read
terminal-notifier + Claude Code: Native macOS Alerts When Your Agent Finishes
6 min read
Gemini CLI Notifications: How to Get a Sound or Alert When Gemini Finishes
6 min read
Get Claude Code Notifications on Your Phone
6 min read
Claude Code Remote Control, Explained
7 min read
preferredNotifChannel: Claude Code's Built-In Notification Setting
6 min read
Claude Code Notifications in tmux and Over SSH
7 min read
Claude Code Effort Levels: Why Your Setting Keeps Getting Ignored
8 min read
Codex vs Claude Code Notifications: How Each One Tells You It Is Done
8 min read
Claude Code Notifications Not Working: A Diagnostic Checklist
10 min read
Claude Code Notifications Inside Your Editor's Terminal
7 min read
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS Explained
7 min read
CLAUDE_CODE_DISABLE_BG_SHELL_PRESSURE_REAP Explained
8 min read
Cursor Alerts Explained: Every Alert Cursor Raises, and How to Control Them
7 min read
Claude Code Environment Variables: The Groups That Actually Matter
10 min read
Claude Code Notifications on WSL and Windows
9 min read
Claude Code Checkpoints and /rewind
8 min read
Claude Remote Control: How It Works, Turning It Off, and Auto Mode
7 min read
Claude Code /loop: Poll a Deploy, Babysit a PR, and Get Told When It's Done
8 min read
Setting Up NotchFit With OpenAI Codex CLI: Hooks, $notchfit-plan, and the Daily Flow
7 min read
Claude Mods Explained: What the New Plugin Layer Can Do, and How to Turn On 'You Should Know'
9 min read
NotchFit vs Mac Break Reminder Apps: A Clock or a Signal From Your Coding Agent?
8 min read
Claude Code Headless Mode: Running claude -p in Scripts and CI, and the Three Signals That It Finished
10 min read
Building a Movement Habit at a Desk: Use the Agent Run as the Cue, One Set as the Unit, and Streaks Carefully
8 min read
Claude Code MCP Servers Explained: Adding Servers, Choosing a Scope, Handling Secrets, and Why Long Tool Calls Go to the Background
10 min read
/notchfit:plan Explained: How Claude Code or Codex Writes a Weekly Workout Plan the Notch Can Actually Run
8 min read
Claude Code Spinner Verbs Explained: What “Pondering” and “Brewing” Mean, How to Change Them, and Why You Should Stop Watching the Spinner
7 min read
Why NotchFit's Done and Permission Alerts Wait Until Your Set Ends, When That Costs You, and How to Turn the Workout Off
7 min read
How to Resume a Claude Code Session: --continue vs --resume, Naming Sessions, the Session Picker, Branching, and What Comes Back
9 min read
NotchFit on a Mac Without a Notch: How Pill Mode Works on Mac mini, iMac, Mac Studio and a MacBook With the Lid Closed
6 min read
How to Run a Claude Code Session in the Background: /background, claude --bg, Agent View, and Getting Back to It
9 min read
What a Notch App Can See: NotchFit's Local-First Design, What the Claude Code and Codex Hooks Send, and What Stays on Your Mac
7 min read
Why Codex CLI Asks for Permission Every Time, and How to Tune the Sandbox and Approval Policy Without Going Full Access
8 min read
What to Do While Claude Code or Codex Works: A Simple Protocol for the Two-to-Twenty-Minute Gap in Every Agent Run
7 min read
Is It Possible to Get a Notification When Claude Code or Codex Hits a Reset? Yes for Claude Code: the quota_auto_resume Hooks, Explained
8 min read
What a MacBook Notch App Can Actually Do: The Five Kinds of Notch Utility, Their Trade-offs, and Where NotchFit Fits
7 min read