dsh-task-sounds
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
No comments yet. Be the first to write one.