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 goal task completes/blocks.
  • Automatically push a summary of the agent’s reply for each completed turn.
  • Provide the wechat_notify tool for agents to proactively send progress.
  • Support multiple webhook keys, sending a single notification to all configured groups simultaneously.
  • Support mentionUserid to @-mention specific members in notifications.
  • Provide a dsh settings → WeChat Work Notification panel 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 peerDependencies include: @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 key from 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:

  1. Paste webhook keys; multiple can be entered to notify multiple groups simultaneously.
  2. Click “Send Test Message” to verify.
  3. 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 goal for 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.json generated by the settings panel has the highest priority. If changes to cordis.yml or environment variables did not take effect, check if <DSH_HOME>/wecom-notify/config.json still exists.
  • WeChat Work webhook messages have byte limits. This plugin has a single message limit of 4096 bytes, defaulting to 3800.
  • npm install may 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.