Preface

When building agents in DeepSeek Harness (DSH), states such as waiting for user interaction, task completion, and task errors are often only reflected in the interface. If you want to stay informed about the current task status even when you leave the page, dsh-messager can push these events to system notifications, browser notifications, or Feishu, WeCom, Discord, DingTalk, and Telegram.

This article introduces the plugin’s capabilities, installation method, configuration entry points, and key considerations for local development and integration with third-party channels.

What Is This

dsh-messager is a DSH notification plugin maintained by ly6170. It addresses the issue of “task states requiring proactive alerts”: when a session needs interaction, a task is completed, or a task encounters an error, it pushes alerts through available channels.

DSH’s philosophy is “everything is a plugin.” dsh-messager is a community plugin and is not a built-in application in the official DeepSeek / High-Flyer app store. The directory page listed in this article is from an independent community directory.

Core Features

dsh-messager primarily provides the following capabilities:

  • Trigger conditions: session needs interaction, task completed, task error.
  • System notifications: supports OS toast.
  • Browser notifications: supports the Notification API.
  • Third-party messaging channels:
  • Feishu: interactive cards with HMAC-SHA256 signing.
  • WeCom: markdown with optional signing.
  • Discord: embed cards.
  • DingTalk: actionCard with optional signing.
  • Telegram: Bot API HTML messages.
  • Single package with dual runtime ends: the host end handles system notifications and third-party channels, while the client end handles browser notifications.
  • Settings page editing: a “Notification & Messenger” section appears in the left menu of the DSH settings page, editable with real-time effect.
  • Configuration routing: configuration goes through the plugin’s own webServer route /dsh-messager/config, not restricted by the DSH settings whitelist.
  • Configurable options: trigger toggles, channel enable/disable, verbosity, icon, deduplication cooldown, title prefix, etc.
  • Extensibility: supports extending new channels through the NotifyChannel interface.
  • Internationalization: settings sections and form texts support Chinese/English.

Installation and Enablement

The following commands need to be executed within the plugin repository. Replace <plugin-path> with the actual plugin directory. The materials do not provide a ready-to-use GitHub installation command, and it is not recommended to directly concatenate an installation address based on the plugin name alone.

  1. Build the plugin first:
pnpm install
pnpm build
  1. Install the plugin into the web profile, then start DSH:
dsh plugin --profile web add <plugin-path>
dsh web

When running from the DSH source repository, you can replace dsh with pnpm dsh:

pnpm dsh plugin --profile web add <plugin-path>
pnpm dsh web

After installing the bundle, do not start the same plugin with --patch simultaneously. Otherwise, the host end will load two copies and a duplicate settings namespace registration error will occur.

Typical Usage

After installation, you can use it in the following ways.

1. Modify configuration on the settings page

Go to the DSH settings page, and a “Notification & Messenger” section will appear in the left menu. Inside the section is a configuration form, and any changes take effect in real time.

This section does not go through the DSH settings whitelist but uses the plugin’s own webServer route:

/dsh-messager/config

2. Directly edit settings.yaml

You can also directly edit the messager section in $DSH_HOME/settings.yaml.

This is suitable for scenarios where you need to view more complete fields or want to manage configuration through files.

3. Read and write configuration via RPC

You can also use:

settings.describe
settings.mutate

to read or modify configuration on the host side.

4. Enable third-party channels

The Feishu, WeCom, Discord, DingTalk, and Telegram channels are disabled by default. You need to configure the corresponding webhook, token, chatId fields and then enable them.

The capabilities of each channel are as follows:

  • Feishu: requires configuring a bot webhook and signing secret, uses interactive cards, and performs HMAC-SHA256 signing.
  • WeCom: requires configuring a group bot webhook, optional signing, and messages are in markdown format.
  • Discord: requires configuring a webhook, uses embed cards.
  • DingTalk: requires configuring a custom bot webhook, optional signing, and uses actionCard.
  • Telegram: requires configuring a Bot Token and chatId, uses Bot API HTML messages.

5. Local development

When debugging only the host end, you can run from the root directory of the DSH repository:

pnpm dsh web --patch <plugin-path>/cordis.yml

This method is for development and debugging, loads only the host end, does not write to the profile, and only takes effect for the current startup session.

For full dual-end development, you need to install the plugin into the profile:

dsh plugin --profile web add <plugin-path>
pnpm dsh web

After executing plugin add, you need to restart pnpm dsh web.

After modifying client-side code, rebuild the client side in the plugin repository and refresh the page:

pnpm run build:client

Configuration and Limitations

The configuration priority is:

schema default values → base (the config: of the plugin entry) → user layer (Web settings page)

A few common pitfalls:

  • system.icon requires a file path, and the file must exist.
  • Browser notifications require user permission. When the plugin is first loaded and the permission is default, it will request permission once automatically. If rejected, the browser channel silently degrades while other channels remain unaffected.
  • The plugin includes rate limiting such as deduplication cooldown, completion notification debouncing, and a per-channel per-minute limit (default 20).
  • When installing from git and using pnpm >= 10, you need to add the build script package name to the allowBuilds list in the profile’s pnpm-workspace.yaml.

Suitable Scenarios and Considerations

Suitable for the following scenarios:

  • Running agents in DSH and wanting to receive status alerts even when away from the page.
  • Wanting to integrate task statuses into Feishu, WeCom, Discord, DingTalk, or Telegram.
  • Needing to extend your own notification channels and reuse DSH’s session/task status events.

Considerations:

  • The plugin runs with the privileges of the current dsh process.
  • You should inspect the source code and repository license before installation.
  • The verified materials do not include license information; please refer to the actual repository contents.
  • Do not install build artifacts from untrusted sources, especially plugins that receive sensitive configuration such as webhooks, tokens, and chatId.

Links