Journal
Tutorials

How to Get a Desktop Notification When Claude Code Finishes

C

Clearly Team

Engineering

5 min read
Jul 10, 2026

How to Get a Desktop Notification When Claude Code Finishes

You send Claude Code off on a task, tab over to Slack, and… it finished ninety seconds ago and has been sitting there waiting for you. Or worse, it hit a permission prompt and stalled. The fix is a small hook that fires a native desktop notification the moment Claude finishes a turn — or needs your input.

The two events that matter

Claude Code fires a hook on:

  • Stop — it finished responding (your turn).
  • Notification — it needs you: a permission prompt, or it's idle waiting for input. The payload carries a message and a notification_type like permission_prompt or idle_prompt.

Wire a notifier to both and you'll never stare at a finished-but-silent session again.

The fix: a free plugin (one command)

We built the notifier as a free, standalone, MIT plugin — Mwah Notify. No account, no network, no phone-home; it reads the event and pops a native notice that names the project. Install it from the marketplace:

/plugin marketplace add clearly-sh/mwah-notify
/plugin install mwah-notify@mwah

Restart your Claude Code sessions and you'll get "Claude Code — done ✅ · your-project: your turn" on finish, and the actual prompt text when it needs you. Silence the sound anytime with MWAH_NOTIFY_SOUND=off.

Prefer to wire it by hand?

Drop a small script somewhere stable and point two hooks at it in ~/.claude/settings.json:

{
  "hooks": {
    "Stop": [ { "hooks": [ { "type": "command", "command": "node ~/.claude/notify.mjs" } ] } ],
    "Notification": [ { "matcher": "", "hooks": [ { "type": "command", "command": "node ~/.claude/notify.mjs" } ] } ]
  }
}

The script reads the event JSON on stdin (it gets hook_event_name, cwd, and for notifications the message) and shells out to osascript on macOS or notify-send on Linux. Ours is ~50 lines and MIT — read or copy it from the repo. New to hooks? The complete guide explains the whole model.

One notification per session doesn't scale

A notification is perfect for one or two sessions. But if you're running five in parallel, a stream of identical "done" pings blurs together — which one finished? which one's stuck waiting? You're back to hunting terminals.

That's where Mwah takes over: instead of notifications, it floats every live Claude Code session on your desktop as a little robot flagged ALIVE or STUCK — so you see the whole board at a glance, feed the ones that nailed it, and retire the stuck ones with a click. The notification tells you something happened; Mwah shows you what.


Related: Claude Code hooks: the complete guide · Run multiple Claude Code sessions

#claude code#hooks#notification#developer workflow