Introduction¶
When developing agents with DeepSeek Harness (DSH), tasks often run for long periods. If a browser tab is closed or the page is in the background, developers can easily miss runtime status changes, approval requests, or blocking events. The dsh-notifier plugin solves this problem by providing multi-channel notification capabilities.
What Is This¶
dsh-notifier is a plugin that adds multi-channel notification functionality to DeepSeek Harness. It introduces the send_notification model tool, supports automatic notifications for runtime status and blocking events, and provides a configuration page. The plugin is maintained by a23842 and is licensed under MIT.
Installation¶
Before installation, make sure your Node.js version is >= 22. Add the plugin via the command line:
dsh plugin --profile web add @czf1995/dsh-notifier
After installation, the plugin is automatically registered and enabled.
Core Features¶
1. Browser Local Notifications¶
When the DSH Web page is in the background (unfocused or hidden tab), the browser sends system notifications. Supported events include:
* Run finished: when a session changes from running to idle.
* Question / approval: when a session requires a user response or approval.
* Goal completed: disabled by default; enable it on the settings page.
* Foreground suppression: no notification when the page is visible and focused.
* Sub-agent exclusion: sub-agent sessions do not generate notifications.
2. External Channel Notifications¶
Notifications are delivered directly by the Host process and do not depend on browser page state. Supported events include:
* Session run finished.
* Blocking events (question / approval).
* Goal completed (must be enabled on the settings page).
Supported channels:
* NotifyX (enabled by default)
* WeCom (application notification / bot)
* Email (Resend / SMTP)
* DingTalk (bot)
* Feishu (bot)
3. Model Tool¶
Call the model tool send_notification in a DSH conversation. The parameters are title (title) and content (body), and the notification is sent to all enabled channels.
4. Settings Page¶
On the “Notifications” tab of the DSH Web settings page, you can configure the following:
* Notification switches: master switch, browser notification switch, run finished/question/approval switches, and sound switch.
* Channel configuration: check the channels to enable and fill in configuration such as API Key and Webhook URL. Secret fields (such as API Key, Webhook, and signature key) are marked as secret and are not returned by the settings endpoint.
* Testing: the upper-right corner of each channel card has a “Test XX Notification” button, which tests the channel using the saved configuration.
5. Proactive HTTP Delivery¶
In addition to the model tool, external scripts, cron jobs, or other plugins on the same Host can proactively deliver notifications through the HTTP endpoint /api/dsh-notifier/deliver.
Typical Usage¶
Delivery via HTTP¶
curl --request POST http://127.0.0.1:3080/api/dsh-notifier/deliver \
--header 'Content-Type: application/json' \
--data '{
"channel": "smtp",
"title": "构建完成",
"content": "pipeline 已结束。",
"to": "ops@example.com"
}'
Calling the Model Tool¶
Call it directly in a DSH conversation:
send_notification("任务完成", "子代理执行完毕,结果已保存。")
Important Notes¶
- Loopback restriction: The Host-side routes
/dsh-notifier/testand/api/dsh-notifier/deliveraccept only local loopback requests (loopback-only), sharing the same trust boundary as DSH/api. - Security: Secret fields are not returned by the settings endpoint and are held only within the Host process. Browser notification content does not contain secrets.
- Node version: The plugin requires Node.js version >= 22.
- Authentication: HTTP delivery does not require authentication headers.
Summary¶
dsh-notifier provides DSH with closed-loop notification capabilities, from browser local notifications to channels such as WeCom and DingTalk. Through the settings page or HTTP API, you can flexibly monitor agent runtime status. The plugin source code is available on GitHub.