Skip to main content

deepseek-pet

34Stars4Forks1Issues0Watchers

Adds a Live2D-style desktop pet to DeepSeek Harness Web: displays expressions and speech bubbles based on task status, context usage, and active session changes. Supports drag-to-zoom and action group configuration.

Evidence5/5methodologySourceInstallMaintenanceDSH versionSecurity scan
Machine-auditedInstall commandRepo verifieddsh-plugin topicLicenseREADMEAI wiki
Language
JavaScript
License
MIT
Branch
main
deepseek-harnessdeepseek-harness-plugindsh-plugin

Install

cmdweb profile
$ dsh plugin --profile web add deepseek-pet

Run the command above in your terminal to install this plugin via the dsh CLI. You can switch Profile in the top-right corner. New to dsh? Read the beginner tutorial

Install via your agent

Install the DeepSeek Harness plugin keleus/deepseek-pet for me: review the repository at https://github.com/keleus/deepseek-pet first, then run the install command and verify the plugin loads successfully.

Paste this instruction to the DSH Web GUI assistant — it will install and verify for you.

One-line Positioning

Injects a Live2D-style desktop pet character into the DeepSeek Harness Web: it automatically switches expressions and speech bubbles based on current tasks, tool calls, context usage, concurrent sessions, and idle time; supports drag-to-move, scaling, and "action image" customization.

Core Features

  • Renders a complete character image in the bottom-right corner of the webpage (not split into parts to avoid expression misalignment), switching to corresponding expressions for scenarios like thinking, answering, coding, web search, sub-agent, completion, and failure
  • A speech bubble above the character cycles through status short phrases, with the latest response/thinking output displayed in a single-line typewriter effect; the bubble auto-hides after 10 seconds of inactivity
  • Displays the focused session (with highlighted border) and up to 7 concurrent executing sessions below the character; automatically stacks and collapses beyond 3 sessions, shows "+N sessions" when exceeding 7
  • When context reaches 62%, switches to "还可以再吃一点" (eating series); at 82%, switches to "上下文吃饱了"; switches to blindfolded "看不见" state when image input is detected
  • Shows morning/afternoon/evening/night greetings based on local time; idle 10 minutes shows "肚子饿了", 30 minutes "抱着枕头犯困", 1 hour "已经睡着了"
  • Drag to reposition, hover + scroll to scale (65%-140%), single-click triggers status phrase, double-click or "−" button minimizes to static icon in bottom-right corner; position and size are automatically remembered
  • Settings panel adds "Pet Settings" page: can switch between "Default" and "Page Always-on-Top" display modes, can enable/disable specific images by action group via checkboxes, at least one image per group must be retained
  • Respects prefers-reduced-motion and narrow screen breakpoints (≤760px), all animations can be significantly reduced under system preferences

Technical Implementation

  • Language: JavaScript / JSX (React 18)
  • Key Dependencies: React 18 (peerDependency, injected by host), esbuild 0.25.8 (build-time only); runtime only depends on host-provided cordis / dsh-client-runtime / dsh-client-ui-layout / dsh-client-ui-slots
  • Architecture Pattern: Dual-half cordis bundle: src/host/index.js is an empty host half (apply() has no side effects), all visible behavior is in the browser half of src/client/index.jsx: registers the pet component via ctx.slots.inject('shell.overlay', …) (order=90) + registers settings page via ctx.slots.inject('settings.section', …); subscribes to slots and sessions two runtime capabilities
  • Entry Files: Client entry src/client/index.jsx, core component src/client/DeepSeekPet.jsx, settings page src/client/DeepSeekPetSettings.jsx; build output lib/index.js (host half) + lib/client.js (client half, ~1.5 MB, with all base64 WebP images embedded)
  • Asset Pipeline: scripts/build_assets.py (Python 3 + Pillow processes source images → transparent WebP) + scripts/embed-assets.mjs (converts WebP to base64 and writes back to src/client/assets.generated.js, then esbuild bundles into lib/client.js); no network resources required

Use Cases

  • Users running long model tasks (multi-turn reasoning, long code generation, batch tool calls) who want companion feedback instead of staring at progress bars;
  • Users managing multiple concurrent sessions (>3) who need to visually see which is running, which is waiting for interaction, which is focused;
  • Desktop users focused on accessibility experience who need prefers-reduced-motion automatic animation degradation.

Prerequisites & Compatibility

DependencyMinimum VersionNotes
DSH HostNot declared in dsh.enginesAll peerDependencies are *, actually dsh.client.inject strongly requires injection of @deepseek-ai/dsh-client-runtime and @deepseek-ai/dsh-client-ui-layout
Node.js>=22.19package.json engines.node; users don't need Node at runtime, only when building from source
PlatformWeb browser onlydsh.client.platform: "web"; host half is empty shell, doesn't participate in backend logic
Native ModulesNonePure React 18 + embedded WebP, no native dependencies like node-pty / sqlite
React^18.2.0peerDependency, injected by DSH Web host
Python 3 + Pillow(build only)After modifying source images, need to re-run npm run assets; published versions already have embedded images

Installation

dsh plugin --profile web add github:keleus/deepseek-pet

Configuration Options

