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.

Serverchan Notify — DSH Plugin for DeepSeek Harness
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins

dsh-serverchan-notify

Serverchan Notify

DeepSeek Harness plugin: push a ServerChan3 (Server酱) notification whenever an agent turn finishes an answer — codex Stop-hook parity

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

npx -y @deepseek-ai/dsh plugin --profile web add dsh-serverchan-notify@1.1.0
READMECompatibilityVersions

Compatibility and provenance

Serverchan Notify is published as dsh-serverchan-notify and currently resolves to version 1.1.0. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
any
Release source
npm
Registry updated
9/20/2026

Versions

1.1.0stable
9/16/2026
1.0.3stable
9/11/2026
1.0.2stable
8/21/2026
Show 2 more versionsCollapse versions
1.0.1stable
8/21/2026
1.0.0stable
8/20/2026

Related plugins

Loading related plugins…

Latest
1.1.0
DSH
*
HMR
Process restart
Tree shaking
Declares sideEffects: false
Unpacked size
59.8 kB
Files
13
Surface
any
License
MIT
Source
npm
GitHub
★ 0
Weekly downloads
208
Security scan
✓ v1.1.0 scan passed
Last push
9/16/2026
View source ↗Project homepage ↗
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-baseIm@xmanrui/dsh-im把十一种 IM 渠道和公网 AI Office 接入本机 DeepSeek Harness。 Connect eleven IM channels and a public AI Office to a local DeepSeek Harness.Pocketdsh-pocketPut DeepSeek Harness in your pocket: one package, one settings page, and scan a QR code on your phone to access DSH on your computer in sync (LAN + public network, real-time screen mirroring).DSCODE@toddzheng024/dscode-bundleA complete DeepSeek coding agent with persistent shell, Ultra collaboration and automatic permission review.

README

🔔 dsh-serverchan-notify

A DeepSeek Harness (DSH) plugin that pushes a Server酱3 (ServerChan³) notification to your WeChat every time an agent turn finishes an answer — and every time the agent asks you a question. Codex Stop-hook parity for DSH, plus the case codex never covered: an agent blocked on you.

English · 简体中文

What it does

  • Subscribes to the DSH session event stream (ctx.on("session/event", …)).
  • On every turn/end (completed / error / blocked / max-tokens / aborted), pushes one Markdown notification to Server酱3 → your WeChat. Each notification carries: conversation title, model, project directory, git branch, turn status, finish time, session id, and the latest reply excerpt (truncated at 16 000 chars).
  • Also pushes when the agent asks you a question. An ask_user_question tool call means the agent is blocked until a human answers — the worst case to miss — so it gets a notification of its own, carrying every question, its options, and their descriptions. Disable with notifyQuestions: false.
  • Fire-and-forget: a failed push only logs a warning and never blocks or interrupts the agent loop.
  • Skips subagent sessions by default (no spam from internal subtasks).
codex Stop hookthis plugin
Triggerone per finished turnone per finished turn (turn/end), plus one per ask_user_question call
Key sourceenv / ~/.codex/secrets/…env / config / $DSH_HOME/secrets/… (see SendKey resolution)
Failure handlingnever blocks the turnnever blocks the turn
Scopeglobal hooks.jsonglobal $DSH_HOME/cordis.patch.yml (or per profile)

🔐 This repository contains no SendKey. Keys come from the environment, a file, or plugin config — never from source code.

