Preface¶
DeepSeek Harness (referred to as dsh for short) is an open-source agent runtime developed by DeepSeek. The official repository states its core philosophy as “Everything is a plugin”: models, tools, sessions, sandboxes, and UIs can all be replaced at the configuration layer without modifying the core source code. In actual use, however, many people encounter another common issue: when an agent runs on a local terminal or web interface, the user is often not in front of their computer. They need to approve tool calls, select options for interactive prompts, or return to the browser to modify a single line of configuration. Instead, WeChat, Feishu, and Telegram on mobile phones are the truly frequently used entry points.
The community plugin dsh-im-gateway was created to solve this problem: it attaches an aggregated IM gateway to the dsh process, normalizes inbound messages into agent sessions, and pushes replies, approval requests, and interactive questions back to the chat software. Maintained by zhuiyueya, it is implemented in TypeScript under the MIT license, with the current npm version being 0.1.0. It is categorized under “Sessions and Messaging” in the community plugin directory. As of August 17, 2026, the GitHub repository has 21 stars. Please note that the DSH Plugin Repository is an independent community site and has no official affiliation with DeepSeek / FunFinder. Do not treat it as an official app store.
Below is an introduction to what this plugin is, its installation commands, and how to use it after connecting, based on the content verified from the directory page, GitHub README, and source code.
What It Is¶
dsh-im-gateway is a standard dsh.bundle plugin. After installation, it will insert the line im-gateway into the current profile and register an “IM Gateway” panel in the settings page of the Web GUI. The client platform declared in package.json is web, meaning it is primarily attached to the web configuration rather than being a standalone chat client.
The problems it solves can be summarized in three points:
1. Users can drive the same dsh agent by sending messages in chat software such as WeChat, Feishu, Telegram, Discord, and QQ.
2. Different chat windows correspond to different sessions by default. You can also use commands to switch workspaces, continue old sessions, or bind to existing live sessions on the local machine.
3. When the agent requests tool approval or calls ask_user_question, the questions can be synchronized to the IM; you can reply directly in the chat without staring at the browser.
The repository address is zhuiyueya/dsh-im-gateway. There are other IM plugins with similar names in the community, so please confirm this GitHub path when installing to avoid confusion.
Core Features¶
Based on the README and the description in src/index.ts, the implemented capabilities on the gateway side are roughly as follows.
Per-chat session. The default sessionMode is per-chat: one chat window corresponds to one agent session. Speaking in a group chat will drive the agent, and replies will be pushed back in real time. You can also switch to bound mode, using /bind to bind an IM chat to an existing session on the local machine. The chat will attempt to restore the last bound session after restarting.
Remote approval. When the agent reaches a tool call that requires user approval, the gateway pushes the request to the chat. Reply with “approve / reject” (also recognizes yes / no / agree) to proceed. If no response is received within the timeout period, the system will fall back to the local approval system; the default timeout in the README is 120 seconds, corresponding to the configuration item approvalTimeoutSecs. Approval responses will verify session ownership, and not any message will be allowed to pass.
Interactive questions. When the agent calls ask_user_question, the structured questions on the Web GUI will be synchronized to all IM chats bound to that session. Both the Web and IM can answer, the first valid answer will take effect, and other channels will receive a notification that the question has been answered. For single-choice questions, you can reply with the number or label; for multiple-choice questions, separate answers with commas or顿号 (pause marks). For multiple questions, use the format Question number: Answer on separate lines. The waiting window on the IM side is controlled by questionTimeoutSecs, which defaults to 600 seconds in the README; you can still continue answering on the Web after the timeout.
Mobile input merging and long reply sharding. Messages ending with .. indicate that there is more content to follow, and messages ending with !! will be submitted immediately. Plain text messages have a 5-second merging window (mergeTimeoutSecs). Replies will be split according to the word count limit of each channel, preferentially breaking at line breaks or periods, and will include a (i/n) serial number.
Visual connection. Open the dsh Web GUI (the default address in the README is http://localhost:3080) → Settings → “IM Gateway”. For WeChat / WhatsApp, you can click “Connect (Scan QR Code)” to bring up the QR code; for Feishu, Telegram, QQ Bot, Discord, Slack, etc., fill in the token or app credentials and save the connection. You do not need to restart the channel itself after connecting; you only need to restart dsh once after installing the plugin. The login state will be saved to disk, and configured channels will attempt to automatically reconnect after restarting.
Media. The README states that the WeChat channel supports images, voice (converted to text on the server), files, and videos. The agent can call im_send_file to send files in the workspace to the current chat.
Access control. The default value of the allowAllUsers Schema in the source code is true, and the comment indicates that it is suitable for individuals or small teams out of the box. When access control is needed, change it to false, then use allowedUserIds to write a whitelist by channel (or * for global). Users not on the list will receive an unauthorized prompt, and the settings panel will record “a user requested access”, allowing the administrator to approve it without manually looking up user IDs.
Supported Channels¶
Both the directory page and package.json list “20+ chat platforms”. The GitHub README provides a status table, and the fully usable (send and receive) channels include:
- Telegram (Bot API long polling, requires @BotFather token)
- Discord (Gateway WebSocket)
- Slack (Socket Mode, requires xoxb- and xapp- tokens)
- Feishu / Lark (official SDK long connection, App ID + Secret)
- WeChat (iLink QR code login; the README recommends using a dedicated secondary account)
- QQ Bot (official WebSocket, AppID + Secret)
- LINE, Matrix, Mattermost, IRC, Twitch
- Signal (depends on the local signal-cli)
- Nextcloud Talk, Synology Chat, Zalo
- iMessage (macOS, depends on imsg / osascript)
There are two other categories that should not be confused with the above:
- Dynamic dependencies: WhatsApp requires additional installation of @whiskeysockets/baileys before scanning the QR code; Nostr requires @noble/curves.
- Experimental or skeleton: Teams, Google Chat, and Tlon / Yuanbao / Voice. The README states that you should read the source code before enabling these, and some of them require public network addresses or dedicated infrastructure.
WeChat uses the Tencent iLink Bot protocol. The security note in the README states: only private chats, one poller per account, and a dedicated secondary account is recommended; by using this feature, you agree to the relevant WeChat terms of service. This is not an unofficial protocol wrapper for the web version of WeChat, but you should still treat the account and dsh process permissions as sensitive resources.
Installation and Activation¶
The plugin runs with the permissions of the current dsh process and may execute code during installation. Please review the repository and license before installing; for production environments, it is recommended to pin the commit instead of following the main branch continuously.
The installation command given on the community directory page is:
dsh plugin add github:zhuiyueya/dsh-im-gateway
For reproducible installations, append the commit hash to the path as written on the directory page:
dsh plugin add github:zhuiyueya/dsh-im-gateway#<commit>
The recommended installation method for the Web GUI in the GitHub README includes --profile web, and the plugin has been published to npm:
dsh plugin --profile web add dsh-im-gateway
You can also install directly from the repository:
dsh plugin --profile web add https://github.com/zhuiyueya/dsh-im-gateway.git
For local development or pre-building:
git clone --depth 1 https://github.com/zhuiyueya/dsh-im-gateway.git
cd dsh-im-gateway
npm install && npm run build
dsh plugin --profile web add "$(pwd)"
After installation, restart the dsh web service once. Then open the “IM Gateway” in the settings page and scan the QR code or fill in the credentials according to the channel. The “Disconnect” button on the panel only temporarily disables the connection, and it will restore according to the saved configuration after restarting; “Delete Configuration” will clear the credentials.
Credentials can also be written in the im-gateway configuration section of ~/.dsh/profiles/web/cordis.patch.yml, or via environment variables. The common variables listed in the README include DSH_TELEGRAM_TOKEN, DSH_DISCORD_TOKEN, DSH_FEISHU_APP_ID / DSH_FEISHU_APP_SECRET, DSH_QQ_APP_ID / DSH_QQ_APP_SECRET, etc. WeChat and WhatsApp are enabled via QR code scanning and do not rely on these token environment variables.
A general configuration example (extracted from the README, the default values shall prevail based on the source code Schema):
- id: im-gateway
config:
sessionMode: per-chat
cwd: /path/to/workspace
allowAllUsers: true
allowedUserIds:
telegram: ['123456789']
'*': ['u-common']
mergeTimeoutSecs: 5
approvalTimeoutSecs: 120
questionTimeoutSecs: 600
summaryOnTurnEnd: true
cwd is the agent working directory. If provider / model are not specified, they will follow the current dsh settings; the default values in the source code are deepseek-official and deepseek-v4-flash respectively. The state directory defaults to $DSH_HOME/dsh-im-gateway (or ~/.dsh/dsh-im-gateway if DSH_HOME is not set).
Typical Usage¶
After connecting the channel, send a message to the bot in the corresponding chat. Commands start with /, and ordinary text will be handed over to the agent.
/help
/status
Hello, help me check the current workspace
The commands in the README are as follows:
| Command | Function |
|---|---|
/help |
Show help |
/status |
Current session ID, workspace, pending approval status |
/new or /clear |
Start a new session in per-chat mode |
/workspaces |
List workspaces |
/workspace <path> |
Switch workspace, takes effect for subsequent /new commands |
/sessions [all\|path] |
List sessions |
/continue <session id> |
Continue an existing session, can cross channels and workspaces |
/bind |
Bind to a local live session in bound mode |
/unbind |
Unbind |
/channels |
Connection status of each channel |
Approve / Reject |
Respond to pending approval requests |
For long input content, you can send it in multiple parts, ending the last one with !!; use .. in the middle to indicate that you have not finished speaking.
Applicable Scenarios and Notes¶
This plugin is suitable for scenarios where: the user often leaves their computer but wants to monitor the agent using the chat software they already use; or the same workspace needs to be switched between WeChat private chats, Feishu groups, and Telegram without writing a separate bot for each platform. Remote approval and interactive questions are suitable for situations where tool calls are frequent and you cannot click “Allow” locally all the time.
There are several important points you must read before using.
First, this is a third-party community plugin, not an official DeepSeek component. It runs with the permissions of the current dsh process, and can access workspace files, configured model keys, and the IM tokens you have filled in. Before installing, you should read the repository source code and the MIT license, and it is recommended to test in a separate DSH_HOME directory for sensitive environments.
Second, do not allow multiple dsh processes to share the same DSH_HOME. The README clearly states that concurrent restoration of the same session will generate duplicate seq values and damage the history; the gateway will reject the second instance. Use an independent directory for testing, for example DSH_HOME=/tmp/dsh-test-8788 dsh web.
Third, please use a dedicated secondary account for WeChat, do not scan the QR code with your regular personal account. WhatsApp, Signal, and iMessage each have their own local dependencies or system restrictions. Do not use experimental channels as production entry points directly.
Fourth, the star count and recent push time on the directory page may lag behind GitHub. The channel list, commands, and configurations in this article are based on the GitHub README, package.json, and src/index.ts opened on August 17, 2026.
Summary¶
dsh-im-gateway extends dsh sessions from the web interface to commonly used IM apps: unified routing, remote approval, interactive questions, and QR code connection for WeChat, all of which are covered in the repository documentation. The installation entry shall be subject to the community directory:
dsh plugin add github:zhuiyueya/dsh-im-gateway
Community Directory Page: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-im-gateway/
GitHub Repository: https://github.com/zhuiyueya/dsh-im-gateway
Official DeepSeek Harness Repository: https://github.com/deepseek-ai/deepseek-harness