Introduction

When running agent tasks using the DSH Web interface, a common workflow is to “send the command, switch to do something else, and switch back later to see if it’s done.” Switching too early means waiting idle; switching too late means the task has already stopped and is waiting for your input. dsh-chime targets this scenario: as soon as a task in the current session ends, a chime plays in the browser, so you don’t need to stare at the page waiting.

DSH’s philosophy is “everything is a plugin,” and these small interface enhancements are perfect for filling the gaps with plugins. Below is an introduction to the positioning, features, and usage of dsh-chime.

What is this?

dsh-chime (GitHub repository mystery-god/dsh-chime) is a task completion chime plugin for the DeepSeek Harness Web GUI, maintained by Mystery-God, and open-sourced under the MIT license. It plays a chime when an agent task in the current session ends, and supports volume adjustment, muting, switching built-in sound effects, and uploading custom audio. All configurations are centralized in the Web interface’s “Settings → Plugins → Task Completion Chime” page.

It is a DSH web platform plugin (where dsh.client.platform in package.json is "web"), relying on the DSH web UI plugin ecosystem.

Core Features

Ringing only when the task truly ends

The plugin listens for the running → idle transition of the current session, ringing at the exact moment the task ends. Switching sessions or page loading will not trigger a false alarm.

Volume, Mute, and Built-in Sound Effects

The settings page provides a 0–100% volume slider and a mute toggle, with changes persisting instantly. It includes four built-in sound effects—Classic Chime / Soft Doorbell / Crisp Notification / Triplets—all synthesized in real-time using Web Audio and requiring no audio files. Additionally, the package.json description mentions a floating volume control.

Custom Audio

In addition to built-in sound effects, you can upload local audio files: supporting mp3 / wav / ogg / m4a / aac / flac / webm formats, with individual files not exceeding 16MB. They are saved in ~/.dsh/chime/audio/ and can be previewed and deleted from the settings page.

Graphical Settings Page

The plugin registers a “Task Completion Chime” tab under “Settings → Plugins”. Volume, mute, sound effect selection, and upload management are all graphical operations. The settings page and the completion listener share a memory store, so changes on one side are synchronized in real-time on the other.

Installation and Enablement

First, install the plugin to the web profile:

dsh plugin --profile web add github:Mystery-God/dsh-chime

You can also bypass the CLI by directly modifying the profile’s package.json dependencies and bundles, then running pnpm install.

After installation, restart DSH Web and open “Settings → Plugins → Task Completion Chime”: select a built-in sound effect, adjust the volume, and upload your own audio if needed. With the steps above, every time a task in the current session ends, the browser will chime.

How it Works and Security

The plugin consists of two halves with no build steps; lib/ is the release artifact. The structure given in the README is as follows:

lib/index.js   — host half: ~/.dsh/chime/settings.json storage + /api/dsh-chime/* routes (settings read/write, audio upload/play/delete) + agent announcement
lib/client.js  — client half: settings page (settings.plugins.tab) + completion listener (shell.overlay + useSessions standard props)
cordis.patch.yml — bundle patch: injects plugin lines into the profile bundle

Three points worth noting:

  1. API routes are protected by loopback + same-origin fencing (consistent with dsh-ssh). When exposing DSH Web to a local network, these interfaces will not be served externally.

  2. The host half uses only Node built-in modules, and the client half uses only React, with zero runtime dependencies.

  3. Every change to volume, mute, or sound effect selection is immediately PUT to the host, persisting to ~/.dsh/chime/settings.json.

Developer Perspective

The repository has no TypeScript and no bundler: src/ is handwritten source code, lib/ is the release artifact, and must be committed—when the DSH plugin market validates an installation package, it requires the entry file to exist. Two scripts are used during development:

node scripts/build.mjs   # copies src/ to lib/ (no compilation step)
node scripts/test.mjs    # host route smoke tests (temporary DSH_HOME)

Environment requirements come from package.json: Node ^22.19.0 || >=24.0.0, with react ^18.2.0 as a peer dependency.

Applicable Scenarios and Notes

The target audience is clear: developers who run agents in the DSH Web GUI while handling other tasks. When a task runs in the background, a single chime is much more convenient than repeatedly switching windows to confirm.

Two things are recommended before installation:

  1. The plugin runs with the permissions of the current DSH process and can access the host’s file system and API. Before installing, review the source code on GitHub to ensure the behavior meets expectations.

  2. Confirm that the license is compatible with your usage scenario. dsh-chime uses the MIT license, which is clearly explained in the License section of the README.

Additionally, a reminder: uploaded audio files are stored in ~/.dsh/chime/audio/, with individual files not exceeding 16MB, and can be deleted at any time from the settings page.

Summary

dsh-chime is a small tool, but the problem it solves is encountered daily: at the moment a task ends, you no longer need to switch back to the page to confirm. Project and directory entries are as follows:

It should be noted that skillhub.cn is an independent community directory with no official affiliation with DeepSeek or Fangfang; the plugin itself is open-sourced on GitHub under the MIT license.