Liu Terminal-Benachrichtigungen. Werden Sie benachrichtigt, wenn KI-Agenten Aufgaben beenden, mit konfigurierbaren Hooks und Tonalarmen.
liu-notify ist ein optionaler eigenständiger Prozess, während die Liu-GUI denselben Server im Prozess hosten kann. Er akzeptiert einen 24-Byte-v1- oder aktuellen 28-Byte-v2-Header mit optionalen Metadaten über einen lokalen Socket, drosselt per Token-Bucket, dedupliziert Ereignisse und leitet Ton oder Sprache pro (Agent, Ereignis)-Paar weiter.
# Neben der Haupt-App erstellen
cmake --build build --target liu-notify
# Den Daemon starten
./build/liu-notify daemon
# Einmaliges Ereignis senden
./build/liu-notify send --tool=claude --event=stop
Die Konfiguration befindet sich in ~/.config/liu/notify.conf – getrennt von der config.json der Haupt-App, sodass der Daemon auch ohne laufendes Liu nutzbar bleibt.
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.
Liu kann während der Laufzeit der App Lebenszyklus-Hooks für die folgenden Agenten installieren und entfernen. Der Hook wird in die Konfiguration des Agenten geschrieben; beim Beenden der hostenden Instanz entfernt Liu seinen verwalteten Eintrag.
| Agent | Hook-Oberfläche | Signale | Hinweise |
|---|---|---|---|
| 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 und custom werden vom Benachrichtigungsprotokoll und der Tonmatrix akzeptiert, aber Liu installiert dafür derzeit keinen automatischen Lebenszyklus-Hook. Andere Agenten laufen weiterhin normal in Liu-Tabs, erhalten jedoch keine automatischen Hook-Benachrichtigungen.
Konfigurieren Sie eine Tonregel für jede Kombination. Nicht gesetzte Zellen fallen auf die Sammelregel zurück.
| start | stop | notify | error | complete | |
|---|---|---|---|---|---|
| claude | · | · | · | · | · |
| copilot | · | · | · | · | · |
| codex | · | · | · | · | · |
| custom | · | · | · | · | · |
Der v1-Header ist 24 Byte groß; der aktuelle v2-Header ist wegen meta_len 28 Byte groß. Der vollständige Frame ist auf 4096 Byte begrenzt. tests/fuzz_notify_validate.c prüft per Fuzzing, sodass fehlerhafte Frames sicher abgewiesen werden.
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
Der v2-Metadatenabschnitt enthält derzeit cwd=-, session=- und agent=-Zeilen. Hook-Sender ordnen damit ein Ereignis dem richtigen Bereich zu; unbekannte Schlüssel werden für Vorwärtskompatibilität ignoriert.
Gleicher Frame, anderer Lautsprecher. macOS verwendet AVSpeechSynthesizer und Linux leitet an notify-send weiter. Jedes Backend befindet sich in einer eigenen Datei (platform_notify_macos.m, platform_notify_linux.c), sodass der Austausch oder Stub eines einzigen eine Ein-Datei-Änderung ist.
English · Türkçe · 简体中文 · 한국어 · Español · Italiano · Français · 日本語 · العربية