Внутри tmux уведомления рабочего стола от Claude Code не доходят до внешнего терминала, пока Вы не добавите set -g allow-passthrough on в ~/.tmux.conf. Это решает проблему, пока Вы подключены к сессии. После отсоединения сессию не отображает ни один терминал, поэтому на экране ничего не появится, но Claude Code продолжает работать, и его hooks продолжают срабатывать. Чтобы получать сигналы из отсоединённой сессии, используйте hook, который отправляет push по сети — на телефон или в мессенджер, — а не тот, что зависит от терминала.
01Сессия подключена: пропускаем уведомления через tmux
tmux находится между Claude Code и Вашим терминалом и по умолчанию поглощает escape-последовательности, которые Claude Code использует для уведомлений рабочего стола. В руководстве Anthropic по терминалам приведён такой блок для ~/.tmux.conf:
set -g allow-passthrough on
set -g focus-events on
set -s extended-keys on
set -as terminal-features 'xterm*:extkeys'
Примените его к запущенному серверу:
tmux source-file ~/.tmux.conf
allow-passthrough пропускает уведомления и обновления прогресса во внешний терминал. Остальные строки исправляют Shift+Enter для перевода строки. После этого терминалы, которые показывают уведомления Claude Code вне tmux (Ghostty, Kitty и iTerm2 с включёнными оповещениями), будут показывать их и внутри tmux.
То же относится к hooks, возвращающим terminalSequence. Согласно справочнику Anthropic по hooks, Claude Code сам выводит эти последовательности, и это работает внутри tmux и GNU screen. Примеры есть в руководствах для macOS, Linux и SSH.
02Сессия подключена, но Вы в другом окне: используйте bell
Если Claude Code работает в одном окне tmux, а Вы — в другом, bell станет простым сигналом. Настройте Claude Code так, чтобы он всегда его отправлял:
{
"preferredNotifChannel": "terminal_bell"
}
Затем настройте реакцию tmux в ~/.tmux.conf:
setw -g monitor-bell on
set -g bell-action other
set -g visual-bell off
monitor-bell (включён по умолчанию) отмечает окно, подавшее сигнал bell, и tmux помечает его символом ! в строке состояния. bell-action other передаёт в терминал сигналы из всех окон, кроме текущего, чтобы терминал мог пискнуть или подпрыгнуть в доке. Укажите any, чтобы учитывать и текущее окно. Если установить visual-bell в on, tmux вместо передачи сигнала покажет сообщение.
03Указывайте, какая сессия Вас ждёт
Когда запущено несколько сессий, уведомление «Claude ждёт Вас» мало что даёт. Hook выполняется в окружении панели, поэтому может запросить у tmux имя сессии и окна. Этот пример для Linux показывает их в уведомлении рабочего стола:
#!/bin/bash
msg=$(jq -r '.message // "Claude Code needs your attention"')
where=""
if [ -n "$TMUX_PANE" ]; then
where=$(tmux display-message -p -t "$TMUX_PANE" '#S:#W')
fi
notify-send "Claude Code ${where}" "$msg"
Сохраните его как ~/.claude/hooks/notify-tmux.sh, выполните для него chmod +x и укажите как команду hook Notification или Stop. #S — имя сессии, #W — имя окна; называйте сессии через tmux new -s api-refactor, и уведомление подскажет, куда переключиться. Замените notify-send на команду Вашей платформы или на push. Другие способы различать сессии описаны в руководстве по нескольким сессиям.
04Сессия отсоединена: нужен push
Отсоединение — главная фишка tmux: запускаете долгую задачу, отсоединяетесь и уходите. Claude Code продолжает работать в отсоединённой сессии. Но теперь нет терминала, который показал бы escape-последовательность или bell, а если сервер tmux запущен по SSH, уведомлению рабочего стола тоже может быть некуда деться.
Hook, выполняющему сетевой запрос, неважно, подключён ли кто-то к сессии. Подойдёт любой push-сервис. Готовые hooks есть в руководстве по ntfy и руководстве по Telegram, Slack и Discord. Они сообщают, что что-то произошло, но не могут ответить Claude, поэтому запрос разрешения будет ждать, пока Вы не подключитесь снова через tmux attach -t api-refactor.
05Место Claude Code Notifier
Claude Code Notifier — независимый инструмент (от TouchTap, а не от Anthropic), построенный на hooks Claude Code. Его бесплатная утилита командной строки ccn работает на Mac, Windows и Linux. Поскольку она подключается к Claude Code, а не к терминалу, она одинаково работает в tmux, screen или обычной оболочке — в подключённой сессии или отсоединённой:
curl -fsSL https://claudecodenotifier.com/install.sh | sh
На настольном компьютере она показывает уведомление, когда Claude завершает работу, запрашивает разрешение или задаёт вопрос. Сопрягите телефон — и те же события будут приходить как push-уведомления через зашифрованный relay TouchTap с любой машины, где запущен ccn, включая сервер, к которому Вы подключились по SSH.
Телефон закрывает пробел, который оставляет отсоединённая сессия. Когда появляется запрос разрешения, Вы можете разрешить один раз, разрешить на сессию или отклонить прямо с телефона, и Claude продолжит работу без повторного подключения. Вы можете выбрать ответ, когда Claude задаёт вопрос, и отправить следующую инструкцию сразу после того, как Claude закончит. Если Вы печатали в последние 30 секунд, ответ с телефона не ожидается и терминал спрашивает как обычно. Если Вас нет рядом, терминал ждёт ответа с телефона не дольше заданного Вами лимита (hold_ceiling_seconds) и перестаёт ждать, как только Вы коснётесь клавиатуры.
См. сопряжение телефона, долгие задачи без присмотра и страницу ccn. Для мобильных приложений нужна подписка или пожизненная покупка; см. цены.
06GNU screen
Здесь screen работает почти так же, как tmux. Согласно справочнику Anthropic по hooks, вывод terminalSequence из hook работает внутри screen, а screen показывает сообщение, когда неактивное окно подаёт сигнал bell. У отсоединённых сессий screen та же проблема, что и у отсоединённых tmux: на экране ничего нет, поэтому используйте push.
07FAQ
Почему уведомления Claude Code не отображаются внутри tmux?
tmux блокирует escape-последовательности Claude Code, если passthrough не включён. Добавьте set -g allow-passthrough on в ~/.tmux.conf и выполните tmux source-file ~/.tmux.conf.
Продолжает ли Claude Code работать, когда я отключаюсь от tmux?
Да. Процесс продолжает работать на сервере tmux, и его hooks по-прежнему срабатывают. Перестают доходить только уведомления, которым нужен подключённый терминал.
Как получать уведомления из отключённой сессии tmux?
Используйте hook, который отправляет push по сети, например через ntfy, webhook чата или мобильное приложение Claude Code Notifier. Escape-последовательностям терминала и звуковому сигналу (bell) нужен подключённый клиент.
Можно ли одобрить запрос разрешения, не подключаясь к сессии снова?
С обычным push-сервисом — нет. С Claude Code Notifier и привязанным телефоном Вы можете разрешить или отклонить запрос прямо с телефона, и отключённая сессия продолжит работу.
Как понять, какой сессии tmux нужно моё внимание?
Давайте сессиям имена и добавляйте имя в уведомление. Hook может получить его командой tmux display-message -p -t "$TMUX_PANE" '#S:#W'.