Requirements

  • DeepSeek Harness (DSH) — verified against 0.1.1-rc.2 and 0.1.2-rc.1 (@deepseek-ai/cordis ^4.0.1). The plugin reads the session log through whichever accessor the running Harness exposes, so both API lines are supported.
  • Node.js ≥ 18
  • A Server酱3 SendKey (free account at https://sct.ftqq.com/)

Quick start

1. Get a SendKey

Log in at https://sct.ftqq.com/, open the SendKey tab, and copy your key — it looks like sctp<number>txxxx…. The plugin auto-derives your dedicated push domain (https://<number>.push.ft07.com/send/<key>.send); legacy keys without a channel number use https://sctapi.ftqq.com/<key>.send.

2. Save the key (recommended)

mkdir -p ~/.dsh/secrets
echo '你的SendKey' > ~/.dsh/secrets/serverchan_sendkey
chmod 600 ~/.dsh/secrets/serverchan_sendkey

3. Register the plugin

Edit your DSH patch layer and restart the harness:

# global — all profiles (like codex's global hooks.json):
#   $DSH_HOME/cordis.patch.yml   (default ~/.dsh/cordis.patch.yml)
# per profile:
#   $DSH_HOME/profiles/<name>/cordis.patch.yml

- insert:
    - id: serverchan-notify
      name: 'dsh-serverchan-notify'
      config:
        sendkeyFile: '~/.dsh/secrets/serverchan_sendkey'

Plugin rows are only resolved at boot — restart the harness process after editing.

Installing the package

The package declares a dsh.bundle manifest, so npm installation is one command:

# recommended
dsh plugin --profile web add dsh-serverchan-notify

# fixed version
dsh plugin --profile web add dsh-serverchan-notify@1.0.2

# GitHub monorepo fallback
dsh plugin --profile web add 'github:nickhelion/dsh-plugins#main&path:/packages/serverchan-notify'

# local development
git clone https://github.com/nickhelion/dsh-plugins.git
dsh plugin --profile web add "$PWD/dsh-plugins/packages/serverchan-notify"

The bundled cordis.patch.yml inserts the plugin row with all-default config; override any option by addressing the row id serverchan-notify from your own patch layer.

SendKey resolution

The first non-empty value wins, in this order:

#SourceExample
1env var SERVERCHAN_SENDKEYexport SERVERCHAN_SENDKEY=sctp…
2inline config sendkeyconfig.sendkey: 'sctp…'
3env var SERVERCHAN_SENDKEY_FILE (path to a key file)export SERVERCHAN_SENDKEY_FILE=…
4config sendkeyFile (supports ~)config.sendkeyFile: '~/.dsh/secrets/…'
5default file $DSH_HOME/secrets/serverchan_sendkey~/.dsh/secrets/serverchan_sendkey

Configuration

KeyDefaultDescription
sendkey—Inline key (overridden by the SERVERCHAN_SENDKEY env var)
sendkeyFile$DSH_HOME/secrets/serverchan_sendkeyPath to a key file; ~ is expanded
reasons[completed, blocked, error, max-tokens, aborted]Which turn/end reasons trigger a push (interrupted is never pushed)
notifyQuestionstruePush when the agent calls ask_user_question and waits for you
notifySubagentsfalseAlso push subagent sessions (off by default to avoid spam)
timeoutMs8000HTTP timeout in milliseconds
maxResponseChars16000Reply excerpt / question text truncation length
disabledfalseDisable without removing the row (no key read, no subscription)

Sample notification

Turn finished:

DSH 完成:

  • 对话标题:…
  • 模型:deepseek-official / deepseek-v4-pro
  • 项目目录:/home/you/project
  • Git 分支:main
  • 回合状态:完成
  • 完成时间:2026-08-18T21:00:00.000Z
  • 会话 ID:session-12

DSH 最新回复

…the latest assistant reply…

The agent is waiting on you:

DSH 提问:

  • 对话标题:…
  • 模型:deepseek-official / deepseek-v4-pro
  • 项目目录:/home/you/project
  • Git 分支:main
  • 提问时间:2026-08-18T21:05:00.000Z
  • 会话 ID:session-12

DSH 正在等待你的回答

1. Choose Mode

Which path should I take?

  • Ship it (Recommended) — small and reversible
  • Plan first — one extra review round

2. Scope

  • README
  • Tests > 该问题可多选

Troubleshooting

SymptomFix
"未找到 Server酱 SendKey" warning at bootProvide the key via one of the 5 sources above
HTTP 403 / timeout in the logNetwork / proxy issue; the push domain is derived from the key (<n>.push.ft07.com)
No push after restartConfirm the row id is unique and the package resolves — dsh --profile web --dump-config | grep -A8 serverchan-notify
Too many pushesTurn on notifySubagents: false (default), trim reasons, or set notifyQuestions: false
Question reminder shows "无法解析本次提问内容"The model emitted malformed tool arguments; the harness still got the question — open DSH to answer
Temporarily stopdisabled: true, then restart

Development

npm install        # installs devDependencies (cordis) for the smoke test
npm test           # smoke test — stubbed fetch, no real push
REPORT=1 npm test  # smoke test + print the assembled payload
npm run test:live  # send one real test push with the configured key

Repository layout

lib/index.js      plugin entry — event subscription, message assembly, HTTP push (turn end + agent question)
test-send.mjs     standalone real push (same key resolution order as the plugin)
smoke-test.mjs    cordis in-process test with a stubbed fetch
package.json      package metadata + npm scripts
README.md         English docs
README.zh-CN.md   中文文档

Contributing

PRs are accepted in the canonical nickhelion/dsh-plugins monorepo. Two ground rules:

  1. Never commit a SendKey (or any absolute machine path) — keys flow through env / file / config only.
  2. The event listener must stay non-throwing and fire-and-forget — a notification must never affect the harness.

License

MIT