Making Claude Beep: a dive into hooks with Claude Code
2026-02-28

So I have ADHD and whilst Claude Code is a great tool for my short-lived attention span, it takes anywhere from a few seconds to dozens of minutes to finish a task, and in that time I’ll inevitably find something else to focus on: Twitter (I’ll never call it X), Hacker News, or exploring a map of Malta. You get the picture.⁠

By the time I remember I was supposed to be prompting, it's been fifteen minutes and Claude has been sat there patiently waiting for me to get my arse in gear.

So I wanted a beep. Just a simple sound that says "hey, I'm done, what's next?." Turns out Claude Code has a hooks system that makes this rather easy.

Hooks

Hooks are commands that Claude Code triggers automatically when certain events happen. There's a bunch of events you can hook into like tool calls, errors, session start etc, but the one I care about is Stop. It fires when Claude finishes responding and is waiting for my input.

The config lives in ~/.claude/settings.json. Here's what you need:

{
  "hooks": {
    "Stop": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "afplay /System/Library/Sounds/Ping.aiff"
          }
        ]
      }
    ]
  }
}

That's it. macOS ships with a bunch of system sounds in /System/Library/Sounds/ and afplay is a built-in command that plays them. No dependencies, no installs, just a one-liner in your settings.

Picking a sound

Here's what you've got to choose from:

  • Frog.aiff - my pick, ribbit
  • Ping.aiff - clean and noticeable
  • Glass.aiff - subtle, good if you're in calls a lot
  • Hero.aiff - dramatic, for when Claude finishes something impressive
  • Tink.aiff - very quiet, for the easily startled
  • Pop.aiff - short and snappy
  • Basso.aiff - deep and serious
  • Blow.aiff - a gentle whoosh
  • Bottle.aiff - hollow and echoey
  • Funk.aiff - funky little error vibe
  • Morse.aiff - dot dot dash
  • Purr.aiff - soft rumble
  • Sosumi.aiff - the classic Mac "so sue me" sound
  • Submarine.aiff - you're on a submarine now

You can test them out by running afplay /System/Library/Sounds/Glass.aiff in your terminal and pick whatever doesn't drive you nuts after the hundredth time.

Extending it

You can hook into other events too. A quiet Tink.aiff on every tool call so you know Claude is still working. A Basso.aiff on errors so you catch failures early. You could even wire up different sounds for different tools if you wanted to know what Claude is doing by ear alone, but at that point you should probably go outside and touch some grass.

The hooks docs have the full list of events if you want to get creative.

But to be honest, the Stop beep has been the biggest quality-of-life improvement for me. I can get distracted to my heart's (or brain's) desire, knowing Claude will ping me when it's time to lock in.