Install
Inside DeepSeek Harness, with dsh-market
dsh plugin --profile web add dshmarket
Or from the command line
dsh plugin --profile web add github:godchen520/dsh-web-remote
Installing runs third-party code with your own permissions — it can read your files, use your credentials and reach the network. Review the source first, and pin a commit (github:owner/repo#sha) when you can.
Screenshots
README
A plugin for DeepSeek Harness (DSH) that enables mobile and remote access via phone browser or WeChat.
✨ Features
| Feature | Description |
|---|---|
| 🌐 Public Access | Cloudflare Quick Tunnel — no public IP or registration needed; auto-downloads cloudflared |
| 📡 LAN Direct | HTTP + HTTPS direct connection (HTTPS with auto-generated self-signed cert, zero config) |
| 🔒 Secure Auth | Random token per start; HttpOnly Cookie; LAN can be token-free |
| ⚡ Performance | Reverse proxy with automatic gzip compression for faster large session loads |
| 📱 Sidebar Icon | Phone shortcut button persists in the bottom-left corner |
| 🔗 Custom Public URL | Set your own public URL (e.g. ngrok); edit/clear from the panel |
| 🔌 Custom Port | Change the LAN HTTPS port with occupancy detection |
| 🤖 WeChat Bot | iLink protocol direct connection to WeChat; AI chat, session control, model switching |
| 💬 Feishu Bot | WebSocket long connection; command control, monitor notifications |
| ✈️ Telegram Bot | Long polling; HTTP proxy support, command control, monitor push |
| 👁️ Session Monitor | /monitor — get notified on your bound channel when the agent finishes |
| 🩺 Channel Health | Per-channel monitoring; auto-stops after 3 consecutive failures, with one-click reconnect |
🚀 Quick Start
3 steps:
# 1. Install plugin (run in DSH profile directory)
cd $DSH_HOME/profiles/web
pnpm add github:godchen520/dsh-web-remote
# 2. Register bundle (edit package.json)
# Add "dsh-web-remote" to the "dsh.profile.bundles" array
# 3. Restart DSH
dsh web
A 📱 icon appears in the bottom-left corner → click to open the remote panel.
📸 Screenshots
Sidebar button (bottom-left corner):

Remote Panel (Public / LAN switch, copy link, QR code, start/stop):

📋 Installation
Option 1: GitHub Install (Recommended)
cd $DSH_HOME/profiles/web
pnpm add github:godchen520/dsh-web-remote
Add "dsh-web-remote" to dsh.profile.bundles in package.json, then restart DSH.
Use
--config.minimumReleaseAge=0if pnpm 11 blocks new packages.
Option 2: Manual Patch
Place the package in profile's node_modules, then add to cordis.patch.yml:
- insert:
- id: web-remote
name: 'dsh-web-remote'
Bundle install requires restart; cordis.patch.yml supports HMR hot-reload.
⚙️ Configuration
All optional. Override in cordis.patch.yml:
| Option | Default | Description |
|---|---|---|
targetPort |
3080 |
DSH's own port |
httpPortStart |
3081 |
LAN HTTP start port (auto-skips occupied) |
httpsPortStart |
3082 |
LAN HTTPS start port |
qqPortStart |
3001 |
QQ OneBot bridge start port |
cloudflaredPath |
'' |
Specify cloudflared path; empty = auto-detect / auto-download |
pfxPath |
'' |
PFX certificate; empty = auto-generate self-signed |
pfxPass |
'' |
PFX password |
toolsDir |
'' |
Tool & cert cache directory; empty = $DSH_HOME/tools |
autoStart |
true |
Auto-start on plugin load |
lanOpen |
true |
LAN token-free mode (private network bypass) |
📱 Usage
- After start, a 📱 icon appears in the bottom-left corner
- Click the icon → panel shows status and links
- Open the link in your phone browser
Public: https://xxx.trycloudflare.com/?token=...
LAN: https://192.168.x.x:3082 (same Wi-Fi; token-free by default)
🤖 WeChat Bot
Control DSH directly from WeChat:
Remote Control Commands:
/link— Get public link (auto-starts if stopped)/stop— Stop remote service/monitor— Toggle session monitor (notify when agent finishes)
Session Management:
/sessions— List all sessions/select N— Select session N/session— Show selected session name/history— Show session's recent output
Model Switching:
/model— Show current model/switch-model— List and switch models/effort N— Set reasoning effort
Chat:
- Send content directly → auto-sends to selected session with result
- Shows prompt to select a session when none is selected
💬 Feishu Bot
Control DSH directly from Feishu (Lark):
/link— Get public link/stop— Stop remote service/monitor— Toggle session monitor/help— Show command list
Setup: DSH Web panel → Bot tab → Feishu, fill in App ID and App Secret, then bind.
✈️ Telegram Bot
Control DSH directly from Telegram:
/link— Get public link/stop— Stop remote service/monitor— Toggle session monitor/help— Show command list
Setup: DSH Web panel → Bot tab → Telegram, fill in the Bot Token, then bind.
Proxy: If the Telegram API is unreachable from your network, configure an HTTP proxy in the panel.
🩺 Channel Health Monitoring
WeChat / Feishu / Telegram are monitored independently:
- 3 consecutive send failures → that channel stops automatically and raises an alert
- The remote icon shows a red dot
- A disconnect page offers a one-click reconnect button
🔧 Compatibility
| DSH version | Status |
|---|---|
| 0.2.x (tested on 0.2.0-rc.2) | ✅ Supported |
| 0.1.2-rc.1 ~ 0.1.x | ✅ Supported |
| < 0.1.2-rc.1 | ❌ Not supported (session.events was still a property back then; no snapshotEvents()) |
This plugin imports no @deepseek-ai/* package — every host capability (webServer, subprocess, agents, sessions, sessionQuery, …) comes from cordis service injection. So a DSH change to package exports (e.g. 0.2.x removing settingsNamespace / installSettingsSection from dsh-settings) cannot affect it.
Only the service interfaces themselves need adapting: currently session.snapshotEvents() (the 0.1.2+ form).
❓ FAQ
Q: Public link shows "not secure"? A: Expected for self-signed HTTPS certs. Choose "Continue anyway" in your phone browser. Edge may need "Enhanced Security" turned off.
Q: Link changes after DSH restart? A: Public tunnel generates a new address each restart — this is normal. WeChat-bound tokens auto-restore.
Q: cloudflared download fails?
A: First start needs internet to download cloudflared (~10MB). Afterwards it's cached. You can also manually place it in toolsDir.
Q: WeChat disconnects after scanning?
A: After DSH restart, WeChat auto-reconnects (token is persisted). If still disconnected, re-send /link to rebind.
📝 Changelog
See CHANGELOG.md for version history.
🤝 Contributing
See CONTRIBUTING.md for development and submission guidelines.
📄 License
Comments
Comments live in GitHub Discussions. Sign in with GitHub to post or react.