On this page+
How to Start DSH Web UI
DSH Web UI needs no separate install. With Node.js installed, pick one of the three ways below. The terminal prints the address, and a local start also opens it in your default browser.
| Method | Command | Best for |
|---|---|---|
| npx (recommended) | npx @deepseek-ai/dsh web | First run, no global install |
| Installed dsh | dsh web | @deepseek-ai/dsh installed globally so dsh is on your PATH |
| From source | pnpm dsh web | A clone of the official repo after pnpm install and pnpm run build |
Started over SSH, the browser does not open and the terminal only prints the host URL, because your SSH client or editor owns the forwarded port.
Useful dsh web Options
Options go after web, for example npx @deepseek-ai/dsh web --port 8080. These are the ones that solve most "it does not open" problems.
| Option | What it does | Example |
|---|---|---|
--port | Listen on another port. 0 lets the system pick a free one. | dsh web --port 8080 |
--no-open | Start the server without opening a browser. | dsh web --no-open |
--host | Bind one local network address. It must be a concrete IP; wildcards such as 0.0.0.0 are rejected. | dsh web --host 192.168.1.20 |
--public-url + --trusted-host | Run behind a reverse proxy or domain. | --public-url https://app.example/ --trusted-host app.example |
--tls-cert + --tls-key | Serve HTTPS with your own certificate. | --tls-cert ./chain.pem --tls-key ./key.pem |
Fix "dsh web authentication required"
The full message is "dsh web authentication required; reopen the URL printed by dsh web". It means this browser has not signed in to the running DSH Web UI.
DSH Web UI has no account or password. Each start prints a URL with a ?token= launch token. Opening that URL trades the token for a signed login cookie that lasts 30 days by default, so later visits need no token. The cookie belongs to the exact address, so localhost:3080 and 127.0.0.1:3080 count as two different sites.
Common causes
- You typed 127.0.0.1:3080 or used a bookmark in a browser that never opened the token URL.
- You switched browsers, used a private window or cleared cookies.
- The address changed: localhost instead of 127.0.0.1, or a different port.
- The
?token=part got lost when the URL was copied. - The 30-day login cookie expired.
How to fix it
- 1Go back to the terminal running dsh web and find the full URL that contains
?token=. - 2Open that exact URL in the browser you want to use, without trimming it.
- 3If the terminal is gone, press Ctrl+C where it runs (or close it) and start
npx @deepseek-ai/dsh webagain to get a fresh URL.
The token URL is a login credential. Do not paste it into chats or screenshots.
First Run: Model, Workspace, First Task
The dsh process uses the folder you started it in as its default location, so starting it inside your project makes the workspace step quicker. The model settings also accept other providers and OpenAI-compatible endpoints.
- 1Open Settings → Models, paste your DeepSeek API key from the DeepSeek platform and save. It works at once, no restart.
- 2Click "Select workspace", add your project folder and select it. Until a workspace is selected the input box stays disabled, the most common reason the Web UI "won't let me type".
- 3Start a session and send a task such as "Summarize this repository and its main packages". The agent reads and edits files and runs commands; anything your permission settings flag asks you first.
Use DSH Web UI on a Phone, LAN or Remote Machine
By default DSH Web UI listens only on the loopback address, so phones and other computers cannot reach it. Pick the setup that matches your case.
| Case | How | Watch out |
|---|---|---|
| Phone on the same Wi-Fi | Start with --host <your computer's LAN IP> and open the printed URL on the phone | Use a concrete IP. Plain HTTP on a LAN sends the token unencrypted. |
| Scan a QR code from the phone | Install the dsh-pocket plugin | Check its security signals before installing |
| Reverse proxy or domain | --public-url https://your.domain/ --trusted-host your.domain | Without --trusted-host, every API call returns 403 |
| SSH tunnel | Forward local port 3080 to the server and open the printed URL | No change to the listen address needed |
dsh-pocket
1.9kGitHub starsDSH Profile: web
Scan a QR code on your phone to open the same DSH Web UI, over LAN or the internet, with live sync.
dsh plugin --profile web add dsh-pocket -wdsh-web-mobile
174GitHub starsDSH Profile: web
Makes the Web UI comfortable on narrow phone screens without hurting the desktop layout.
dsh plugin --profile web add dsh-web-mobiledsh-web-startup-auth
61GitHub starsDSH Profile: web
Remote launch with a username and password, for people who do not want to pass token URLs around.
Security and compatibilityShare the URL only with people you trust. The token signs them in, and the agent then reads files and runs commands on your machine. For public access use HTTPS (a proxy or --tls-cert / --tls-key) and never expose port 3080 directly to the internet.
Plugins That Extend DSH Web UI
The stock interface covers chat, files and settings. Many people add plugins for a file tree, task boards or a plugin market. Stars below update live. Installing works the same for all of them, see the plugin install guide.
DSH Web UI
8.8kGitHub starsDSH Profile: web
The all-in-one suite (npm @linxin666/dsh-web-all): task boards, Git views, remote access, token stats and a skin center.
dsh plugin --profile web add github:zhu1090093659/dsh-webdsh-better-sidebar
4.6kGitHub starsDSH Profile: web
A workspace sidebar with file management, previews, browser tabs, a terminal and Git.
dsh plugin --profile web add dsh-better-sidebar@latestdsh-market
8.6kGitHub starsDSH Profile: web
Browse, search and install plugins inside DeepSeek Harness instead of the command line.
dsh plugin --profile web add dshmarketDSH-taskboard
322GitHub starsDSH Profile: web
A local task board where agents claim and report work, backed by SQLite.
dsh plugin --profile web add -w @shengsheng/dsh-taskboarddsh-smooth-stream
82GitHub starsDSH Profile: web
Smoother streaming text and scrolling while the agent answers.
Security and compatibilityThe dsh-web-ui suite ships its own skin center. If you use it, install skins from there rather than adding the same skin separately, or the interface can break.
Update, Stop and Where Settings Live
| Task | How |
|---|---|
| Update | npx @deepseek-ai/dsh@latest web; for a global install, npm i -g @deepseek-ai/dsh@latest |
| Stop | Press Ctrl+C in the terminal running it |
| Appearance settings | ~/.dsh/cordis.patch.yml (under $DSH_HOME if you set it) |
| Installed plugins | ~/.dsh/profiles/web, one folder per profile |
DeepSeek Harness is a developer preview and new versions ship breaking changes. If a plugin fails after an update, check its plugin page for a newer version.
FAQ
What is the difference between DSH Web UI, the desktop app and a TUI?
+
Web UI is the browser interface started by dsh web. The desktop app is the official desktop client with its own desktop profile, and plugins are installed from its Plugins page. A TUI is a terminal interface made by community plugins such as dsh-cc-tui. All of them run the same DeepSeek Harness core.
Port 3080 is already in use. What now?
+
Pick another port with --port, for example npx @deepseek-ai/dsh web --port 3090. --port 0 lets the system choose a free port; use the address the terminal prints.
Can several people share one DSH Web UI?
+
You can send them the token URL, but each of them gets full access to your machine through the agent. For a team, put it behind a reverse proxy and restrict which network can reach it.
Does DSH Web UI support web search?
+
Web search needs a search provider. Free plugins such as modsearch and dsh-free-search add one without an API key.
Is DSH Web UI free?
+
DeepSeek Harness and its Web UI are MIT-licensed and free. Model calls are billed by the provider of the API key you enter.
Primary sources
This guide is grounded primarily in the current DeepSeek AI Harness repository and development documentation. Harness is still in developer preview, so exact commands and contracts can change with later releases.