Introduction¶
In DeepSeek Harness (dsh), goal tasks often require running for a significant period. For developers, a practical requirement is: receiving notifications when a goal completes or blocks, and seeing a summary of each agent response, without needing to constantly monitor the terminal or relying entirely on the model “remembering” to call tools.
There is already dsh-wechat-notify that attempted to use third-party channels for notifications. This article introduces GuZhengSVT’s dsh-WeCom-notify: it utilizes the official WeChat Work group robot webhook, automatically pushes notifications at key dsh stages, and provides the wechat_notify tool.
What is this¶
dsh-WeCom-notify is a plugin for DeepSeek Harness (dsh). It automatically pushes notifications when a goal completes/blocks or after each turn is completed, using the WeChat Work official group robot webhook (qyapi.weixin.qq.com), and exposes the wechat_notify tool for agents to send progress updates proactively.
The plugin is maintained by GuZhengSVT and is licensed under MIT. The notification logic is event-driven, subscribing to session/event and goal/changed, and does not rely on LLM active calls; the plugin loads normally even if a webhook key is not configured, falling back to log messages.
Core Capabilities¶
- Automatically push notifications when a
goaltask completes/blocks. - Automatically push a summary of the agent’s reply for each completed turn.
- Provide the
wechat_notifytool for agents to proactively send progress. - Support multiple webhook keys, sending a single notification to all configured groups simultaneously.
- Support
mentionUseridto @-mention specific members in notifications. - Provide a
dsh settings → WeChat Work Notificationpanel where keys can be pasted and changes take effect immediately after saving. - Send via asynchronous
fetch, non-blocking the event loop. - Built-in serial queue, throttling, content deduplication, exponential backoff retry, and timeout control.
- Truncate based on UTF-8 code points to avoid splitting emoji surrogate pairs; also perform markdown escaping.
- Single message limit is 4096 bytes, defaulting to 3800; throttling defaults to 10000ms, deduplication defaults to 30000ms.
Installation and Enablement¶
Prerequisites¶
- A running environment for DeepSeek Harness (dsh). The plugin’s
peerDependenciesinclude:@deepseek-ai/cordis,@deepseek-ai/dsh-tools,@deepseek-ai/schemastery,@deepseek-ai/dsh-client-runtime,@deepseek-ai/dsh-client-ui-slots. - A WeChat Work group and a group robot webhook. After adding the group robot, copy the
keyfrom the webhook address.
Build the Plugin¶
Build the plugin first:
npm install && npm run build
The build will produce the host entry lib/index.js and the settings panel lib/client.js.
Method A: Bundle Assembly¶
If the settings panel is needed, bundle assembly is recommended. Link the plugin to the profile’s node_modules:
ln -s /绝对/路径/dsh-WeCom-notify ~/.dsh/profiles/web/node_modules/dsh-wecom-notify
Then declare dependencies and dsh.profile.bundles in package.json, adding dsh-wecom-notify.
After assembly is complete, restart dsh web. The appearance of [wechat-notify] plugin loaded in the startup logs indicates the plugin is loaded.
Method B: Patch Mounting¶
If only host-side notification functionality is needed, it can also be mounted in ~/.dsh/profiles/web/cordis.patch.yml:
- insert:
- id: wechat-notify
name: 'file:///绝对/路径/dsh-WeCom-notify/lib/index.js'
config: {}
Note: The file:// entry in Method B does not include a settings panel; the settings panel needs to be loaded via bundle assembly in Method A.
One-Click Patch Write¶
You can also use the installation script provided by the repository:
npm run install-dsh
This command builds and writes the patch configuration, defaulting to ~/.dsh/profiles/web/, which falls under Method B.
Typical Usage¶
Configuration via Settings Panel¶
Open dsh settings → WeChat Work Notification:
- Paste webhook keys; multiple can be entered to notify multiple groups simultaneously.
- Click “Send Test Message” to verify.
- Click “Save Configuration” for changes to take effect immediately.
After saving the settings panel, the configuration will be persisted to:
<DSH_HOME>/wecom-notify/config.json
The file permissions are 0600. When this file exists, the configuration inside it takes precedence; deleting this file reverts to static configuration or environment variable configuration.
Configuration Priority¶
The priority for reading configuration is as follows:
Settings Panel File > cordis.yml config > Environment Variables > Defaults
cordis.yml Static Configuration¶
You can also write in the config of cordis.patch.yml:
- insert:
- id: wechat-notify
name: 'file:///绝对/路径/dsh-WeCom-notify/lib/index.js'
config:
webhookKeys:
- '第一个群机器人 webhook key'
- '第二个群机器人 webhook key'
Optional fields include webhookUrl, mentionUserid, minIntervalMs, dedupeWindowMs, triggerOnAgentIdle, turnSummaryEnabled, maxBytes.
Environment Variables¶
If the settings panel or static configuration is not used, environment variables can also be used:
WECHAT_WEBHOOK_KEY=<你的key> node scripts/smoke.ts
WECHAT_WEBHOOK_KEYS='key1,key2' node scripts/smoke.ts
Related environment variables include WECHAT_WEBHOOK_KEY, WECHAT_WEBHOOK_KEYS, WECHAT_WEBHOOK_URL, WECHAT_MENTION_USERID, NOTIFY_MIN_INTERVAL_MS, NOTIFY_DEDUPE_WINDOW_MS, NOTIFY_TRIGGER_AGENT_IDLE, NOTIFY_TURN_SUMMARY, NOTIFY_MAX_BYTES.
Verification¶
Run tests and type checking:
npm test
npm run typecheck
If configuration is complete, you can also give dsh a task with a goal and check if the WeChat Work group receives a notification when the goal completes or blocks.
Suitable Scenarios and Notes¶
Suitable for the following scenarios:
- dsh runs a
goalfor a long time and wants to passively receive notifications when it completes/blocks. - Want to receive an agent reply summary after each turn completion.
- Need to send the same notification to multiple WeChat Work groups.
- Prefer using the WeChat Work official group robot webhook instead of a third-party relay channel.
Please note:
- The plugin runs inside the dsh process and has permissions visible to the current dsh process. Check the source code and license before installing; this plugin is licensed under
MIT. - The repository itself does not contain local paths or keys; keys are only saved in the user data directory.
- If no webhook key is configured, the plugin loads normally, but notifications fall back to log messages and are not sent to WeChat Work.
- The
file://mounting in Method B does not include a settings panel; use bundle assembly in Method A if the panel is needed. - The
config.jsongenerated by the settings panel has the highest priority. If changes tocordis.ymlor environment variables did not take effect, check if<DSH_HOME>/wecom-notify/config.jsonstill exists. - WeChat Work webhook messages have byte limits. This plugin has a single message limit of 4096 bytes, defaulting to 3800.
npm installmay fail with a 404 due to@deepseek-ai/dsh-compact; the build script can fall back to the tsdown from the DSH checkout.
Conclusion¶
dsh-WeCom-notify integrates the dsh goal status and results of each turn into the WeChat Work group robot webhook. Its core value lies in: event-driven, automatic triggering, multi-group notification, and providing a settings panel to reduce configuration costs.
Repository URL:
https://github.com/GuZhengSVT/dsh-WeCom-notify
Directory Page: Can be found in the DeepSeek Harness community directory by searching for the plugin name dsh-WeCom-notify; verified information does not provide a standalone directory URL.