Opens the dsh web GUI in a dedicated Edge/Chrome app-mode window on its own browser profile and gracefully stops the server when that window is closed.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:big0lives/dsh-web-window-companion
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
DSH Web Window Companion
Close the browser window = stop the dsh web server
English | 中文
What is this
A bundle plugin for the Web profile of DeepSeek Harness (DSH). Once installed, dsh web behaves differently:
- It no longer throws a tab into your default browser;
- Instead it opens a dedicated app-mode (
--app=) Edge / Chrome window, with the authenticated URL, on a separate browser profile — your everyday browser state is never touched; - Closing that window gracefully stops the dsh web server — the port is released and no background process lingers.
Made for people who use DSH Web like a desktop app: open the window to work, close it to walk away.
Prefer a double-click desktop icon instead of the terminal? See the sister project dsh-win-quick-launcher (no-terminal launcher). ⚠️ Use one or the other, never both at once: they share the same dedicated browser profile, and running both makes the two window processes kick each other off — the window flash-closes and the server gets stopped by mistake.
Install
Install into the web profile (a git install works — this plugin is plain JavaScript with no build step):
dsh plugin --profile web add github:big0lives/dsh-web-window-companion
From a source checkout, run inside the repository root:
pnpm dsh plugin --profile web add github:big0lives/dsh-web-window-companion
Verify the layer is composed:
dsh --profile web --dump-config # expect a "# == dsh-web-window-companion" layer
Uninstall:
dsh plugin --profile web remove dsh-web-window-companion
Usage
Nothing to change — start as usual:
dsh web
- The terminal still prints the authenticated URL (
dsh web: http://127.0.0.1:3080/?token=...) as a fallback if the app window cannot open; - Close the app window → the server shuts down gracefully (root fiber dispose, exit code 0);
- Under an SSH launch the plugin stays silent and never grabs a window.
How it works
dsh web
└─ once the Loader tree settles, the plugin injects connection / webServer
├─ connection.authenticatedUrl() builds the tokenized URL
├─ spawns the browser: --app=<url> --user-data-dir=<dedicated profile>
│ └─ dedicated profile ⇒ browser process lifetime == window lifetime
└─ window closed → browser process exits → ctx.root.fiber.dispose() → graceful stop
The bundle patch also overrides the stock web-runtime row with openBrowser: false (restating every other key unchanged) to suppress the default-browser handoff; printUrl stays on as the fallback.
- Zero dependencies, zero configuration, plain JavaScript: a git install needs no
allowBuildsallowlist; - Browser probing order: Edge (x86 → x64) → Chrome (x64 → x86); if none is found a warning is printed and the URL fallback remains.
Troubleshooting
| Symptom | Cause and fix |
|---|---|
| No app window appears | Make sure Edge or Chrome is installed; check the terminal for a [window-companion] warning; the printed URL always works |
| A default-browser tab still opens | The plugin layer is not composed — run dsh --profile web --dump-config and look for # == dsh-web-window-companion |
| Server keeps running after closing the window | The window must be the plugin-opened one on the dedicated profile (no tab strip); a manually opened tab does not own the server's lifetime |
| Want the stock behavior back | dsh plugin --profile web remove dsh-web-window-companion fully restores it |
License
MIT © 2026 big0lives
Links
More in this category
Tencent/BrowserSkill#dsh-plugin-browserskill★ 1962
BrowserSkill bridge for controlling visible Chrome and Edge Agent Windows from DeepSeek Harness, with native browser tools, accessibility and VOM observations, screenshots, owned multi-session control, and a live Web UI overlay.
Lum1104/dsh-browser#bridge-browser★ 639
Chrome sidebar extension that lets DSH operate your browser directly, no vision capabilities required.
liustack/modsearch★ 470
Web search bridge for text-only agents: ask the web or X, get structured JSON evidence (search, fetch, citations).
DDDMUC/dsh-free-search★ 166
Free, keyless web search for DSH: 7 engines (DuckDuckGo/Bing/SearXNG free + Exa/Perplexity/DeepSeek paid), auto-failover, settings-page UI with API key inputs and official links, web_fetch, and an engine test tool.
Tabbit-Browser/dsh-plugin★ 101
Gives DeepSeek Harness control of the Tabbit Browser: auto-loads the tabbit-browser skill on install, detects official Tabbit and Tabbit Browser releases (>= 1.9.0), checks the tabbit-cli persistent runtime, diagnoses the per-platform DSH sandbox mode needed to call the CLI, and downloads the region-matched official installer via a background job when no qualifying version is present.
Tabbit-Browser/dsh-tabbit★ 101
Gives DeepSeek Harness control of the Tabbit Browser: auto-loads the tabbit-browser skill on install, detects official Tabbit and Tabbit Browser releases (>= 1.9.0), checks the tabbit-cli persistent runtime, diagnoses the per-platform DSH sandbox mode needed to call the CLI, and downloads the region-matched official installer via a background job when no qualifying version is present.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.