ConfigTypeDescriptionDefault
Display ModeDropdown (Default / Page Always-on-Top)Controls pet layering: default follows app interface; page-always-on-top fixes to viewport bottom-right and floats above all content including popupsDefault
Action Images · IdleMulti-select (Default Idle / Relaxed / Happy / Proud)Rotation pool for idle state by accumulated duration, at least one per groupAll selected
Action Images · ThinkingMulti-select (Deep Thinking / Desk Work / Calm Thinking / Slightly Confused / Stressed Thinking / Eating Earnestly / Lifting Bowl)Used when there's lots of analysis, reasoning, or questioningAll selected
Action Images · Executing ToolsMulti-select (Desk Coding / Checking Content / Serious Verification / Eating Earnestly / Lifting Bowl)Alternates with rice-eating actions when writing code, reading files, searching, running toolsAll selected
Action Images · RespondingMulti-select (Typing Response / Organizing Answer / Verifying Answer)Used when organizing and outputting responsesAll selected
Action Images · Task SuccessMulti-select (Happy Completion / Satisfied Finish / Desk Completion)Briefly displayed after successful sessionHappy Completion + Satisfied Finish
Action Images · WaitingMulti-select (Patient Waiting / Continuing Wait / Thinking While Waiting / Angry Wait / Sleepy Wait)Changes with wait duration when waiting for confirmation or responseAll selected
Action Images · Error & ApologyMulti-select (Shocked / Apologizing / Sad / Desk Facepalm)Used when tools fail, tasks fail, or corrections receivedAll selected
Action Images · EatingMulti-select (Lifting Bowl / Eating Earnestly)Used when context grows needing "energy supplement"All selected

The pet's position, scaling, last activity time and other runtime states are automatically written to browser localStorage, no manual configuration needed; all "configuration options" above are modified through DSH settings panel's "Pet Settings" page.

FAQ

Q: Does the pet affect page performance?

A: Very little impact. All 28 expression images + 3 frame images are embedded as base64 WebP directly in lib/client.js (~1.5 MB), no external network requests after loading; runtime only renders the currently active image (others have opacity:0), DOM always exists but overhead is negligible. You can see a long string of <img> in browser DevTools but actual rendering is very light.

Q: Can I replace it with a completely different character?

A: Not directly. The plugin's 28 complete character images (not split) and state mappings are hardcoded in src/client/assets/, src/client/pet-state.js, src/client/pet-presentation.js, there's no "skin change" or "load external pet.json" entry in the source code; to customize the character you need to fork the repo, replace source images, and build/install locally.

Q: Why does the pet say "can't see" when I send images?

A: Not a bug. DeepSeek model doesn't support visual input, so when the plugin detects image attachment in recent human input, it actively switches the pet to blindfolded expression and shows "图片暂时看不见" as a visual cue for the user. See src/client/pet-state.js:81-91 for the source.

Q: Does "page-always-on-top" in settings open a new window?

A: No. Both display modes are pure in-page rendering: default renders in DSH's shell interface layer, page-always-on-top uses React createPortal to mount the pet to document.body and positions it in the viewport bottom-right with position:fixed. Neither mode calls window.open, all browsers behave consistently. See src/client/DeepSeekPet.jsx:482-486 + src/client/styles.js:29.

Q: Will the pet get confused with multiple concurrent sessions?

A: No. Focused sessions are marked with highlighted bars, executing sessions are listed below; when exceeding 3 concurrent executing sessions, it enters "busy crazy" state and alternates between "working" and "rice-eating" image groups; when exceeding 7, the session list shows "+N sessions" summary at the bottom.

Q: How to disable specific expression images (like avoiding "crying face")?

A: Open DSH settings panel → "Pet Settings" → scroll to "Action Images" section, uncheck in the corresponding action group; each group must retain at least one image; click "Restore defaults" to reset all action groups' image pools.

Q: Will my preferences remain after uninstalling the plugin?

A: localStorage preferences (position, scaling, last activity, display mode, enabled action images) are not cleared when the plugin is uninstalled and will reload immediately after reinstall; however, since these keys are prefixed with deepseek-pet:, if no deepseek-pet related code runs afterward, they become orphaned keys that don't affect other functionality.

Difficulty Level

Beginner — Install and use immediately, settings panel only has display mode + action image checkboxes as visible options; all runtime states (position/size/scrolling text) are enabled out of the box, no documentation reading required.

Known Issues & Limitations

  • When detecting image input, it forcibly shows "图片暂时看不见" blindfolded state (DeepSeek model doesn't support visual input, not a plugin bug)
  • runningSessions bottom panel only renders the first 7 concurrent executing sessions, excess shown as "+N sessions" summary; auto-stacks when exceeding 3 but doesn't affect total count
  • Custom character images require forking the repo and replacing source images in src/client/assets/ then building locally, no runtime "load external pet.json" or skin switching entry
  • Rebuilding requires Python 3 + Pillow (npm run assets), not a pure npm workflow; published versions have embedded images, regular users don't need this step
  • All image resources are embedded as base64 WebP in lib/client.js, single file ~1.5 MB, initial load slightly slower than average plugins but no external image requests after loading

Read the usage guide →

Install steps, key points, FAQ and compatibility for this plugin — auto-derived from indexed fields.

Listing badge

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/keleus/deepseek-pet)

Paste this markdown into your GitHub README to link back to this listing. The badge only states the listing — not a security endorsement.

← Back to plugin directory