macOS Dock badge and bubble chime: shows an unread badge on the Dock (dot while running, count when done) and plays a chime while the app is hidden; clears on return, built on the Badging API.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:Bing-Bryan/dsh-unread-dot
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. Only install sources you trust, and pin a commit (github:owner/repo#sha).
README
A DeepSeek Harness (DSH) plugin: while the app is hidden or unfocused, show an unread red dot on the macOS Dock icon and play a bubble chime when a session finishes or needs you. Clears automatically when you return.
Built entirely on the Chrome Badging API (navigator.setAppBadge / navigator.clearAppBadge) — no macOS system settings, no notification permission, no banners.
⚠️ Prerequisite: open DSH Web in Chrome and install it as an app via More → Cast, save and share → Install… so it runs in its own macOS window (PWA).
setAppBadgeonly works inside an installed web app.
Behavior
| Scenario | Dock icon | Sound |
|---|---|---|
| Session running while you're away | 🔴 plain red dot (no number) = still working | silent |
| Session finished while you're away | 🔴 red number +1 = results waiting | 🔊 bubble chime |
| Session needs your input | 🔴 red number +1 | 🔊 bubble chime (once per away period) |
| You return to the app | auto-cleared | — |
Why the Badging API
The plugin encodes "is there new info, and what kind" with the three states the Badging API supports:
navigator.setAppBadge(3) // red numbered badge: 3 unread results
navigator.setAppBadge() // plain red dot: a session is running
navigator.clearAppBadge() // clear: you're back, everything is read
- No permission, no banner, no system settings: the badge is a system-level persistent marker the page calls directly
- Dot vs number: number = unread result count, plain dot = running (the clearest distinction the API can express)
- Compatibility: DSH Web must be installed as a PWA (Chrome "Install page as app"); the API is supported from Chrome 81; from Chrome 152 the badge/notifications are attributed to the web app itself
Install
Add the plugin package to your DSH profile (e.g.
web):dsh plugin --profile web add github:Bing-Bryan/dsh-unread-dotAppend it to
dsh.profile.bundlesin the profile'spackage.json:"dsh": { "profile": { "bundles": [ "...", "dsh-unread-dot" ] } }Restart
dsh web, then configure it in Settings → Dock 角标与通知.
Settings
| Setting | Default | Description |
|---|---|---|
| Dock badge | on | Master switch: number badge when finished/waiting, cleared on return |
| Activity dot while running | on | Plain red dot while a session is generating a reply during minimize |
| Chime (bubble pop) | on | Plays the built-in bubble sound (bubble.mp3, 0.4s) on completion / needs-you |
| Test chime | button | Plays the bubble pop once to verify the sound |
How it works
- The plugin subscribes to the DSH session list (
sessions.list) and tracks read/unread state: when the window regains focus, all current attention states are marked as read - While minimized/unfocused, only newly occurring completion/waiting events light up the badge and chime (old events don't accumulate)
- Running sessions only show the activity dot (plain red), never counted into the number
- The chime plays an embedded base64 MP3 via
Audio, with a cross-window lock so multiple open windows only sound once
Compatibility
- macOS Chrome (installed as PWA / "Install page as app")
- Badge:
setAppBadgerequires an installed web app context - No server-side dependency — pure client plugin, HMR hot-reload with zero restarts
License
MIT © 2026 Bing-Bryan
The built-in sound effect bubble.mp3 is an edited clip based on Pixabay audio: Nature bubble in water (Pixabay license: free for commercial use, no attribution required).
Links
More in this category
omdsh-dev/dsh-notification★ 49
Desktop notifications for turn completions, with per-outcome controls and keyword rules.
omdsh-dev/dsh-open-in-vscode★ 46
Open DSH workspace directories in VS Code directly from the web GUI.
whyihaveyou/dsh-suite#plugin-notify★ 27
IM webhook and local notifications on turn completion, errors, or approval (Feishu/WeCom/DingTalk/Slack/Discord/custom).
omdsh-dev/dsh-lark★ 17
Lark/Feishu bot channel for DeepSeek Harness: each chat drives its own agent, and tool approvals, model questions, and plan reviews return as cards answered by a button or a reply. Switch workspace and model from the chat (`/cd`, `/model`, `/new`), and run several bots that keep separate sessions and can hand turns to each other in one group.
bill9109/dsh-web-ui-notify★ 12
Desktop notification reminders.
bobleer/dsh-acp-for-bitfun★ 9
ACP bridge between BitFun and DSH.