Workflow & Automation
dsh-launcher
lvienoeria/dsh-launcher · ★ 2
A lightweight DeepSeek Harness plugin that installs a terminal command — type dsh-go to start the Web UI and open the browser. Everything is a plugin.
安装
dsh plugin --profile web add github:lvienoeria/dsh-launcherGitHub 源码安装:首次需按提示配置 allowBuilds 构建授权后重试
For install and environment setup, plus plugin development tutorials, see DSH community docs ↗
README
Table of contents
English | 中文
A tiny DeepSeek Harness plugin that installs a terminal command to start the harness with one word: type dsh-go, and it starts the web UI and opens your browser. Everything is a plugin — this whole thing is just a bundle.
Lightweight: zero dependencies, ~9 KB package. It only touches the terminal side — no desktop icons, no bundled apps. The double-click desktop launcher lives in the separate dsh-desktop-launcher package, so you install exactly what you want.
What it does
Loaded as a bundle, the plugin's apply runs on every harness boot and converges these artifacts (idempotent: a fast no-op when the config is unchanged):
| Artifact | Where | What |
|---|---|---|
| Launcher script | ~/.dsh-launcher/dsh-start.command |
starts dsh, polls the web UI URL, opens the browser when ready |
| Terminal command | ~/.local/bin/dsh-go |
dsh-go in a terminal does exactly that |
Install
Prerequisites: the dsh CLI and pnpm ≥ 9 (the harness pins pnpm 11 — corepack enable if yours is older).
From npm:
dsh plugin --profile web add dsh-launcher
From GitHub — plain JS, no build step, so nothing to allowlist:
dsh plugin --profile web add github:LvienOeria/dsh-launcher
Local path installs work too (zero dependencies):
dsh plugin --profile web add ./dsh-launcher
Then start dsh once — the plugin generates the launcher:
dsh --profile web # installed CLI
# or
pnpm dsh web # source checkout (auto-detected)
Done. Type dsh-go in a terminal to start the harness; closing that terminal window stops it (Ctrl+C works too).
Customize
Edit your profile's patch layer (~/.dsh/profiles/<profile>/cordis.patch.yml) — later layers win, and a patch replaces a row's whole config:
- id: dsh-launcher
config:
command: dsh-go # terminal command name (default dsh-go)
url: http://127.0.0.1:3080 # web UI URL to poll and open
sourceDir: /path/to/deepseek-harness # run `pnpm dsh web` from a checkout
startCommand: '' # fully custom start command (single line)
autoOpenBrowser: true
ensurePath: true # auto-append binDir to shell rc PATH
How the start command is resolved
startCommand(explicit)sourceDir→cd <dir> && pnpm dsh web- cwd is a source checkout whose
package.jsonhas adshscript - an installed
dshCLI on PATH (outside our ownbinDir— recursion guard) - fallback
dsh --profile web(with a warning)
How it stays safe
- Every generated file carries a
# managed by dsh-launcher vXmarker. An existing file without the marker is backed up to<path>.bakbefore replacement (never silently clobbered). - Unchanged config → nothing is rewritten (state hash in
~/.dsh-launcher/state.json). - Bad config (wrong types, non-http(s)
url, multi-linestartCommand) fails loudly with a clear message. - Install failures are logged prominently but never take the harness down — dsh still boots.
Uninstall
dsh plugin --profile web remove dsh-launcher
rm -rf ~/.dsh-launcher ~/.local/bin/dsh
Notes
- The terminal command defaults to
dsh-go, notdsh—dshis the harness CLI name, so the launcher never shadows it. Rename it any time via thecommandconfig. - Want a desktop double-click app (with the whale icon) instead of / in addition to the terminal command? Install dsh-desktop-launcher.
- Windows is not supported (nothing is installed; a warning is logged).
License
MIT — see LICENSE.