Preface

DeepSeek Harness (referred to as dsh for short) is an intelligent agent runtime open-sourced by DeepSeek AI, whose core concept is “everything is a plugin”. It is currently in the developer preview stage, and the default Web UI listens on http://127.0.0.1:3080. There are independent community sites that collect third-party plugins, such as the DeepSeek Harness Plugin Repository; such directories are not officially affiliated with DeepSeek / FangLab and should not be treated as official app stores.

dsh centralizes sessions, approvals, and queries in its Web interface. If users switch to an editor or terminal, it is difficult to immediately tell whether the intelligent agent is working, waiting for confirmation, or has finished. The desktop pet is designed for this gap: without modifying harness itself, it only places a persistent indicator on the desktop. dsh-plugin-pet-rs does exactly this — a pixel-art whale that changes expressions according to session states.

What is this

dsh-plugin-pet-rs is a project categorized under “Fun” in the community repository, maintained by HuanLinOTO on GitHub. The repository was created on 2026-08-10, added to the directory page on 2026-08-11, and last pushed to on 2026-08-15. The version number in the workspace Cargo.toml is 0.0.1.

It is not a front-end component embedded in the bottom-right corner of the dsh Web page, but a native desktop program written in Rust: featuring a transparent always-on-top window, system tray, and read-only connection to the local dsh instance. The README states that this is a pure Rust rewrite of the Electron version ../dsh-pet/, with the goal of keeping the binary size under 10MB (the original was about 100MB). The binary name is dsh-pet.

First, it is necessary to clarify the installation form. The command given by the community repository is:

dsh plugin add github:HuanLinOTO/dsh-plugin-pet-rs

There is no package.json in the repository root, nor the common dsh plugin manifest. dshfind clearly states: this is not an installable plugin package, and dsh plugin add will fail directly. The actual usage is subject to the GitHub README: build it yourself with Cargo, then run the desktop pet process separately.

Core Features

The capabilities that align between the repository README and the source code are as follows.

  1. Five-state Whale. The publicly advertised priority is offline > attention > working > done > idle. There is also a starting state starting in the source code. The state machine is aggregated in dsh-pet-core: offline when dsh cannot be connected; attention when there are pending approvals or queries; working when a session is running; done within two minutes after a task finishes and waiting for review; idle otherwise. The bubble copy is also generated according to this priority, for example, “Cannot connect to DSH”, “Needs your confirmation”, “Working…”, “Task completed”, “Resting”.

  2. Dual-channel real-time push with polling fallback. The README refers to the real-time channels as “dual SSE”, corresponding to the endpoints events.mux and events.host. events.mux is responsible for approvals, queries, and queues; events.host is responsible for session running state toggles. In addition, session.list is called every 2 seconds as a baseline, and a round of polling will be performed after disconnection to reconnect. There is one inconsistency in the implementation compared to the copy: sse.rs notes that the type name SseConnector is legacy, and the current dsh event endpoints require WebSocket upgrade, with HTTP GET returning 426. The connection is one-way (only receiving server frames), and will reconnect about 3 seconds after disconnection.

  3. Pixel-art Whale and status bubbles. The default assets are 80×58 grid HD pixel whales with water droplets, zzz / spark overlays. The bubbles are a scrollable aggregated list of multiple sessions, with popIn animation. Rendering uses tiny-skia for composition, then softbuffer for presentation.

  4. Transparent always-on-top window and system tray. The window can be dragged and resized, and its position is written to the configuration. The tray menu can open the dsh GUI, hide or show the bubble, toggle sound effects, test sounds, zoom/reset size, and exit.

  5. Built-in settings panel. Open by double-clicking the whale, allowing toggling sound and editing the dsh address. The address must start with http:// or https://; after submission, the RPC and two event connections will be rebuilt with the new address without restarting the process.

  6. Overridable assets. Create a custom/ directory in the same folder as the executable, replace the pixel art with sprites.json, and replace the prompt sounds with attention.m4a / done.m4a (mp3 / wav / ogg are also supported).

  7. Zero intrusion to dsh. It only reads HTTP / event streams, does not inject front-end code into harness, and does not modify sessions. This is not the same approach as the desktop pet plugin embedded in the Web GUI.

Installation and Building

The installation command on the directory page is as per the original text:

dsh plugin add github:HuanLinOTO/dsh-plugin-pet-rs

For reproducible installations, the directory page recommends pinning the commit hash. The latest commit on the current master branch is 81605ef83947c28799369a4456605c4a17513430 (2026-08-15):

dsh plugin add github:HuanLinOTO/dsh-plugin-pet-rs#81605ef83947c28799369a4456605c4a17513430

Community plugins run with the permissions of the current dsh process, and may execute code during installation. You should inspect the source code repository and license before installing. For this repository, the above two commands will most likely not install a standard plugin; the README also states: GitHub Actions cannot run due to billing limits, there are no pre-built artifacts, so you need to build it yourself.

You need the Rust toolchain on your local machine. After cloning:

git clone https://github.com/HuanLinOTO/dsh-plugin-pet-rs.git
cd dsh-plugin-pet-rs

# Development build
cargo build

# Release build
cargo build --release

# Test
cargo test --all

