Liu Terminal 알림. AI 에이전트가 작업을 마치면 구성 가능한 훅과 사운드 알림으로 알림을 받으세요.
liu-notify는 선택적 독립 프로세스지만 Liu GUI가 동일한 서버를 프로세스 내부에서 호스팅할 수도 있습니다. 로컬 소켓으로 24바이트 v1 헤더 또는 선택적 메타데이터가 붙은 현재 28바이트 v2 헤더를 받고, 토큰 버킷으로 제한하며, 동일 이벤트를 중복 제거하고 (에이전트, 이벤트) 쌍마다 소리나 음성을 라우팅합니다.
# 메인 앱과 함께 빌드
cmake --build build --target liu-notify
# 데몬 시작
./build/liu-notify daemon
# 일회성 이벤트 전송
./build/liu-notify send --tool=claude --event=stop
설정 파일은 ~/.config/liu/notify.conf에 위치하며, 메인 앱의 config.json과 분리되어 있어 Liu 자체가 실행되지 않아도 데몬이 사용 가능한 상태를 유지합니다.
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는 앱이 실행되는 동안 아래 에이전트의 수명 주기 훅을 설치하고 제거할 수 있습니다. 훅은 에이전트 자체 구성에 기록되며 호스팅 인스턴스가 종료되면 Liu가 관리하는 항목을 제거합니다.
| 에이전트 | 훅 위치 | 신호 | 메모 |
|---|---|---|---|
| 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과 custom은 저수준 알림 프로토콜과 사운드 매트릭스에서 허용되지만 Liu는 아직 자동 수명 주기 훅을 설치하지 않습니다. 다른 에이전트도 Liu 탭에서 정상 실행되지만 자동 훅 알림은 받지 않습니다.
어떤 조합이든 소리 규칙을 구성할 수 있습니다. 설정되지 않은 셀은 기본 규칙으로 대체됩니다.
| start | stop | notify | error | complete | |
|---|---|---|---|---|---|
| claude | · | · | · | · | · |
| copilot | · | · | · | · | · |
| codex | · | · | · | · | · |
| custom | · | · | · | · | · |
v1 헤더는 24바이트이고 현재 v2 헤더는 meta_len이 추가되어 28바이트입니다. 전체 프레임은 4096바이트로 제한됩니다. tests/fuzz_notify_validate.c로 퍼즈 검증하므로 잘못된 프레임도 서버를 종료시키지 않고 안전하게 거부됩니다.
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
v2 메타데이터 섹션은 현재 cwd=, session=, agent= 행을 담습니다. 훅 전송자는 이를 올바른 창에 이벤트를 귀속하는 데 사용하며 알 수 없는 키는 호환성을 위해 무시됩니다.
동일한 프레임, 다른 스피커. macOS는 AVSpeechSynthesizer를, Linux는 notify-send를 호출합니다. 각 백엔드는 자체 파일(platform_notify_macos.m, platform_notify_linux.c)에 존재하므로, 교체하거나 스터빙하는 것이 단일 파일 변경으로 가능합니다.
English · Türkçe · 简体中文 · Español · Deutsch · Italiano · Français · 日本語 · العربية