A model-driven desktop pet, derived from PC2005-cloud/dsh-pet (MIT): an always-on-top companion that follows your agent sessions, races the Web UI to answer approvals and questions, keeps a per-pet affection ledger, speaks through pet_say/pet_do tools or an autonomous inner voice, and can read those lines aloud through BreezeBlue TTS with your own BreezeBlue API key. It uses its own /whale598 route and ~/.dsh/whale598 data directory, so it is a separate pet from dsh-pet rather than a replacement for it.
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-agentic-pet
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:beyondgjc/dsh-agentic-pet
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
description: "The dsh desktop pet: an agentic pet plugin that serves the pet renderer over the web composition, drives it from in-process dsh events, and answers approvals and questions from the desktop." kind: "package-bundle"
dsh-agentic-pet
English | 中文
Summary
dsh-agentic-pet is a desktop-pet plugin for the DeepSeek Harness ecosystem: the pet lives on your desktop as a transparent always-on-top window, follows your agent sessions (idle / thinking / working / error), races the web GUI to answer approvals and user questions (first answer wins), collects a per-pet touch-affection ledger, and exposes expressive tools (pet_say, pet_do, pet_digest, pet_interactions, pet_state) so the model can speak and act through the pet. Spoken lines can be read aloud through BreezeBlue TTS — the carrier synthesizes each /say text and delivers bubble and voice as one event; synthesis failure or timeout degrades to visual-only (configure it in the desktop settings page). Multiple pet implementations can run side by side — a directory registry (~/.dsh/pet-http.d/) discovers every live pet and routes state, interactions, and ledgers per pet.
The pet itself is a dumb display with zero dsh knowledge. Everything that understands the runtime — event convergence, interaction waterfalls, multi-pet routing, the model tools — lives in the plugin's driver, and the pet only implements a small local HTTP control interface. Any pet implementation that speaks the same HTTP contract can be adopted without changing this plugin.
What's in this repo
| Path | What it is |
|---|---|
src/ |
The plugin (Cordis bundle): /pet route, event driver, registry, PetService seam, model tools, settings-page routes |
client/ |
The desktop sidebar settings page (client half) |
carrier/ |
The Electron carrier build artifacts shipped with the package (lib/, dist-renderer/) |
carrier-src/ |
The carrier sources (mirrored from the dev upstream; media assets live in dsh-pet-assets) |
vendor/typert-plugin/ |
Vendored typert decorator plugin used by the packaging config |
tests/ |
Vitest specs (pure-function coverage of the registry routing and the /status field-matrix normalization) |
Install
From the DeepSeek Harness desktop app's plugin page, or:
dsh plugin --profile <name> add dsh-agentic-pet
The animation media ship as a separate package, dsh-agentic-pet-assets, and are pulled in automatically as a dependency.
Development
The TypeScript build still runs inside the dsh monorepo workspace (the bundled @deepseek-ai/dsh-* deps are not published to npm). The flow:
- In the monorepo:
pnpm run build(pluginlib/) andpnpm --filter @deepseek-ai/dsh-pet run build(carrierlib/+dist-renderer/). - Here:
scripts\sync-from-monorepo.cmd— mirrors sources and build outputs into this repo. - Commit here, then publish from here (see Releasing; the assets package goes first, manual in dsh-pet-assets/PUBLISH.md).
Tests: npx vitest run tests/registry-service.spec.ts runs self-contained (needs only cordis and vitest); the full suite including tests/pet-app.spec.ts runs in the monorepo workspace.
Releasing
package.json's version is owned by this repo: scripts\sync-from-monorepo.cmd mirrors every other manifest field and keeps it. The monorepo copy carries the workspace version (0.2.1-rc.3), so a plain mirror copy used to rewrite the published number — which is why npm 0.4.0 had no commit and no tag carrying it.
node scripts\release.mjs 0.4.1 --dry-run # preflight and pack listing, nothing published
node scripts\release.mjs 0.4.1 # publish, commit "chore(release): 0.4.1", tag v0.4.1
git push --follow-tags
The script refuses to publish unless the working tree is clean, the version exceeds the current one, tag v<version> is absent, the build artifacts are present, and lib/ carries exactly one bundle chunk (tsdown runs with clean:false, so a stale service-*.js would ship). A failed publish restores package.json, so the tree never claims a version that did not ship. A prerelease version (x.y.z-rc.N) publishes under --tag rc.
Every published version is reachable as tag v<version> — the tag, not the manifest, is what answers "what is on npm". Version in the tree therefore always equals the last published version.
Documentation
- Control-plane contract (the frozen consumer API every pet implementation speaks): see the multi-pet guide in the project documentation.
- Say-side TTS (BreezeBlue voice-over) design notes:
docs/tts.mdin the monorepo workspace (packages/bundle/pet-app). - Known limitations and design notes live in the repo wiki and the project's engineering docs.
Credits & Licensing
- This project is a derivative of PC2005-cloud/dsh-pet — the upstream dsh-pet plugin by PC2005-cloud. Plugin code is licensed MIT.
- The character artwork (the "大肥鱼" whale-girl character under
carrier/assetsanddsh-agentic-pet-assets) is licensed CC BY-NC-SA 4.0 (attribution · non-commercial · share-alike) by its original author — original statement. Non-commercial use only; artwork derivatives must be shared under the same license.
Links
More in this category
PC2005-cloud/dsh-pet#dsh-pet★ 5347
Desktop pet for the DSH Web UI on Windows, macOS and Linux: 106 transparent animations in the browser overlay or a transparent always-on-top desktop window, throw-and-bounce drag physics with squash and particle scoring, a work-status bubble driven by live session events, self-talk and chat with persistent memory, balance display, meme-image bubbles, multiple pets on screen, and drop-in custom animations and pet packs.
Alterssss/dsh-bili-whale★ 862
A Bilibili companion that keeps its own schedule. A 60-second tick in the plugin host wakes a dedicated agent session at a random moment inside the configured time windows (opting out of a day is a configurable chance), then hands it a bundled CLI of 38 subcommands — feed, subtitles, danmaku, comments, ffmpeg frame grabs, and two diaries. Shares at most N items a day by commenting on them and @-mentioning the owner (default 3, enforced from a written quota log, and it stops on rate-limit or captcha signals). Also polls comment replies, direct messages and live-room danmaku; replies to anyone but the owner are queued for approval in Settings. Settings → 养鱼 writes ~/.dsh/bili-whale.config.json; cookies live separately in ~/.bili-ai/credentials.json and are never echoed back. The HTTP routes are loopback-only behind DSH's trust fence. Needs Node 18+ and ffmpeg on PATH for frame extraction.
Nagi-ovo/dsh-ads★ 707
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.
yyh-001/dsh-meme★ 488
Chat meme stickers: text-only send, mood auto-send, QQ/WeChat-style picker, auto-learn, custom packs.
vlln/whale-girl★ 400
Desktop pet (QQ-pet style): floats in the corner, draggable, feedable, playable.
a86582751/dsh-nexttavern★ 218
NextTavern is a long-form roleplay plugin for DeepSeek Harness 0.1.7-rc.2 Web, with character-card import and creation, worldlines, worldbooks, layered long-term memory, keyword/semantic/hybrid retrieval, character agents, and card or novel export. SillyTavern character-card import is supported; v0.2.9 fixes distribution and installation.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.