Introduction

When developing agents with DeepSeek Harness (DSH), events that require human intervention—such as approval requests, question confirmations, and blocked goals—are often easy to miss. The dsh-session-notify plugin connects these events to browser system notifications and in-app prompts, allowing you to click and navigate directly to the corresponding session to avoid missing them.

Plugin Overview

This plugin is a DSH dynamic Cordis plugin maintained by Lwc-LiuWenCheng and licensed under the MIT License.

Core Features

  • Dual-side architecture: Host and Client are separated, so it can be loaded without modifying the DSH deployment source code.
  • Comprehensive coverage: Covers all human-intervention events, with 7 categories and 11 event sources in total.
  • Dual-channel reminders: Provides both browser Notification API system notifications and a toast stack in the upper-right corner.
  • Interactive navigation: Clicking a notification focuses the window and navigates directly to the corresponding session.
  • Fine-grained configuration: Supports configuring a notification level for each category on the settings page (Off / In-app prompt / System notification).
  • Low-overhead design: Uses Client→Host long polling (empty-queue suspension for 15s) and Host-side source filtering to avoid polling storms; disabled categories incur zero load.

Installation and Enablement

There are two ways to enable this plugin:

  1. Option A: Load as a dynamic plugin
    - Run the build command to generate the files:
     npm run build:dynamic
  • In a DSH session, use the generated dynamic/host.body.js content as code.host and the dynamic/client.body.js content as code.client to call cordis_define, then execute cordis_run to activate it.
  • On first use, request notification permission from the DSH settings page.
  1. Option B: Install as a static plugin
    - Run the build and pack commands:
     npm run build:static
     npm pack
  • Run the local installation script:
     powershell -ExecutionPolicy Bypass -File scripts\install-local.ps1
  • Restart the DSH process for the changes to take effect.

Notes

  • Session-level scope: A dynamic plugin only receives events within the current session scope and cannot receive cross-session events.
  • Browser notification dependency: System notifications depend on the Notification API and user authorization; if unsupported, they automatically fall back to in-app prompts.
  • Title fallback handling: The session title in notification bodies is taken from sessionQuery.readTitle; if it cannot be retrieved, a generic message is used.
  • Lifecycle: A dynamic plugin is session-level and in-process; stopping or updating it removes all side effects.