A native DeepSeek Harness plugin that puts a hardened auth gate (account/password + TOTP MFA, signed session cookies, role-based access) in front of `dsh web` so you can safely expose Harness to remote / LAN browsers via a reverse proxy.
DSH integration
Native runtime
Author-claimed
Safety audit
Unaudited
Last verified
2026-09-01
License
MIT
01What can it help you accomplish?
Expose a DeepSeek Harness `dsh web` instance to remote / LAN browsers behind account + MFA auth
A login gate plus HMAC-SHA256-signed HttpOnly session cookies and role-based access, so external browsers behind a reverse proxy get full functionality without any host-native popups
Operators who self-host DeepSeek Harness and need safe remote access via reverse proxy / tunnel / Tailscale / Frp
Pick and create workspaces, and view host files, from a remote browser without host-native dialogs
An in-browser directory dialog (two-pane view + breadcrumb + new folder) and a remote file sidebar that streams host files inline
Remote DeepSeek Harness users blocked by DSH's loopback-only native directory picker and host file-open limits
Add TOTP two-factor (MFA) to DeepSeek Harness remote logins
RFC 6238 TOTP binding (Google Authenticator / 1Password / Authy), QR + manual key + otpauth URI + 10 one-time backup codes, with admin recovery
Anyone exposing DeepSeek Harness remotely who needs a second factor on top of the password gate
02How to install into DeepSeek Harness
Prerequisites
- 已安装 DeepSeek Harness 并可运行 `dsh web`(默认端口 3080);
- 已初始化 `web` profile(首次运行 `dsh web` 会自动初始化);
- 系统 PATH 中有 `pnpm`(`dsh plugin` 命令需要它来管理 profile 的插件)。
Installation steps
- 01
Install the plugin: `dsh plugin --profile web add @xgone/dsh-remote` (it auto-appends itself to `dsh.profile.bundles`)
$ dsh plugin --profile web add @xgone/dsh-remote
- 02
Restart `dsh web` — HMR is disabled on the web surface, so a restart is required for the patch to take effect
$ dsh web
- 03
Open http://127.0.0.1:3080 and create the first admin (loopback-only submit) or preseed one via the `bootstrap` config block for headless servers
Verify the integration
- 未登录时访问任意路径 → 登录页;直接调用 `/api` → 403
- `curl http://127.0.0.1:3080/auth/me` should return `{"authEnabled":true,"bootstrap":false,"authenticated":true,...}` after login
Rollback
- Remove the plugin: `dsh plugin --profile web remove @xgone/dsh-remote`, then restart `dsh web` to drop the gate
- To keep the plugin but disable auth, set `enabled: false` in `cordis.patch.yml` and restart
03DSH integration and capability boundaries
Native DeepSeek Harness plugin — installs via `dsh plugin --profile web add`, wraps DSH's webServer routes + WebSocket as an auth gate (Cordis bundle patch)
Account + MFA login gate
username / password (+ TOTP code on the second step)→signed HMAC-SHA256 HttpOnly session cookie; MFA-gated access to `/api` and WebSocket
未登录访问任何路径都得到自包含的登录页;`/api` 与 WebSocket 全部要求有效In-browser directory dialog (replaces native picker)
workspace select / create actions→**浏览器内的目录对话框**(双栏目录视图 + 面包屑 + 新建文件夹)
DSH's default native directory picker is disabled and replaced with a browse backendRemote file sidebar (/auth/file)
file path clicks from the DSH Web UI on a remote (non-loopback) browser→host file streamed into a right-side panel (Markdown / image / PDF / video inline, multi-panel)
**右侧边栏面板**中显示(`/auth/file`Role-based access (admin / user / guest)
client-request RPC envelopes (method-level)→per-method access control enforced after auth when `adminOnly` is off
closes `adminOnly` to enable the three-tier method-level permission model
04Who is it for? When not to use it?
Good for
- Operators who self-host DeepSeek Harness and need safe remote access via reverse proxy / tunnel / Tailscale / Frp
- Remote DeepSeek Harness users blocked by DSH's loopback-only native directory picker and host file-open limits
- Anyone exposing DeepSeek Harness remotely who needs a second factor on top of the password gate
Not for
- The web surface disables HMR; any config change requires restarting `dsh web` (patch hot-reload is unavailable) before it takes effect.
- `dsh web` refuses `--host 0.0.0.0`; exposing it to the internet must go through a reverse proxy (TLS termination + WebSocket forwarding), with `trustProxy: true` (on by default).
- DSH is single-tenant (one process-shared `$DSH_HOME`); the plugin cannot isolate per-user workspaces/sessions — event streams, search and tasks leak globally. For isolation, run one profile per person; on a shared instance only the role system constrains access.
05Compatibility, maintenance and safety notes
- The web surface disables HMR; any config change requires restarting `dsh web` (patch hot-reload is unavailable) before it takes effect.
- `dsh web` refuses `--host 0.0.0.0`; exposing it to the internet must go through a reverse proxy (TLS termination + WebSocket forwarding), with `trustProxy: true` (on by default).
- DSH is single-tenant (one process-shared `$DSH_HOME`); the plugin cannot isolate per-user workspaces/sessions — event streams, search and tasks leak globally. For isolation, run one profile per person; on a shared instance only the role system constrains access.
- The remote file sidebar only shows files inside the DSH home dir and the dsh process working dir by default; paths outside prompt `outside-roots` until an admin adds them via Settings → allowed directories (takes effect immediately).
MIT · last push 2026-08-30 · no tagged release (latest_release: none); README documents fixes through v0.2.6+
06Frequently asked questions
How do I install dsh-remote for DeepSeek Harness?
Run `dsh plugin --profile web add @xgone/dsh-remote`, then restart `dsh web` (HMR is disabled, so a restart is required). It auto-appends itself to `dsh.profile.bundles`. Open http://127.0.0.1:3080 to create the first admin.
Does dsh-remote replace the official `dsh web`, or coexist with it?
It wraps DSH's own `webServer` routes and WebSocket upgrade — it does not replace `dsh web`. After auth passes it normalizes Host/Origin to loopback so DSH's trust fence releases privileged methods (`host.pickDirectory`, `settings.*`, `credentials.*`) for external browsers.
How do I expose DeepSeek Harness to the internet safely?
`dsh web` refuses `--host 0.0.0.0`, so put it behind a reverse proxy (nginx / ssh tunnel / Tailscale / Frp) doing TLS termination + WebSocket forwarding, then enable `trustProxy: true` (on by default). Set `session.secure: true` for HTTPS.
Can multiple users share one instance with isolated workspaces?
No. DSH is single-tenant (one process-shared `$DSH_HOME`), so the plugin cannot isolate per-user workspaces/sessions — event streams, search and tasks leak globally. For isolation, run one profile per person (`dsh --profile alice --port 3081`); on a shared instance, use the admin/user/guest role system.
07Related DSH workflows
open-design
by nexu-io
🎨 Best DeepSeek Harness Design Plugin. The open-source Claude Design alternative. 🖥️ Local-first desktop app. 🖼️ Your coding agent becomes the design engine: prototypes, landing pages, dashboards, slides, images & video — real files, HTML/PDF/PPTX/MP4 export. 🤖 Claude Code / Codex / Cursor / DeepSeek Harness / OpenCode & 20+ CLIs via BYOK.
picgo
by molunerfinn
:rocket: The Ultimate Image Uploader for Efficient Creators. Supports Obsidian, Typora, VS Code etc. and 60+ image hosting services (S3, GitHub, Cloudflare R2, Imgur, Aliyun OSS...). Paste, upload, done.
dsh-desktop
by anywhere-labs
Modern desktop client for the DeepSeek Harness (dsh) plugin ecosystem. Everything is a plugin — even the desktop shell itself.
openbiliclaw
by whiteguo233
Local-first, open-source AI content discovery agent that learns your taste and proactively finds content across Bilibili, Douyin, YouTube, Reddit, X and the open web.
08Data and sources
让 DeepSeek Harness 可以被安全地远程访问**:在 `dsh web` 前增加完整的账号密码认证 + MFA
就是那个认证层,认证通过后自动放行。
This page is generated from the project’s public documentation, repository metadata and a structured parse of DSH Plugins; last verified on 2026-09-01. Found an error? Submit a correction.
Best DeepSeek Harness Plugins
Twelve plugins worth installing first — picked from the whole catalog, across every category.
