Preface

When running long tasks with DeepSeek Harness (DSH), it is common to switch to another window to do other things. However, there are two moments when you must stay in front of the window: first, when tool operations require manual confirmation; second, when the model run ends. Missing the former will keep the task waiting for someone; missing the latter, you won’t know when it finishes.

dsh-win-notify solves this problem: it converts these two moments into Windows system notifications, sounding a looping alarm when confirmation is needed and a normal beep when finished. Below is an introduction to its implementation, installation steps, and usage notes.

What is it

dsh-win-notify is a Windows 11 system notification bridge plugin for DeepSeek Harness, maintained by linfunss. When tool operations require user confirmation or the model run completes, it pops up a system toast notification branded with DeepSeek (name, whale icon, sound effects). It has zero runtime dependencies, zero build steps, and is pure ESM JavaScript. Current version is 1.0.0, MIT license.

On non-Windows platforms, it is a no-op and will not error in Linux or macOS environments.

Two notification scenarios

The plugin listens to two categories of events:

  1. When tool operations require user confirmation: It listens to the approval/request waterfall event (observer only, does not intervene in decision-making) and pops up a “Needs Confirmation” notification with the sound Notification.Looping.Alarm (looping alarm).

  2. When the model run completes: It listens for the agent/status event changing from running to idle (filters out sub-agents) and pops up a “Run Completed” notification with the sound Notification.Default.

Notifications are sent via CreateToastNotifier(aumid). This step is crucial: Windows assigns the notification to the application corresponding to the AppUserModelID (AUMID), which is DeepSeek Harness, rather than PowerShell. The name, icon, and sound are all correct.

Branding and Self-healing

To ensure notifications carry the brand, two things are needed: an icon file and a registered AppUserModelID. The plugin performs two tasks every time it loads:

  1. Regenerate the DeepSeek whale icon using pure Node (without depending on any rendering library) and write it to %LOCALAPPDATA%\DeepSeekHarness\deepseek.ico.

  2. (Re)register the AppUserModelID DeepSeekAI.DeepSeekHarness to HKCU\Software\Classes\AppUserModelId\..., including the display name and icon URI.

There is an implementation detail here: the icon is generated by rasterizing directly from the official favicon path data, rather than using librsvg (the rendering library underlying sharp), because librsvg flattens this specific path into a thin line; the scanline rasterization in icon.mjs is a workaround for this flaw. Regenerating it every time constitutes “self-healing”: even if the icon file or registry entry is tampered with, it will be restored upon the next startup.

Environment Requirements

  • Windows 10/11 (no-op on other platforms);
  • Node >= 20 (requirement from package.json engines);
  • DeepSeek Harness with Web/desktop profile, to provide the @deepseek-ai/cordis peer dependency.

Installation

The plugin is distributed as a standard DSH bundle. The philosophy of DSH is “everything is a plugin,” and plugins are placed in the profile’s dependencies. The README provides three ways.

First, clone the repository:

git clone https://github.com/<your-name>/dsh-win-notify.git

Then, reference the local path in the profile’s package.json (path is $DSH_HOME/profiles/<profile>/package.json):

{
  "name": "dsh-profile-web",
  "private": true,
  "dependencies": {
    "dsh-win-notify": "file:C:/path/to/dsh-win-notify"
  }
}

Then execute:

dsh plugin --profile web install

Method B: npm

dsh plugin --profile web add dsh-win-notify

Note that the README marks this method as “once published”—the package is only available after it is published to npm. If you want to get started immediately, use Method A or C.

Method C: Git dependency

Add a git dependency in the profile’s package.json:

"dependencies": {
  "dsh-win-notify": "github:<your-name>/dsh-win-notify"
}

Then execute pnpm install (or dsh plugin --profile web install) in the profile directory.

Enabling

After installation, add the package to the profile’s dsh.profile.bundles. The plugin comes with cordis.patch.yml, which automatically inserts the win-notify line; you can also manually insert it into the profile’s cordis.patch.yml:

- insert:
    - id: win-notify
      name: 'dsh-win-notify'

Restart DSH, open “Settings → System → Notifications”, you should see the DeepSeek Harness entry, and ensure the switch is enabled.

Configuration

All configuration items are optional; add them under the same line of cordis.patch.yml as needed:

- id: win-notify
  name: 'dsh-win-notify'
  config:
    enabled: true
    appName: DeepSeek Harness
    aumid: DeepSeekAI.DeepSeekHarness
    confirmationTitle: DeepSeek Harness · Needs Confirmation
    completionTitle: DeepSeek Harness · Run Completed
    confirmationSound: Notification.Looping.Alarm
    completionSound: Notification.Default

The purpose of each item can be inferred from its name: the two Title fields control the notification titles, the two Sound fields control the sound effects, and aumid corresponds to the AppUserModelID registered earlier.

Testing

The plugin has a built-in icon test to verify the ICO structure, PNG entries, and whale rendering content are normal:

node tests/icon.test.mjs      # or npm test

Use Cases and Notes

Suitable for developers who use DSH for long periods on Windows 10/11 and frequently switch windows—especially scenarios that trigger tool confirmation and have unpredictable task run times.

Several known limitations, please understand before using:

  • System notification settings must allow the “DeepSeek Harness” application; Focus Assist might mute toasts.
  • Windows might cache the old icon until the notification center refreshes (restarting DSH can clear it).
  • Notifications are for alerting only; clicking them will not focus the Harness window (ToastActivatorCLSID is not registered).

Also, a reminder: after installation, the plugin runs with the permissions of the current dsh process, capable of writing files and modifying the registry (the writing of the icon and registering the AUMID mentioned above are examples). It is recommended to review the source code before installation, confirm the license (this plugin is MIT), and only install if acceptable.

Conclusion

dsh-win-notify does a small but specific thing: connects the two “waiting for someone” moments of DSH with Windows system notifications, so you don’t have to stare at the window. The zero-dependency, zero-build implementation makes it easy to modify for your own version. Related addresses:

  • Directory page: https://www.skillhub.cn/plugins/linfunss/dsh-win-notify
  • GitHub: https://github.com/linfunss/dsh-win-notify

The directory page is an independently maintained community site with no official affiliation with DeepSeek / Hypothesis, serving only as a reference for the browsing entry.