DeepSeek Harness plugin

agent

Forwards a local dsh web UI to the public internet under a *.ds.hn subdomain (or your own self-hosted relay), gated by a login, with optional end-to-end encryption (PBKDF2 to AES-256-GCM).

Jump to install

Source facts

Repository
jsdvjx/dshn
Latest update
Aug 21, 2026
Category
Remote & Mobile
GitHub stars
0

Install

Start with a prompt that asks an agent to read the source. Switch to the command if you want to install it yourself.

Copy this prompt into DSH, Codex, or another agent and ask it to read the page and repository first.

Do not install anything yet. Read this DeepSeek Harness plugin and explain what it does, which files, networks, or credentials it can access, and how to install and remove it.

Plugin page: https://deepseekplugins.org/plugins/jsdvjx/dshn~23agent
GitHub: https://github.com/jsdvjx/dshn/tree/main/packages/agent
Plugin: dshn#agent
Author: jsdvjx
Install command: dsh plugin --profile web add "https://github.com/jsdvjx/dshn/releases/latest/download/dshn.tgz"

Do not run the install command until I confirm.

Check the source files

Read the README and other files from this plugin directory before installing.

File explorer2 files
README.mdSource · read only

dshn-agent

The dsh plugin half of [dshn](../../README.md). It opens one outbound WebSocket to the relay, claims a subdomain with the (subdomain, password) the user typed in the setup dialog, and replays whatever the relay forwards against the local dsh web server — HTTP over node:http, dsh's own /api/events.* downlink sockets over a tunnelled ws client.

Two halves:

  • Host (src/index.tslib/index.js): the tunnel client, the replay

engine, the reconnect/heartbeat loop, credential persistence, and the /dshn/status · /dshn/configure · /dshn/disconnect routes.

  • Browser (client.js, hand-authored factory format): a shell.overlay

pill that opens the setup dialog when unconfigured (subdomain + password), or the live status + public URL when connected.

Why no trustedHosts patch

The agent rewrites each forwarded request's Host/Origin to the local loopback authority before replaying it to dsh. dsh's /api browser-trust fence then accepts it as a loopback, same-origin request — for any subdomain, with no composition-time trusted-host entry. That is what lets the subdomain be chosen at runtime in the dialog; access is gated by the relay's login instead of the fence.

Config

Credentials (subdomain + password) are not configured here — the user sets them in the dialog (POST /dshn/configure, loopback-only) and they persist to DSHN_STATE. Only infrastructure is env-configured:

envmeaningdefault
DSHN_RELAY_HOSThost the tunnel dialsrelay.ds.hn
DSHN_ORIGIN_CAPEM cert to pin when dialing a direct grey-cloud origin
DSHN_STATEfile the chosen credentials persist to~/.dshn-agent.json
DSHN_LOCAL_PORTlocal dsh port to replay againstthe web server's port
DSHN_ENABLED0 loads the plugin inert1