CLI installation
August 15, 2026 ยท View on GitHub
This tutorial installs DSH Remote Gateway into the DeepSeek Harness web profile and ends with a verified authenticated gateway.
Prerequisites
Confirm that dsh, Node.js, and pnpm are available:
dsh --version
node --version
pnpm --version
DeepSeek Harness must support dsh plugin --profile, profile bundles, and the Web server service described in the root README.
Install from GitHub
dsh plugin --profile web add github:Yari-tuber/dsh-remote-gateway
If pnpm blocks the Git dependency's prepare script, open the exact pnpm-workspace.yaml path printed by Harness and add:
allowBuilds:
dsh-remote-gateway: true
Run the same install command again. Do not enable unrelated dependency scripts.
Install from a local checkout
git clone https://github.com/Yari-tuber/dsh-remote-gateway.git
cd dsh-remote-gateway
pnpm install --frozen-lockfile
pnpm run prepare
dsh plugin --profile web add .
A local checkout installation does not require allowBuilds because the bundle is built before it is added.
Start and configure
dsh --profile web
Open the local Harness URL printed in the terminal, then go to Settings โ Remote Access.
- Set a unique username and a password of at least 10 characters.
- Keep the Harness core listener on
127.0.0.1. - Select Set up and start.
- Wait for the environment state to become Ready and for an HTTPS address to appear.
- Open that address in the phone browser, sign in, and confirm that the Harness interface loads and remains connected.
The first managed setup downloads and verifies cloudflared. Later starts reuse the verified installation.
Persistent configuration
Settings-page edits apply to the running process. To preserve deployment values across restarts, replace the complete bundle config in ~/.dsh/profiles/web/cordis.patch.yml. Copy the defaults from the root cordis.patch.yml, then change only the intended values.
Avoid storing a password in a shared repository. An empty password generates a new strong password at each boot and displays it only in the local settings page.
Update
dsh plugin --profile web update dsh-remote-gateway
Restart Harness after an update so Host and browser bundles reload together.
Remove
Stop the public tunnel in settings, stop Harness, then run:
dsh plugin --profile web remove dsh-remote-gateway
The verified managed executable remains under $DSH_HOME/tools/dsh-remote-gateway for explicit manual cleanup. It contains no login credentials or session data.
Troubleshooting
The Remote Access page is missing: confirm dsh-remote-gateway appears in the dsh.profile.bundles list in the web profile manifest, then restart Harness.
Installation reports allowBuilds: add only dsh-remote-gateway: true to the profile's pnpm-workspace.yaml, then rerun the install.
The tunnel does not start: use Detect again, check outbound HTTPS access to GitHub and Cloudflare, and try tunnelProtocol: http2 when UDP/QUIC is filtered.
The phone sees the login page but Harness disconnects: update both the Host and client bundle together and confirm the installed Harness exposes the supported WebSocket event paths.
A warning says the core is not loopback-bound: stop remote access and bind the Harness Web server to 127.0.0.1 before continuing.