Audible ping
Plays a local sound when a task the user tagged with /ding is done. Opt-in
and per-message only — same shape as the /ping Discord skill, but a local
sound instead of a network notification, so there's no external token, but
the right command still depends on the user's OS.
First-time setup (only runs once, ever)
Before playing anything, check whether
~/.claude/notify-skills/config.json exists and has a ding section.
If it already exists, skip straight to Trigger — setup is done, just reuse the saved method.
If it doesn't exist yet, this is the first time
/dinghas been used. Stop and do setup first:Detect the OS you're running on (Windows / macOS / Linux).
Pick a sensible default for that OS (see Playing the sound below) and tell the user what you're about to use.
Play that default once as a test, right then, so the user can confirm they actually heard it (some machines are muted, some Linux boxes lack
paplay/aplay, etc.).Ask if that sound/volume is fine, or if they'd rather point to a different sound file or command.
Save the resolved method to
~/.claude/notify-skills/config.json, merging with any existing keys (e.g. apingsection) rather than overwriting them:{ "ding": { "os": "windows", "command": "powershell.exe -NoProfile -Command \"(New-Object Media.SoundPlayer 'C:\\Windows\\Media\\Windows Notify.wav').PlaySync()\"" } }Confirm setup is complete, then proceed with the actual task from the user's message as normal.
Trigger
Only act on this skill when the literal text /ding appears somewhere in
the user's message — it doesn't have to be the first word, e.g. "Build the
retry logic and /ding once it's ready for me to test" is a valid trigger.
If /ding is not present, do not play anything, no matter how long or
important the task is.
Scope: exactly the task in that message, exactly once
/ding applies only to the specific task described in the same message it
appears in — not to unrelated later tasks in the conversation, and not to
every sub-step along the way. Read the message for what "done" means to the
user:
- If they give a specific milestone ("/ding once this is ready for me to test", "/ding when the build finishes"), that milestone is the completion condition — not full task completion, not intermediate progress.
- If they don't specify a milestone (just "/ding" attached to a task), the completion condition is the task actually being done — including waiting out any background jobs it spawns and knowing the real result, not just having handed it off to the background.
Play the sound at most once for that task. Do not play it on
intermediate progress, partial completion, or for other tasks that didn't
include /ding in their own message.
Playing the sound
Run the exact command saved in ~/.claude/notify-skills/config.json
under ding.command. If setup hasn't saved one yet, fall back to these
per-OS defaults (and save whichever one you use):
Windows:
powershell.exe -NoProfile -Command "(New-Object Media.SoundPlayer 'C:\Windows\Media\Windows Notify.wav').PlaySync()"
macOS:
afplay /System/Library/Sounds/Glass.aiff
Linux (requires paplay, part of PulseAudio; fall back to aplay or a
terminal bell if unavailable):
paplay /usr/share/sounds/freedesktop/stereo/complete.oga
Still give the normal in-chat response too — the sound is in addition to, not instead of, telling the user directly in the conversation.
If the user ever wants a different sound, just update the ding.command
value in ~/.claude/notify-skills/config.json directly (or delete the
ding key to trigger setup again next time /ding is used).