#Сповіщення
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Команда виконується незалежно від системного вибору звуку. Встановіть вибір звуку на «Немає», щоб використовувати лише користувацьку команду, або залишіть обидва для системного звуку плюс користувацька дія.
#Хуки сповіщень
cmux.json може визначати хуки сповіщень, які отримують кожну політику сповіщення як JSON через stdin. Кожен хук повертає JSON через stdout. За замовчуванням хуки вимкнені; cmux запускає їх лише тоді, коли notifications.hooks містить хоча б один увімкнений хук. cmux застосовує повернений текст і ефекти, тому хуки можуть фільтрувати банери, зберігати або пропускати історію бічної панелі, запускати звуки чи зупиняти наступні хуки.
{
"notifications": {
"hooks": [
{
"id": "quiet-docs",
"command": "sed 's/"desktop":true/"desktop":false/'",
"timeoutSeconds": 20
}
]
}
}{
"version": 1,
"notification": {
"workspaceId": "3B3F0D83-...",
"surfaceId": "7E9C1A02-...",
"title": "Codex",
"subtitle": "Waiting",
"body": "Agent needs input"
},
"context": {
"cwd": "/path/to/project",
"configPath": "/path/to/project/.cmux/cmux.json",
"hookId": "quiet-docs",
"appFocused": false,
"focusedPanel": false
},
"effects": {
"record": true,
"markUnread": true,
"reorderWorkspace": true,
"desktop": true,
"sound": true,
"command": true,
"paneFlash": true
}
}Хуки успадковуються з глобального файлу ~/.config/cmux/cmux.json і проєктних файлів .cmux/cmux.json від батьківських каталогів до поточного workspace. Проєктні хуки перед запуском використовують той самий запит довіри, що й інші проєктні команди cmux.json. Банери схвалення Feed також проходять через ці хуки; вимкнення desktop приховує нативний банер, але залишає елемент Feed доступним у cmux. Установіть notifications.hooksMode на replace у конфігурації проєкту, щоб ігнорувати успадковані хуки. Якщо хук завершується помилкою, перевищує час очікування або повертає недійсний JSON, cmux використовує стандартну поведінку сповіщень і показує попередження про помилку хука.
#Надсилання сповіщень
#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 підтримує підзаголовки та ідентифікатори сповіщень:
# 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
cmux інтегрується з Claude Code через хуки для сповіщення, коли завдання завершено.
#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.sh#2. Налаштуйте 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 build#Python
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
Якщо ви використовуєте tmux всередині cmux, увімкніть прохідний режим:
set -g allow-passthrough onprintf '\ePtmux;\e\e]777;notify;Title;Body\a\e\\'