SLOPSHOPPER

done-sound

Проигрывает звук Glass, когда Claude завершает задачу ответом (только основной цикл, без сабагентов).

newaudio
v0.2.0no licenseupdated 2026-10-26Pavelkv94/mods/done-sound
A shopper browsing a rack in a slop shop
README

mods

Claude Code mods.

ModWhat it does
agent-crabsSide pane with a card per subagent and background process: animated crab, model, context fill, idle warning, API-equivalent cost, and expandable operations, files and tokens
context-bandBand above the prompt: context fill, rate limits, session cost and a Handoff button that writes a handoff doc, clears the context and reads it back
next-stepsТолько в desktop-приложении: после каждого ответа Haiku предлагает над полем ввода три разных варианта следующей команды столбиком с полным текстом; клик или цифра 1–3 вставляет её в поле ввода, Enter отправляет как твою команду.
done-soundПроигрывает звук Glass, когда Claude завершает задачу ответом (только основной цикл, без сабагентов).
session-branchesTerminal-only pane with the tree of this project's sessions and their forks; press a row to switch to it

Install

At the prompt of a Claude Code terminal session (replace <mod> with a name from the table):

/plugin install <mod> --marketplace Pavelkv94/mods

Answer y to add the marketplace, then pick a scope (user is the default).

From a shell:

claude plugin install <mod> --marketplace Pavelkv94/mods

In the desktop app, where /plugin does not run: click + next to the prompt box, then Plugins, Add marketplace with Pavelkv94/mods, then Add plugin.

Update

claude plugin update <mod>@pavelkv94-mods

smart-compact was renamed to context-band: uninstall the old one and install context-band.

Source 1 files
hooks/register.tsx 19 lines
1import type { Register } from 'claude-code'
2
3// Системный звук macOS: в моде его копии нет, читаем файл с диска.
4const GLASS = '/System/Library/Sounds/Glass.aiff'
5
6export const register: Register = on => {
7  on('turn.complete', async ($, e, next) => {
8    const result = await next(e)
9    // Только ответ основного цикла: без сабагентов, прерываний и ошибок.
10    if (e.agentId !== undefined || e.isAborted || e.reason !== 'answer') return result
11    // Звук не должен задерживать или ломать конец хода.
12    void $.fs
13      .read(GLASS, { as: 'bytes' })
14      .then(({ base64 }) => $.audio.play({ base64, mime: 'audio/aiff' }))
15      .catch(() => undefined)
16    return result
17  })
18}
19