DeepSeek Harness Plugin

anneheartrecord/dsh-desk-pet

Stars ★ 5 Downloads (30d) 500 Category UI Enhancements Added 2026-08-19 npm deepseek-desk-pet

macOS desk pet that lives outside the DSH page: a real always-on-top window that clears fullscreen Spaces, six states driven by local DSH, a native right-click menu with quiet mode and a session list, and a bundled skill that turns one photo into a full eighteen-pose skin on your own image tool and credentials; system Python and ctypes, no Electron and no dependencies.

Install

# from npm (prebuilt)

dsh plugin --profile web add deepseek-desk-pet

# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)

dsh plugin --profile web add github:anneheartrecord/dsh-desk-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


Install

With DSH already set up, one command:

dsh plugin --profile web add deepseek-desk-pet
dsh web

Upgrading from an earlier version needs @latest:

dsh plugin --profile web add deepseek-desk-pet@latest

The bare form writes a ^0.x range, and a caret on a 0.x version pins the minor — so ^0.1.0 never accepts 0.2.0, and the plain command reports "Already up to date" while leaving the old version in place.

The pet appears on your desktop, floating above whatever you are working in. Nothing is added to the DSH page itself.

Pet only, no DSH: clone the repo and run ./bin/dsh-desk-pet.

To follow the main branch instead of the published version:

dsh plugin --profile web add github:anneheartrecord/dsh-desk-pet#main

The npm package is deepseek-desk-pet while the repo is dsh-desk-pet: npm rejects dsh-desk-pet as too similar to an unrelated dsh-deskpet.

No dependencies. Nothing to install first, nothing to build, no ffmpeg. It runs on the Python that ships with macOS.

Use

Drag Grab it anywhere. Where you leave it is where it starts next time.
Click Opens the session list — which DSH sessions exist, which is live, what it is doing. Click again to close.
Sleep (Do Not Disturb) Quiets the pet until you turn it off. The agent keeps working; the pet stops reacting. Petting it still gets a bounce.
Right-click Opens the menu: quiet mode, the session list, skins, where the pet shows up, the project page, updates, quit.
Stop ./bin/dsh-desk-pet --stop, or stop dsh web.

It starts in the background and detaches from your terminal, so you can close the window you launched it from.

States

Driven by your local DSH. Nothing to configure.

stateDiagram-v2
    [*] --> idle
    idle --> working: DSH starts a run
    working --> waiting: blocked on a confirmation
    waiting --> working: you answered
    working --> error: the run failed
    working --> happy: the run finished
    happy --> idle: settles back after 3.2s
    error --> working: the next run starts
    idle --> sleeping: agent and pointer both quiet for 90s
    sleeping --> idle: any activity, or a poke
State When
idle Nothing to do — breathes, blinks now and then
working DSH is running
waiting Blocked on a confirmation, approval, or your input
error The run failed
happy A run just finished; settles back to idle after a few seconds
sleeping Dozes when the agent is idle and your pointer has stopped moving. Any activity, or a poke, wakes it.

Skins

Pick one from the Skin submenu, or start on it with --skin <id>. Every skin has all six states at three frames each.

Skin In motion
DeepSeek Whale (default)
Blue Whale
Threadcore
Nautilus
Jellyfish

Idle is 2.4 seconds of stillness and then a very short blink. I tried giving the three frames equal time and it did not look right.

Every skin, all six states

In order: idle · working · waiting · error · happy · sleeping

Make your own from a picture. Hand an image to your agent and ask it to make a desk pet skin. A skill ships with the plugin that turns one image into the eighteen poses a skin needs — six states, three frames each. Your own image tool does the generating, on your own credentials; nothing is sent anywhere by us. Your skins live in ~/.dsh-desk-pet/skins/, outside the package, so upgrading the plugin does not delete them.

The skill stops twice on the way: once after the first pose, so you can throw it away before paying for seventeen more, and once after the second, to check the character survived being redrawn. If a run half-fails it tells you which poses are missing and keeps the ones you already paid for.

And then you can show it to someone. One command draws the six states as a single image:

./bin/dsh-desk-pet --skin-sheet <your-skin-id>

Submissions welcome in the skin gallery — the preview image is the whole contribution; your frames stay on your machine.

Options

./bin/dsh-desk-pet --scale 0.5      # smaller (default 0.7)
./bin/dsh-desk-pet --skin jellyfish # start on a specific skin
./bin/dsh-desk-pet --reset          # forget saved position, size and skin
./bin/dsh-desk-pet --stop           # stop the running pet
./bin/dsh-desk-pet --foreground     # stay attached, log to this terminal
./bin/dsh-desk-pet --probe          # diagnostics, no window
./bin/dsh-desk-pet --inventory      # frames per skin per state

Known limits

  • There is a band of transparent margin around the pet, and clicks landing on it do not reach the window behind.
  • A settings window and mini mode are not in this version.
  • Nothing shows progress while a skin generates; your agent's own output is the only feedback during the eighteen images.

How it works inside, and where the first choice turned out wrong: docs/INTERNALS.md.

What is planned next, and what is deliberately not: docs/ROADMAP.md.

License

MIT.

Content from the project README on GitHub ↗

Links

More in this category

View the whole category →

Community comments

Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.