Preface

DeepSeek Harness (DSH) runs agents in real environments: models can execute bash commands, start background jobs, and handle multiple tasks in parallel. On the web interface, the chat page is used for asking questions and viewing responses, while the task board and trajectory view serve as another set of observation tools. Once a background task starts, the only status usually visible near the input box is “The model is still working”. To see the specific command being run, how long it has been executing, and what the terminal is currently printing, you need to switch to another view.

DSH’s design slogan is “Everything is a plugin”: model adapters, tools, sessions, sandboxes, scheduling, and UI can all be replaced via plugins without modifying the Harness source code. The community directory DeepSeek Harness Plugin Repository is an independent site not officially affiliated with DeepSeek / FangTian, used for discovering and installing community plugins. dsh-task-status is listed under the “UI Enhancements” category of this repository: it does not add new tools for the model, but only adds a background task status bar above the chat page’s input area, with real-time tail output.

This article is organized after cross-checking the plugin directory page, GitHub repository README, package.json, and source code: what it is, where to install it, how to use it, and the boundaries you need to know before installation.

What It Is

dsh-task-status is a UI enhancement plugin for the DSH web interface, with the npm package name @vlln/dsh-task-status. The current version is 0.3.1, maintained by vlln (LICENSE attributed to Sam Gao), under the MIT license. As of the query on 2026-08-18, the GitHub repository vlln/dsh-task-status has 9 stars. It is listed under the “UI Enhancements” category on the directory page, and is marked as a bundle-style plugin: package.json declares dsh.bundle, the client uses the dshClient channel, and the platform field is web.

It solves a specific problem: when an agent runs tasks in the background, developers can still view the following information while staying on the chat page:
- How many background tasks are running in the current session
- The status, elapsed time, and details of each task
- Expanded terminal output tail (similar to tail -f, automatically refreshed)

Both the directory page and README refer to it as an “official bundle plugin”. The “official” here refers to the bundle packaging method specified by DSH (dsh.bundle + client injection), not an officially released DeepSeek product or a built-in component of Harness. The README itself positions it as a “DSH ecosystem example plugin”.

Core Features

The plugin is split into two parts: the Node side provides read-only data routes, and the browser side mounts the status bar into the official slot conversation.input.dock of the chat input area (on the same strip as dock components like queue and todo). cordis.patch.yml only inserts this single line without modifying other plugins’ configurations.

Chat Page Status Bar

The behavior of the browser-side source code src/client/task-status.tsx is as follows:
1. Position: A dock card above the chat page’s input box, with layout variables aligned with the official composer (side margins, maximum card width, etc.)
2. Counting: When multiple tasks exist, it displays “⚙ N background tasks running”; when only one task exists, it directly renders that task row without a counting header
3. Expand Details: Click the task row to expand, showing status, start time, optional details, and output tail
4. Only Show Active Tasks: Only running / stopping tasks appear on the bar; once completed / killed / failed, the row disappears from the interface. The status bar automatically hides when all tasks finish.
5. Chat Page Only: Determines if the current view is the Chat view by checking if [data-chat-flow=""] exists on the page. It automatically hides when switching to views like trajectory or taskboard, and reappears when switching back to the chat page.
6. Session Filtering: The list aligns ownerSession with the current chat’s sessionId, so background tasks from other sessions will not be rendered on this page.

The status copy includes Chinese and English text: Running, Stopping, Completed, Killed, Failed. Official StateDot components are used for visual indicators.

Real-Time Output Tail

After expanding a task, the client polls the output route every 1 second, replaces and renders the full text after retrieving it, achieving an effect similar to tail -f in a terminal. The output area has a maximum height of approximately 10 lines (160px), a scrollbar appears when exceeding this limit, and the view automatically locks to the bottom to facilitate viewing recent logs.

The corresponding HTTP routes are registered by the Node-side src/index.mjs:
| Path | Function |
|------|----------|
| /plugins/dsh-task-status/tasks | Read-only task list (union of owned + unowned tasks, deduplicated by id) |
| /plugins/dsh-task-status/output | Output tail for a specified task (full: true returns the accumulated full text; returns 404 for unknown ids) |

