pitetow/dsh-notify-on-complete

Desktop notifications for run completion, model questions, and approval requests with per-platform system sounds, zero runtime dependencies.

Sends desktop notifications from DeepSeek Harness: a system notification when a run finishes, and an immediate one when the model asks you a question (ask_user_question) or waits for approval (sandbox escalation / tool permission), so you know to come back. The body reflects the result — completed, error, aborted, max-tokens or a generic end (task completed / task failed / task aborted / task hit the token limit). It has zero runtime dependencies (no dsh internal packages, no ctx.shell): notifications are fired via child_process.spawn as a detached child process, so they are non-blocking and unaffected by the harness exit path. Cross-platform notifier selection: macOS osascript, Linux notify-send → kdialog, Windows PowerShell. System sound is per-platform and can be disabled with sound: false.

Notifications & Integrations ★ 0 updated 2026-09-03
View on GitHub ↗

Install

curl -fsSL https://raw.githubusercontent.com/pitetow/dsh-notify-on-complete/main/scripts/install.sh | bash

README one-liner (GitHub source distribution, no npm). The script idempotently (1) downloads the source to ~/.dsh/plugins/dsh-notify-on-complete/ — never overwriting an existing copy unless --force/--yes is passed — (2) runs pnpm install && pnpm build, and (3) runs dsh plugin --profile <name> add link:<dir>, which reads the package's dsh.bundle.patch declaration and auto-registers it into the profile's bundle stack. For another profile append -s -- --profile headless. Manual alternative: cd ~/.dsh/plugins/dsh-notify-on-complete && git pull && pnpm install && pnpm run build, then re-run dsh plugin --profile web add link:.. Remove with dsh plugin --profile web remove dsh-notify-on-complete — the README warns that switching from the one-liner to a manual mount without removing first double-mounts the plugin (two notifications per run).

Compatibility

Node.js ^22 (same as DeepSeek Harness) and an installed dsh CLI (any version — the plugin registers via Cordis events and does not depend on a specific CLI version). Peer dependency @deepseek-ai/cordis@^4.0.1, provided by the dsh CLI itself and resolved automatically by pnpm on install.

Details

Recent updates

README behaviour notes: only top-level runs notify — subagent sessions are filtered out (header.origin === 'subagent'), so a single CLI run produces a single notification. In-session blocking notifications are controlled by onBlocked / onQuestion / onApproval. Notification commands run with detached: true + unref(), so a normal exit or crash never affects delivery.

FAQ

How do I install dsh-notify-on-complete?
Run the README one-liner: curl -fsSL https://raw.githubusercontent.com/pitetow/dsh-notify-on-complete/main/scripts/install.sh | bash. It downloads the source to ~/.dsh/plugins/, runs pnpm install && pnpm build, and mounts it with dsh plugin --profile web add link:<dir>.
Will I get duplicate notifications from subagents?
No — only top-level runs notify. Subagent sessions are filtered out (header.origin === 'subagent'), so a single CLI run produces a single notification.
Does this plugin need pnpm and a build step?
Yes — it is distributed as GitHub source with no npm package, so the install script runs pnpm install && pnpm build before mounting it as a link: dependency.

More plugins in Notifications & Integrations

Browse more in Notifications & Integrations

Guides for Notifications & Integrations plugins