Webhook notifications for dsh sessions: a POST when an approval is requested or a turn ends, to ntfy, Bark, a Slack/DingTalk/WeCom bot URL, or any HTTPS endpoint.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:chenweigao/dsh-perch-notify
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 — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
This plugin publishes its README in Chinese only.
English | 中文在后
Webhook notifications for DeepSeek Harness (dsh) sessions: get a POST when an approval is requested or a turn ends. Works with any profile that runs sessions (web, tui, acp, sdk, your own).
Use it with ntfy.sh, Bark, a Slack/DingTalk/WeCom bot URL, or any HTTPS endpoint that accepts a POST.
Install
dsh plugin --profile web add github:chenweigao/dsh-perch-notify
The package is plain JavaScript with no build step, so a git install needs no prepare script and no pnpm build allowlist.
Configure
Set the destination in the environment before launching dsh:
export DSH_NOTIFY_URL="https://ntfy.sh/my-topic" # where notifications go
export DSH_NOTIFY_FORMAT="ntfy" # json (default) | ntfy | bark
export DSH_NOTIFY_EVENTS="turn/end,approval/asked" # optional; this is the default
dsh web
Or pin the same values in your profile's cordis.patch.yml (patch rows replace whole config values, so restate what you keep):
- id: perch-notify
name: dsh-perch-notify
config:
url: https://ntfy.sh/my-topic
format: ntfy
events: ['turn/end', 'approval/asked']
timeoutMs: 8000
With no url the plugin loads inert and sends nothing.
What it sends
The plugin observes the session event log (session/event) and forwards lifecycle facts only — never prompts, replies, tool arguments, or file contents.
json format (default) posts:
{
"event": "turn/end",
"sessionId": "3d60430f-…",
"time": "2026-09-21T13:29:56.155Z",
"text": "dsh 轮次结束:3d60430f · completed",
"detail": { "turn": 1, "reason": "completed" }
}
An approval request arrives as {"event": "approval/asked", …, "detail": {"toolName": "bash", "reason": "…"}}.
ntfy format posts the text with Title/Tags headers so phones ring; bark format posts Bark's {title, body} shape.
Delivery failures are logged to the dsh console and never block or retry the agent.
Privacy
One outbound POST per matching event to your own endpoint, off by default without a URL. No other network calls, no telemetry, no storage outside dsh's own session log.
Origin
Built by the author of Perch, a native macOS workspace for remote agents (including dsh over ACP). If you want approvals and turn completion on your Mac desktop instead of a webhook, that is what Perch does.
中文
dsh 会话的 webhook 通知插件:审批等待、轮次结束时向你自己的地址发 POST。支持 ntfy / Bark / 任意 JSON 接收端,任何跑会话的 profile(web、tui、acp、sdk)都能用。
dsh plugin --profile web add github:chenweigao/dsh-perch-notify
export DSH_NOTIFY_URL="https://ntfy.sh/my-topic"
export DSH_NOTIFY_FORMAT="ntfy"
dsh web
纯 JavaScript、无构建步骤,git 安装不需要 pnpm allowlist。插件只转发生命周期事实(哪类事件、哪个会话、哪个工具要审批),不发送提示词、回复、工具参数或文件内容;未配置 URL 时完全不动作。
由 Perch 的作者构建——如果你想在 Mac 原生界面里直接处理审批和完成通知,而不是走 webhook,那是 Perch 干的事。
License
MIT
Links
More in this category
xmanrui/dsh-im★ 3118
Connect IM bots to DeepSeek Harness via QR codes or bot credentials (9 channels: Feishu, WeChat, DingTalk, WeCom, QQ, Slack, Telegram, Discord, and WhatsApp).
shaobeichen/dsh-pocket★ 2685
Remote phone access to the DSH Web UI: scan a QR code for LAN or public (cloudflared tunnel) access with real-time sync, a mobile-adaptive layout, and a settings tab.
OpenPetsHQ/openpets#dsh★ 1373
Bridges DeepSeek Harness lifecycle status, errors, and approval requests to a locally running OpenPets desktop companion.
c1overzz/dsh-bili-scroll★ 1150
Let your DSH agent browse Bilibili on its own, read subtitles, write a daily digest, and @ you when it finds something worth your attention.
inclusionAI/Avernet#deepseek-harness-channel-bcn★ 599
Connects DeepSeek Harness to Avernet's Bot Collaboration Network over WebSocket V2, with automatic onboarding, isolated agent sessions, tool-call events, and multi-bot routing tools.
zaofan-make/dsh-qqbot★ 213
QQ official bot channel for DeepSeek Harness (feature-rich fork of tencent-connect/dsh-qqbot): group and private chat with the full agent, sticker library with auto-tagging and AI meme replies, group management (join approval and mute), botplay interactive card events with paginated catalogs, user extension registry (custom slash commands and QQ tools), scheduled wakeups, remote approvals over QQ, and a floating dock web UI.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.