Сповіщення

cmux підтримує сповіщення на робочому столі, що дозволяє AI-агентам та скриптам повідомляти вас, коли вони потребують уваги.

Життєвий цикл

  1. Отримано: сповіщення з'являється в панелі, спрацьовує сповіщення на робочому столі (якщо не придушено)
  2. Непрочитано: значок показується на вкладці робочого простору
  3. Прочитано: очищується, коли ви переглядаєте цей робочий простір
  4. Видалено: прибрано з панелі

Придушення

Сповіщення на робочому столі придушуються, коли:

  • Вікно cmux у фокусі
  • Конкретний робочий простір, що надсилає сповіщення, активний
  • Панель сповіщень відкрита

Панель сповіщень

Натисніть ⌘⇧I, щоб відкрити панель сповіщень. Натисніть на сповіщення, щоб перейти до цього робочого простору. Натисніть ⌘⇧U, щоб перейти безпосередньо до робочого простору з найновішим непрочитаним сповіщенням.

Користувацька команда

Виконувати shell-команду щоразу при плануванні сповіщення. Встановіть її в Параметри > Застосунок > Команда сповіщення. Команда виконується через /bin/sh -c з такими змінними середовища:

ЗміннаОпис
CMUX_NOTIFICATION_TITLEЗаголовок сповіщення (назва робочого простору або назва застосунку)
CMUX_NOTIFICATION_SUBTITLEПідзаголовок сповіщення
CMUX_NOTIFICATION_BODYТекст тіла сповіщення
Examples
# 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'
Shell function
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 99OSC 777
Заголовок + тілоТакТак
ПідзаголовокТакНі
ID сповіщенняТакНі
СкладністьВищаНижча
Використовуйте OSC 777 для простих сповіщень. Використовуйте OSC 99, коли потрібні підзаголовки або ідентифікатори сповіщень. Використовуйте CLI (cmux notify) для найпростішої інтеграції.

Хуки Claude Code

cmux інтегрується з Claude Code через хуки для сповіщення, коли завдання завершено.

1. Створіть скрипт хука

~/.claude/hooks/cmux-notify.sh
#!/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"
        ;;
esac
chmod +x ~/.claude/hooks/cmux-notify.sh

2. Налаштуйте Claude Code

~/.claude/settings.json
{
  "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-команди під час подій життєвого циклу, таких як подання промпту, зупинка агента та помилки.

~/.copilot/config.json
{
  "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 з такою ж структурою:

.github/hooks/notify.json
{
  "version": 1,
  "hooks": {
    "userPromptSubmitted": [ ... ],
    "agentStop": [ ... ]
  }
}

Приклади інтеграції

Сповіщення після довгої команди

~/.zshrc
# 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

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

node
function notify(title, body) {
  process.stdout.write(`\x1b]777;notify;${title};${body}\x07`);
}

notify('Build Done', 'webpack finished');

Прохідний режим tmux

Якщо ви використовуєте tmux всередині cmux, увімкніть прохідний режим:

.tmux.conf
set -g allow-passthrough on
printf '\ePtmux;\e\e]777;notify;Title;Body\a\e\\'