Introduction¶
When running tasks with DSH (DeepSeek Harness), a common workflow is to hand the task to an agent and switch to doing something else. The trouble is you don’t know when the task ends: sometimes it finished long ago waiting for your feedback, sometimes it’s blocked midway requiring approval. Staring at the page wastes attention.
dsh-complete-notify solves this: plays a sound and pops up a notification when the task finishes. Uses toast in the foreground and system notification when in the background. Below is an introduction to its positioning, features, installation, and configuration.
What is this¶
dsh-complete-notify is a DSH plugin maintained by kaixinbaba, under the MIT license. One-sentence positioning: plays a sound and pops up a small notification (in-page toast + system notification when in background) when the task is complete.
It is a pure browser solution: sound is synthesized using the Web Audio API, the popup is an in-page toast, and when the page is in the background, it uses the Web Notification API to send system notifications. It does not call system commands like osascript, notify-send, or PowerShell. No audio files, zero system dependencies, works on Windows / macOS / Linux. Notification permissions are site-level, granted once.
Current version 0.6.2, requires node >= 22.19.0, dsh >= 0.1.0-rc.6, platform is web.
Core Features¶
Sound¶
Plays a sound when the task completes. Sound effects are synthesized by the browser’s Web Audio API. Each result status can independently choose a sound effect, or be set to mute individually.
In-page Toast¶
When the page is in the foreground, a small card pops up in the top right corner when the task completes, colored by result status: green for task completed, yellow for waiting for your feedback, red for task interrupted or failed, orange for reaching the token limit. The card includes a short summary (recap, max 50 characters) and runtime statistics (duration / tokens / steps). It automatically disappears after 5 seconds; clicking it jumps to the corresponding session. When multiple sessions complete simultaneously, the toast stack is limited to 3, with a First-In-First-Out (FIFO) order.
Background System Notification¶
When the page switches to the background or another tab and the task is completed, it switches to system notifications, accompanied by a summary and statistics. Clicking the notification focuses the window and opens the corresponding session, while the tab title flashes. If system notification permission is denied, it degrades to a 30-second long toast plus a flashing title.
Recap and Runtime Statistics¶
The recap first shows the degraded version (cleaned version of the first 50 words of the final answer), and is then automatically replaced by a one-sentence summary generated asynchronously by the Host-side LLM call, once per run.
Note that the definitions differ: Runtime statistics take the “last turn” (the highest-numbered finished turn), while the recap covers the entire run; for multi-turn tasks, it takes the final answer.
Result Status Determination¶
Result status takes reason.kind from the Host’s turn/end as the authoritative source, with client-side fallback inference (turn-error / turn-max-tokens nodes, interrupted assistant messages):
| reason.kind | Color | Meaning |
|---|---|---|
| completed | Green | Task completed |
| blocked | Yellow | Waiting for your feedback |
| aborted | Red | Task interrupted |
| error | Red | Task failed |
| max-tokens | Orange | Reached token limit |
Completion detection is sourced from the same logic as the official running indicator: the running / completed status of the session list snapshot.
Installation and Enablement¶
Install from npm (recommended):
dsh plugin --profile web add dsh-complete-notify
Or lock to a GitHub version:
dsh plugin --profile web add "github:kaixinbaba/dsh-complete-notify"
Restart dsh web to apply (when launched via launchd):
launchctl kickstart -k gui/$(id -u)/com.dsh.dsh-web
For local development, you can install from source using link:, pointing to a local directory:
dsh plugin --profile web add link:/path/to/dsh-complete-notify
For development debugging, run unit tests with node --test and run syntax checks with npm run check:
node --test
npm run check
Uninstall:
dsh plugin --profile web remove dsh-complete-notify
Configuration¶
All settings are in the “Settings → Task Completion Notification” panel, saved in browser localStorage (key name: dsh.completeNotify.v1). Configurable items include:
- Toggles for Enable Alert / Sound / System Notification (when page is in background), as well as a volume slider.
- Select different sound effects for green (completed), yellow (blocked), and red (interrupted).
- Sound dropdown box grouped by the current browser-identified operating system: macOS / Windows / Linux recommended presets + general preset + mute. Preset names refer to the style of the corresponding system notification sounds; the actual sound is still synthesized by the Web Audio API and does not read system audio files.
- “Test Sound” and “Test Notification” buttons. Clicking “Test Notification” for the first time will request browser notification permission, which requires allowing it.
Typical Usage¶
- Page in foreground, task completes: hear the sound, a small status-colored card pops up in the top right, containing a summary, runtime statistics, and a “Click to open session” hint; clicking the card jumps to the corresponding session.
- Page switches to background or another tab when task completes: receive system notification (with summary and statistics) + sound + tab title flashing.
- First-time use: click “Test Notification” in “Settings → Task Completion Notification” and allow the browser’s notification permission request.
Reminders are deduplicated by session: one session completion only triggers one alert; if re-run and completed again, it will alert again. Subagent (subagent) sessions are not alerted.
Use Cases and Considerations¶
Suitable for scenarios with multiple sessions running tasks in parallel, long background runs, or blocked scenarios requiring approval or feedback—these are cases where the person is not in front of the page, but needs to know immediately to return.
Several limitations need to be known:
- The tab must be open; this is a browser limitation. After closing the tab, system notifications will also not be received; if push notifications are needed when closing the page, the Push API needs to be integrated (requires a push server).
- Browser autoplay policy: Sound effects are only available after the first user interaction (click/key press). In DSH, unlocking happens naturally when sending the first message, so it is usually imperceptible.
- Toasts are in dark style and do not currently follow light/dark theme switching.
One final reminder: The plugin runs with the permissions of the current dsh process. It is recommended to review the source code and license yourself before installing. This repository is under the MIT license, and the source code is fully reviewable on GitHub.
Conclusion¶
dsh-complete-notify fills the gap of DSH task completion alerts with a pure browser solution: no system dependencies, no system notification commands, usable across Windows / macOS / Linux. Status coloring and one-sentence summaries allow you to determine whether to handle the task without switching back to the page.
- GitHub: https://github.com/kaixinbaba/dsh-complete-notify
- Plugin Directory: https://www.skillhub.cn/plugins/kaixinbaba/dsh-complete-notify
A note: skillhub.cn is a community-maintained plugin directory, an independent site with no official affiliation to DeepSeek / Hypi.