Introduction

In DeepSeek Harness, top-level Agents executing tasks may complete, enter waiting, or wait for approval. If developers are not in front of the terminal or Web UI, these states are easy to miss. dsh-notify-center is a DSH plugin maintained by SingleOne, MIT licensed. It sends top-level Agent completion or approval waiting events as local desktop notifications or delivers them to configured Webhooks. Below is an introduction to its positioning, capabilities, installation methods, and things to note.

What is this

dsh-notify-center is a unified local desktop and Webhook notification plugin. It is designed for users who need to leave the current terminal but still want to receive DSH status alerts.

It mainly solves three problems:

  1. Timely notification to the user after a top-level Agent completes a round of tasks.
  2. Remind the user to handle approvals when a top-level Agent is waiting, without taking over the approval waterfall.
  3. Deliver notifications to the local desktop or push to configured remote Webhooks.

It does not introduce additional overhead for prompts, tokens, tool calls, or model behavior.

Core Features

Completion and Approval Events

The plugin saves accurate termination reasons via session/event → turn/end and dispatches completion notifications after the top-level Agent enters idle.

It listens to persistent approval/asked audit events to remind users to handle approvals. By default, it filters out sub-Agents; when the same Agent completes multiple rounds in a row, it notifies sequentially round by round.

Local Desktop Notifications

Local notifications support:

  • Windows native Toast, falling back to NotifyIcon bubbles on failure.
  • macOS osascript.
  • Linux notify-send.

Each local notification uses session + turn/event as a unique identifier to prevent Windows from silently swallowing subsequent notifications due to tag reuse.

Webhook Notifications

The plugin supports Feishu, Enterprise WeChat, DingTalk, Slack, Discord, and custom JSON Webhooks.

Each Webhook can independently select event and summary permissions; remote channels default to includeSummary: false, enabling it sends a bounded summary of the reply for that round.

Webhooks support timeout and exponential backoff retries; delivery does not block the Agent, and logs do not output the Webhook URL.

Filtering and Body Control

The plugin supports toggling by completion result, keyword/regex inclusion and exclusion rules, and body length limits. Event scope and rules can be adjusted in the DSH Web UI settings page or provided as combined base values in the profile basic configuration.

Installation and Enabling

The plugin requires Node >=20 runtime.

Install from GitHub to DSH web profile:

dsh plugin --profile web add github:SingleOne/dsh-notify-center

Restart dsh web after installation.

If developing from source, execute in the plugin repository root directory:

npm install
npm run check

Then install the local directory:

dsh plugin --profile web add .

Source verification can be done by executing:

npm run typecheck
npm test
npm run build

Typical Usage

  1. Open the left-side settings entry in DSH and select “Notification Center”.
  2. Modify settings such as local notifications, Webhooks, event scope, summary permissions, or body length limits.
  3. Changes take effect in real-time after saving.

You can also add config as combined base values for the plugin line in ~/.dsh/profiles/web/cordis.patch.yml:

- id: dsh-notify-center
  config:
    webhooks:
      feishu:
        url: 'https://open.feishu.cn/open-apis/bot/v2/hook/REPLACE_ME'
        includeSummary: false

The user-layer settings saved on the page are located at:

$DSH_HOME/dsh-notify-center/settings.json

When DSH_HOME is not set:

~/.dsh/dsh-notify-center/settings.json

This file is maintained by the plugin and manual editing is not recommended.

Desktop Bridging

Optional desktop App bridging can prioritize handing over notifications to a desktop App for display. When bridging is missing or fails, it automatically falls back to system native notifications.

When a desktop App launches a DSH subprocess, it can inject:

DSH_NOTIFY_BRIDGE_URL
DSH_NOTIFY_BRIDGE_TOKEN

Click behavior for independent system notifications is handled by the operating system; only bridged notifications support waking the App and locating the session.

Applicable Scenarios and Notes

Suitable for:

  • Top-level Agents execute for a long time, and you want to receive alerts when they complete or wait for approval.
  • Need to push DSH status to Feishu, Enterprise WeChat, DingTalk, Slack, Discord, or custom Webhooks.
  • Want to adjust notification settings in the DSH Web UI rather than only modifying profile basic configuration.

Precautions before use:

  • The plugin runs with the current dsh process permissions; check source code and license before installing. This plugin is MIT licensed.
  • The plugin only sends requests to explicitly configured HTTP(S) addresses.
  • Webhook URLs only exist in the current user’s Host settings file or profile basic configuration, are persisted with a secret field, and are not sent back to the browser.
  • The plugin configuration API only accepts loopback same-origin requests and strips URLs from all responses; Webhook URLs are not written to session logs and do not enter the model context.
  • The Linux system must provide notify-send.
  • The visual settings page only loads with the DSH Web UI; headless usage is still configured via profile.
  • In the absence of a WebServer, only the page and configuration API will be disabled, which does not affect local notification and Webhook delivery.
  • The delivery queue is only stored in memory; unfinished retries will not persist when the DSH process exits.
  • The first notification on Windows creates a Start Menu shortcut dsh-notify-center.lnk and registers DeepSeekHarness.NotifyCenter under the current user’s HKCU\Software\Classes\AppUserModelId; it does not write to system-level registry. Removing the shortcut and that HKCU entry revokes it.

Conclusion

The value of dsh-notify-center is focused: sending top-level Agent completion and approval waiting status to the local desktop or configured Webhooks, while retaining boundaries like default summary off, URL masking, and in-process delivery.

GitHub repository:

https://github.com/SingleOne/dsh-notify-center