dsh-ntfy
中文 · Push one notification when a DeepSeek Harness (DSH) turn actually stops — so you can leave the desk and still know when the agent is done, waiting for approval, or asking you a question.
【dsh】完成 · 帮我把构建修好
用时 2分05秒 · 12 步 · 4 次工具
目录:~/projects/demo
会话:9f2c1a4e
────────
计划已写入 PLAN.md,下一步……
Features
- Only on a real stop. After
turn/endit waitssettleMs(2 s); a new turn — goal continuation, queued message, steering — cancels the pending push. - Quiet by design. Root sessions only, end-reason allowlist, minimum duration, 10-minute dedupe, bounded queue. Short rounds never ring.
- Speaks up when DSH is stuck. Approval requests and questions are pushed immediately, with their own priority.
- GUI settings. Settings → ntfy Notify covers all 22 options, applies live, and can send a test.
- Self-hosted, plain text. Token is read from a
0600file, secrets are redacted, no emoji.
Requirements
- DSH ≥ 0.2.1-rc.2,
webprofile (the settings page is a client half). - Node.js ≥ 20.
- A reachable ntfy server. With auth enabled (
auth-default-access: deny-all) you need an access token.
Install
From the DSH GUI: Settings → Plugins → add a third-party plugin, spec:
github:Sillykjs/dsh-ntfy
Or ask the agent to call plugin_manager install_bundle with the same spec. The manager installs the
package and enables the bundle in one step.
Then restart dsh web once so the host module is loaded. Later config changes apply live.
If your ntfy server requires auth, open Settings → ntfy Notify and paste the token: it is written
to a 0600 file and only the file path is kept in the profile.
Manual CLI install:
dsh plugin --profile web add github:Sillykjs/dsh-ntfy
# then add "dsh-ntfy" to dsh.profile.bundles in $DSH_HOME/profiles/web/package.json
Uninstall: remove the bundle in the plugin manager, or disable the ntfy row in the profile patch.
The token file is left behind on purpose; delete it yourself if you no longer need it.
No comments yet. Be the first to write one.