На macOS Claude Code уже отправляет системное уведомление в Ghostty, Kitty и iTerm2 (в iTerm2 нужно включить настройки оповещений), но в Apple Terminal и большинстве других терминалов ничего не происходит. Чтобы получать уведомления в любом терминале, добавьте в ~/.claude/settings.json hook Notification, который запускает osascript -e 'display notification ...', а также hook Stop, если хотите узнавать о завершении работы Claude сразу. Разрешите уведомления для «Редактора скриптов» (Script Editor) в системных настройках, иначе команда osascript молча завершится ошибкой.
01Что Claude Code делает сам
Claude Code генерирует событие уведомления, когда завершает задачу или ждёт разрешения, а Вы, судя по всему, отошли от терминала. Что именно Вы увидите, зависит от терминала — согласно руководству Anthropic's по терминалам:
В iTerm2 откройте Settings > Profiles > Terminal, отметьте Notification Center Alerts, затем нажмите Filter Alerts и включите Send escape sequence-generated alerts. Также убедитесь, что iTerm2 разрешено отправлять уведомления в System Settings > Notifications.
В Apple Terminal можно получить хотя бы звук. Укажите "preferredNotifChannel": "terminal_bell" в ~/.claude/settings.json и включите Audible bell в разделе Settings > Profiles > Advanced. Подробнее об этом способе — в руководстве по terminal bell.
У встроенного оповещения есть ограничения. Оно срабатывает, только когда Claude Code считает, что Вас нет на месте, сообщает лишь о том, что что-то произошло, и никогда не выходит за пределы компьютера.
02Hook уведомлений с osascript
Hook работает в любом терминале, включая терминалы IDE. Ниже — пример для macOS из руководства Anthropic's по hooks. Добавьте его в ~/.claude/settings.json, сохранив уже имеющиеся ключи:
{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'"
}
]
}
]
}
}
Введите /hooks в Claude Code, чтобы убедиться, что он отображается в разделе Notification.
Разрешение для Script Editor
osascript отправляет уведомления от имени Script Editor. Если у Script Editor нет разрешения на уведомления, команда молча завершается ошибкой, а macOS ничего не спрашивает. Выполните один раз в Terminal:
osascript -e 'display notification "test"'
В первый раз ничего не появится. Откройте System Settings > Notifications, найдите Script Editor и включите Allow Notifications. Запустите команду снова — тестовое уведомление должно появиться.
Когда срабатывает
Пустой matcher срабатывает на все типы уведомлений. Важнее всего два: permission_prompt (Claude около шести секунд ждёт одобрения, а Вы ничего не вводили) и idle_prompt (Claude закончил около 60 секунд назад, и с тех пор Вы ничего не вводили). Все типы и их тайминги перечислены в руководстве по Notification hook.
03Узнавайте сразу, когда Claude закончил
idle_prompt ждёт минуту. Чтобы получать оповещение сразу, добавьте hook Stop — он запускается, когда Claude завершает свой ход. Stop не принимает matcher:
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude has finished\" with title \"Claude Code\" sound name \"Glass\"'"
}
]
}
]
}
}
В sound name можно указать любой звук из /System/Library/Sounds, например Glass, Ping или Hero. Если нужен только звук, в качестве команды подойдёт afplay /System/Library/Sounds/Glass.aiff. Подробнее об этом событии — в руководстве по Stop hook.
04Показ реального сообщения
Hooks получают JSON через стандартный ввод. Во входных данных Notification есть поле message, например «Claude needs your permission». Небольшой скрипт может вывести этот текст в уведомлении. Сохраните его как ~/.claude/hooks/notify-mac.sh:
#!/bin/bash
msg=$(jq -r '.message // "Claude Code needs your attention"')
osascript -e 'on run argv' \
-e 'display notification (item 1 of argv) with title "Claude Code"' \
-e 'end run' "$msg"
Текст передаётся аргументом, а не внутри строки AppleScript, поэтому кавычки в сообщении не сломают команду. Сделайте файл исполняемым с помощью chmod +x ~/.claude/hooks/notify-mac.sh и укажите в качестве команды hook ~/.claude/hooks/notify-mac.sh. Скрипту нужен jq (выполните brew install jq, если jq --version выдаёт ошибку).
05terminal-notifier: возврат в терминал по клику
Уведомление от osascript по клику открывает Script Editor, а это совсем не то, что нужно. terminal-notifier позволяет выбрать приложение, которое будет активировано:
brew install terminal-notifier
terminal-notifier -title "Claude Code" -message "Claude has finished" -sound default -activate com.googlecode.iterm2
Используйте com.apple.Terminal для Apple Terminal или bundle ID Вашего редактора. Та же команда указывается в поле command hook. При первом запуске разрешите уведомления для terminal-notifier в системных настройках.
06Фокусирование и «Не беспокоить»
Все эти уведомления — обычные уведомления macOS, поэтому режим фокусирования может их скрывать. Если они пропадают в определённое время, проверьте System Settings > Focus и разрешите приложение, которое их отправляет (Script Editor, terminal-notifier или Ваш терминал). Если нужны уведомления, учитывающие Ваш собственный график, см. тихие часы и «Не беспокоить».
07Место Claude Code Notifier
Описанные выше hooks отлично подходят, если Вы сидите за Mac и Вам нужно лишь короткое напоминание. Но когда Вы отходите, их уже недостаточно: уведомление на Mac не дойдёт до Вас на кухне и не позволит ответить Claude.
Claude Code Notifier — независимый инструмент (от TouchTap, а не от Anthropic), построенный на тех же hooks. Его бесплатная утилита командной строки ccn работает на Mac, Windows и Linux. Установите её на Mac командой:
curl -fsSL https://claudecodenotifier.com/install.sh | sh
или через Homebrew: brew trust --formula touch-tap/tap/ccn && brew install touch-tap/tap/ccn. Утилита добавляет свои записи hooks в ~/.claude/settings.json, не трогает остальную часть файла и сохраняет резервную копию. После этого она показывает уведомление macOS, когда Claude завершает работу, запрашивает разрешение или задаёт вопрос, — без сети и без телефона.
Если подключить iPhone или телефон на Android, те же события будут приходить как push-уведомления, а с телефона можно разрешить или отклонить запрос, выбрать ответ на вопрос Claude или отправить следующую инструкцию. Если Вы что-то вводили в последние 30 секунд, терминал спросит как обычно, и на телефоне ничего ждать не будет. См. подключение телефона и страницу ccn. Для мобильных приложений нужна подписка или пожизненная покупка; см. цены.
Если Вы установили ccn, удалите собственные hooks с osascript, иначе на каждое событие будет приходить по два уведомления. Существует также более старое приложение для строки меню Mac; не запускайте его одновременно с ccn на одном Mac.
08FAQ
Почему мой osascript hook ничего не показывает?
Чаще всего у Script Editor нет разрешения на уведомления, и macOS молча отбрасывает уведомление без ошибки. Выполните один раз osascript -e 'display notification "test"', затем разрешите Script Editor в System Settings > Notifications. Если не помогло, убедитесь, что не включён режим Focus и что /hooks показывает Ваш hook.
Отправляет ли Claude Code уведомления macOS без настройки?
Да, в Ghostty и Kitty, а также в iTerm2, если включены уведомления Notification Center. Apple Terminal и терминалы IDE по умолчанию не показывают уведомлений на рабочем столе, поэтому там используйте hook или ccn.
Как получить уведомление сразу, как только Claude закончит, а не через минуту?
Используйте Stop hook. Уведомление idle_prompt срабатывает лишь примерно через 60 секунд после того, как Claude закончит, и только если Вы ничего не вводили, а Stop выполняется в конце каждого хода.
Можно ли получать звук вместо баннера?
Да. Укажите afplay /System/Library/Sounds/Glass.aiff как команду hook или добавьте sound name "Glass" в команду osascript, чтобы получить и то и другое.
Можно ли подтвердить разрешение прямо из уведомления macOS?
Нет, osascript и terminal-notifier только показывают текст. Чтобы отвечать на запрос разрешения из hook, нужно событие PermissionRequest; см. ответ на запросы разрешений из hook или подтверждайте с телефона через Claude Code Notifier.