Notifications — Liu Terminal

Notifications de Liu Terminal. Soyez averti quand les agents IA terminent des tâches, avec des hooks configurables et des alertes sonores.

liu-notify est un processus autonome facultatif, tandis que l’interface Liu peut héberger le même serveur dans son processus. Il accepte un en-tête v1 de 24 octets ou l’en-tête v2 actuel de 28 octets avec métadonnées facultatives sur un socket local, limite le débit, déduplique les événements et achemine son ou voix par paire (agent, événement).

L'exécuter

# Compiler avec l'application principale
cmake --build build --target liu-notify

# Démarrer le démon
./build/liu-notify daemon

# Envoyer un événement ponctuel
./build/liu-notify send --tool=claude --event=stop

La configuration se trouve dans ~/.config/liu/notify.conf — séparée du config.json de l'application principale afin que le démon reste utilisable même sans que Liu ne fonctionne.

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 d’agents pris en charge

Liu peut installer et supprimer des hooks de cycle de vie pour les agents ci-dessous pendant l’exécution de l’application. Le hook est écrit dans la configuration de l’agent et Liu supprime son entrée gérée à la fermeture de l’instance hôte.

AgentSurface du hookSignauxNotes
Claude Code~/.claude/settings.jsonstart · notify · completeUserPromptSubmit drives the working state; Notification and Stop can alert you.
Codex~/.codex/config.tomlcompleteThe Stop hook reports a completed turn. Run /hooks in Codex once to trust it.
Grok~/.grok/hooks/liu-notify.jsonnotify · completeNotification and top-level Stop events are handled; sub-agent completions stay silent.
OpenCode~/.config/opencode/plugins/liu-notify.jscompleteThe managed plugin listens for top-level session.idle events.
Antigravity~/.gemini/config/hooks.jsoncompleteA named Stop hook reports when the top-level execution loop ends.
Command Code~/.commandcode/settings.jsoncompleteIts Claude-compatible settings schema is wired to the top-level Stop event.

Copilot et custom sont acceptés par le protocole de notification bas niveau et la matrice sonore, mais Liu n’installe pas encore de hook automatique de cycle de vie pour eux. Les autres agents fonctionnent normalement dans les onglets Liu, sans recevoir de notifications automatiques de hook.

Matrice Outil × Événement

Configurez une règle sonore pour n'importe quelle combinaison. Les cellules non définies retombent sur la règle générale.

startstopnotifyerrorcomplete
claude·····
copilot·····
codex·····
custom·····

Format de trame

L’en-tête v1 fait 24 octets; l’en-tête v2 actuel en fait 28 car il ajoute meta_len. La trame complète est limitée à 4096 octets. tests/fuzz_notify_validate.c teste la validation par fuzzing pour rejeter les trames malformées en toute sécurité.

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 section de métadonnées v2 contient actuellement les lignes cwd=, session= et agent=. Les émetteurs de hooks s’en servent pour attribuer l’événement au bon volet; les clés inconnues sont ignorées pour la compatibilité future.

Backends de plateforme

Même trame, haut-parleur différent. macOS utilise AVSpeechSynthesizer et Linux fait appel à notify-send. Chaque backend réside dans son propre fichier (platform_notify_macos.m, platform_notify_linux.c), de sorte que le remplacement ou le stub de l'un d'eux n'est qu'une modification d'un seul fichier.

Suivant Configuration →

Documentation

Mise en route

Guides

Référence

Autres langues

English · Türkçe · 简体中文 · 한국어 · Español · Deutsch · Italiano · 日本語 · العربية