Live2D Body for Hermes Agent A developer released a transparent Live2D desktop pet app for macOS that integrates with Hermes AI agents to play lip-synced voice recordings through a local HTTP API, enabling health checks and cron reminders with a cute animated character. A transparent Live2D desktop pet Tauri 2 + pixi-live2d-display with voice lip sync, expressions, mouse tracking, and a local HTTP API. Currently ships the Sparkle 火花 model. Point your hermes agent https://github.com/NousResearch/hermes-agent at it and every voice recording it generates is played on the pet — lip-synced, with a speech bubble. Releases https://github.com/Soundpulse/hermes-live2d/releases · API reference /Soundpulse/hermes-live2d/blob/main/docs/API.md · Hermes skill /Soundpulse/hermes-live2d/blob/main/skills/hermes-live2d-voice/SKILL.md · Claude Code skill /Soundpulse/hermes-live2d/blob/main/examples/claude-code-skill.md Useful for: - Health checks - Cron reminders - Looking cute This is the main use case. Your hermes agent runs somewhere e.g. an EC2 box, chatting over the Discord gateway ; the pet runs on your Mac. Whenever the agent generates a TTS recording with its text to speech tool, a small skill uploads that audio to the pet, which plays it with lip sync + expression + a speech bubble. Normal chat replies are not spoken — only recordings the agent was already producing get routed. hermes agent remote your Mac ──────────────────── ──────── text to speech ──► hermes-live2d-voice skill ──► POST /speak ──► Sparkle pet speak.sh, base64 over Tailscale lip sync + bubble on both the Mac and the agent host same tailnet — this is how the remote agent reaches the pet without exposing it publicly. Tailscale https://tailscale.com A hermes agent wired to a TTS engine — any engine works ElevenLabs, etc. , as long as the agent produces audio files via its text to speech tool. That's the audio the pet plays. The — bundled in this repo at hermes-live2d-voice skill skills/hermes-live2d-voice/ SKILL.md + speak.sh ; you install it on the agent host in step 3. Requirements: macOS on Apple Silicon the app uses macOS-private window APIs and builds only for aarch64-apple-darwin . Grab a build from Releases https://github.com/Soundpulse/hermes-live2d/releases , or build from source: pnpm install pnpm tauri build release .app / .dmg under src-tauri/target/release/bundle/ or, during development: pnpm tauri dev Install the Live2D model. The model assets are not included in this repo they're gitignored and are not redistributed here — download them and drop them in yourself: - Download the free Spark 火花 model from booth.pm/en/items/8265367 https://booth.pm/en/items/8265367 and unzip it. - Place the unzipped model folder so its entry file is named exactly rename the Sparkle.model3.json .model3.json if the download uses a different name , in one of:— runtime override, no rebuild needed. Loaded on the next launch and takes priority. Result: ~/.atri/model/ ~/.atri/model/Sparkle.model3.json plus its .moc3 , textures, physics, expressions, etc. alongside .— bundled into the app at build time use this when building from source; required, since the repo ships no model . Result: public/model/ public/model/Sparkle.model3.json . To use a different Live2D character entirely, put its files in ~/.atri/model/ with the entry file renamed to Sparkle.model3.json — the filename is what the app looks for. Note its expressions/keyforms will differ see the skill's model-swap note . Launch the app. On first run it creates ~/.atri/config.json and starts a local HTTP API on http://127.0.0.1:3210 . Confirm it's up: curl http://127.0.0.1:3210/status {"ok":true,"message":"ATRI Live2D API is running"} The API binds to loopback only 127.0.0.1 and has no auth, so it must not be exposed directly. Put it on your tailnet instead. On the Mac: tailscale serve --bg 3210 This publishes the pet at https://