Update DeepSeek Harness & DSH plugins: commands, restart
How you update depends on two things: whether you are updating the DeepSeek Harness core or a DSH plugin, and how you installed it in the first place. The core needs a single command — re-run the launch command on the npx no-install path, or use npm update -g for a global install; DSH plugins update through the plugin market or dsh plugin --profile update; and the change only takes effect after a restart, with hangs and failures each having their own troubleshooting path. This article answers the question along three tracks: the core, plugins, and what to do afterwards.
Overview: four phrasings, one core-update command
Whatever you typed — "how to update dsh", "dsh update", "dsh update command" — you are really asking the same group of actions: update the core, update DSH plugins, and confirm the change took effect, and the commands are a fixed short list. Every phrasing, spaced or unspaced, points at the same package on npm, @deepseek-ai/dsh (source). Match your search to a row first:
| What you searched | What you actually want | Which command / track |
|---|---|---|
| how to update dsh | how to upgrade the core and the plugins | core update + plugin update |
| dsh update | what the command is, how to check the version | npx @deepseek-ai/dsh web or npm update -g @deepseek-ai/dsh |
| dsh update command | the same command, phrased in English | npm update -g @deepseek-ai/dsh |
| deepseek harness update command | how to update the core | the core-update command |
A DeepSeek Harness core update is a single command: on the npx no-install path, re-running the launch command takes the latest version, while a global npm install runs npm update -g @deepseek-ai/dsh (source). The complete walkthrough — checking the version, running the update, clearing the cache, verifying — lives in the three ways to update dsh to the latest version and how to update DeepSeek Harness, step by step; this article does not repeat those commands, and instead moves on to plugin updates and how the change takes effect.
Updating DSH plugins: the market button and dsh plugin --profile update
Updating a DSH plugin has two equivalent routes — graphically you click the update entry in the plugin market of DSH Plugin Hub, and from the command line you run dsh plugin --profile <name> update; both edit the same dependency manifest inside the same profile directory, so you only need one. The mechanism of dsh plugin is that it forwards its arguments to pnpm inside that profile directory, which is why the update subcommand reads exactly like pnpm (source). The hard part is not the command but knowing which profile a plugin belongs to: each profile is a separate directory at $DSH_HOME/profiles/<name> (a data directory, ~/.dsh by default), plugin dependencies live in that directory's package.json, and dsh web is exactly an alias for --profile web — so every plugin you use in the Web UI belongs to the web profile.
- List what the current profile holds. Run
dsh plugin --profile web list. Expected: the plugin inventory and versions for thewebprofile, confirming the plugin you want is there. - Work out which profile the plugin belongs to. Recall the command name you launched with. Expected:
dsh webmaps toweb,dsh --profile headlessmaps toheadless— whichever profile holds the plugin is the name you use to update it. - Update every plugin in that profile from the command line. Run
dsh plugin --profile web update. Expected: pnpm raises every plugin in that profile's dependency manifest to its latest version. - Update a single plugin from the command line. Run
dsh plugin --profile web update <package-name>. Expected: only that one moves; the other plugins stay at their versions. - Update graphically. Open Settings → Plugin Market → Installed; when a newer version is detected the list offers an update entry, and you confirm it. Expected: an in-place overwrite to the latest version, with no package name to type.
- Restart so plugins reload. Restart
dsh webafter updating. Expected: the new plugin versions are loaded (ifdsh-hmris running, they reload automatically).
How to choose between the two routes:
| Item | Market update button | Command line dsh plugin update |
|---|---|---|
| Best for | Seeing that a new version exists, then deciding | Knowing what to upgrade, or batching |
| Package name / profile to remember | None — you pick in the UI | Yes — you write --profile and the package name |
| What it changes | The same profile manifest, overwritten in place | The same profile manifest, overwritten in place |
| When it takes effect | Restart (or automatic HMR reload) | Restart (or automatic HMR reload) |
Rather than memorising the profile name, cross-checking package names one by one, and going back to the terminal to confirm versions, install DSH Plugin Hub: update detection, one-click overwrite, and version checks all happen inside Settings → Plugin Market, upgrading in place once you confirm.

