Releases: sorsama/deepseek-harness-relay
Release list
dsh-relay 0.1.0
Authenticated remote access for a DeepSeek Harness web profile.
dsh plugin --profile web add dsh-relay
dsh webThen open /relay/password on the machine running the harness and set a password. Getting started walks through it for npx @deepseek-ai/dsh web.
Remove the LAN patch first. If ~/.dsh/profiles/web/cordis.patch.yml binds the harness to 0.0.0.0, the relay refuses to start — it cannot protect a server that already answers the network unauthenticated.
What it does
The harness serves its browser API on loopback and says plainly that its /api fence "is not an auth layer", that the configuration plane stays loopback-only "until a real authentication layer exists", and that --host 0.0.0.0 is refused because "it would expose remote code execution to the network". This is that layer, mounted beside the harness rather than inside it: a second listener that terminates TLS, authenticates, and reverse-proxies to the untouched loopback server.
- Password sign-in (scrypt, signed
HttpOnly; SameSite=Strictcookie), QR and passcode device pairing with revocable bearer tokens, a device list, and a key-rotating sign-out-everywhere. - Its own DNS-rebinding and cross-site fence, applied before the
Hostrewrite the harness's fence would otherwise catch, and its own copy of the loopback-pinned method list that the rewrite would lift. - Self-signed certificates with a published SPKI pin, or bring your own.
- The whole web UI, unchanged, with a Relay link in the corner and a card in Settings → Plugins.
_dsh._tcpmDNS advertisement.
DSH Mobile 0.5.0
It hardcodes http:// and can carry no credential, so it gets an opt-out plain listener and short-lived private-address grants that never reach the configuration plane. That is a bridge, not a destination — SECURITY.md says exactly what a source address does and does not prove, and CLIENT_INTEGRATION.md is the contract for a client that can hold a token.
Before you install
Signing in grants the same power as a shell on the host machine, because the agent runs commands there. Everything in this plugin follows from that.