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

Claude Code mods.
| Mod | What it does |
|---|---|
| agent-crabs | Side 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-band | Band 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-branches | Terminal-only pane with the tree of this project's sessions and their forks; press a row to switch to it |
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.
claude plugin update <mod>@pavelkv94-mods
smart-compact was renamed to context-band: uninstall the old one and install context-band.
hooks/register.tsx 19 lines1import 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