Уведомления
cmux поддерживает десктопные уведомления, позволяя AI-агентам и скриптам оповещать тебя когда им нужно внимание.
Жизненный цикл
- Получено: уведомление появляется в панели, десктопный алерт срабатывает (если не подавлен)
- Непрочитанное: бейдж показан на вкладке рабочего пространства
- Прочитанное: убирается когда ты просматриваешь это рабочее пространство
- Очищено: удалено из панели
Подавление
Десктопные алерты подавляются когда:
- Окно cmux сфокусировано
- Конкретное рабочее пространство, отправляющее уведомление, активно
- Панель уведомлений открыта
Панель уведомлений
Нажми ⌘⇧I чтобы открыть панель уведомлений. Кликни на уведомление чтобы перейти к этому рабочему пространству. Нажми ⌘⇧U чтобы перейти напрямую к рабочему пространству с самым свежим непрочитанным уведомлением.
Пользовательская команда
Запускай shell-команду каждый раз когда уведомление запланировано. Задай её в Настройки > Приложение > Команда уведомления. Команда запускается через /bin/sh -c с этими переменными окружения:
| Переменная | Описание |
|---|---|
CMUX_NOTIFICATION_TITLE | Заголовок уведомления (имя рабочего пространства или приложения) |
CMUX_NOTIFICATION_SUBTITLE | Подзаголовок уведомления |
CMUX_NOTIFICATION_BODY | Текст уведомления |
# Text-to-speech
say "$CMUX_NOTIFICATION_TITLE"
# Custom sound file
afplay /path/to/sound.aiff
# Log to file
echo "$CMUX_NOTIFICATION_TITLE: $CMUX_NOTIFICATION_BODY" >> ~/notifications.logКоманда работает независимо от системного выбора звуков. Установи выбор на "Нет" чтобы использовать только пользовательскую команду, или оставь оба для системного звука плюс пользовательского действия.
Отправка уведомлений
CLI
cmux notify --title "Task Complete" --body "Your build finished"
cmux notify --title "Claude Code" --subtitle "Waiting" --body "Agent needs input"OSC 777 (простой)
Протокол RXVT использует фиксированный формат с заголовком и телом:
printf '\e]777;notify;My Title;Message body here\a'notify_osc777() {
local title="$1"
local body="$2"
printf '\e]777;notify;%s;%s\a' "$title" "$body"
}
notify_osc777 "Build Complete" "All tests passed"OSC 99 (расширенный)
Протокол Kitty поддерживает подзаголовки и ID уведомлений:
# Format: ESC ] 99 ; <params> ; <payload> ESC \
# Simple notification
printf '\e]99;i=1;e=1;d=0:Hello World\e\\'
# With title, subtitle, and body
printf '\e]99;i=1;e=1;d=0;p=title:Build Complete\e\\'
printf '\e]99;i=1;e=1;d=0;p=subtitle:Project X\e\\'
printf '\e]99;i=1;e=1;d=1;p=body:All tests passed\e\\'| Функция | OSC 99 | OSC 777 |
|---|---|---|
| Заголовок + текст | Да | Да |
| Подзаголовок | Да | Нет |
| ID уведомления | Да | Нет |
| Сложность | Выше | Ниже |
Claude Code hooks
cmux интегрируется с Claude Code через hooks чтобы уведомлять тебя когда задачи завершаются.
1. Создай скрипт хука
#!/bin/bash
# Skip if not in cmux
[ -S /tmp/cmux.sock ] || exit 0
EVENT=$(cat)
EVENT_TYPE=$(echo "$EVENT" | jq -r '.hook_event_name // "unknown"')
TOOL=$(echo "$EVENT" | jq -r '.tool_name // ""')
case "$EVENT_TYPE" in
"Stop")
cmux notify --title "Claude Code" --body "Session complete"
;;
"PostToolUse")
[ "$TOOL" = "Task" ] && cmux notify --title "Claude Code" --body "Agent finished"
;;
esacchmod +x ~/.claude/hooks/cmux-notify.sh2. Настрой Claude Code
{
"hooks": {
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/cmux-notify.sh"
}
]
}
],
"PostToolUse": [
{
"matcher": "Task",
"hooks": [
{
"type": "command",
"command": "~/.claude/hooks/cmux-notify.sh"
}
]
}
]
}
}Перезапусти Claude Code чтобы применить хуки.
GitHub Copilot CLI
Copilot CLI поддерживает хуки, которые выполняют shell-команды при событиях жизненного цикла, таких как отправка промпта, остановка агента и ошибки.
{
"hooks": {
"userPromptSubmitted": [
{
"type": "command",
"bash": "if command -v cmux &>/dev/null; then cmux set-status copilot_cli Running; fi",
"timeoutSec": 3
}
],
"agentStop": [
{
"type": "command",
"bash": "if command -v cmux &>/dev/null; then cmux notify --title 'Copilot CLI' --body 'Done'; cmux set-status copilot_cli Idle; fi",
"timeoutSec": 5
}
],
"errorOccurred": [
{
"type": "command",
"bash": "if command -v cmux &>/dev/null; then cmux notify --title 'Copilot CLI' --subtitle 'Error' --body 'An error occurred'; cmux set-status copilot_cli Error; fi",
"timeoutSec": 5
}
],
"sessionEnd": [
{
"type": "command",
"bash": "if command -v cmux &>/dev/null; then cmux clear-status copilot_cli; fi",
"timeoutSec": 3
}
]
}
}Для хуков на уровне репозитория создайте файл .github/hooks/notify.json с аналогичной структурой:
{
"version": 1,
"hooks": {
"userPromptSubmitted": [ ... ],
"agentStop": [ ... ]
}
}Примеры интеграций
Уведомление после долгой команды
# Add to your shell config
notify-after() {
"$@"
local exit_code=$?
if [ $exit_code -eq 0 ]; then
cmux notify --title "✓ Command Complete" --body "$1"
else
cmux notify --title "✗ Command Failed" --body "$1 (exit $exit_code)"
fi
return $exit_code
}
# Usage: notify-after npm run buildPython
import sys
def notify(title: str, body: str):
"""Send OSC 777 notification."""
sys.stdout.write(f'\x1b]777;notify;{title};{body}\x07')
sys.stdout.flush()
notify("Script Complete", "Processing finished")Node.js
function notify(title, body) {
process.stdout.write(`\x1b]777;notify;${title};${body}\x07`);
}
notify('Build Done', 'webpack finished');tmux passthrough
Если используешь tmux внутри cmux, включи passthrough:
set -g allow-passthrough onprintf '\ePtmux;\e\e]777;notify;Title;Body\a\e\\'