Dkrillex/dsh-macos-pet

Dkrillex/dsh-macos-pet

分叉自 anneheartrecord/dsh-desk-pet 的 macOS 桌宠,一个真的置顶窗口,全屏 Space 也盖得住:姿势跟着本地 DSH 在六种状态之间走,右键菜单是真的 AppKit 菜单,里面有免打扰和会话清单,随包带七套皮肤。七套里有两套是仓库中的脚本用几何画出来的,不是生成的,所以做一套皮肤不需要图像模型、也不烧 API 额度;自带的 skill 仍用你自己的画图工具和额度,把一张照片扩写成十八个姿势。没有 Electron,也不用另装任何东西:窗口是用 macOS 自带的那个 Python 经 ctypes 驱动的。

UI Enhancementsdeepseek-harnessdesktop-petdsh

DSH macOS Pet

English · 简体中文

A macOS desk pet that shows you what your DSH agent is doing.
It can be your own cat.

One photo of a cat becomes six animated pet states

One photo in, six states out — idle, working, waiting, error, happy, sleeping.
Generated by your own image tool on your own credentials. Nothing is sent anywhere by us.

The pet sitting on top of a fullscreen editor

A real macOS window, not a widget inside the DSH page. It stays above everything you
work in, fullscreen Spaces included, and follows the agent without being told.


What it is for

You set an agent going on something long, then switch away. Is it done? Did it fail? Or is it sitting there waiting for you to approve one command?

Finding out means switching back. The switch itself is not what costs you — the interruption to whatever you moved on to is, and you make it many times over one task. Blocked-on-you is the expensive case: the agent is doing nothing at all, and you are the only one who does not know.

The pet is the answer to not switching back. It floats above every window, fullscreen ones included, so a glance at the corner of the screen is the whole check.

Install

With DSH already set up, one command:

dsh plugin --profile web add dsh-macos-pet
dsh web

Upgrading from an earlier version needs @latest:

dsh plugin --profile web add dsh-macos-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-macos-pet.

To follow the main branch instead of the published version:

dsh plugin --profile web add github:Dkrillex/dsh-macos-pet#main

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

Use

DragGrab it anywhere. Where you leave it is where it starts next time.
ClickOpens 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-clickOpens the menu: quiet mode, the session list, skins, where the pet shows up, the project page, updates, quit.
Stop./bin/dsh-macos-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

idle, working, waiting, error, happy, sleeping

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
StateWhen
idleNothing to do — breathes, blinks now and then
workingDSH is running
waitingBlocked on a confirmation, approval, or your input
errorThe run failed
happyA run just finished; settles back to idle after a few seconds
sleepingDozes when the agent is idle and your pointer has stopped moving. Any activity, or a poke, wakes it.

Skins

The built-in skins

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

The first five came out of an image model. Claude and Star are drawn: scripts/draw_skin.py renders its eighteen stills from geometry in pure standard library, and they go through the same build pipeline as every other skin. So it reproduces with no image tool and no API credits, byte for byte, and if you would rather draw a skin than generate one, docs/DRAWN-SKINS.md is the guide.

SkinIn motion
DeepSeek Whale (default)deepseek
Blue Whalebluewhale
Threadcorethreadcore
Nautilusnautilus
Jellyfishjellyfish
Claudeclaude
Starstar

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

deepseek

DeepSeek Whale (default)

bluewhale

Blue Whale

threadcore

Threadcore

nautilus

Nautilus

jellyfish

Jellyfish

claude

Claude

star

Star

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-macos-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-macos-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-macos-pet --scale 0.5      # smaller (default 0.7)
./bin/dsh-macos-pet --skin jellyfish # start on a specific skin
./bin/dsh-macos-pet --reset          # forget saved position, size and skin
./bin/dsh-macos-pet --stop           # stop the running pet
./bin/dsh-macos-pet --foreground     # stay attached, log to this terminal
./bin/dsh-macos-pet --probe          # diagnostics, no window
./bin/dsh-macos-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.

Maintained by Jackie (@Dkrillex).

Based on anneheartrecord/dsh-desk-pet, also MIT; the original copyright notice is retained in LICENSE.