17 canonical events
session.start, tool.before, tool.failed, prompt.submitted, file.edited… each one drives an animation, a tip, or an ECG heartbeat — no gateway-specific code paths.
Seelie is a 10 MB native companion that listens on UDP and reacts to every event your AI coding tool emits. Pick a character with proactive tips, or an ICU-style ECG monitor whose pulse tracks your session.
Seven sustained states + one walking overlay. Working holds across tool gaps, Failed restores Working after the overlay, Greeting only fires from Idle — no ungraceful interrupts when events burst.
Tips can speak. Pick from four cloud providers, hot-swap without restart, paste any voice ID — system, cloned, or beta. Audio is cached locally so repeats replay instantly.
Eight things you'll notice the moment you launch it
session.start, tool.before, tool.failed, prompt.submitted, file.edited… each one drives an animation, a tip, or an ECG heartbeat — no gateway-specific code paths.
Lottie at 60 fps for vector character anims, Live2D Cubism for expressive models, and a sprite-sheet fallback for retro Clippy-era packs.
A pattern matcher on a 30 s sliding window detects coding behaviors and surfaces contextual suggestions with a 5-minute cooldown per type.
Native Qt6/C++, no Electron. UDP listener + animation engine — your CPU and battery won't even notice.
Native parser for the .codex-pet format from openai/skills' hatch-pet. Drop the file — Seelie reads the 8×9 atlas (192×208 cells) and renders directly, no conversion.
Default Ctrl+Shift+O shows or hides the pet from anywhere. Configurable in Settings. Works during fullscreen apps too.
Detects fullscreen apps and steps out of the way — restored automatically when you exit fullscreen. No more pet in front of your boss fight.
English and Simplified Chinese, hot-swapped from the settings panel. UI, tips, menus update instantly — no restart, no flash.
Live2D from Azur Lane, Genshin's Furina, UnityChan, and a Clippy revival — drop a .opk on the window to install
Newline-delimited JSON over UDP. Works with Claude Code, Codex, OpenCode, Kimi, and anything else that can write a socket.
127.0.0.1:52847 by default. One protocol, 17 events, any tool — any language.
echo {"type":"event","source":"claude-code","event":"session.start"} | nc -u 127.0.0.1 52847Hook configs for Claude Code, OpenCode, Codex, Kimi, plus a raw protocol for anything else
{
"hooks": {
"SessionStart": [{
"hooks": [{
"type": "command",
"command": "seelie-gateway --source claude-code --event session.start"
}]
}],
"PreToolUse": [{
"hooks": [{
"type": "command",
"command": "seelie-gateway --source claude-code --event tool.before"
}]
}],
"PostToolUse": [
{
"matcher": "Write|Edit|MultiEdit|NotebookEdit",
"hooks": [{
"type": "command",
"command": "seelie-gateway --source claude-code --event file.edited"
}]
},
{
"hooks": [{
"type": "command",
"command": "seelie-gateway --source claude-code --event tool.after"
}]
}
],
"Stop": [{
"hooks": [{
"type": "command",
"command": "seelie-gateway --source claude-code --event session.end"
}]
}]
}
}Install the gateway globally: npm install -g @eastlake/seelie-gateway. Make sure Seelie is running and the gateway is on PATH (see README for fnm/nvm wrapper).
AI agentsview the setup skill →An end-to-end audit closed a dozen latent issues in 1.0.0 — most invisible to users, all worth shipping.
Native installers for macOS, Windows, and Linux
Add a hook to your AI tool — Seelie auto-binds on UDP
Watch the pet breathe with every event you send
A second display option, exclusive with the character pet
Pick this mode in Settings → Mode. The ICU-style chassis sits where the character did and reacts to every gateway event: heart rate jumps on session.start / tool.before, a red border flashes for tool.failed and session.error, and 20 s of silence flatlines into asystole — until the next event revives the patient.
Stop poking buttons for 20 seconds — you'll watch the patient code.
Free, MIT, 10 MB, no telemetry. Download for your platform and add one hook.