Preface

In DSH plugin-based workflows, session tasks are often scattered across prompts, tool calls, and background jobs: the model can create tasks, but users cannot see a unified list; after sub-agent tasks complete, users need to query again; progress and status also lack a persistent visualization entry point.

dsh-global-task-list addresses these issues by providing a set of task CRUD model tools, a persistent floating panel, background job terminal state synchronization, and a generative UI rendering surface based on the surface field. The following sections introduce it by capabilities, installation, usage, and precautions.

What is it

dsh-global-task-list is a plugin for DeepSeek Harness, positioned as a “Global Task Library + Persistent Interaction Panel”.

  • Repo URL: https://github.com/sgzxs/dsh-global-task-list
  • License: MIT
  • Installation: Add to a specified profile via the DSH plugin command, e.g., web profile
  • Core Objects: Cross-session persistent tasks, model-visible tools, browser-side panels, and surface documents

It does not solve individual to-do records within a single chat, but rather establishes a consistent state for tasks across DSH sessions, background jobs, and panels.

Core Capabilities

1. Task CRUD & Cross-session Persistence

The plugin provides task-related model tools:

  • task_add: Create tasks, carrying fields like title, description, parentId, dependsOn, surface, progress, etc.
  • task_list: List tasks, output format like - [status] title (id, job=...).
  • task_update: Update tasks, and link to background jobs via jobId.
  • task_delete: Delete tasks.

Additionally, taskui_probe can be used to probe the plugin state and current task count.

Tasks are stored in a cross-session storageDomain unit and survive restarts. This means tasks exist not only within a single session but can also be viewed and modified as part of a long-term workflow.

2. Persistent Floating Panel

The panel is located in the bottom right corner and is a persistent floating panel. It subscribes to SSE channels to refresh on task changes, supports modifying status and deleting tasks, and triggers generative splitting.

The panel uses --dsw-* theme tokens and is localized to zh/en. For users, it places the task list, status, and surface content within a persistent viewport, eliminating the need to repeatedly refer to conversation text to check status.

3. Sub-agent Task Terminal State Sync

Tasks can be associated with background jobs via task_update(id, { jobId }). After association, the plugin synchronizes terminal states like completed, failed, and killed according to JOB_STATUS_MAP.

This capability suits the workflow where a “main agent creates tasks and sub-agents/background jobs execute them”: task creation is explicit, and status synchronization is handled by the plugin after association.

4. surface Generative UI

Tasks can carry a surface field. surface is rendered as a whitelist recursive component tree. Supported components include:

section, metric, statusBadge, progress, table, list, timeline, dag, disclosure.

Please note:

  • The dag surface does not draw a bitmap, only renders node chips and edges list.
  • surface is saved as unverified JSON on the host side.
  • Illegal component types are ignored during rendering, not during loading.

Installation and Enablement

npm installation uses pre-built artifacts, suitable for most use cases:

dsh plugin --profile web add dsh-global-task-list

The plugin declares dsh.bundle, and dsh automatically adds it to the profile bundles.

GitHub Installation (Source Code + prepare Build)

If installing from GitHub, it pulls the source code and executes prepare build:

dsh plugin --profile web add github:sgzxs/dsh-global-task-list#v0.1.4

Fixing the tag helps maintain commit stability, thereby making subsequent allowBuilds configuration more stable.

GitHub Installation allowBuilds

When installing from GitHub, pnpm blocks git dependencies from executing builds by default. allowBuilds needs to match the exact commit. When the first add fails, the error message prints the required key. You can write it to the profile’s pnpm-workspace.yaml and run the installation again:

allowBuilds:
  dsh-global-task-list@git+https://github.com/sgzxs/dsh-global-task-list.git#<commit>: true

The <commit> here is a specific commit and cannot be replaced by an entry with just the package name.

Dependencies and Runtime Environment

Verified runtime requirements include:

  • DeepSeek Harness compatible with 0.1.0-rc.6.
  • Host side resolves @deepseek-ai/dsh-tools, @deepseek-ai/dsh-llm, @deepseek-ai/dsh-storage-domain, and zod from profile node_modules.

If the plugin fails to load, prioritize checking if these dependencies are resolvable in the profile and if the installation method triggered build restrictions.

Typical Usage

1. Probe Status

taskui_probe

Used to return plugin status and current task count.

2. Create Task

task_add(title, description?, parentId?, dependsOn?, surface?, progress?)

Create a task. title is required; other fields should be filled according to task needs.

3. View Tasks

task_list

Output format:

- [status] title (id, job=...)

4. Associate Background Task

task_update(id, { jobId })

Associate an existing task with a background job. Afterward, task status can be updated based on the terminal state synchronization logic.

5. Delete Task

task_delete(id)

Delete a specified task.

Impact on Prompts and Cache

The plugin injects tool schemas into the model tools directory. Based on verified information:

  • Tool schema is a fixed cost.
  • Task list content does not enter the prompt.
  • Plugin version changes replace the schema, invalidating KV cache reuse.

Therefore, displaying task content in surface / the panel is usually more suitable for controlling prompt inflation than repeatedly stuffing task body text into the conversation.

Use Cases

Suitable for the following scenarios:

  • Need to maintain a cross-session task list in the DSH web profile.
  • Main agent needs to create tasks and track status of background sub-agents or background jobs.
  • Need to view task status, progress, or structured surface in the browser.
  • Want to use a unified panel to perform operations like changing status, deleting, and generative splitting.

Precautions

  • The plugin runs with the current dsh process permissions; check source code and license before installing. This plugin’s license is MIT.
  • sync-profile.mjs is a local development helper, not published via files; use dsh plugin add for official installation.
  • Installing from GitHub requires handling pnpm allowBuilds, and the key must match the exact commit.
  • surface is unverified JSON saved on the host side; illegal component types are ignored during rendering.
  • dag does not render a bitmap, only renders node chips and edges list.

Conclusion

The value of dsh-global-task-list lies in putting “Global Task Library, Persistent Panel, Background Job Status, and Structured surface” into a single DSH plugin: the model can maintain tasks, users can view and modify them in the panel, and background job terminal states can be synchronized back to tasks.

Directory Page: Refer to the page displayed in the DSH plugin directory for this plugin to avoid using unverified URLs.

GitHub: https://github.com/sgzxs/dsh-global-task-list