Preface

DeepSeek Harness (dsh) is an open-source agent runtime developed by DeepSeek AI. The official repository summarizes its architecture in one sentence: Everything is a plugin. Model adapters, tools, session logs, Agent loops, and interfaces can all be replaced without modifying the framework source code. There is also an independent plugin directory site (deepseek-harness-plugin.com) in the community, used to retrieve repositories tagged with the dsh-plugin topic. It has no official affiliation with DeepSeek / Fangfu (Huanfang), and should not be regarded as an official app store.

When running agents in the web interface, a common issue is: while the model is thinking, generating tokens, or calling tools like grep or read, the page only shows a single streaming text block. After opening multiple sessions, it becomes even harder to quickly tell which session is still running, where it is stuck, or how many tokens it has output so far. Session events are already available in session/event, what is missing is a human-facing progress display layer.

That is exactly what dsh-answer-pet does: it places a pet in the corner of the DSH web page, using animations to correspond to states like processing start, thinking, output, tool calling, and completion; the adjacent status card summarizes token counts, speed, elapsed time, and lists the most recent model trajectories.

What is this

dsh-answer-pet is a session and message plugin maintained by Nanki-nn, licensed under MIT, primarily written in JavaScript. Its GitHub repository is Nanki-nn/dsh-answer-pet. When this article was verified, the package.json version was 0.6.0, and it declares itself as a web bundle plugin for DeepSeek Harness (with dsh.client.platform set to web).

It separates two concerns:
- Core layer: Maintains progress, model trajectories, and status cards per session.
- Theme layer: The declarative PetTheme v1 is responsible for pet SVG, local animations, aspect ratio, and stage copy.

The default theme is blue whale (blue-whale). The repository README also includes an example orange cat theme (orange-cat), and a highly similar silver shaded cat theme (silver-shaded-cat). The community directory entry still describes it as “blue whale + orange cat”; the silver shaded cat was added to the main branch on 2026-08-16, so please refer to the GitHub README and package.json for accuracy.

It does not aim to “just add a moving desktop pet”, but rather solves the observability of ongoing responses: current stage, output speed, and whether tools have failed. There are other pet plugins like dsh-pet and dsh-desktop-pet in the community, with different positioning, so do not mix their installation instructions.

Core Features

Response Stages and Pet Animations

The plugin listens to session events and aggregates raw events into stages understandable by the theme. The corresponding relationship given in the README is as follows:

Stage Source Event Theme Interface Status Card Progress
Idle No running sessions idle Do not display running session cards or counts
Start Processing turn/start turn 2%
Thinking step/start think 5% → 10%
Streaming Output assistant/chunk stream 10% → 90%, filled proportionally by token count
Tool Calling tool/call tool Freeze current progress and display the tool name
Completed turn/end done 100%

The progress is not the “completion percentage” returned by the model API. The calculation rules are clearly written in the README: prioritize the usage field from assistant/chunk; estimate during streaming based on text length; if maxTokens is available, fill progress as outputTokens / maxTokens, otherwise use a saturation curve to avoid the progress getting stuck at a certain value for too long. Progress within the same turn is monotonically non-decreasing. The output rate is smoothed using EMA. The real token usage will overwrite the streaming estimate once it arrives.

The pet’s appearance changes with the stage. The blue whale has animations like spraying water, tail wagging, blinking, and a completion expression; the orange cat has tail wagging, paw lifting, speaking, and a completion expression; the silver shaded cat uses a tightly cropped original artwork without a background, plus animations for breathing, blinking, swaying, speaking, paw lifting, and a completion jump. Clicking the pet only triggers a single blink as defined by the theme, and will not change its position.

Multi-session Status Cards

Each running session corresponds to an independent card, arranged vertically. The card structure is fixed into four sections:
1. Title bar: Running status dot, session title, progress percentage.
2. Statistics row: Current stage, output tokens, tokens per second, elapsed time.
3. Trajectory timeline: Most recent model actions, tool calls, status, and duration.
4. Progress bar: Smooth, monotonically filled within the same turn; displays a flowing effect during model output.

