dsh-approval-ding
Play a short ding whenever DeepSeek Harness asks for tool approval.
- Stars
- 0
- Language
- JavaScript
- Created
- Oct 25, 2026
- Updated
- Oct 26, 2026
Introduction
dsh-approval-ding
A short ding the moment DeepSeek Harness needs you: a tool-approval prompt, or a question.
审批提示音:DeepSeek Harness 请求审批、或向你提问时响一声“叮”。
Why
When an agent calls a tool that needs permission, or stops to ask you something, DSH waits silently. If you have switched to another window or another app, the turn stalls until you notice. This plugin plays a short bell as soon as the prompt appears — before you have answered anything.
It never answers, approves, rejects or delays anything. It only makes a sound.
What triggers it
| Trigger | When it fires |
|---|---|
approval/request | A tool call needs your permission |
user-questions/request | ask_user_question asks you something, including its timed variant and the exit_plan_mode plan review |
Install
From GitHub:
# Web GUI profile
dsh plugin --profile web add github:tianhengzhibei/dsh-approval-ding
# Desktop app profile
dsh plugin --profile desktop add github:tianhengzhibei/dsh-approval-ding
Or find it in the plugin market and install it there.
No build step, no dependencies — the package ships plain ESM and one WAV file.
What you hear
assets/ding.wav: a 0.62 s bell at E6 (1318.51 Hz) with four inharmonic partials,
44.1 kHz mono 16-bit.
sound: system uses the OS notification sound instead; any other value is treated
as a path to a .wav (absolute, or relative to the package root).
Configuration
Every key is optional; the defaults are shown.
# <profile>/cordis.patch.yml
- insert:
- id: dsh-ding
name: dsh-approval-ding
config:
enabled: true # false mutes the plugin without uninstalling it
sound: ding # "ding" | "system" | "C:\path\to\chime.wav"
cooldownMs: 500 # parallel requests produce a single ding
sources: [approval, question] # drop one to silence only that kind
How it works
- Two Cordis waterfalls are the triggers:
approval/request, which DSH only dispatches when a prompt is really needed (under aneverapproval policy the request is rejected before the waterfall runs, so the plugin stays silent), anduser-questions/request, whichctx.userQuestions.ask()dispatches for every question batch. - Both listeners are registered with
{ prepend: true, global: true }:globalkeeps a root-level listener visible to Agent-scoped dispatch,prependmakes it run before any answerer (including the browser bridge that takes over the composer), so the sound is not lost to a fast decision. - They return
next()untouched. The real answerers — the web approval panel, the question card, a command-line prompt, another plugin — still receive the request unchanged. - Playback happens in a helper child process with
stdio: 'ignore', so a slow PowerShell start or a missing audio device can never block the turn. Every failure is swallowed: a failed ding must not fail a request.
Platform
| Platform | Playback |
|---|---|
| Windows | powershell.exe + System.Media.SoundPlayer |
| macOS | afplay |
| Linux | paplay, falling back to aplay |
The sound is played on the machine that runs the DSH host process. If your browser connects to a remote host, the ding is heard on the host, not in the browser tab.
Windows note: the helper must not be spawned with
detached: true. ADETACHED_PROCESSpowershell.exestarts without a console, exits 0 immediately and never runs its script — verified: no audio, no side effect.
Latency
PowerShell cold start is roughly 0.5 s on Windows, so the ding is heard about half a second after the prompt appears.
Uninstall
Remove the bundle with the plugin manager, or drop dsh-approval-ding from
dsh.profile.bundles in the profile's package.json.
License
MIT.
中文说明
当 Agent 调用需要授权的工具、或停下来向你提问时,DSH 都会静静地等待。人不在窗口前, 这一轮就卡住了。本插件在请求出现的那一刻播一声短铃,不参与任何决策。
两种触发:
| 触发点 | 什么时候响 |
|---|---|
approval/request | 工具调用需要授权 |
user-questions/request | ask_user_question 向你提问(含带超时的变体,以及 exit_plan_mode 的计划复核) |
- 以
{ prepend: true, global: true }注册,保证先于任何应答器执行,随后立即return next(), 不影响浏览器审批面板、提问卡片等既有应答器。 - 播放放在独立子进程里,PowerShell 冷启动或没有声卡都不会阻塞请求;播放失败一律吞掉。
安装:
dsh plugin --profile web add github:tianhengzhibei/dsh-approval-ding
配置(全部可选,括号内为默认值):enabled(true)、sound(ding,
可选 system 或自定义 .wav 路径)、cooldownMs(500,并发请求只响一次)、
sources([approval, question],只留一个就只对那种请求发声)。