Task-complete and question notification sounds for the DeepSeek Harness Web UI: a soft chime when the agent finishes a turn, a ding-dong when it asks you something (questions, plan reviews, approvals). Synthesized Web Audio, zero assets, mute toggle and volume slider in the session header and settings.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:henrytang2011win-coder/dsh-task-sounds
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
Task-complete & question notification sounds for the DeepSeek Harness Web UI. A small chime plays when the agent finishes a turn, and a different "ding-dong" plays when the agent asks you a question mid-task (questions, plan reviews, and approval prompts all pause the agent waiting for your input).
No assets, no network, no host process: chimes are synthesized in the browser with the Web Audio API, so the plugin is tiny and works offline. A mute toggle sits in the session header (🔔 / 🔕) and the choice survives reloads.
Install
dsh plugin --profile web add dsh-task-sounds
Restart dsh web, then start a task or let the agent run: you'll hear
- done — two ascending notes (E5 → B5) when a turn completes;
- question — a descending ding-dong (A5 → D5) when the agent asks you something and waits for your answer.
Click the 🔔 in the session header to mute; click again to unmute.
How it works
A pure-client Cordis plugin (browser half only). It registers one small entry
in the session header utilities slot (conversation.session.header.utilities)
and watches the conversation snapshot the framework provides through the
standard session kit:
snapshot.turnEnds— a new completed turn whose end time is recent triggers the done chime (history replay is seeded as seen on mount, so reloading or paging older messages never chimes);snapshot.pending— a new pending interaction (question/plan-review/approval) triggers the question chime.
Both signals are per-session and deduplicated, so each event chimes exactly
once. Audio is unlocked on the first pointer/key interaction to satisfy
browser autoplay policies, and the mute state lives in localStorage.
Submit to the plugin store
The DSH plugin market (dshmarket) reads its catalog from the curated awesome-dsh-plugin registry. To list this plugin there:
Push this repo to GitHub (any public repo). Add the
dsh-plugintopic to the repo. Note the registry's CI requirements: the repo must be at least 1 day old and have 10 or more commits before the PR — so create and push the repo first, then submit the PR later.Publish to npm (
npm publishfrom this directory — the package is publish-ready;npm run prepackruns as a health check). The market registry-verifies the npm package against the repo, so publish before the PR.Open a PR against
awesome-dsh-plugin/awesome-dsh-pluginadding one filedata/plugins/henrytang2011win-coder__dsh-task-sounds.yml— the exact content is inawesome-dsh-plugin-entry.yml, already filled in. Then, inside your clone of that repo, regenerate both READMEs and commit them together:npm ci node scripts/generate-readme.mjsThe
dsh.bundlemanifest this package declares is exactly what the registry checks for installability.
The site and every market instance pick the entry up automatically (usually within a day), after which anyone can install with:
dsh plugin --profile web add dsh-task-sounds
Development
npm install # no runtime deps — peer react only
npm run prepack # health check used before publishing
The client half is plain JavaScript — no bundler needed. The module loader
resolves require("react") from the platform seed words, and the host half
(lib/index.js) is intentionally an empty apply.
License
MIT
Links
More in this category
xmanrui/dsh-im★ 2032
Connect IM bots to DeepSeek Harness via QR codes or bot credentials (9 channels: Feishu, WeChat, DingTalk, WeCom, QQ, Slack, Telegram, Discord, and WhatsApp).
shaobeichen/dsh-pocket★ 1771
Remote phone access to the DSH Web UI: scan a QR code for LAN or public (cloudflared tunnel) access with real-time sync, a mobile-adaptive layout, and a settings tab.
inclusionAI/Avernet#deepseek-harness-channel-bcn★ 642
Connects DeepSeek Harness to Avernet's Bot Collaboration Network over WebSocket V2, with automatic onboarding, isolated agent sessions, tool-call events, and multi-bot routing tools.
Oscar-Williams/dsh-deepcanary★ 90
Evidence-first attention supervision for DeepSeek Harness with C0–C3 policy, deduplicated Inbox alerts, quiet hours, and redacted outcome records.
omdsh-dev/dsh-notification★ 89
Desktop notifications for turn completions, with per-outcome controls and keyword rules.
whyihaveyou/dsh-suite#plugin-notify★ 60
IM webhook and local notifications on turn completion, errors, or approval (Feishu/WeCom/DingTalk/Slack/Discord/custom).
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.