The short answer
Call terminal-notifier from a Claude Code hook or the Codex notify command.
terminal-notifier is a free, open-source macOS command that posts a Notification Center banner. Install it with brew install terminal-notifier, then run it from Claude Code’s Stop and Notification hooks and from Codex’s notify setting. If the banner never appears, run terminal-notifier -diagnose: the usual causes are a missing permission, Focus mode or Scheduled Summary.
For one agent run you are waiting on, that is the whole job and you should keep it. With several sessions it gets harder: every banner looks alike, and a missed one leaves no trace of what happened. That is where a status board like AgentNotch or a voice layer like Heard comes in.
Side by side
terminal-notifier next to the other ways to get pinged.
Facts from each project’s own README and site. Checked October 6, 2026.
| Tool | What you get | After you miss it | Several sessions | Price |
|---|---|---|---|---|
| terminal-notifierbrew · macOS 10.14+ | A banner with your title and message | Notification Center history only | Same-looking banners unless you title each one | Free, open source |
| Sound hookafplay | A chime per event | Nothing | Every session sounds the same | Free, built in |
| AgentNotchmenu bar app | A visual board of sessions, approvals and usage | The board still shows who needs you | Grouped by project | $9.99 one-time, 3-day trial |
| Heardvoice layer | A spoken sentence: what changed and what needs you | Ask Parrot to catch you up (Power) | Each update starts with the project name | Free engine; app from $15/mo |
AgentNotch price from its own buy page; some of its older pages still say $19.
Install terminal-notifier and send a test banner.
terminal-notifier runs on macOS 10.14 or later. Version 3.1.0 shipped on August 30, 2026, after a long gap since 2.0.0 in 2017, so the project is maintained again. Homebrew is the easy path. The prebuilt release is not notarized, so a downloaded copy needs its quarantine flag removed before macOS will run it.
The first banner triggers a macOS permission prompt. Click Allow, or nothing that follows will show.
brew install terminal-notifier
terminal-notifier -title 'Claude Code' -message 'Test banner' -sound default
Add it to Claude Code’s Stop and Notification hooks.
Stop fires when Claude finishes a turn. Notification fires when Claude needs a permission or is waiting on you. Put both in ~/.claude/settings.json. The -group flag replaces the previous banner from the same group, so a long session does not stack up dozens of them.
{
"hooks": {
"Stop": [
{
"hooks": [
{ "type": "command", "command": "terminal-notifier -title 'Claude Code' -message 'Finished' -sound default -group claude-code" }
]
}
],
"Notification": [
{
"hooks": [
{ "type": "command", "command": "terminal-notifier -title 'Claude Code' -message 'Needs you' -sound Funk -group claude-code" }
]
}
]
}
}
Point Codex’s notify command at it.
Codex runs the notify command from ~/.codex/config.toml with one JSON argument. Its only event today is agent-turn-complete, so this tells you a turn ended, not that Codex needs approval. For approvals, Codex hooks in ~/.codex/hooks.json include a PermissionRequest event you can attach the same command to.
# Codex appends a JSON argument; bash -c ignores it here.
notify = ["bash", "-c", "terminal-notifier -title Codex -message 'Turn complete' -sound default -group codex", "_"]
When the banner never appears.
The terminal-notifier README lists the usual causes. Work down the list before reinstalling anything.
- The notification permission was never granted, or a macOS upgrade reset it.
- Focus mode is on and terminal-notifier is not allowed through.
- Scheduled Summary is holding notifications for later.
- Notification Center itself crashed.
killall NotificationCenterrestarts it. - There is no GUI session, for example over SSH or from a root launchd job.
terminal-notifier -diagnose
tccutil reset UserNotification fr.julienxx.oss.terminal-notifier
killall NotificationCenter
A banner says that something happened, not what.
With one session, “Claude Code finished” is all you need. With three, you get three identical banners and still have to open each terminal to learn which one is done, which one failed and which one is asking a question. A banner you miss while you are away from the screen is just gone.
You can push it further by putting the project folder in the title, which needs a small script to read cwd from the hook input. Past that, you are rebuilding a status board or a voice layer by hand.
Heard tells you what changed, out loud.
Heard installs its own Claude Code and Codex hooks and turns the events into one or two spoken sentences: which project, what changed and whether it needs you. Routine work from parallel sessions is batched into short summaries, while questions and failures come through right away. It runs on macOS 14 or later. The open-source engine is free with local Kokoro voices; the app adds managed voices, Parrot recaps and voice replies.
You do not have to choose: a terminal-notifier banner for “done” and Heard for the content work fine side by side.
Questions
Frequently asked questions
Does terminal-notifier work with Claude Code?
Yes. Call it from the Stop hook for “finished” and the Notification hook for “needs you” in ~/.claude/settings.json. Claude Code picks up hook changes without a restart.
Why do my terminal-notifier banners not show up?
Run terminal-notifier -diagnose. The usual causes are a missing or reset notification permission, Focus mode, Scheduled Summary, a crashed Notification Center, or running without a GUI session such as over SSH.
Can terminal-notifier tell me when Codex needs approval?
Not through notify, which only fires on agent-turn-complete. Attach it to the PermissionRequest event in Codex hooks instead.
Does Heard replace terminal-notifier?
Not necessarily. terminal-notifier is the right tool for a single run you are waiting on. Heard is for when you run several sessions or step away from the screen and want to hear what happened without opening each terminal.
Ready when your agents are
Hear the work without watching every screen.
Start with the full Heard Power experience for 14 days. No card required. The open source engine remains free.
Download Heard for Mac macOS 14 or later · Claude Code and Codex supported