The market's management entry sits entirely under Settings → Plugin Market, where browsing, installing, updating, and uninstalling share one screen. If you would rather walk through every install method command by command, see DSH command cheatsheet.
After updating: restart to take effect; hangs and failures each have an article
Finishing an update is not the same as it taking effect: both the DeepSeek Harness core and DSH plugins load the new version only after the process restarts, reloading automatically when dsh-hmr is running (source). So as soon as the update command finishes, press Ctrl+C in the terminal to stop the old process and run the launch command again (npx @deepseek-ai/dsh web or dsh web), and the process comes back up on the new version. That is the update done; hangs and failures are not covered here — see the two troubleshooting articles below by symptom.
- The command sits still, seemingly stuck. See update stuck and work through deciding whether it is really stuck → interrupting safely → clearing caches → speeding up the network → retrying. Expected: you locate which step it hung on instead of reinstalling repeatedly.
- The command errors out and exits. See update failed and identify whether the error is in permissions, the mirror, or the build step. Expected: treated at the right layer instead of blind retries.
The full list of command arguments and exit codes lives in the DSH command cheatsheet.
Caveats and limits
The update commands are short, but the traps cluster at a few boundaries — note each one.
- The core and plugins are two separate tracks. A core update never moves plugins, and a plugin update never upgrades the core, so do not expect one command to do both.
- A wrong profile updates the wrong place. The
--profilevalue decides which plugin stack is updated;dsh webupdatesweb, and aheadlessprofile must be updated on its own. - The npx cache can lie to you. When the cache serves the old package, re-running changes nothing and it looks updated when it is not, so clear the cache first.
- The source path must rebuild.
git pullonly swaps code, while the runtime uses built artifacts, so skipping the build command makes you think "the update did not work". - Read release notes during the developer preview. The official docs state plainly that breaking changes are coming, so check the compatible version on a plugin's detail page before upgrading and pin a version if needed.
Sources: dsh CLI README, @deepseek-ai/dsh on npm.
FAQ
DeepSeek Harness updates in one of two ways depending on your install: the npx no-install path takes the latest version every time you re-run npx @deepseek-ai/dsh web, while a global npm install needs npm update -g @deepseek-ai/dsh. Run which dsh first to tell which one you have, then compare dsh --version against npm view @deepseek-ai/dsh version to confirm the number moved.
Both routes update DSH plugins and change the same dependency manifest in the same profile directory, so doing either one is enough. Graphically you open the plugin market and click the update entry; from the command line you run dsh plugin --profile web update. A plugin belongs to the profile whose name you launched with, so dsh web means the web profile, and dsh plugin --profile web list shows exactly what it holds.
After updating you must restart the process to load the new version, then confirm with dsh --version that the number has moved up. If the version still looks old, the usual causes are an npx cache hit on the previous package, fixed with npm cache clean --force, or a source checkout that skipped pnpm run build.
The dsh update command and the deepseek harness update command point to the same official set: npm update -g @deepseek-ai/dsh for the harness (or a re-run of npx @deepseek-ai/dsh web), and dsh plugin --profile web update for plugins. All of them come from the dsh CLI README and share the @deepseek-ai/dsh package name.
When a command sits still for a long time it is a hang, so work through deciding whether it is really stuck, interrupting safely, clearing caches, switching mirrors, then retrying; when it errors out and exits, identify whether the failure is in permissions, the mirror, or the build step. Both cases have dedicated troubleshooting articles, while this one only covers how to write the commands.
Related Terms
- dsh --version
- dsh --version is the DeepSeek Harness command that prints the version currently running, and it is the single entry point for comparing the version before and after an update. A global npm install and a source build both expose a global dsh command, while the npx no-install path uses npx @deepseek-ai/dsh --version instead.— dsh CLI README
- npm update -g @deepseek-ai/dsh
- npm update -g @deepseek-ai/dsh is the command that upgrades a globally installed DeepSeek Harness core to the latest version. It only touches the global package directory and never your user data directory, so updating the core leaves sessions and plugin configuration untouched.— dsh CLI README
- dsh plugin --profile <name> update
- dsh plugin --profile <name> update is the DeepSeek Harness command form for updating DSH plugins, and it forwards its arguments to pnpm inside the chosen profile directory. Without a package name it updates every plugin in that profile; with a package name it updates only that plugin.— dsh CLI README
- profile
- A profile is an isolated directory holding one ordered plugin stack in DeepSeek Harness, located at $DSH_HOME/profiles/<name> with its own package.json and plugin dependencies. dsh web is an alias for --profile web, so every plugin loaded by the Web UI belongs to the web profile.— dsh CLI README
Sources
- dsh CLI README· deepseek-ai
- @deepseek-ai/dsh on npm· npm