Сповіщення
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 підтримує підзаголовки та ідентифікатори сповіщень:
# 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.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
Якщо ви використовуєте tmux всередині cmux, увімкніть прохідний режим:
set -g allow-passthrough onprintf '\ePtmux;\e\e]777;notify;Title;Body\a\e\\'