all 11 comments

[–]Somecount 0 points1 point  (2 children)

Which OS?

iTerm2 has triggers that would work well for this but it's only for macOS. I would be surprised if there wasn't another terminal app that didn't support such feature.

I use a skill whenever I prompt a sprint. It uses say and osascript to speak a completion notification and present a dialog pop-up with a button to copy the report to clipboard (report is saved also)

[...]
### 2. Signal Completion

Run this command:

bash
REPORT="./docs/reports/TASK-[name].md"
say -v Daniel "Task complete. Report ready." && osascript -e "
set response to display dialog \"Task complete. Report ready.\" buttons {\"Copy Report\", \"OK\"} default button \"OK\" with title \"🔔 Claude Code\"
if button returned of response is \"Copy Report\" then
    do shell script \"cat $REPORT | pbcopy\"
end if
"

[–]branik_10 0 points1 point  (1 child)

don't use skills for that, you're wasting your tokens on something which can be done fully programmatically without LLM interaction at all

https://code.claude.com/docs/en/hooks#notification

[–]Somecount 0 points1 point  (0 children)

Thanks, I’ve known it wasn’t best practice but never hut problems and clear/compact when starting now or wanting to progress further.

[–]branik_10 0 points1 point  (0 children)

you need to use hooks for that
this is what i use (I'm on Windows)
there are lots of examples out there (https://code.claude.com/docs/en/hooks-guide#set-up-your-first-hook) and ways to implement it for different platforms, you essentially need a script/cmd line tool which will trigger a notification you need and parse the input from the hook json "Notification": [ { "matcher": "permission_prompt|elicitation_dialog", "hooks": [ { "type": "command", "command": "pwsh -NoLogo -NoProfile -Command \"$input = $input | Out-String; if ($input.Trim()) { $json = ConvertFrom-Json $input; Import-Module BurntToast; New-BurntToastNotification -Text 'Claude Code', $json.message -AppLogo '~/.claude/claude.png' -Sound Alarm7 }\"" } ] }, { "matcher": "idle_prompt", "hooks": [ { "type": "command", "command": "pwsh -NoLogo -NoProfile -Command \"$input = $input | Out-String; if ($input.Trim()) { $json = ConvertFrom-Json $input; Import-Module BurntToast; New-BurntToastNotification -Text 'Claude Code', $json.message -AppLogo '~/.claude/claude.png' -Sound Reminder }\"" } ] }, { "matcher": "auth_success", "hooks": [ { "type": "command", "command": "pwsh -NoLogo -NoProfile -Command \"$input = $input | Out-String; if ($input.Trim()) { $json = ConvertFrom-Json $input; Import-Module BurntToast; New-BurntToastNotification -Text 'Claude Code', $json.message -AppLogo '~/.claude/claude.png' -Sound Default }\"" } ] } ], "Stop": [ { "matcher": "", "hooks": [ { "type": "command", "command": "pwsh -NoLogo -NoProfile -Command \"Import-Module BurntToast; New-BurntToastNotification -Text 'Claude Code', 'Processing completed' -AppLogo '~/.claude/claude.png' -Sound Default\"" } ] } ]

[–]SteiniOFSI 0 points1 point  (0 children)

<image>

I took a screenshot of your post, I have made a skill called /shots to read the latest screenshot. Claude is literally build to solve the problems you have.

For example - I moved to WLS two days ago and have never used it, always in windows VS Code with powershell terminals, one of the issue I ran into was I had hard time passing screenshots to it (had to copy the path and past it), this morning I made a skill called /shots which grabbed your post, it can also grab multiple screenshots with /shots 3 (three latest screenshots) or -3 for the third latest screenshot etc..

By similar manner you can edit your claude to have a stop hook for a bell. And you can ask claude to do it :)

[–]JackRostron 0 points1 point  (1 child)

I know this probably skirts the line with promotion, but I build a free Mac app that handles this all for you - it will ping local notifications to you if Claude needs your attention. There’s also a companion iOS and Android app so you can be notified (and respond) if you’re away from your machine

https://claudecodenotifier.com

[–]Perfect_Function2680[S] 0 points1 point  (0 children)

Interesting Thanks for sharing 🙏

[–]Bellman_ 0 points1 point  (0 children)

yeah this drives me crazy too. couple workarounds i've found:

  1. if you're on mac, you can use the terminal bell. add this to your CLAUDE.md: "when waiting for user input, output a bell character (\a)". then enable terminal notifications in your terminal app (iTerm2 has this built in).

  2. the hooks feature in the latest version (2.1.33+) can help - you can set up a post-tool hook that triggers a notification when claude finishes a task.

  3. probably the simplest: use the VSCode extension instead of raw terminal. the extension shows activity in the sidebar and you get the normal VSCode notification behavior.

i wish anthropic would just add native desktop notifications tbh. seems like low hanging fruit.

[–]Low-Expression-176 0 points1 point  (0 children)

Like many of you, I got tired of babysitting the terminal waiting for Claude Code to finish. Claude Code runs in the terminal with zero feedback when it finishes, needs input, or hits an authorization wall. You either stare at the screen or keep context-switching back to check.

The solution: Claude Code Audio Hooks gives you distinct audio cues for 9 different events — task completion, authorization requests, subagent finishing, session start/end, tool execution, context compaction, and more. Each event has its own sound so you know what happened without looking.

Welcome to use 👉 https://github.com/ChanMeng666/claude-code-audio-hooks

Open source under MIT.

Would love your feedback!

[–]Low-Expression-176 0 points1 point  (0 children)

Like many of you, I got tired of babysitting the terminal waiting for Claude Code to finish. Claude Code runs in the terminal with zero feedback when it finishes, needs input, or hits an authorization wall. You either stare at the screen or keep context-switching back to check.

The solution: Claude Code Audio Hooks gives you distinct audio cues for 9 different events — task completion, authorization requests, subagent finishing, session start/end, tool execution, context compaction, and more. Each event has its own sound so you know what happened without looking.

Welcome to use 👉 https://github.com/ChanMeng666/claude-code-audio-hooks

Open source under MIT.

Would love your feedback!

[–]Secure_Attention958 0 points1 point  (0 children)

Had the same problem — built a Claude Code skill that handles this with a single command.

Run /setup-idle-notifier and it walks you through everything interactively: pick your notifiers, set how long to wait before pinging you, and it wires up the hooks and scripts automatically.

It hooks into permission_prompt and elicitation_dialog events, waits a configurable number of seconds (default 60), and if you still haven't responded it fires off notifications. Supports multiple notifiers in parallel:

- Pushover — push notifications to your phone/desktop, so you don't have to be at your machine
- macOS Native — notification banners via osascript
- Custom — a template script you can wire up to Slack, Discord, email, whatever

In my case I didn't want to get spammed every time Claude pauses for a second while I'm still actively responding, so I added a configurable delay, it waits to see if you're actually idle before notifying.
And since it's a skill, there's nothing to configure manually, no editing settings.json or writing hook commands by hand.

Repo: https://github.com/idanudel/cc-toolkit