Чтобы получать уведомление, когда Claude Code завершает работу, добавьте в ~/.claude/settings.json hook Stop, который запускает системную команду уведомлений. Stop срабатывает сразу, как только Claude закончил отвечать. Для случая «Claude ждёт моего ввода» добавьте также hook Notification: он срабатывает, когда запрос разрешения ждёт около шести секунд или когда Claude простаивает около минуты. Оба работают на Mac, Windows и Linux, а инструмент вроде Claude Code Notifier может отправлять те же уведомления на телефон.
01Что Claude Code делает сам
Claude Code уже пытается предупредить Вас, если похоже, что Вы отошли от терминала. По умолчанию он показывает уведомление на рабочем столе в iTerm2, Ghostty и Kitty, может подать звуковой сигнал (bell) в Apple Terminal и ничего не делает в остальных терминалах. Кроме того, в iTerm2 нужно сначала включить настройки оповещений, иначе ничего не появится.
Поэтому в терминале VS Code, Warp, Windows Terminal или большинстве терминалов Linux Вы, как правило, ничего не получите. Можно принудительно включить terminal bell настройкой preferredNotifChannel — об этом в руководстве по terminal bell. Для полноценного уведомления на рабочем столе в любом терминале нужен hook.
02Два нужных hook
Hooks — это команды, которые Claude Code выполняет в определённые моменты сессии. Здесь важны два из них:
StopКогда Claude закончил отвечать (но не когда Вы его прервали)«Claude закончил»Notification с matcher permission_promptЗапрос разрешения ждёт около шести секунд, а Вы ничего не вводили«Claude ждёт подтверждения»Notification с matcher idle_promptПримерно через 60 секунд после завершения Claude, если Вы с тех пор ничего не вводилиНапоминание, что Ваша очередьStop — самый быстрый. Он срабатывает сразу в конце каждого хода. Типы Notification срабатывают, только если Вы отвлеклись: каждое нажатие клавиши откладывает их, так что пока Вы смотрите в экран, уведомлений не будет. Если сигнал нужен в тот же момент, когда Claude запрашивает разрешение, используйте hook PermissionRequest — он описан в руководстве по PermissionRequest.
Как hooks устроены в целом (события, matchers, файлы настроек, коды выхода), читайте в статье Hooks в Claude Code: подробно.
03Рабочая настройка для macOS
Откройте ~/.claude/settings.json (создайте, если его нет) и добавьте следующее. Если в файле уже есть объект hooks, добавьте Stop и Notification как ключи внутрь него, а не заменяйте его.
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude has finished\" with title \"Claude Code\"'"
}
]
}
],
"Notification": [
{
"matcher": "permission_prompt|idle_prompt",
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'"
}
]
}
]
}
}
У Stop нет matcher, поэтому он срабатывает на каждом ходу. Matcher у Notification ограничивает его двумя типами, которые означают «пора вернуться».
Если ничего не появляется, возможно, macOS блокирует Script Editor, через который osascript показывает уведомления. Выполните один раз в Terminal osascript -e 'display notification "test"', затем откройте System Settings > Notifications, найдите Script Editor и включите Allow Notifications.
04Та же настройка для Linux и Windows
Оставьте структуру JSON как выше и замените строки command.
Linux (нужен демон уведомлений рабочего стола, поэтому на headless-сервере не сработает):
"command": "notify-send 'Claude Code' 'Claude has finished'"
Если notify-send отсутствует, установите libnotify-bin в Debian и Ubuntu или аналогичный пакет Вашего дистрибутива. Для SSH и серверов см. уведомления через SSH.
Windows (PowerShell). Пример от самой Anthropic открывает диалоговое окно, а не всплывающее уведомление в углу:
"command": "powershell.exe -Command \"[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); [System.Windows.Forms.MessageBox]::Show('Claude has finished', 'Claude Code')\""
Окно может открыться позади окна terminal, поэтому сначала проверьте команду в PowerShell. В WSL powershell.exe должен быть доступен через interop Windows. Другие варианты описаны в руководстве по Windows.
05Проверьте, что всё работает
- Введите
/hooksв Claude Code. Ваши hooks должны отображаться в разделахStopиNotification. - Задайте Claude короткий вопрос. Когда он ответит, должно появиться уведомление
Stop. - Попросите сделать что-то, требующее разрешения, переключитесь на другое окно и подождите. Уведомление
permission_promptпридёт примерно через шесть секунд.
Изменения в settings.json обычно применяются сразу. Если hook не отображается в /hooks, убедитесь, что файл содержит валидный JSON (без висячих запятых и комментариев). Запустите Claude Code командой claude --debug, чтобы увидеть, что сделал каждый hook. Другие решения — в чек-листе по устранению неполадок.
06Уведомления на телефон
Уведомление на рабочем столе полезно, только пока Вы за компьютером. Как только Вы отошли, оповещение должно приходить куда-то ещё. Есть три распространённых способа:
- Собственный push-сервис, например ntfy, который вызывается через
curlиз тех же hooks. Дёшево и гибко. См. руководство по ntfy. - Webhook чата для Telegram, Slack или Discord. Удобно, если Вы и так постоянно в чате. См. руководство по webhooks для чатов.
- Claude Code Notifier — настраивает hooks за Вас и позволяет отвечать с телефона.
Самодельные варианты вполне подойдут, если нужен просто сигнал. Их ограничение в том, что они односторонние: Вы узнаёте, что Claude ждёт, но для подтверждения всё равно нужно вернуться к клавиатуре.
Claude Code Notifier — независимый инструмент (не от Anthropic), состоящий из двух частей: ccn — бесплатной утилиты командной строки для Mac, Windows и Linux — и приложений для iPhone и Android. Установка — одной строкой:
curl -fsSL https://claudecodenotifier.com/install.sh | sh
В Windows выполните irm https://claudecodenotifier.com/install.ps1 | iex в PowerShell (поддержка Windows в бета-версии). Другие варианты, включая Homebrew, npx @touchtap/ccn и плагин для Claude Code, описаны на странице ccn.
Установка добавляет семь записей hooks, каждая из которых запускает ccn hook, не трогает остальное содержимое settings.json и один раз сохраняет рядом резервную копию. Даже без телефона ccn показывает уведомление на компьютере, когда Claude заканчивает работу, запрашивает разрешение или задаёт вопрос. Эта часть бесплатна и работает без сети.
Подключите телефон командой ccn pair, и Вы также получите:
- push «Claude закончил» сразу по завершении хода;
- запросы разрешений, которые можно одобрить один раз, одобрить на всю сессию или отклонить;
- ответы на вопросы Claude с вариантами выбора прямо с телефона;
- поле для отправки Claude следующей инструкции сразу после завершения.
Если Вы печатали в последние 30 секунд, телефон не задействуется и terminal спрашивает как обычно. Приложениям нужна подписка или пожизненная покупка; см. цены. Настройка описана в руководстве Подключение телефона.
07FAQ
Почему мой Notification hook срабатывает с такой задержкой?
Тип permission_prompt ждёт, пока запрос пробудет на экране около шести секунд без ввода с Вашей стороны, а idle_prompt — около 60 секунд после того, как Claude закончит. Задержка сделана намеренно, чтобы Вас не беспокоили, пока Вы смотрите на экран. Для мгновенного оповещения о завершении используйте hook Stop, а для мгновенного оповещения о запросе подтверждения — hook PermissionRequest.
Срабатывает ли Stop hook, если я прерываю Claude клавишей Esc?
Нет. Stop не запускается, если ход завершился из-за Вашего прерывания. Он также не запускается, если ход завершился ошибкой API, например из-за rate limit. Для этого Claude Code генерирует отдельное событие StopFailure, на которое можно повесить hook так же.
Stop hook срабатывает после каждого сообщения или только когда вся задача выполнена?
После каждого хода. Claude Code не знает, когда завершена Ваша задача в целом, — только когда он перестал отвечать. При долгом диалоге Вы получите по оповещению на каждый ответ. Если это слишком часто, используйте уведомление idle_prompt: оно срабатывает, только если Вы отсутствуете около минуты.
Работает ли это в terminal VS Code или JetBrains?
Да. Hooks запускает сам Claude Code, а не terminal, поэтому они работают в любом terminal, включая встроенные в IDE. От terminal зависят только встроенные уведомления. См. руководство по terminal в IDE.
Можно ли получать уведомления на телефон, ничего на него не устанавливая?
Отчасти. Hook, отправляющий сообщение в ntfy или webhook чата, может дойти до уже установленного у Вас приложения. Но он лишь сообщит, что что-то произошло. Чтобы подтверждать или отвечать с телефона, нужно что-то, что передаст Ваш ответ обратно в hook, — именно это делают приложения Claude Code Notifier.