The repository is a Cargo workspace, with three crates with clear divisions of labor:

crates/
├── dsh-pet-core/   # State machine, RPC, event connections, configuration, asset packs
├── dsh-pet-ui/     # Window, renderer, input, emoji sprite atlas
└── dsh-pet-app/    # Main entry, async tasks, audio, tray, platform adaptations

Typical Usage

First, start dsh. One method given by the official repository is:

npx @deepseek-ai/dsh web

The Web UI defaults to http://127.0.0.1:3080, which matches the default address of the desktop pet. Then start in the plugin repository:

# Connect to http://127.0.0.1:3080 by default
cargo run --release

# Specify dsh address (overrides config file)
DSH_PET_URL=http://localhost:3080 cargo run --release

The address priority is: environment variable DSH_PET_URL > config file > default value http://127.0.0.1:3080. The address modified in the settings panel during runtime will be written to the configuration and reused on next startup.

The config file path varies by platform:

Platform Path
Windows %APPDATA%\dsh\pet\config.json
macOS ~/Library/Application Support/dsh/pet/config.json
Linux ~/.config/dsh/pet/config.json

All fields are optional. A complete example is as follows:

{
  "scale": 0.67,
  "bubble_visible": true,
  "sound_on": true,
  "endpoint": "http://127.0.0.1:3080",
  "window_x": 2268,
  "window_y": 1084
}

Interactions with the whale are from the README and can be reproduced directly:

Operation Effect
Single-click the whale Open the dsh GUI in the browser after a 250ms delay
Double-click the whale Open the built-in settings panel (single-click will be canceled)
Click and drag Move the window, position is saved automatically
Scroll wheel (over bubble) Scroll the session list

The single-click delay is to distinguish from double-clicks. The window will fall to the bottom-right corner of the screen on first launch. The zoom range is 50%–110%, with a default of 67%.

Custom assets are placed in the same directory as the executable:

custom/
├── sprites.json
├── attention.m4a
└── done.m4a

Refer to assets/sprites/whale-sprites-hd.json in the repository for the format of sprites.json.

There is also a screenshot self-test entry that outputs PNGs according to 5 states × 3 time points, useful for pixel regression testing:

cargo run --release -- --shot .shots

Applicable Scenarios and Notes

It is suitable for users who are already running the dsh Web UI locally and want to see session statuses even when away from the browser. It changes its posture according to approval, query, running, and completion events, and can pop up bubbles and play prompt sounds. It is not suitable for scenarios where you expect to install it with one click via dsh plugin add into your current profile — this repository is currently an independent desktop program.

Platform support is subject to the README table:

Platform Status Notes
Windows Full DWM per-pixel alpha transparent window
macOS Full NSWindow transparent, and Dock is hidden
Linux (X11) Full Transparent window, always-on-top, skip-taskbar
Linux (Wayland) Degraded Not always-on-top, does not work across fullscreen; recommend using XWayland

GNOME does not have a system tray by default, you need to install the AppIndicator / KStatusNotifierItem extension. If the tray fails to create, right-clicking the whale body will still open the menu.

For fonts, the program will detect system CJK fonts: Microsoft Yahei / SimHei on Windows, PingFang / Heiti on macOS, Noto Sans CJK SC / WenQuanYi Micro Hei on Linux. The README notes that v1 does not embed a Noto Sans CJK subset; if there are no CJK fonts on the system, the program will panic on startup and provide installation instructions.

Do not only rely on the “MIT” license notice at the end of the README. The LICENSE file in the repository root is the GNU Affero General Public License v3.0, and the license field in the workspace Cargo.toml is also AGPL-3.0; GitHub and the community repository currently show NOASSERTION. Before installing or redistributing, refer to the LICENSE file and verify it yourself.

The security boundary can be divided into two layers. For standard dsh plugins, the warning on the directory page still holds: plugins run with the permissions of the current dsh process and may execute code during installation. For this repository, the process is a separate native program, and the source code comments state that it only reads from dsh; however, it still connects to the local dsh HTTP / WebSocket interface and reads the local configuration directory. You should review the source code yourself before using it, and do not treat the community repository as official endorsement.

The authors field in the workspace Cargo.toml is DSH Team, and the repository points to https://github.com/dsh-external/dsh-pet-rs. The current public repository is HuanLinOTO/dsh-plugin-pet-rs, and the maintainer of the community repository is also HuanLinOTO. Do not mistake it for an official DeepSeek desktop pet.

As of 2026-08-17, GitHub shows 18 stars, while the community repository page lists 12; the numbers will change, so do not treat them as quality indicators.

Summary

dsh-plugin-pet-rs brings dsh’s session lifecycle to the desktop: a five-state whale, two event streams plus 2-second polling, a transparent always-on-top window and tray. It follows the native Rust client approach, rather than Web plugin injection. The community repository still provides the command dsh plugin add github:HuanLinOTO/dsh-plugin-pet-rs, but the repository has no package.json. The actual usage is to build it yourself with cargo build --release, then run the binary and connect to an already started dsh instance.

Community Repository: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-plugin-pet-rs/

GitHub: https://github.com/HuanLinOTO/dsh-plugin-pet-rs