When there are no running sessions, neither the status cards nor the count button will be displayed. Status cards can be collapsed; after collapsing, a count button will appear below the pet only if there are still running sessions, and clicking it will re-expand the cards. Displaying the number 0 when idle is the expected behavior.

The pet can be dragged, and its position is saved in the browser’s localStorage. To restore the default position, the README gives the following steps to execute in the current DSH web page:

localStorage.removeItem('answer-pet:pos')
location.reload()

To also restore the expanded status card state:

localStorage.removeItem('answer-pet:bar')
location.reload()

Model Execution Trajectory

Each running session card displays the most recent model actions, for example, the sample from the README:

Analyze Task · Step 1              1s
Reasoning and Planning            3s
Call grep · SessionEvent          2s
Organize Response                 5s

The meanings of the timeline dots:
- Blue breathing dot: Currently executing.
- Green dot: Action or tool call completed.
- Red dot: Tool call failed.

Recognizable trajectories include: start processing request, enter model step and analyze task, display “Reasoning and Planning” when generating reasoning, display “Organize Response” when generating main content, native tool/call / tool/result, and nested calls tool/code-dispatch-start / tool/code-dispatch inside run_code.

To prevent the panel from being too tall, the host saves up to the most recent 6 entries, and the card displays the most recent 4. Each running session maintains its own trajectory independently. The data source is that the Node side listens to session/event, then pushes it to the browser via polling /answer-pet/state and SSE /answer-pet/events; stage switches are refreshed in real time, and streaming data is updated smoothly.

Tool Summary and Privacy Boundaries

Tool trajectories always display the actual tool name, such as read, grep, pwsh, web_search. The parameter area only extracts short summaries from whitelisted fields:
- description
- query
- pattern
- file_path
- path
- url

The plugin will not display complete shell commands, full tool parameters, or raw JSON in the trajectory panel; summaries will have whitespace compressed and length limited. The PetTheme documentation also states that themes cannot access raw session/event or full tool parameters.

PetTheme v1

Themes are decoupled from the core. The current version only loads trusted built-in themes that are built with the plugin and pass contract validation, and will not:
- Download themes from URLs
- Scan and execute third-party JavaScript
- Inject unsanitized user-provided SVGs into the DSH page
- Expose raw session events or full tool parameters to themes

Regular themes are prohibited from using external images. The silver shaded cat is an exception: it explicitly declares trustedRaster: true, and at runtime only allows one data:image/png;base64,... image injected during build time, and still rejects external URLs. This capability is not open to configuration options or third-party dynamic themes. Unknown theme IDs will fall back to the blue whale.

To develop your own built-in theme, the repository provides the PetTheme v1 Development Guide. The process is to copy the orange cat theme files, modify the ID/SVG/CSS/copy, register them in BUILTIN_THEME_IDS and the build script, then run tests and npm run build:client. Themes must cover seven stages: idle, turn, think, stream, tool, done, error; CSS must be scoped within its own data-ap-theme selector.

Installation and Activation

The installation command given by the community directory page is:

dsh plugin add github:Nanki-nn/dsh-answer-pet

The repository README additionally requires installing to the web profile, since the client only declares platform: web:

dsh plugin --profile web add github:Nanki-nn/dsh-answer-pet

After installation, stop and restart the current dsh web process, then refresh the original web page. Opening a new web service separately will not update an already open page. To upgrade, simply repeat the same installation command.

The README specifically notes: both model trajectories and theme configurations are provided by the plugin’s Node half; after upgrading from an older version to 0.6.0, you must restart dsh web, just refreshing the browser will not load the new configuration schema. If you can see the pet but no model trajectories, this is usually the cause.

The directory page reminds: for reproducible installations, please pin the commit hash. When this article was verified, the latest commit on the main branch of the repository was a0827d41c3f8f9177622c460a99f1aeeb8034b8d (2026-08-16), and the installation command is written as:

