В Linux Claude Code сам отправляет уведомление на рабочий стол лишь в нескольких терминалах, например в Ghostty и Kitty. В остальных случаях добавьте в ~/.claude/settings.json hook Notification, который выполняет notify-send 'Claude Code' 'Claude Code needs your attention', а также hook Stop, если хотите узнавать о завершении работы Claude сразу. notify-send входит в libnotify (libnotify-bin в Debian и Ubuntu) и требует запущенного демона уведомлений: в GNOME и KDE Plasma он есть, а на headless-серверах и в SSH-сессиях его нет.
01Что Claude Code делает сам
Когда Claude завершает задачу или ждёт разрешения, а Вас, судя по всему, нет на месте, Claude Code генерирует событие уведомления. Согласно руководству Anthropic по терминалу, Ghostty и Kitty превращают его в уведомление на рабочем столе; другие терминалы, например GNOME Terminal, Konsole или терминал VS Code, ничего не показывают.
Вместо этого можно включить звуковой сигнал (bell) в любом терминале:
{
"preferredNotifChannel": "terminal_bell"
}
Что именно делает bell, зависит от терминала и окружения рабочего стола: звуковой сигнал, мигание или пометка окна как требующего внимания. Подробнее — в руководстве по terminal bell. Для полноценного уведомления используйте hook.
02Установка notify-send
Проверьте, установлен ли он:
notify-send 'Claude Code' 'test'
Если команда не найдена, установите её:
sudo apt install libnotify-bin # Debian, Ubuntu, Mint
sudo dnf install libnotify # Fedora, RHEL
sudo pacman -S libnotify # Arch
Если команда выполняется, но ничего не появляется, у Вас нет демона уведомлений. В GNOME, KDE Plasma, Cinnamon и Xfce он есть. В тайловых оконных менеджерах вроде Sway, i3 или Hyprland установите и запустите его сами, например mako или dunst. Работают и Wayland, и X11: notify-send общается с демоном через D-Bus, а не с дисплеем.
03Notification hook
Это пример для Linux из руководства Anthropic по hooks. Добавьте его в ~/.claude/settings.json рядом с уже имеющимися ключами:
{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "notify-send 'Claude Code' 'Claude Code needs your attention'"
}
]
}
]
}
}
Введите /hooks в Claude Code — hook должен появиться в разделе Notification. Пустой matcher срабатывает на все типы уведомлений. Основные из них: permission_prompt — когда запрос на одобрение ждёт около шести секунд без ввода, и idle_prompt — примерно через 60 секунд после того, как Claude закончил. Полный список — в руководстве по Notification hook.
04Узнавайте сразу, когда Claude закончил
idle_prompt приходит с опозданием на минуту. Hook Stop срабатывает сразу, как только Claude завершает свой ход. Matcher ему не нужен:
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "notify-send -a 'Claude Code' 'Claude Code' 'Claude has finished'"
}
]
}
]
}
}
-a задаёт имя приложения, которое показывает демон. Другие полезные опции: -u critical в большинстве демонов оставляет уведомление на экране, пока Вы его не закроете, а -i dialog-information добавляет иконку. Подробнее об этом событии — в руководстве по Stop hook.
05Показ настоящего сообщения со звуком
Hooks получают JSON через стандартный ввод, и входные данные Notification содержат поле message. Скрипт может показать этот текст и воспроизвести звук. Сохраните его как ~/.claude/hooks/notify-linux.sh:
#!/bin/bash
msg=$(jq -r '.message // "Claude Code needs your attention"')
notify-send -a 'Claude Code' 'Claude Code' "$msg"
paplay /usr/share/sounds/freedesktop/stereo/complete.oga 2>/dev/null || true
Сделайте его исполняемым командой chmod +x ~/.claude/hooks/notify-linux.sh и укажите ~/.claude/hooks/notify-linux.sh как команду hook. jq есть в пакетах любого дистрибутива. paplay работает с PulseAudio и со слоем совместимости PulseAudio в PipeWire, а звуковой файл берётся из звуковой темы freedesktop (sound-theme-freedesktop в Debian и Ubuntu). Можно использовать любой файл .oga или .wav.
06Нет notify-send? Используйте escape-последовательность
Если Ваш терминал понимает escape-последовательности уведомлений, hook может попросить Claude Code отправить такую последовательность. У hooks нет собственного терминала, поэтому Вы возвращаете последовательность в поле terminalSequence, а Claude Code выводит её. В справочнике Anthropic указаны OSC 777 для Ghostty, urxvt и Warp и OSC 99 для Kitty. Например:
#!/bin/bash
body=$(jq -r '.message // "Needs your attention"')
seq=$(printf '\033]777;notify;%s;%s\007' "Claude Code" "$body")
jq -nc --arg seq "$seq" '{terminalSequence: $seq}'
Для этого не нужен демон на машине, где работает Claude Code, поэтому этот же приём подходит для удалённых серверов по SSH.
07Когда notify-send работает в shell, но не из Claude Code
notify-send нужен адрес сессионной шины D-Bus Вашего входа в рабочий стол. Hooks наследуют окружение Claude Code, поэтому если Claude Code запущен из терминала на рабочем столе, всё в порядке. Если же Claude Code запущен по SSH, из systemd-сервиса, в контейнере или внутри сервера tmux, который изначально был запущен по SSH, этого адреса может не быть, и уведомление уходит в никуда. Выполните echo $DBUS_SESSION_BUS_ADDRESS в том же shell, из которого запускаете claude; если вывод пустой, уведомления на рабочем столе из этой сессии не появятся. Такие конфигурации описаны в руководстве по tmux и руководстве по SSH.
08Место Claude Code Notifier
Описанные выше hooks — хороший вариант, когда Вы работаете за компьютером. Но когда Вы отходите от стола, они до Вас не дотянутся, а ответить Claude через уведомление на рабочем столе нельзя.
Claude Code Notifier — независимый инструмент (от TouchTap, а не от Anthropic), построенный на hooks Claude Code. Его бесплатная утилита командной строки ccn работает на Mac, Windows и Linux. В Linux:
curl -fsSL https://claudecodenotifier.com/install.sh | sh
или npx @touchtap/ccn, если у Вас есть Node.js. Утилита добавляет свои hooks в ~/.claude/settings.json, не трогает остальное и сохраняет резервную копию. После этого она показывает уведомление на рабочем столе Linux, когда Claude заканчивает работу, запрашивает разрешение или задаёт вопрос. Для этого не нужны ни сеть, ни телефон. На каждое событие она тратит несколько миллисекунд; в фоне ничего не остаётся.
Подключите iPhone или Android-телефон, и те же события будут приходить как push-уведомления — даже на машине совсем без рабочего стола. С телефона можно разрешить или отклонить запрос, выбрать ответ на вопрос Claude и отправить следующую инструкцию, когда Claude закончит. Подробнее — в разделах подключение телефона, страница ccn и цены на мобильные приложения. В Linux ccn хранит свой токен в файле, доступном для чтения только Вам.
Если Вы устанавливаете ccn, удалите собственные hooks с notify-send, чтобы избежать дублирования.
09FAQ
Почему notify-send работает в моём терминале, но не в hook?
Обычно у hook нет адреса сессии D-Bus, потому что Claude Code запущен по SSH, в контейнере или на сервере tmux, запущенном без него. Запускайте Claude Code из терминала на рабочем столе или используйте push на телефон.
Какой пакет содержит notify-send?
libnotify-bin в Debian и Ubuntu, libnotify в Fedora и Arch. Также нужен демон уведомлений — в полноценных окружениях рабочего стола он уже есть.
Работает ли это в Wayland?
Да. notify-send использует D-Bus, поэтому одинаково работает в Wayland и X11, если запущен демон уведомлений.
Как сделать, чтобы уведомление не исчезало, пока я его не увижу?
Добавьте -u critical к команде notify-send. Большинство демонов держат критические уведомления на экране, пока Вы их не закроете.
Можно ли получать уведомления Claude Code на headless-сервере Linux?
Не в виде уведомлений рабочего стола — рабочего стола там нет. Используйте escape-последовательность через SSH-терминал или push-сервис, например приложение ccn для телефона. Варианты сравниваются в руководстве по SSH.