DeepSeek Harness Launcher
Start, open, and manage the DeepSeek Harness Web UI from VS Code with one click. The extension checks the environment, fetches DSH through npm, picks a safe port, waits for readiness, and cleans up the process on stop.
Prerequisites
- VS Code 1.125 or newer.
- Node.js 22.19+ (22.x only) or 24+, with both
nodeandnpxin the same installation directory. - A trusted local, SSH, WSL, Dev Container, or Codespaces workspace.
- An API key for a model you have access to (configured inside the Harness page; this extension does not read or store it).
Harness can read and write files and run commands: the extension does not start or connect services in Restricted Mode, and it asks for confirmation again when choosing a directory from an empty window.
Installation
Search for DeepSeek Harness Launcher in the Extensions view (Ctrl/Cmd+Shift+X), or install the .vsix from the Marketplace, Open VSX, or GitHub Releases.
Quick start
- Open and trust a project folder, then click
DSHin the status bar or runDeepSeek Harness Launcher: Open. - The first run fetches DSH through npm. The status bar shows
DSH Working…; click it to cancel or view the output. - Once the page opens, add your API key under
Settings → Modelsin Harness, then confirm a directory inChoose workspaceand start a session.
workingDirectory is DSH's launch directory and default workspace context, which affects AGENTS.md, CLAUDE.md, cwd .env, and similar files.
Commands and status bar
Open is the primary command: it starts the server when it is not running and opens it directly when it is.
| Command | Purpose |
|---|---|
Open |
Start if needed, or open the running UI |
Start Server |
Start the server without opening the page |
Open in Browser / Open in VS Code |
Start if needed, then open in the chosen location |
Stop Server |
Stop the hosted server; run it again if cleanup failed |
Restart Server |
Apply new settings; reuses the selected directory when workingDirectory is unchanged |
Cancel Current Operation |
Cancel an environment check, startup, restart, or connection in progress |
Connect to Running Server… |
Connect to an existing DSH in this environment |
Disconnect External Server |
Stop tracking an external DSH without stopping its process |
Copy Access URL |
Copy the full address a client can use |
Show Output / Open Settings |
Open the output panel or extension settings |
The status bar shows: shield + DSH (untrusted), DSH (not running), DSH Working… (click to cancel or view output), DSH Stopping… (click for output), DSH: port (hosted by this window), link icon + DSH: port (external server), DSH: port* (settings changed; click to restart and apply), or error icon + DSH (hover for details and click for recovery actions).
Settings
| Setting | Default | Description |
|---|---|---|
startupBehavior |
manual |
manual start on demand; start start silently when VS Code opens; startAndOpen start and open |
openLocation |
browser |
Use the system browser or VS Code's editor for the primary command |
port |
0 |
Pick a free port automatically. When a fixed port is taken, the extension does not attach to other instances |
startupTimeout |
120 |
Maximum seconds to wait for DSH to become ready |
workingDirectory |
empty | Launch and default workspace context; supports absolute paths, relative paths, ~, and ${workspaceFolder}. Relative paths require an open workspace folder |
webArgs |
[] |
Extra DSH Web arguments (must not include --host, --port, or --patch) |
environment |
{} |
Process environment variables; may override PATH, cannot override DSH_HOME |
Managed and external servers
- A managed server is started by the extension. Its data lives in VS Code's workspace-scoped storage (global storage in empty windows), and a single-writer lease keeps multiple windows from writing to the same data directory concurrently. "Stop Server" waits for the session to clean up, then force-ends it and confirms the port was released.
- An external server can only be connected explicitly through an HTTP loopback address in this environment (for example
http://127.0.0.1:3080). It supports open, copy, refresh, and disconnect only; the extension never stops it, and it keeps its own data directory. - Each window manages one server; different workspaces manage their own DSH processes.
Remote, WSL, and containers
Node/npx, workingDirectory, relative paths, environment variables, and connection addresses are resolved in the environment where the workspace lives. The system browser is opened through openExternal, which resolves localhost forwarding; the built-in page and "Copy Access URL" use asExternalUri. With an automatic port, the exact non-loopback authority returned by VS Code is added to the DSH Host allow-list; if the forwarded authority cannot be determined, the extension fails safely.
DSH only listens on 127.0.0.1, but forwarding visibility is controlled by VS Code, Codespaces, or Dev Tunnels. Keep forwarded ports Private and do not share forwarded URLs.
Security
- Use Harness only with projects you fully trust.
workingDirectoryand any added directories may be read, written, and executed by the agent. Workspace Trust is not a filesystem sandbox. - The extension always passes
--host 127.0.0.1, refuses to let users override the listen address, and does not support patches that would rewrite this boundary. - The upstream Web service has no authentication or TLS suitable for the public internet. The first startup downloads a pinned top-level DSH version from npm; transitive dependencies may still change.
- API keys, model configuration, and sessions are written by DSH to workspace-specific storage. This extension does not read API keys and contains no telemetry.
Troubleshooting
Node.js / npx not found or unsupported version: run node --version in the extension's runtime environment; Remote uses the remote Node. The integrated terminal may be initialized by nvm while the Extension Host's PATH is not synced; provide an absolute PATH in vscode-dsh.environment.
First startup is slow: npx downloads DSH and its dependencies. Click "Show Output" in the status bar or increase startupTimeout.
Fixed port already in use: change back to port: 0. If that port is a DSH instance you started yourself, use "Connect to Running Server…".
The page opens but sessions do not work: configure a model under Settings → Models, then add and select a directory under Choose workspace; see the official Web UI guide.
The built-in page is blank or limited: use Open in Browser instead, and check the output panel and the Private setting for Remote port forwarding.
The server exits unexpectedly: hover the error status to see why and pick a recovery action. A managed process must confirm cleanup before restart is allowed.
Feedback and license
- Extension issues: joygqz/vscode-dsh Issues
- DSH usage questions: DeepSeek Harness Discussions
- License: MIT
No comments yet. Be the first to write one.