# Ding

> When the user writes "/ding" anywhere in a message, play a local notification sound once the specific task described in that same message is genuinely complete (or blocked/failed) — not before, and not for any other task. On first use ever, asks the user which sound/method to use for their OS before playing anything. Use only when "/ding" literally appears in the user's message; never invoke proactively or for tasks that didn't ask for it.

- Skill: `rileytherex/ding` (Agent Skill)
- Install (CLI): `npx skillmds@latest add rileytherex/ding`
- Raw SKILL.md: https://api.skillmd.com/api/skills/rileytherex/ding/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: RileyTheRex (https://skillmd.com/u/rileytherex)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/rileytherex/ding

---


# 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](#trigger) — setup is
  done, just reuse the saved method.
- **If it doesn't exist yet**, this is the first time `/ding` has been
  used. Stop and do setup first:

  1. Detect the OS you're running on (Windows / macOS / Linux).
  2. Pick a sensible default for that OS (see [Playing the
     sound](#playing-the-sound) below) and tell the user what you're about
     to use.
  3. 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.).
  4. Ask if that sound/volume is fine, or if they'd rather point to a
     different sound file or command.
  5. Save the resolved method to `~/.claude/notify-skills/config.json`,
     merging with any existing keys (e.g. a `ping` section) rather than
     overwriting them:

     ```json
     {
       "ding": {
         "os": "windows",
         "command": "powershell.exe -NoProfile -Command \"(New-Object Media.SoundPlayer 'C:\\Windows\\Media\\Windows Notify.wav').PlaySync()\""
       }
     }
     ```

  6. 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:**
```bash
powershell.exe -NoProfile -Command "(New-Object Media.SoundPlayer 'C:\Windows\Media\Windows Notify.wav').PlaySync()"
```

**macOS:**
```bash
afplay /System/Library/Sounds/Glass.aiff
```

**Linux (requires `paplay`, part of PulseAudio; fall back to `aplay` or a
terminal bell if unavailable):**
```bash
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).

