Claude Code stops and waits for you. You are in another window and do not notice. Ten minutes later you come back and it has been sitting on a permission prompt the whole time.
This plugin rings a sound every 30 seconds until you answer, and stops the moment you do.
claude plugin marketplace add mindantic/claude-plugins
claude plugin install attention-ring@mindanticThen test it:
/attention-ring
| Notification | Default |
|---|---|
| Claude needs your permission | rings |
| A background session needs your input | rings |
| Claude is idle and waiting for a prompt | silent |
| A background agent finished | silent |
The last two are off because they are status, not a question. Turn either on in the plugin's settings.
Submitting a prompt stops every ringer and starts a 30 second quiet window, so answering one prompt does not immediately trigger the bell for the next one. Any tool finishing, the turn ending, or the session ending stops that session's ringer only. A session that is busy working can never silence a different session that is waiting.
If you never answer, it gives up after 5 minutes.
Open /plugin, pick attention-ring, and choose Configure.
| Option | Default | Notes |
|---|---|---|
sound |
bundled chime | WAV is safest. MP3 works on macOS, and on Linux with ffplay |
interval |
30 | Seconds between rings, 5 to 600 |
duration |
300 | Total seconds before giving up, 30 to 3600 |
volume |
1 | Multiplier on the file's own level, macOS only |
ring_on_idle |
off | Ring when Claude is idle and waiting |
ring_on_agent_completed |
off | Ring when a background agent finishes |
| Platform | Player | Formats |
|---|---|---|
| macOS | afplay, built in |
WAV, MP3, AIFF, M4A |
| Linux | paplay, aplay, or ffplay |
WAV everywhere, MP3 with ffplay |
| Windows | powershell.exe |
WAV only |
With no player on PATH the plugin exits quietly rather than failing. Run the test command to find out which one it picked.
assets/ring.wav is a two-tone chime, A5 into E6 with exponential decay, generated by assets/make-ring-wav.py. It is original work under the same MIT license as the code, so you can ship it, fork it, or replace it. Run the script to regenerate or retune it.
CLAUDE_RING_DEBUG=1Logs every decision to ${TMPDIR:-/tmp}/claude-ring-<uid>.log: the notification type, whether a ring started, and why one was suppressed.
The plugin never writes outside its own temp files. Locks live at ${TMPDIR:-/tmp}/claude-ring-<uid>-<session>.lock, which is per user, so it is safe on a shared machine.
./scripts/selftest.sh # 24 checks, runs silently in a temp sandbox
claude plugin validate .
python3 assets/make-ring-wav.pyThe self test covers ringing and not ringing per notification type, per-session lock isolation and that a stopped ringer actually dies, the snooze window, config clamping, the no-jq fallback path, and cleanup when the sound file is missing. It runs at volume 0, so it makes no noise.
MIT