# Notificaciones — Liu Terminal

> Notificaciones de Liu Terminal. Reciba notificaciones cuando los agentes de IA terminen tareas, con hooks configurables y alertas sonoras.

URL: https://liu.software/es/docs/notify/  
Language: es  
Updated: 2026-10-17

liu-notify puede ejecutarse como proceso independiente, aunque la interfaz de Liu también puede alojar el servidor en el proceso. Acepta una cabecera v1 de 24 bytes o la cabecera v2 actual de 28 bytes con metadatos opcionales mediante un socket local, limita con un cubo de tokens, deduplica eventos y enruta sonido o voz por cada par (agente, evento).

## Ejecutarlo

```
# Compilar junto con la aplicación principal
cmake --build build --target liu-notify

# Iniciar el demonio
./build/liu-notify daemon

# Enviar un evento puntual
./build/liu-notify send --tool=claude --event=stop
```

La configuración reside en ~/.config/liu/notify.conf, separada del config.json de la aplicación principal para que el demonio siga siendo utilizable sin que Liu esté en ejecución.

When Liu is running, its GUI hosts the notification server in-process; the CLI does not need to start a second daemon. If no server is listening, send exits without delivering an event. Use the standalone daemon only when notifications must work without Liu.

## Hooks de agentes compatibles

Liu puede instalar y quitar hooks del ciclo de vida para los agentes siguientes mientras la aplicación está en ejecución. El hook se escribe en la configuración del propio agente y Liu elimina su entrada administrada al salir la instancia anfitriona.

| Agente | Superficie del hook | Señales | Notas |
| --- | --- | --- | --- |
| Claude Code | `~/.claude/settings.json` | `start · notify · complete` | UserPromptSubmit drives the working state; Notification and Stop can alert you. |
| Codex | `~/.codex/config.toml` | `complete` | The Stop hook reports a completed turn. Run /hooks in Codex once to trust it. |
| Grok | `~/.grok/hooks/liu-notify.json` | `notify · complete` | Notification and top-level Stop events are handled; sub-agent completions stay silent. |
| OpenCode | `~/.config/opencode/plugins/liu-notify.js` | `complete` | The managed plugin listens for top-level session.idle events. |
| Antigravity | `~/.gemini/config/hooks.json` | `complete` | A named Stop hook reports when the top-level execution loop ends. |
| Command Code | `~/.commandcode/settings.json` | `complete` | Its Claude-compatible settings schema is wired to the top-level Stop event. |

Copilot y custom son aceptados por el protocolo de notificaciones de bajo nivel y la matriz de sonidos, pero Liu aún no instala un hook de ciclo de vida automático para ellos. Los demás agentes siguen funcionando en las pestañas de Liu; simplemente no reciben notificaciones automáticas del hook.

## Matriz Herramienta × Evento

Configure una regla de sonido para cualquier combinación. Las celdas no configuradas recurren a la regla general.

|  | start | stop | notify | error | complete |
| --- | --- | --- | --- | --- | --- |
| claude | · | · | · | · | · |
| copilot | · | · | · | · | · |
| codex | · | · | · | · | · |
| custom | · | · | · | · | · |

## Formato de trama

La cabecera v1 mide 24 bytes; la v2 actual mide 28 porque añade meta\_len. La trama completa está limitada a 4096 bytes. La validación se prueba con fuzzing en tests/fuzz\_notify\_validate.c para rechazar tramas malformadas de forma segura.

```
offset  size  field
0       4     magic      ('N','T','F','Y')
4       2     version    (1 or current 2)
6       2     flags      (speak=1, bell=2)
8       1     tool_id    (claude=1, copilot=2, codex=3, custom=255)
9       1     event_id   (start=1, stop=2, notify=3, error=4, complete=5)
10      1     priority   (reserved)
11      1     source     (cli=0, stdin=1, test=2)
12      4     seq        (client nonce — for dedup)
16      4     title_len  (<= 256)
20      4     body_len   (<= 3072)
24      4     meta_len   (v2 only, <= 512)
payload         title, body, then metadata key=value lines
                total frame <= 4096 bytes
```

La sección de metadatos v2 contiene actualmente líneas cwd=, session= y agent=. Los emisores de hooks las usan para atribuir el evento al panel correcto; las claves desconocidas se ignoran para mantener compatibilidad futura.

## Backends de plataforma

Misma trama, diferente altavoz. macOS utiliza AVSpeechSynthesizer y Linux recurre a notify-send. Cada backend reside en su propio archivo (platform\_notify\_macos.m, platform\_notify\_linux.c), por lo que intercambiar o simular uno es un cambio de un solo archivo.

[Siguiente Configuración →](https://liu.software/es/docs/config.md)
