Preface

DeepSeek Harness (dsh) runs agents in a local web interface, and a single round of tasks often takes a long time: modifying code, running tests, checking repositories, with all browser tabs open. You have to stare back at the session list to know when the task finishes or throws an error. This waiting is especially noticeable when the page is running but you are focused on other windows.

DeepSeek officially describes Harness’s design as “everything is a plugin”: models, tools, sessions, sandboxes, loops, and UI are all replaceable plugins without modifying the Harness source code. The community directory deepseek-harness-plugin.com collects many third-party extensions. It is an independent website and has no official affiliation with DeepSeek / FunPropeller, and should not be treated as an official app store.

dsh-notification is one such notification plugin. It does not add tools to the model, but only uses the browser’s Notification API to pop up system notifications in the Web GUI, so you can know that a round has ended even when you switch to other tabs. This article is organized after cross-checking with the directory detail page, the repository README / README.zh.md, package.json, and official DeepSeek Harness documentation.

What is it

dsh-notification is a desktop notification plugin for DeepSeek Harness Web GUI, maintained by omdsh-dev under the MIT license. The current repository version is 0.1.2. The community directory categorized it under “Notifications & Integrations” and included it on 2026-08-15; as of the writing date (2026-08-17), both the directory page and the GitHub repository show 55 stars.

It solves a specific problem: popping up a system notification in the browser after a session round ends. You can toggle notifications based on the end reason, and filter using keyword include/exclude rules to avoid being notified for every completed task.

The repository README splits the implementation into two parts without modifying the Harness source code:

host:   Notification projection (latest round's reason/body/tool name) --session/projection--> Browser
client: Session list completion reminder (real-time, deduplicated) + persistent settings
        -> Permission + current session visibility gate
        -> new Notification("DSH Completed", { body: "Deployment finished" })

The host side only performs read-only projection on existing session logs (end reason, truncated reply body, called tool names). The client side listens for real-time deduplicated signals of “unselected completed sessions” in the session list, then applies your preferences saved in the browser. The plugin does not write session logs, does not register model-facing tools, and does not inject any prompt words into requests, so there is no additional token overhead.

Core Features

Trigger based on end status

The host projection will include the end reason of the round. You can toggle five categories separately in the settings:
- Completed normally (completed)
- Errored (error)
- Aborted (aborted)
- Blocked (blocked)
- Token limit reached (token limit)

By default, only “completed” and “error” are enabled, and the rest are disabled. When running long tasks, you usually only need to know success or failure; you can enable aborted, blocked, and token limit notifications based on your workflow.

Keyword include/exclude rules

The rule matching targets include the session title, the reply text of the current round, and the names of called tools. Earlier rounds will not participate in matching.
- Include rules: Notify only if at least one rule is hit; no notification if none match.
- Exclude rules: Do not notify if any rule is hit.
- Supports literals or regular expressions, with an option to toggle case sensitivity.

No keyword rules are enabled by default. When needed, you can use them to only monitor sessions containing deploy or error, or exclude noisy tool names.

Visibility gate

“Only notify when the task is not in view” is enabled by default: no notification will pop up when the session you are currently viewing completes. You will still receive reminders when the page is in the background, or when you are viewing other sessions or workspaces. Turn it off, and you will get notified even when you are staring at the target session. Multiple notifications from the same session will replace each other to avoid stacking multiple banners.

There are also a master switch and “require manual dismissal”. After turning off the master switch, no more notifications will pop up, but the rules and preferences will be retained; when manual dismissal is enabled, notifications will stay until you click them away.

Permissions and testing

Preferences are stored in the browser’s localStorage. The settings section is at Settings > Notifications, where you can grant browser Notification permissions and send a test notification to confirm that the browser’s notifications are not blocked at the system level.

Installation and Activation

The plugin runs with the permissions of the current dsh process, and may execute code during installation. You should review the repository source code and the MIT license before installing.

The installation command given on the community directory page is:

dsh plugin add github:omdsh-dev/dsh-notification

This is the original wording from the directory page. The plugin’s dsh.plugin.json declares the client platform as web, so the repository README requires installing it into the web profile using a version-tagged tarball. After installation, restart the web service for the host component and the new client bundle to take effect:

dsh plugin --profile web add https://github.com/omdsh-dev/dsh-notification/archive/refs/tags/v0.1.2.tar.gz

The default dsh web profile already includes the required client combinations (session list, settings shell, locale). The directory page also notes that for reproducible installations, you can pin the commit hash, for example dsh plugin add github:omdsh-dev/dsh-notification#<commit>.

After installation, open the Web GUI, go to Settings > Notifications to turn on the master switch, and allow the browser’s permission request when prompted. Systems like macOS also require you to allow notifications from this browser in system settings, otherwise you will not see the banners even if you enable them on the page.

Typical Usage

  1. Send a test notification first to confirm that both the browser permissions and system notification switches are properly enabled.
  2. Keep the default settings: notify only on completion and error, and keep “Only notify when the task is not in view” enabled. Switch to another tab, run a round of tasks, and you should see a system notification titled “DSH Completed” with a text summary of the round’s reply after the task finishes.
  3. If you only care about deployments or errors, add include rules (such as the literal deploy) or exclude rules to filter out unwanted session titles, reply snippets, or tool names.
  4. When the reply is very long, the host side will truncate it according to maxBodyChars before sending it to the browser. To get a longer summary, modify the configuration in the corresponding plugin line in cordis.yml:
- id: dsh-notification
  name: dsh-notification
  config:
    maxBodyChars: 400      # Reply body character budget; longer replies will be truncated with ellipses on the host side

Clicking the notification will only bring the browser window to the foreground, and will not jump directly to the specific round. The notification body is a plain text summary, not a full conversation.

Applicable Scenarios and Notes

It is ideal for these situations:
- Running long coding or troubleshooting tasks with dsh web, and you switch to view documents, emails, or other repositories.
- Having multiple sessions or workspaces open at the same time, and you need to know when a background task finishes.
- Wanting to be interrupted only by “completion/error” instead of being notified for every abort or block.

You should be aware of the limitations, which are listed in the repository’s “Known Limitations”:
1. The tab must remain open. The browser can still pop up notifications when the page is hidden; no notifications will be sent after the tab is closed. It is not an operating system-level resident daemon.
2. Notification permissions must be granted. If the site permission is denied, you cannot restore it from the page internally, and you need to modify it in the browser’s site settings.
3. Only triggers once at the running→idle transition. Completed rounds during a disconnection will not be re-sent after reconnection.
4. Rules only apply to the latest round: session title + latest round reply + tools called in that round, does not match earlier rounds.
5. Clicking does not deep-link: only focuses the window, and will not navigate to that round.

The security prompt on the directory page also applies: the plugin runs with the permissions of the current dsh process. While this plugin claims to only perform read-only projections, not write logs, or add tools to the model, you should still review the source code yourself before installing.

Summary

dsh-notification moves the “this round of tasks has completed” alert from the web page to the system notification bar, uses end-state toggles and keyword rules to control noise, and does not modify model requests or session logs. It relies on the browser Notification API and the still-open Web GUI, and is suitable for users who already use dsh web and often switch away from the tab.

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

GitHub: https://github.com/omdsh-dev/dsh-notification