Notificaciones

imux soporta notificaciones de escritorio, permitiendo que agentes de IA y scripts le alerten cuando necesitan atención.

Ciclo de vida

  1. Recibida: la notificación aparece en el panel, se dispara la alerta de escritorio (si no está suprimida)
  2. No leída: se muestra una insignia en la pestaña del workspace
  3. Leída: se borra cuando visualiza ese workspace
  4. Borrada: eliminada del panel

Supresión

Las alertas de escritorio se suprimen cuando:

  • La ventana de imux está enfocada
  • El workspace específico que envía la notificación está activo
  • El panel de notificaciones está abierto

Panel de notificaciones

Presione ⌘⇧I para abrir el panel de notificaciones. Haga clic en una notificación para saltar a ese workspace. Presione ⌘⇧U para saltar directamente al workspace con la notificación no leída más reciente.

Comando personalizado

Ejecute un comando de shell cada vez que se programe una notificación. Configúrelo en Configuración > App > Comando de notificación. El comando se ejecuta vía /bin/sh -c con estas variables de entorno:

VariableDescripción
ICC_NOTIFICATION_TITLETítulo de notificación (nombre del workspace o nombre de la app)
ICC_NOTIFICATION_SUBTITLESubtítulo de notificación
ICC_NOTIFICATION_BODYTexto del cuerpo de la notificación
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

El comando se ejecuta independientemente del selector de sonido del sistema. Configure el selector en "Ninguno" para usar solo el comando personalizado, o mantenga ambos para un sonido del sistema más una acción personalizada.

Enviar notificaciones

CLI

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

OSC 777 (simple)

El protocolo RXVT usa un formato fijo con título y cuerpo:

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

El protocolo Kitty soporta subtítulos e IDs de notificación:

# 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\\'
CaracterísticaOSC 99OSC 777
Título + cuerpo
SubtítuloNo
ID de notificaciónNo
ComplejidadMayorMenor
Use OSC 777 para notificaciones simples. Use OSC 99 cuando necesite subtítulos o IDs de notificación. Use la CLI (icc notify) para la integración más sencilla.

Hooks de Claude Code

imux se integra con Claude Code mediante hooks para notificarle cuando las tareas se completan.

1. Crear el script de 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. Configurar 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"
          }
        ]
      }
    ]
  }
}

Reinicie Claude Code para aplicar los hooks.

Ejemplos de integración

Notificar después de un comando largo

~/.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 de tmux

Si usa tmux dentro de imux, habilite passthrough:

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