Preface¶
Running agent tasks with DSH often takes a few minutes to tens of minutes, especially with multi-round goal loops. During this time, you likely switch away to do other things. To know when the task ends, you either occasionally switch back to the window to check, or write your own polling script—both are tedious.
dsh-task-complete-notifier solves exactly this one thing: when the task truly ends, it pops a pinned card in the bottom-right corner of the screen to notify you, and you can type a command directly on the card. DSH’s philosophy is “everything is a plugin,” making such client-side notification needs a perfect fit for a plugin. Below is an introduction to its features, installation, and usage.
What is it¶
dsh-task-complete-notifier is a task completion notification plugin for DeepSeek Harness maintained by Kreatur-ECHO, currently at version 1.5.2 under the MIT license. In short: a pinned card in the bottom-right corner displays the conversation title, allows direct input of the next command, features a toggleable “ding” sound, and automatically degrades if required environment features are missing.
Implementation-wise, it is a “host-half” only plugin with zero runtime npm dependencies; the only peerDependency is @deepseek-ai/cordis ^4.0.1. It is designed for DSH Desktop (Electron); in a pure dsh web (browser) environment where Electron is unavailable, the toast degrades to host logging.
Core Features¶
Triggered only once when the task truly ends¶
The plugin listens for the agent/status cordis event, triggering on the running → idle edge. In DSH’s agent state machine, running indicates the task is executing—including every intermediate round of multi-round goal loops—while idle only indicates the entire task has finished. Therefore, intermediate rounds of multi-round tasks and tasks interrupted by new messages are not triggered. Subagents are also skipped; notifications are only sent when the main task ends.
When triggered, it does not pop up immediately. Instead, it waits 3 seconds to confirm the agent won’t immediately return to running before opening the pinned window.
Pinned Card¶
The toast is an independent Electron alwaysOnTop window that remains visible when DSH is in the background or covered by other applications. The card has an opaque dark style: #181818 background, 12px border radius, #333333 border, with a shadow, positioned 30px from the bottom right corner, and features a 0.3s fadeInUp animation when appearing.
There are three ways to close it: click “Later”, click outside the card, or wait for it to auto-close.
Continue Command Directly Inside the Card¶
There is an input box at the bottom of the card (v1.1), which automatically focuses when popped up. You can directly type the next command. After pressing Enter (or clicking “Send”), it is delivered to the agent of the corresponding session via agent.followup(); if that agent is busy, the command will queue up as its next turn. The entire process requires no switching DSH to the foreground.
Starting from v1.2, the card also displays the session’s task title (folded from the session/title event), allowing you to see which task just finished and where the input command will be sent.
Two details:
- Only one toast is displayed at a time. New completion events are queued (max 5, oldest discarded). The next one only appears after you submit or close the current card—input commands in progress won’t be overwritten by later popups.
- If the session has disappeared, the card will display an inline error and remain open when submitting the command; any input will not be lost.
Sound Notification¶
It plays a built-in synthesized “ding” sound (Web Audio) when the card pops up. There is a 🔊/🔕 button in the top-right corner to toggle it, with the preference persisted in localStorage (v1.4–v1.5).
To use your own sound effect, configure soundFile to specify an mp3/wav/ogg/m4a file; soundVolume (0–1) controls the volume. Playback includes a 0.1s fade-in and starts 0.1s early to eliminate any lag.
Installation and Enablement¶
First, the runtime requirements: Node ≥ 20; DSH needs to support agent loops; rc.6+ is recommended to support agent.followup.
Method 1: Tarball installation (Recommended). First, download dsh-task-complete-notifier-1.5.2.tgz from GitHub Releases, then install using the DSH CLI:
dsh plugin --profile desktop add file:D:\Downloads\dsh-task-complete-notifier-1.5.2.tgz
Then restart DSH Desktop.
Method 2: One-click script. After unzipping the tarball, run in the unzipped directory:
powershell -ExecutionPolicy Bypass -File install.ps1
You can also specify a tarball or other profile directly:
powershell -ExecutionPolicy Bypass -File install.ps1 -Profile web -Tarball D:\dsh-task-complete-notifier-1.5.2.tgz
Method 3: Manual installation. Unzip the tarball to any location (e.g., C:\Users\<you>\.dsh\plugins\dsh-task-complete-notifier), and add link dependencies and bundles entries in ~/.dsh/profiles/desktop/package.json:
{
"dependencies": {
"dsh-task-complete-notifier": "link:C:/Users/<you>/.dsh/plugins/dsh-task-complete-notifier"
},
"dsh": {
"profile": {
"bundles": [
"dsh-task-complete-notifier"
]
}
}
}
Then run pnpm install in the profile directory and restart DSH Desktop.
Verification: After restarting, the log should show the following line, indicating the plugin is mounted. The text in parentheses shows the detection results for various environment capabilities:
[task-notifier] host half mounted (v9: env webServer=true agents=true electron=true port=61997)
Run a task, and a card should pop up in the bottom right corner.
A Typical Use Case¶
- Start a time-consuming task in DSH Desktop and switch away to do other things;
- When the task ends, a pinned card pops up in the bottom right corner, plays a “ding” sound, and displays the session’s task title;
- Type a command directly in the input box, press Enter, and the command is delivered to that session via
agent.followup(). Click “Later” or wait for it to auto-close if you don’t want to continue; - When multiple tasks finish in succession, the toasts appear one by one, and you can handle them one by one.
Configuration and Degradation¶
The plugin’s text, settle delay, cooldown, auto-close, placeholder, and labels can all be configured via the plugin mount line in cordis.patch.yml in the profile; sound-related soundFile and soundVolume are also included in the configuration options.
All of its dependencies are optional; if something is missing, the corresponding feature is disabled, but the completion detection itself always works:
webServermissing: Skip/task-notifier/*routes;agents/agent.followupmissing: Hide the input box, but detection still works;- Electron missing (pure
dsh web): Toast degrades to host logging; session/titlemissing: Only hide the title line.
The mount log mentioned earlier is an environment self-check. env webServer=true agents=true electron=true port=61997 are the detection results for each capability. Check this line first after installation.
Applicable Scenarios and Notes¶
Suitable for people who use DSH Desktop to run long tasks while doing other things: no need to stare at the task when it ends, the pinned card won’t be blocked, and you can continue commands directly in the card. The pure browser environment (dsh web) lacks Electron, so the toast can only degrade to logging; this plugin’s target environment is DSH Desktop.
Note: The plugin runs with the permissions of the current DSH process. It is recommended to read the source code and confirm the license (this project is MIT) before installing.
Summary¶
dsh-task-complete-notifier turns “when the task finishes” from something you have to monitor into a proactive pinned card that pops up, allows continuing commands directly inside, and degrades gracefully based on what’s available in the environment, regardless of deployment form.
- Community Directory Page: https://www.skillhub.cn/plugins/Kreatur-ECHO/dsh-task-complete-notifier (Independent community site, no official affiliation with DeepSeek / Huaxuan)
- GitHub: https://github.com/Kreatur-ECHO/dsh-task-complete-notifier