DeepSeek Harness 插件

dsh-notification-nishit13

Desktop + webhook notifications when your DeepSeek Harness agent finishes a turn, hits an error, or needs approval.(英文原文)

跳到安装方式

来源信息

GitHub 仓库
nishit130/dsh-notification
最近更新
2026年8月21日
分类
自动化与任务
GitHub stars
1
载体类型
plugin
目录证据
上游声明已找到 dsh.bundle
证据路径
package.json#dsh.bundle
核对版本
0.1.0-rc.8
上游核对日期
2026-08-21

该证据由上游目录提供。本站没有安装、运行或安全审核这个插件。

安装

默认先复制一段 Prompt,让 Agent 读 GitHub 仓库和源码;需要自己装时再切到命令。

复制这段 Prompt,发给 DSH、Codex 或其他 Agent,让它先读 GitHub 仓库和源码。

请先不要安装或执行任何命令。阅读这个插件的 GitHub 仓库、README 和关键源码,然后用清楚、直接的方式回答以下问题,帮助我判断它是否适合我的需求:

1. 这个插件是什么,解决什么问题;
2. 适合哪些用户和典型使用场景;
3. 安装后如何使用,并给出一个最小使用示例;
4. 有哪些已知限制,以及隐私、安全、兼容性或维护风险;
5. 给出“推荐 / 有条件推荐 / 不推荐”的明确建议和理由。

请区分仓库明确说明、根据源码推断和未知信息。证据不足时请明确说明,不要猜测或照抄 README。

GitHub:https://github.com/nishit130/dsh-notification
插件名:dsh-notification-nishit13
作者:nishit130

检查来源文件

安装前先看这个插件目录里的 README 和其他文件。

文件资源管理器3 个文件
README.md来源说明 · 只读预览

dsh-notification

> Desktop, browser + webhook notifications for DeepSeek Harness > on macOS · Linux · Windows: know when your agent finishes a turn, hits an error, > or is waiting for your approval — without watching the tab.

Long agent turns are the norm: you kick off a task, switch away, and come back to find the agent finished five minutes ago — or worse, stuck on an approval prompt the whole time. dsh-notification listens to the harness's own lifecycle events and pings you the moment your attention is needed.

What it does

EventTriggerDefault
Agent finishedagent/status flips running → idle, and the turn ran ≥ minTurnDurationMson
Agent erroragent/error (a step or turn errored)on
Approval neededapproval/request waterfall (observe-only; always delegates with next())on

Each event can go to:

  • Desktop notification — zero dependencies: osascript (macOS), notify-send (Linux),

PowerShell toast (Windows).

  • Webhook — a JSON POST with a Slack-compatible text field, so a Slack/Discord/generic

incoming-webhook URL works out of the box.

Install

dsh plugin --profile web add dsh-notification
# or straight from git:
dsh plugin --profile web add github:nishit130/dsh-notification

The package ships plain ESM JavaScript — no build step, so a git install needs no allowBuilds entry.

Where notifications appear

Three channels, three places:

ChannelFires onBest for
Desktop (desktop)the machine running the dsh serverdsh web on your own machine
Browser (browser)the machine viewing the Web UIa remote server, or any Web UI use
Webhook (webhookUrl)wherever the URL pointsphones, Slack, unattended runs

Browser notifications use the standard Notification API: the Web UI asks for permission on your first click or keypress, and by default popups appear only while the tab is hidden — a visible tab already has your attention (set browserOnlyWhenHidden: false to change that).

Running everything on one machine with the tab hidden? You'd get both a desktop and a browser popup for the same event — turn one channel off (desktop: false or browser: false) if the pair bothers you.

Configuration

Override the row in your profile's cordis.patch.yml (or via the Settings UI):

- insert:
    - id: notify
      name: dsh-notification
      config:
        minTurnDurationMs: 10000        # only notify for turns ≥ 10s
        webhookUrl: 'https://hooks.slack.com/services/XXX/YYY/ZZZ'
        notifyOnApproval: true
        desktop: true
        title: 'DSH'
FieldTypeDefaultMeaning
notifyOnIdlebooleantrueNotify when a turn finishes
notifyOnErrorbooleantrueNotify on agent/error
notifyOnApprovalbooleantrueNotify when a tool call awaits approval
minTurnDurationMsnumber5000Skip notifications for quick turns
desktopbooleantrueNative desktop notification on the server host
browserbooleantrueBrowser Notification popups in the Web UI
browserOnlyWhenHiddenbooleantrueSuppress browser popups while the tab is visible
webhookUrlstring''Optional POST target (Slack-compatible payload)
titlestring'DeepSeek Harness'Desktop notification title

Webhook payload

{
  "text": "Agent finished — done in 2m 14s",
  "summary": "Agent finished",
  "body": "done in 2m 14s",
  "level": "info",
  "ts": "2026-08-21T12:34:56.000Z"
}

Design notes

  • Everything registered through ctx is an effect — the listeners are removed automatically

on unload/hot-reload; there is no manual cleanup path (Cordis revertible effects).

  • approval/request is a waterfall. This plugin only observes it, so its listener always

calls next() — returning without it would claim the decision and swallow the real answerers.

  • Never break the loop. Desktop spawns are detached and fire-and-forget; webhook failures are

swallowed. A notifier must never surface an error into the agent's turn.

Local development

Copy dev.patch.example.yml to dev.patch.yml (gitignored), point it at your checkout's absolute path, then from a harness source checkout:

pnpm dsh web --patch ./path/to/dsh-notification/dev.patch.yml

Edits to index.js hot-reload without a restart. Run the tests with npm test.

License

MIT