The list API does not consume the task output cursor. The output API uses the host’s jobs.read: this is a consumable incremental read that shares the cursor on each task with the official task_output / job tools. The plugin therefore wraps ctx.jobs.read with a runtime mirror — the official side prioritizes reading “incremental content that has not been officially consumed” from the buffer, while the plugin uses the underlying rawRead and accumulates the full text. The README still mentions ctx.tasks.read, which is inconsistent with the ctx.jobs naming in the current source code; refer to the repository source code as the authoritative source.

The output buffer has a maximum limit of 64KB, and the oldest content will be discarded when the limit is exceeded to preserve only the tail. This is an implementation constraint, not a configurable item.

Installation and Activation

package.json declares requirements: Node.js >= 22.19.0, DSH >= 0.1.0-rc.5, and the client platform is web. Please install it in an environment where you can already open the DSH Web UI.

The installation command given on the directory page is:

dsh plugin add github:vlln/dsh-task-status

The repository README recommends explicitly specifying the web profile and pinning the branch to main (the git source already includes the built lib/ directory, so no local build will be triggered during installation):

dsh plugin --profile web add "github:vlln/dsh-task-status#main"

If you already have the source code locally, you can also git clone it and run the following command in the repository directory:

dsh plugin --profile web add .

For reproducible installations, pin the GitHub source to a commit as instructed on the directory page. The latest commit on main as of now is b4fc6625362498bc230953df5e3a0e37b2104def (2026-08-17, version 0.3.1), with the following installation command:

dsh plugin add github:vlln/dsh-task-status#b4fc6625362498bc230953df5e3a0e37b2104def

You need to restart the web service for the changes to take effect. After installation, you can deactivate or reactivate it in the “Plugins” panel of the settings page.

Both the directory page and README remind users that the plugin runs with the permissions of the current DSH process, and may execute code during installation. You should read the source code repository and license before installing.

Typical Usage

No additional configuration files are required. According to the README, just have the model run a task in the background, for example, use the bash tool with run_in_background: true. A display similar to the following will appear above the chat page’s input box:

 1 个后台任务运行中
   bash-1  for i in $(seq 1 20)   21:30:15 started   Running

The operating steps are:
1. In the chat, ask the agent to execute a command that will run continuously and produce output in the background.
2. After the status bar appears, click the task row to expand it.
3. The output area refreshes at approximately 1-second intervals; use the scrollbar to view the tail when more than 10 lines are present.
4. The status bar disappears after the task finishes.

When multiple background tasks run simultaneously, first click the counting header to expand the list, then click a specific row to view its tail.

Applicable Scenarios and Notes

It is suitable for the following use cases:
- Daily coding, testing, and dependency installation in the DSH web chat page, hoping to keep the progress of background bash commands near the input box instead of switching to the task board.
- Needing to check if command output is stuck or throwing errors while viewing model responses.
- Wanting to refer to the “official dock slot + bundle + self-built read-only route” pattern when writing your own UI plugins. The source code comments also mark it as an example.

Before using, please note these boundaries:
1. Only covers the web chat page: dsh.client.platform is web, so this status bar will not work for headless / TUI use; it will also hide on trajectory and taskboard views.
2. Does not add capabilities for the model: It does not register new model-facing tools, only observes existing background tasks.
3. Wraps jobs.read at runtime: The plugin will restore the original method when uninstalled, but during installation, official reads and plugin tail output share the same incremental cursor. The source code notes that when expanding a task and actively reading it, the official “first consumable read delivery of final state notification” may be triggered early — the author considers this acceptable given the limited window. If you rely on the precise timing of the official task_output tool, please read the comments at the top of src/index.mjs before deciding to install.
4. DSH is still in developer preview: Official documentation states that core plugins and APIs will change. Comments in this plugin previously contained constraints like “0809 official API” for specific snapshots at the time, so you should recheck whether the repository has been updated after upgrading Harness.
5. Permissions and license: The plugin runs with the permissions of the current DSH process, and installation may execute code. It is licensed under MIT with open source code; please review the GitHub repository on your own before installing.

Summary

Background tasks are common in DSH, but the chat page does not display their progress and output by default. dsh-task-status uses the official conversation.input.dock slot to add a status bar, paired with a once-per-second refreshed output tail, allowing users to see what background jobs are doing without leaving their current chat. It is a community MIT plugin maintained by vlln, in the form of a DSH bundle + client channel, and is not a built-in feature in DeepSeek’s official app store.

Directory page: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-task-status/

GitHub: https://github.com/vlln/dsh-task-status