DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins
S

dsh-system-notifications

System Notifications

Desktop notifications for approval requests and finished runs, with click-to-open session.

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add github:purejiang/dsh-system-notifications#e51dedb95712a9fcaa18b9b6c0550bf903049d56
READMECompatibilityVersions

Compatibility and provenance

System Notifications is published as dsh-system-notifications and currently resolves to version 1.2.0. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
github
Registry updated
10/26/2026

Versions

1.2.0stable
10/26/2026
1.1.0stable
10/23/2026

Related plugins

Loading related plugins…

Latest
1.2.0
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
Unavailable
Files
Unavailable
Surface
web
License
MIT
Source
github
GitHub
★ 0
Weekly downloads
0
Last push
10/26/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue

Related plugins

More verified plugins in integrations-communication.

Acp App@deepseek-ai/dsh-acp-appThe dsh ACP profile bundle: automation-only JSON-RPC stdio and process lifecycle over dsh-baseRemote Web Ui@linxin666/dsh-remote-web-uiScan-to-pair remote access for the dsh web GUI that shares one official interface: a QR beside the settings button pairs phones and PCs into the same Web GUI (a portrait-touch adaptation layer for phones, full desktop on PCs) through one-time tokens and rRemote Bridge@linxin666/dsh-remote-bridgeDSH remote bridge: the host half serves protocol v1 over one exact /ios/v1 WebSocket route — session roster, history baseline, prompting, live turn increments with tool activity, interrupt, and in-process agent approval — to a device paired by a one-shot Im@xmanrui/dsh-im把微信、飞书、企微、钉钉、QQ、Telegram、WhatsApp、Slack、Discord、Matrix接入DSH。 Connect Telegram, WhatsApp, Slack, Discord, Matrix, WeChat, Feishu, WeCom, DingTalk, and QQ to DSH.

README

System Notifications · DeepSeek Harness plugin

A client-only plugin for the DeepSeek Harness (dsh) Web UI that raises a desktop notification when a session needs you, and jumps back to that session when you click it.

  • A session waits for permission approval / an answer / a plan review → notification.
  • A session finishes a run (running flips true → false) → notification.
  • Clicking the notification brings the browser window to the front and opens that session.
  • Settings live in Settings → General → System Notifications.

Notifications are edge-triggered: the first snapshot after page load is taken as the baseline, so a refresh never floods you with a backlog.

Version 1.2.0 — a second General row, Persistent notifications, asks the OS to keep a notification on screen until you click or dismiss it (Web Notification requireInteraction).

Version 1.1.0 — notification titles name the project (Project · Event, e.g. harness-plugins · Approval required), and the body names the session.

Requirements

  • DeepSeek Harness with plugin support (engines.dsh: >=0.2.1-rc.2), Web GUI served in a Chromium-based browser (Chrome/Edge). http://127.0.0.1 is a secure context, so no HTTPS is required for the Notification API.
  • The page must stay open — notifications are raised by the page's JavaScript, not by the host.

Install

The package is not published on npm yet; install it straight from this repository:

dsh plugin --profile web add github:purejiang/dsh-system-notifications

Or in the Web UI: Plugins → Install, and paste github:purejiang/dsh-system-notifications.

The plugin is build-free: it ships index.js (an empty host half that registers the bundle row) and client.js (the whole feature). Refreshing the page after install is enough.

Enable and test

  1. Open Settings → General → System Notifications and switch it on.
  2. Grant the browser's notification permission. The plugin asks once, on your first click or keypress after the page loads; you can also use the Authorize button in the same row. If you dismissed or denied the prompt, allow http://127.0.0.1:3080 in chrome://settings/content/notifications (or the site icon in the address bar) and retry.
  3. Optional: turn on the second row, Persistent notifications, to keep each notification on screen until you click or dismiss it. It is off by default; Windows may still route the toast to the notification center instead of leaving it on top.
  4. The Test notification button is hidden in the shipped UI. To use it, double-click the row title “System Notifications” (stored per session in sessionStorage), or open the page with ?dshNotificationTest=1.

Behaviour

  • When: a new pendingInteraction appears (approval, question, or plan-review), or running changes from true to false.
  • Title: <project> · <event>. The project is the title of the workspace that owns the session (the default workspace is localized, e.g. “Default Workspace”); if the workspace list is not loaded yet it falls back to the directory name of the session's cwd.
  • Body: the session's display title plus the reason, e.g. ““Refactor the toolbar” requests to run bash and is waiting for your approval.” Approval notifications include the tool name; completion notifications include the elapsed time when the plugin observed the whole run.
  • Icon: the embedded 128×128 DeepSeek whale mark (PNG data URL, no external requests).
  • Quiet while you watch: no notification while that session's conversation panel is visible and the window has focus.
  • No noise: subagent sessions are skipped, duplicate notifications collapse per session (tag), and at most 6 notifications are kept open.
  • Persistent mode (optional): when enabled, notifications set requireInteraction so the OS keeps the toast up until the user acts on it, instead of hiding it after the default timeout.

Settings rows

Both rows are built from the host's own primitives (Switch/Button from @deepseek-ai/dsh-client-ui-primitives), so their spacing and type match the built-in settings rows. The main row shows the current state and explains why notifications are off when the browser permission is denied; the second row controls persistent notifications.

How it works

Everything is done through documented client extension points; no host-side code is needed:

NeedExtension point
Detect waiting / finishedshell.overlay component reading props.useSessionStatus()
Session titleprops.useSessions() → SessionListState.byId[id].displayTitle
Project nameprops.useWorkspaces() (workspace title / session ownership), fallback to cwd
Am I looking at itprops.usePanelInfo().activePanelId, document.hasFocus(), visibilityState
Raise the notificationthe browser Notification API
Click → open sessionctx.get('uiWorkspace').openSession(sessionId)
Settings controlssettings.general.item

The running transition is observed both through React snapshots and by subscribing to the client uiSession.sessionStatus store, because background tabs throttle rendering and would otherwise coalesce a short run into no visible change.

Files

package.json          # dsh.bundle + dsh.client declarations
cordis.patch.yml      # inserts the bundle row
index.js              # host half: registers the bundle, no logic
client.js             # observer, project-name resolution, session tracker, settings rows
locale/en.json        # plugin list title/description (English)
locale/zh.json        # plugin list title/description (Chinese)
icon.svg              # plugin list / settings row icon
notification-icon.png # notification icon source (also embedded in client.js)
notification-icon.svg # vector source of the notification icon

Limitations

  • The page must remain open; a closed tab cannot notify.
  • Notification layout (font, colour, extra buttons) is controlled by the browser and the OS.
  • Clicking an old notification after a page reload focuses the window but may not reopen the session (the page context is gone).
  • Notification titles are truncated by the OS; the project name is placed first so it stays visible.
  • If the browser permission is denied, nothing is sent and the settings row states the reason.
  • Persistent mode is best-effort: some platforms ignore requireInteraction and fall back to the normal notification timeout.

License

MIT