DeepSeek Harness (DSH) is commonly used to let agents run tasks in the background. While handling other work or watching videos, developers find it hard to keep watching the interface at all times. This plugin provides audio reminders, playing a sound when the AI finishes work or needs your input.
This is a DSH client plugin developed by jedzqer. It synthesizes sound effects using Web Audio and plays a notification when the AI finishes work or asks you a question, without requiring external audio files.
Core Features¶
The plugin provides the following capabilities:
- Full-turn response completion reminder: Uses the edge of the current session’s
runningstate changing from true → false as the signal. Completion, error, max-tokens, and stop all trigger it, playing an ascending arpeggio “ta-da”. - Question-waiting reminder: When the AI stops waiting for your answer, it plays a two-tone “ding”, distinguishable from the completion sound.
- Sub-agent awareness: It will not false alarm while a background sub-agent is still running; sound plays only when the whole task is truly complete.
- Browser-based control: You can mute it, adjust volume, or make it sound only when the tab is hidden using
localStorage. - Zero resource dependencies: All notification sounds are synthesized by Web Audio; no audio files and no network requests are used.
- Automatic handling of autoplay policy: On the first user gesture, it warms up
AudioContext, so you do not need to manually click to unlock sound. - Automatic cleanup: When the plugin is removed / during HMR, all subscriptions and event listeners are automatically released.
Installation and Activation¶
Installation steps are as follows:
# 1. 把插件安装进 web profile
dsh plugin --profile web add dsh-sound-plugin
# 2. 重启 web UI 使插件集合生效
dsh web
The plugin is enabled by default and requires no configuration.
Typical Usage and Configuration¶
Code-Level Configuration¶
If you need to adjust default behavior, modify the DEFAULTS constant at the top of client.js. Supported configuration options include enabled, volume, hiddenOnly.
After modifying client.js, there is no need to restart dsh web; refresh the page (Ctrl+F5 recommended) to make changes take effect; only adding or removing plugins requires a restart.
Browser-Level Overrides¶
Run the following commands in the browser DevTools Console:
// 静音
localStorage.setItem("dsh-sound.enabled", "false");
// 音量 0..1
localStorage.setItem("dsh-sound.volume", "0.25");
// 仅在标签页隐藏时响
localStorage.setItem("dsh-sound.hiddenOnly", "true");
Behavior Description¶
- Session listening scope: It only listens for full-turn response completion in the current session (the session selected in the sidebar); switching sessions automatically follows. If the session is running and you switch to a completed historical conversation, it will not false alarm—sound plays only when the kept selected session finishes.
- Notification sound distinction:
- Question waiting: two-tone “ding”.
- Full-turn completion: ascending arpeggio “ta-da”.
- Trigger conditions: Finishing due to error / max-tokens / stop also plays the completion sound.
- Sub-agent gating: Intermediate waits by sub-agents (including background sub-agents) do not sound; opening historical conversations does not sound; switching to a session that is already waiting for a question also does not sound.
Technical Implementation¶
The plugin consists of a Node half (index.js, with an empty apply, only used to make the plugin appear in the Host’s Loader) and a browser half (client.js, discovered via dsh.client declaration).
Ecosystem Background¶
The DSH philosophy is “everything is a plugin”; this plugin is hosted on a community-independent site. It is recommended to check the source code and license before installing.
- Plugin directory page: dsh-sound-plugin
- Source repository: jedzqer/dsh-sound-plugin