dsh plugin add github:Nanki-nn/dsh-answer-pet#a0827d41c3f8f9177622c460a99f1aeeb8034b8d

The plugin runs with the permissions of the current dsh process, and may execute code during installation. Please inspect the source code repository and license before installing.

Typical Usage

Switching Themes and Appearance

Configure in the answer-pet section of settings.yaml. The complete example given by the repository is as follows:

answer-pet:
  theme: blue-whale # blue-whale / orange-cat / silver-shaded-cat
  size: 96          # Pet height in px (48–200)
  corner: br        # Dock corner: br / bl / tr / tl
  opacity: 1        # Opacity (0.2–1)
  pollMs: 800       # /state polling interval
  showBar: true     # Show session progress cards
  showBubble: true  # Show status bubbles

The default values in the source code match the table above: theme blue-whale, height 96px, docked in the bottom-right corner, opacity 1, 800ms polling interval, progress cards and bubbles enabled. The allowed range for pollMs is 200–5000.

Theme updates will be mounted on the next configuration refresh. If you change the theme but the blue whale is still displayed, first confirm that the ID is spelled correctly; unknown or invalid IDs will fall back to the blue whale. After upgrading the plugin, you also need to restart dsh web for the new settings schema to take effect.

To use only the silver shaded cat:

answer-pet:
  theme: silver-shaded-cat

Viewing a Full Turn Cycle

  1. Confirm that the pet appears at the configured dock corner (bottom-right by default).
  2. Send a request in a session. The pet switches to the thinking/output animation, and the status card starts from ~2%.
  3. After the model starts generating tokens, the statistics row shows output tokens and tokens per second, and progress advances towards 90% proportionally to token count.
  4. When a tool call occurs, progress freezes, and the tool name appears in the bubble or timeline; if it fails, the timeline dot turns red.
  5. After turn/end, progress reaches 100%, and the pet switches to the completion expression.
  6. When multiple sessions run simultaneously, each card updates independently. You can collapse the status cards when you do not need to view them, leaving only the count button.

Local Development (Optional)

The development commands provided by the repository:

npm install
npm test
node scripts/build-client.mjs
node scripts/build-client.mjs --check

Refresh the page after modifying the client bundle; after modifying the Node half, you must restart dsh web.

Applicable Scenarios and Notes

These scenarios are suitable:
- Mainly using agents in DSH Web, and want to see if the current turn is stuck on thinking, output, or tool calling.
- Running multiple sessions at the same time, and need to view progress and trajectories separately per session.
- Care about output tokens, speed, and elapsed time, but do not want to sift through raw event logs.
- Want to switch to a built-in pet, or submit a new built-in theme for the project following PetTheme v1.

Please note:
- Only covers the web profile. package.json lists the client platform as web, so installing to a headless environment will not show this pet.
- Progress is an estimate. Most model APIs do not provide a “response completion percentage”; it will be corrected when usage is available, otherwise uses stage and saturation curve logic.
- Trajectories have length limits, and are not full audit logs. The host retains 6 entries, and the interface displays 4; full commands and raw parameters are intentionally not shown.
- Themes cannot be downloaded from the internet. Currently only trusted themes built into the plugin are accepted, and you cannot configure arbitrary SVG or remote images in settings.yaml.
- You must restart dsh web after installation. Especially after upgrading to a version with a new schema, just refreshing the browser is not enough.
- Permissions and license. The plugin runs with the permissions of the current dsh process, and is licensed under MIT. Inspect the source code yourself before installing; the community directory is not an official DeepSeek app store.

Summary

dsh-answer-pet aggregates the native session events in DSH Web into a corner pet and a set of collapsible status cards: stage animations, token statistics, multi-session progress, and privacy-filtered model/tool trajectories. The appearance is defined by PetTheme v1, with the blue whale as the default, plus the orange cat and silver shaded cat as alternatives.

Directory page: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-answer-pet/

GitHub: https://github.com/Nanki-nn/dsh-answer-pet