Configurable LAN access for the DSH Web GUI: a settings tab binds the server to all interfaces, trusts only the addresses you configure, sets the browser session lifetime or removes the token login, and repairs the settings layer on non-loopback visits.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:longisland-icetea/dsh-lan-access
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
Who this is for: users who already run a virtual LAN (EasyTier / Tailscale / WireGuard / ZeroTier …), or who only want to reach the dsh Web UI from a trusted LAN (home or office network).
⚠️ Security: enabling LAN access means anyone who can reach that address can operate your Harness — remote code execution exposed to that network segment. Only enable it on a network you control; never on public Wi-Fi, campus or shared lab networks. Never forward the token-bearing URL printed at startup.
🤖 About this repository: every line of code, doc, and commit here was generated by an AI coding agent; the author has not reviewed it line by line. Read
cordis.patch.ymlandlib/client.js(they touch dsh internals) before you rely on it. Issues and PRs welcome.
Open the DeepSeek Harness Web GUI's LAN access fences so other machines on a
(virtual) LAN can reach it directly via LAN-IP:port, with a settings tab to
choose which LAN IP is used.
See README.zh.md (Chinese) for the full guide; the English summary:
- What it changes: binds the webserver to
0.0.0.0when enabled (the host schema only allows127.0.0.1/0.0.0.0), makes the/apibrowser-trust fence accept only your configured authorities (falling back to dsh's automatic LAN trust when you configure none), and prints the token-bearing LAN URL at boot. - Strict fence (0.2.0, breaking): dsh itself trusts every non-internal IPv4
while the server binds
0.0.0.0; 0.1.x unioned that in, so a host you removed stayed trusted. Since 0.2.0 a non-empty configuration is the policy. - Remote (non-loopback) visits: dsh runs its settings layer in memory mode
there, so nothing can be read or persisted. The plugin shadows the shipped
welcome notice and repairs the settings mirror; opt out of the latter with
rescueSettings: falsein thelan-accesssection ofsettings.yaml. - Session lifetime:
sessionDays(default 30, range 1–3650) sets how long a device stays authenticated after one token visit. Cookies are per access address and survive adsh webrestart (the signing secret is persisted); they die on expiry, on deleting.credentials.yaml, or when the browser clears them. Needs a restart to change. - No authentication (0.4.0):
noAuth: trueremoves the browser session gate altogether — no launch token, no cookie, no 401. The Host/Origin trust fence stays (hosts outsideaccessHostsare still403); everything else becomes your network's job. Needs a restart.sessionDayshas no meaning while it is on. - Install:
dsh plugin --profile web add github:longisland-icetea/dsh-lan-access(dsh plugin --profile web update dsh-lan-accessto upgrade), then restartdsh web. ⚠️ Thedsh-lan-accesspackage on npm is a different project by another author — this plugin is only distributed from GitHub, not npm. - Use: Settings → “LAN Access” tab → enable, enter the LAN IP(s) (or pick from the detected list), save, restart.
- How it works (0.6.0): static composition — zero runtime row
ownership. The bundle patch overrides the official
webserver/connectionrows with loader!!jsexpressions that decide the bind and the fence ONCE per boot from two bits composed before activation: thelan-accessentry's disabled state (the very state dshmarket's toggle writes) and the settings-tab toggle (settings.yamllan-access.enabled). Noentry.update, no fiber restarts, no boot rewrites; toggling the plugin — in the settings tab or in the market — only starts/stops its fiber, and the binding changes on the next restart, exactly what the settings tab says. The expressions fail closed: any evaluation error yields the official defaults (loopback bind, the deployment fence) and can never fail the boot. - Upgrades: the overrides are patches by id; a renamed or restructured
official row is skipped by the composer with a warning (dsh still boots,
fully official), and the boot-time self-check reports the drift instead of
pretending. Only brand-new upstream guardrails (e.g. a webserver schema
dropping
0.0.0.0) can defeat it. The one place that touches a dsh internal (a prototype patch to revive already-bound settings scopes, and the noAuth gate swap) is wrapped intry/catchand can be switched off entirely.
License
MIT
Links
More in this category
zhu1090093659/dsh-web-ui#packages/dsh-ssh★ 7488
SSH ops panel for DSH: web terminal, SFTP transfer with progress, local port forwarding, and one-command cluster execution across hosts; agents share the same host config.
zhu1090093659/dsh-web#packages/dsh-remote-web-ui★ 7488
Remote control of a dsh web workspace from phone or PC: QR-code pairing through a token-gated channel, SSE real-time sync, and separate mobile and full desktop GUI modes.
ZSeven-W/dsh-ios★ 288
A live iOS Simulator or USB-connected iPhone inside the conversation: 22 agent tools for booting, building, driving the UI by accessibility identity or OCR text, list-row actions and SwiftUI preview hot reload, plus a streaming sidebar panel you can tap and drag on.
saya-ch/dsh-mobile★ 260
Access DeepSeek Harness from the Android app or a mobile browser with secure LAN and remote connections, persistent device pairing, and a customizable mobile interface.
liguobao/deepseek-harness-remote★ 183
Multi-device remote access for DeepSeek Harness: continue an active session from your phone, tablet, browser, or another computer over an end-to-end encrypted channel (Noise IK + adaptive relay/WebRTC transport), with device authorization, ApiProxy-only remote capabilities, and read-only file preview via dsh-file-viewer — no shell, remote desktop, or write access.
wenbin-wb/dsh-bridge★ 158
Remote and mobile access for DeepSeek Harness: provides LAN QR code connection, Cloudflare/custom tunnels, WeChat, QQ, Feishu, Telegram bot integration, and security authentication.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.