Notifiche

imux supporta le notifiche desktop, permettendo agli agenti IA e agli script di avvisarti quando hanno bisogno di attenzione.

Ciclo di vita

  1. Ricevuta: la notifica appare nel pannello, l'avviso desktop si attiva (se non soppresso)
  2. Non letta: badge mostrato sul tab del workspace
  3. Letta: cancellata quando visualizzi quel workspace
  4. Cancellata: rimossa dal pannello

Soppressione

Gli avvisi desktop vengono soppressi quando:

  • La finestra imux è attiva
  • Il workspace specifico che invia la notifica è attivo
  • Il pannello notifiche è aperto

Pannello notifiche

Premi ⌘⇧I per aprire il pannello notifiche. Clicca su una notifica per andare a quel workspace. Premi ⌘⇧U per andare direttamente al workspace con la notifica non letta più recente.

Comando personalizzato

Esegui un comando shell ogni volta che una notifica è pianificata. Impostalo in Impostazioni > App > Comando di notifica. Il comando viene eseguito tramite /bin/sh -c con queste variabili d'ambiente:

VariabileDescrizione
ICC_NOTIFICATION_TITLETitolo della notifica (nome del workspace o dell'app)
ICC_NOTIFICATION_SUBTITLESottotitolo della notifica
ICC_NOTIFICATION_BODYTesto del corpo della notifica
Examples
# Text-to-speech
say "$ICC_NOTIFICATION_TITLE"

# Custom sound file
afplay /path/to/sound.aiff

# Log to file
echo "$ICC_NOTIFICATION_TITLE: $ICC_NOTIFICATION_BODY" >> ~/notifications.log

Il comando viene eseguito indipendentemente dal selettore di suoni di sistema. Imposta il selettore su "Nessuno" per usare solo il comando personalizzato, o mantieni entrambi per un suono di sistema più un'azione personalizzata.

Invio di notifiche

CLI

icc notify --title "Task Complete" --body "Your build finished"
icc notify --title "Claude Code" --subtitle "Waiting" --body "Agent needs input"

OSC 777 (semplice)

Il protocollo RXVT usa un formato fisso con titolo e corpo:

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 (ricco)

Il protocollo Kitty supporta sottotitoli e ID di notifica:

# 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\\'
FunzionalitàOSC 99OSC 777
Titolo + corpo
SottotitoloNo
ID notificaNo
ComplessitàMaggioreMinore
Usa OSC 777 per notifiche semplici. Usa OSC 99 quando hai bisogno di sottotitoli o ID di notifica. Usa il CLI (icc notify) per l'integrazione più semplice.

Hook di Claude Code

imux si integra con Claude Code tramite hook per notificarti quando le attività sono completate.

1. Crea lo script hook

~/.claude/hooks/icc-notify.sh
#!/bin/bash
# Skip if not in icc
[ -S /tmp/icc.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")
        icc notify --title "Claude Code" --body "Session complete"
        ;;
    "PostToolUse")
        [ "$TOOL" = "Task" ] && icc notify --title "Claude Code" --body "Agent finished"
        ;;
esac
chmod +x ~/.claude/hooks/icc-notify.sh

2. Configura Claude Code

~/.claude/settings.json
{
  "hooks": {
    "Stop": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/icc-notify.sh"
          }
        ]
      }
    ],
    "PostToolUse": [
      {
        "matcher": "Task",
        "hooks": [
          {
            "type": "command",
            "command": "~/.claude/hooks/icc-notify.sh"
          }
        ]
      }
    ]
  }
}

Riavvia Claude Code per applicare gli hook.

Esempi di integrazione

Notifica dopo un comando lungo

~/.zshrc
# Add to your shell config
notify-after() {
  "$@"
  local exit_code=$?
  if [ $exit_code -eq 0 ]; then
    icc notify --title "✓ Command Complete" --body "$1"
  else
    icc 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');

Passthrough tmux

Se usi tmux all'interno di imux, abilita il passthrough:

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