Foreword¶
DeepSeek Harness (dsh) runs coding agents locally or in self-hosted environments, with daily interactions primarily through a Web GUI. If you wish to drive the same agent directly from existing chat tools like WeChat, Feishu, Telegram, etc.—sending messages, receiving replies, remotely approving tool calls—you typically need to write a separate bot for each platform, maintain session mapping, and handle cross-platform synchronization for approvals and questions yourself.
dsh-im-gateway is a community-maintained aggregated IM gateway plugin for dsh that consolidates multi-channel access, session routing, remote approvals, and interactive questioning into a single plugin. It can be installed via the dsh settings page or command line and then configured.
What This Is¶
dsh-im-gateway (npm package name: dsh-im-gateway) is maintained by zhuiyueya and categorized as a “Network Tool” in the SkillHub Plugin Directory. The current version is 0.3.3, licensed under MIT, with approximately 34 stars on GitHub.
In one sentence: Connects the dsh agent to 25+ chat channels including WeChat, Feishu, DingTalk, WeCom, QQ, Telegram, Discord, Slack, etc., providing unified sessions, remote approvals, interactive questioning, and QR code access.
Core Features¶
Multi-Channel Access¶
The plugin implements a ChannelAdapter for each IM platform. Inbound messages are normalized and passed to the gateway core ImGateway, while outbound messages are sliced and sent according to the channel. The full list of supported channels in the README includes Telegram, Discord, Slack, Feishu/Lark, DingTalk, WeCom, WeChat (via Tencent iLink QR code), QQ Bot, LINE, Matrix, Mattermost, IRC, Twitch, Signal, Nextcloud Talk, Synology Chat, Zalo, iMessage (macOS), and more. WhatsApp and Nostr require additional SDK installation; Teams and Google Chat are marked as experimental.
Access methods vary by platform: WeChat/WhatsApp support device QR code scanning; Feishu, QQ, DingTalk, and WeCom allow QR code access for bots or manual credential entry; Telegram, Discord, Slack, etc., use card-based instructions to fill in Bot tokens. Connection status is uniformly displayed in the settings page as Connected / Disconnected / Connecting / Error; saved configurations automatically restore after restarting dsh.
IM Commands and Session Routing¶
In connected chats, messages starting with / are treated as commands, while plain text is sent to the agent. Common commands are as follows:
| Command | Description |
|---|---|
/help |
View help |
/status |
Query current session (session ID, workspace, pending approvals) |
/new / /clear |
Start a completely new session (per-chat mode) |
/workspaces |
List all workspaces |
/workspace <path> |
Switch workspace |
/sessions [all\|path] |
List sessions |
/continue <session-id> |
Resume an existing session (can cross channels or workspaces) |
/bind <session-id> |
Bind a local live session |
/channels |
Check connection status of each channel |
/cron list / /cron rm <id> |
Manage scheduled tasks for this chat |
Appending .. to the end of a plain message indicates more to follow, while !! submits immediately; bare text is automatically merged within a 5-second window. Long replies are sliced according to each channel’s limits, with sequence numbers (i/n).
Remote Approval and Interactive Questioning¶
When the agent requests tool approval, the request is pushed to the corresponding IM chat; replying with “approve”, “reject” (also supports yes / no / 同意) is sufficient, and responses are validated against chat and session ownership.
When the agent calls ask_user_question, the Web GUI question is synchronized to all IM chats bound to that session; both Web and IM can answer, with the first valid answer taking effect. For single-choice, you can reply with the option number or full label; for multiple-choice, use comma-separated values. The default response window is 600 seconds (configurable via questionTimeoutSecs).
Chat-Level Scheduled Reminders¶
Scheduled tasks are bound to chats (chatId) rather than sessions. Saying natural language like “remind me to drink water every day at 9 AM” in a chat allows the agent to create reminders; supports one-time, daily, or weekly repetition, with status persisted to disk and automatically restored after restart.
Access Control and File Sending¶
By default, allowAllUsers: true, ready to use out of the box; setting it to false enables channel whitelisting, where unauthorized users receive a prompt on their first message and an access request appears in the Web settings page. The agent can send workspace files to chats via im_send_file; WeChat supports images, voice-to-text, files, and videos.
Installation and Enabling¶
Install using any of the following methods. The official recommendation is via the npm registry:
dsh plugin --profile web add dsh-im-gateway
Alternatively, you can have the dsh agent execute an installation prompt, or clone/install directly from GitHub:
dsh plugin --profile web add https://github.com/zhuiyueya/dsh-im-gateway.git
For cloned installations, first run npm install && npm run build, then dsh plugin --profile web add <absolute project path>.
After installation, restart dsh web once, then open Settings → IM Gateway and follow the platform instructions to connect channels. No restart is needed after connection.
Typical Usage¶
After connecting channels, drive the agent by sending messages to the bot in the respective chat software:
/help
Hi, help me check the current workspace
Examples of querying status and switching workspaces:
/status
/workspaces
/workspace /path/to/project
/new
When tool approval is needed, reply directly in the chat:
Approve
Or
Reject
Use Cases and Notes¶
Suitable for developers already using dsh who wish to remotely drive agents from mobile phones or team IMs. WeChat is recommended to use a dedicated iLink account; WhatsApp requires additional installation of npm i @whiskeysockets/baileys; Signal depends on local signal-cli; iMessage is macOS only.
The plugin runs with the current dsh process permissions and can access the workspace and configured channel credentials. Before installation, read the GitHub source code and MIT license to confirm that the channel access methods comply with each platform’s terms of service. SkillHub is an independent community directory with no official affiliation with DeepSeek / 幻方.
Development side: npm test currently covers 106 test cases; adding new channels requires implementing six methods of ChannelAdapter in src/channels/ and registering them.
Links¶
- SkillHub Directory Page: https://www.skillhub.cn/plugins/zhuiyueya/dsh-im-gateway
- GitHub Repository: https://github.com/zhuiyueya/dsh-im-gateway
dsh-im-gateway consolidates multi-channel IM access, session routing, remote approvals, and interactive questioning into a single dsh plugin, suitable for scenarios where you need to “directly operate agents in commonly used chat software”.