Troubleshooting DSH
Start from the exact error or symptom. Check one layer at a time so you know which change actually fixed the problem.
On this page
Start here: capture the failure before changing anything
- 01
Copy the exact error
Keep the terminal open and copy the last useful error line. Error codes such as
EADDRINUSE,EACCES,MISSING_CREDENTIALandUNKNOWN_MODELpoint to different layers. - 02
Record the environment
Run
node --version, note your DSH version or npm package version, operating system and the exact command you ran. - 03
Change one thing
Retry after one targeted change. Changing Node, credentials, network settings and workspace permissions at the same time makes the result hard to diagnose.
Installation
Node.js, npm, npx and DSH startup.
- Unsupported Node engine
- npx appears to pause on first launch
- EADDRINUSE / EACCES on port 3080
Models and credentials
DeepSeek credentials, model selection and custom providers.
- MISSING_CREDENTIAL
- UNKNOWN_MODEL
- 401 / authentication failed
Web UI and workspace
The local server, first-run readiness and workspace selection.
- 127.0.0.1:3080 does not open
- The first screen looks stuck
- The composer is unavailable
Plugins
pnpm, profile targeting, install-time builds and restart boundaries.
- pnpm is not recognized
- pnpm asks for allowBuilds
- A newly added Bundle is not visible
MCP
External MCP server connection and tool discovery.
- The MCP server does not start
- Tools are not discovered
- A disconnected server does not recover as expected
Installation and startup checks
node, npm or npx is not recognized
Close the terminal and open a new one, then run node --version and npm --version. If either still fails, repair the Node.js installation or PATH before retrying DSH.
npm reports an unsupported Node engine
The current upstream repository declares ^22.19.0 || >=24.0.0. Compare that range with node --version. A machine can have “Node 22” and still be too old, for example 22.17. Upgrade Node before debugging a downstream package or build error.
npx @deepseek-ai/dsh web appears to pause
On the first launch, npx may need to download the package before DSH can start. Keep the terminal open until it prints the Web UI address or a real npm/network error. Do not repeatedly start several copies, because a second copy can create a port conflict that hides the original problem.
EADDRINUSE on 127.0.0.1:3080
Another process is already listening on port 3080, often an earlier DSH process. On Windows PowerShell, inspect it with Get-NetTCPConnection -LocalPort 3080 -State Listen. On macOS/Linux, use lsof -nP -iTCP:3080 -sTCP:LISTEN. Stop the stale process or start DSH on another port, for example npx @deepseek-ai/dsh web --port 13080.
Windows shows EACCES on port 3080 even though nothing is listening
On machines using Hyper-V, WSL2 or Docker Desktop, Windows can reserve a TCP range that includes 3080. Check with netsh interface ipv4 show excludedportrange protocol=tcp. If 3080 falls inside an excluded range, choose a port outside it, for example npx @deepseek-ai/dsh web --port 13080. This is different from EADDRINUSE: there may be no process to kill.
The DSH process exits during startup
Read the final terminal lines first. If the error is from npm or package download, treat it as an installation/network problem. If DSH itself prints a configuration or plugin-tree error, fix that exact message before restarting.
The browser did not open automatically
A local launch normally hands the URL to the default browser after the Loader tree is ready. You can always open the printed URL manually. Under SSH, not opening a browser is expected: DSH prints the host URL and leaves the forwarded/local address to the SSH client or editor. Use --no-open when you intentionally want to suppress browser launch.
Models and credentials
MISSING_CREDENTIAL
Open Settings → Models, enter the credential for the provider selected by the failing session and save it. The built-in DeepSeek key is stored in $DSH_HOME/.credentials.yaml; the UI receives only a redacted descriptor after saving.
UNKNOWN_MODEL
Select a model that currently exists under the configured provider, or add the missing model to a custom provider. Do not rely on a model name copied from an old screenshot.
401 / authentication failed
A credential reached the provider but was rejected. Confirm that you pasted the key itself and that it is still valid. For custom providers, model discovery can also return 401 because it calls an OpenAI-compatible GET /models endpoint.
apiKeyEnv is configured but the provider still has no credential
apiKeyEnv names an environment variable; it is not the secret itself. DSH inherits the environment when the process launches. If you export or edit that variable after DSH is already running, restart DSH from the shell that contains the variable.
The composer says Select model
Select a configured provider and model. This can happen when a saved default points to a provider that was deleted. A session that has already sent a request retains the model recorded in that session log; changing the default mainly affects new sessions.
An image is refused before the request is sent
A manually added custom model is treated as text-only until its configuration declares image input. The official DeepSeek chat-completions route is text-only and cannot be converted into a vision route by changing this flag.
Need to create or replace a key? Open DeepSeek API keys. Never post the real key in screenshots or support messages.
Web UI and workspace
127.0.0.1:3080 does not open
Check that the DSH terminal process is still running and use the address it actually printed. If startup failed with EADDRINUSE or EACCES, resolve the port error first instead of repeatedly refreshing the browser.
The first Web UI looks stuck or the composer is unavailable
A fresh Web UI has three separate readiness steps: save a provider credential, select a workspace, and select a model. The directory where you started DSH is only its initial filesystem location; it is not automatically a selected workspace. Click Choose workspace and select it explicitly.
An old tutorial says to use --host 0.0.0.0
Do not copy that flag into the current shipped CLI. The current official CLI behavior reference says the Web alias intentionally does not support --host 0.0.0.0 yet. For remote use, prefer an SSH/editor forwarding path or another deployment method explicitly supported by the version you are running.
The task says it changed a file, but you cannot find it
Open the selected workspace outside DSH and verify the file directly. Check that you selected the folder you intended and that the requested path was inside that workspace.
Permission denied in the workspace
Use a test folder owned by your normal user. Do not begin with protected system directories or a workspace that requires elevated permissions.
Plugin management
pnpm is not recognized during plugin management
The official dsh plugin command forwards package operations to pnpm, so pnpm must be available on PATH for CLI plugin changes. This is separate from the simple npm quick-start, which does not require pnpm just to run the Web UI.
pnpm asks for allowBuilds when adding a Git-hosted plugin
A Git-hosted source plugin can run a prepare build during installation. pnpm 10+ can block that until the consumer explicitly allows the build in the profile's pnpm-workspace.yaml. Treat that prompt as permission to execute third-party install-time code: review the source first and do not approve it just to make the error disappear.
The plugin operation succeeds but the Bundle is not available in the running profile
Adding, removing or updating a Bundle changes the profile on disk, but a running profile keeps the Bundle set from its current start. Restart the profile or DSH Desktop after Bundle membership changes.
The plugin was added to the wrong profile
Be explicit about the target profile when using the CLI. Profiles have their own dependency and Bundle composition; installing into one profile does not silently copy the plugin into another.
Network, proxy and certificate errors
If npm prints a network, proxy, DNS, timeout or certificate error, diagnose that message as a network problem before changing DSH model settings.
On a Node version that supports Node's environment-proxy switch, DSH can inherit HTTP_PROXY/HTTPS_PROXY when launched with NODE_USE_ENV_PROXY=1. Keep loopback out of the proxy path with NO_PROXY entries for 127.0.0.1, localhost and ::1; otherwise local DSH requests can be sent to the corporate proxy too. Only use this when your network actually requires it.
npm view @deepseek-ai/dsh versionIf this basic npm request also fails, fix npm/network access first. If it succeeds but DSH startup fails, return to the exact DSH error.
Still failing? Prepare a useful report
Include your operating system, node --version, DSH/package version, the command you ran and the exact error text. For port problems include the port and error code; for provider problems include the provider type without exposing the key. Remove tokens, private repository names and sensitive workspace content before posting.