Live2D desk pet overlay for the DSH web GUI: mirrors agent state (thinking, idle, error, done, awaiting approval) with motions and speech bubbles, per-part touch reactions, drag-to-dock, switchable personas, and custom models via URL or local path.
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-live2d-pets
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:cyanfish-x/dsh-live2d-pets
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
English | 简体中文
A Live2D desk girl for DeepSeek Harness (DSH): it tilts its head when you think, celebrates when you finish, and you can pet it!
Features
- Model loading: 5 curated presets (Hiyori / Haru / Mao / Mark / Natori) plus custom entries; any
.model3.jsonover https / http, or an absolute local path (e.g.C:/models/foo/foo.model3.json) served by the plugin Host through a same-origin route; custom models support animation mapping to bind native motion groups to pet states / touch interactions - State mirroring: the pet reflects agent thinking / idle / error / done / file-delivery celebration / waiting-for-approval (motion + bubbles, SSE push)
- Personas: six built-in tones (tsundere / genki / airhead / kuudere / gentle / yandere); custom personas via a plugin-owned JSONC file with hot reload
- Companionship: part-based tap reactions / mouse-follow (head, eyes and body look toward the pointer) / free drag docking / task-done celebration; when HitAreas are sparse, spatial fallback uses five AABB rectangles
- Settings panel: DSH Settings → “Pet config” — enable, size, FPS, persona, models, developer options; scalar settings are persisted to
~/.dsh/settings.yaml, while custom personas and custom models live in~/.dsh/live2d-pet/plugin-owned JSONC files; applies immediately - Stay out of the way: bottom-right by default, small size, draggable, hideable, pause rendering when the tab is hidden, FPS cap, static avatar fallback on low end
Quick start
Option A: Paste a prompt for your agent (recommended)
Copy this into a DSH Web GUI chat and let the agent install and verify:
Please install the dsh-live2d-pets plugin (Live2D desk pet for DSH):
1. Run: dsh plugin --profile web add dsh-live2d-pets
2. Run: dsh plugin --profile web list and confirm dsh-live2d-pets is installed
3. Report the result; if it fails, include the error output
Option B: Manual install
dsh plugin --profile web add dsh-live2d-pets
The plugin is enabled by default after install. Start DSH:
dsh web
Open the browser — a default pet (160px) appears at the bottom-right. Default model is Hiyori (Live2D sample); first load needs network.
Interaction
- Mouse follow (enabled by default): as the pointer moves anywhere on the page, the pet’s head, eyes and body smoothly look toward it; when the pointer leaves the page it resets to face front. It pauses while dragging, hidden, or when the tab/window is not focused.
- Tap interactions: touching the head / legs / arms / body triggers its own line and motion; when a model has sparse HitAreas, spatial fallback zones are used.
- Drag: hold and drag the pet anywhere, then release to dock it; the position is persisted.
Custom models: Settings → “Pet config” → “My models”, add a name + .model3.json URL (CDN, self-hosted static, local HTTP, or an absolute local path such as C:/models/foo/foo.model3.json; local paths are served by the plugin Host via /pet-local-models/...). Expand Spatial tap override to tune the five rectangles (0–1; leave blank for defaults), or expand Animation mapping to parse the model’s native motion groups and bind them to states / touch interactions. Pair with developer option Show tap zones. Built-in Hiyori ships with a centered preset.
Configuration
Open DSH Settings → “Pet config”. Changes apply immediately — no restart.
- Show pet: on / off
- Size: 40–400px (default 160)
- Render FPS: 30 / 60 / unlimited (default 30)
- Personas: switch built-in or custom tones; “Custom personas ↗” edits
$DSH_HOME/live2d-pet/personas.jsonc, then hit “↻ Reload” - Models: pick a curated preset, or add name +
.model3.jsonURL under “My models” (optional spatial-tap / animation mapping); custom models live in$DSH_HOME/live2d-pet/custom-models.jsonc - Developer options: master toggle (off by default); when enabled, shows the debug panel (with native model animation list preview) and the tap-zone overlay
Uninstall
dsh plugin --profile web remove dsh-live2d-pets
Docs
| Need | Doc |
|---|---|
| Chinese README | README.md |
| Product intent | docs/intent/live2d-pet-plugin.md (Chinese) |
| Behavior spec | docs/spec/live2d-pet-v01.md (Chinese) |
| Architecture decisions | docs/adr/ (rendering stack: ADR-003) |
| Research notes | docs/research/ (settings panel: settings-tab.md) |
Stack
- pixi-live2d-display 0.4.0 + PixiJS 6.5.10 + Cubism Core 4 (ADR-003)
- Client renders in DSH Web GUI
shell.overlay(Popover top layer, ADR-005); settings section onsettings.section(ADR-002) - State push: Host subscribes to
agent/*→ same-origin SSE/api/live2d-pet/events(ADR-006); pause when tab hidden / blurred - Settings: scalar settings via Host
ctx.settings(~/.dsh/settings.yamlover base); custom personas at~/.dsh/live2d-pet/personas.jsonc, custom models at~/.dsh/live2d-pet/custom-models.jsoncare read/written by the plugin; transport via plugin API/api/live2d-pet/settings(settingsScope wire allowlist limits — research 3.4/3.5)
License
- Plugin code: MIT
- Model list: URL-only, not shipped in the package; each entry must record license type + link; NC models marked non-commercial only (
src/presets/presets.jsonc) - Built-in Hiyori / Haru / Mao / Mark / Natori: Live2D sample models under the Sample Model Terms (free for commercial use with attribution)
- Live2D SDK: follow Live2D official terms
Links
More in this category
PC2005-cloud/dsh-pet#dsh-pet★ 983
Desktop pet for the DSH Web UI with 25 transparent animations, screen wandering, click reactions and drag, plus a reproducible asset-generation pipeline.
Nagi-ovo/dsh-ads★ 646
Parody ads in 2005-Chinese-web style: sidebar banners, in-chat feeds, corner popups, and a close button whose hit area is smaller than it looks. All fictional.
vlln/whale-girl★ 341
Desktop pet (QQ-pet style): floats in the corner, draggable, feedable, playable.
a86582751/dsh-nexttavern★ 136
Roleplay workspace for DeepSeek Harness: import SillyTavern/TauriTavern character cards or author one from scratch through an interactive flow; turn a long TXT novel into a playable card with either an intensive or a coarse reading pass; the main agent consults worldbooks on demand, and prose is read in a dedicated tavern reader tab; explore multiple worldlines inside one conversation (regenerate, edit-and-send, explicit clone); scoped style presets with 16 built-in styles, a character agent cluster, a standalone decision card, and card or novel export; long stories hold together through a frozen settings prefix, a hard-cut context window, traceable director notes and keyword/semantic/hybrid recall, with embeddings either online or fully local. Targets Harness 0.1.2-alpha.3 and applies its documented compatibility patches.
yyh-001/dsh-meme★ 125
Chat meme stickers: text-only send, mood auto-send, QQ/WeChat-style picker, auto-learn, custom packs.
Sutera-Diffusus/dsh-whale-musume★ 108
A whale-girl desktop pet for the DeepSeek Harness Web UI: pat-to-raise growth, work-state poses per tool type, 494 dialogue lines, 30 achievements, a growth diary, drag physics, theme sync and an accessibility mode. Chat-keyword sensing and API-balance care ship off and are opt-in; an optional weather mood calls Open-Meteo only after you name a city. No telemetry.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.