DeepSeek Harness auto-update: how to keep dsh current
The dsh core has no built-in auto-update switch: to keep it current you either launch it through npx, which re-resolves @latest on every start, or schedule the update command as a system task; what actually provides automatic checking and prompting is the plugin side, through DSH Plugin Hub's check-for-updates on startup and its update badge. DSH plugins sit on that plugin side and get the prompts, while the core layer has no switch at all. This article treats the two layers separately and states the cost of each.
Two separate layers: DeepSeek Harness core auto-update and DSH plugin prompts
Auto-update in DeepSeek Harness is really two independent problems: the core is an npm global or npx temp package that needs an external mechanism to fetch the newest version, while plugins are managed by the dsh plugin channel and have built-in checking and prompting (source). Compare them:
| Layer | Built-in auto-update | How to achieve it | Cost |
|---|---|---|---|
| dsh core (global npm) | No | A scheduled task running npm install -g @deepseek-ai/dsh@latest | Restarting your resident service after each update |
| dsh core (npx) | Effectively updates on each start | Pass @latest so npx re-resolves | A possible download wait per start |
| Plugins | Yes: check and prompt, never silent install | DSH Plugin Hub check on startup plus update badge | You confirm once before it upgrades |
Find out which group you are in: run npm ls -g @deepseek-ai/dsh. Expect: a version means a global install, so follow the scheduling section; (empty) while you normally start with npx means the next section applies.
Least effort for DeepSeek Harness: start it through npx and resolve the latest
npx has no resident install to update, so it resolves the package against @latest on every run, which is effectively an update on every start with no extra configuration (source). Three steps to make it routine:
- Pass the latest tag when starting — run
npx -y @deepseek-ai/dsh@latest web. Expect: npx resolves against latest and runs, with-yskipping the install prompt. - Confirm you really got the newest — in another terminal compare
npm view @deepseek-ai/dsh versionwithdsh --version. Expect: they match, proving this start used the newest stable release. - Clear the cache if you suspect a stale copy — run
npm cache clean --forceand repeat step 1. Expect: it re-downloads; npx keeps temporary installs under~/.npm/_npx.
State the trade-off plainly: each start may involve a download check, which shows up as slow startup on a poor network. If you already installed globally with npm and set up autostart, do not mix in npx as well, or the two setups will run different versions and mislead your troubleshooting.
Auto-updating a global DeepSeek Harness install: schedule the command as a system task
A global install has no "resolve latest on start" opportunity, so the right approach is to put the update command on a system schedule and let the OS run it daily; the update itself is fast, and the real cost is restarting the resident service afterwards (source). On three platforms:
- macOS: schedule with launchd — create
~/Library/LaunchAgents/org.dsh.update.plist, useStartCalendarIntervalto declare when it runs, and setProgramArgumentsto/bin/sh -c "npm install -g @deepseek-ai/dsh@latest", then load it withlaunchctl bootstrap gui/$(id -u) <plist>. Expect: it runs on schedule, with output captured byStandardOutPath. - Linux: schedule with a systemd timer — create
~/.config/systemd/user/dsh-update.service(ExecStart=/usr/bin/npm install -g @deepseek-ai/dsh@latest) anddsh-update.timer(OnCalendar=daily,WantedBy=timers.target), then runsystemctl --user daemon-reload && systemctl --user enable --now dsh-update.timer. Expect:systemctl --user list-timersshows the next run. - Windows: schedule with Task Scheduler — create a task with a Daily trigger at a fixed time, and use the full path to
npm.cmdas the program withinstall -g @deepseek-ai/dsh@latestas arguments. Expect: it runs on schedule, and the last run result confirms success. - Restart the resident service after the scheduled run — if you host it as a background service per DeepSeek Harness autostart, restart that service so the process picks up the new version. Expect:
dsh --versionreports the new version.
Decide one thing first: auto-update means the service may change version without you knowing. If you depend on a specific version's behavior, skip scheduled updates and upgrade manually after a release notification.
How to learn about a new DeepSeek Harness release immediately
If you would rather be notified than auto-upgrade, three queries and one subscription cover it (source). In order:
- See the gap — run
npm outdated -g --depth=0. Expect: when the package is listed, the Current and Latest columns show what you run versus what is available; no output means you are current. - Query the newest on the source — run
npm view @deepseek-ai/dsh version. Expect: the newest stable release on the source; if it looks older than announcements, checknpm config get registryfor a lagging mirror. - Subscribe to releases — on the
deepseek-ai/deepseek-harnessrepo page choose Watch, then Custom, and tick only Releases. Expect: one GitHub notification per release, without noise. - Read the changelog before upgrading — confirm what changed instead of following blindly. See How to check the dsh version and read the changelog.
DSH Plugin Hub plugin-side checking: startup comparison and the update badge
Plugins never upgrade silently, but they do prompt: DSH Plugin Hub has check-for-updates on startup, which compares catalog data against installed versions and shows an update badge at the end of a row when a newer version exists (source). Three steps:
- Turn the check on — open the Settings page and confirm check-for-updates on startup is enabled. Expect: a version comparison happens on each start.
- Read the installed list — open the Installed page and look for rows carrying the update badge. Expect: those are the plugins with a newer version available.
- Upgrade one by one — click the badge and confirm in the dialog. Expect: the plugin is upgraded in place; for several at once, follow the batch approach in How to batch update DSH plugins.
Why plugins are not fully automatic: an in-place upgrade replaces code that is currently loaded, and dsh usually needs a restart before it takes effect, so a silent run would lead people to conclude "it updated but nothing changed". The market leaves that final confirmation to you.
Five reminders apply throughout:
- Auto-updating the core and auto-updating plugins are different jobs: the first runs through npm and scheduled tasks, the second through market badges, and neither drives the other.
- Give scheduled updates a log: otherwise a failure passes silently and all you see later is that the version never changed.
- Do not schedule updates on an unattended service and walk away: a new release can change how plugins load, so someone should confirm it still starts.
- A mirror affects your sense of whether an update exists:
npm viewreads whatever the source has cached, so checknpm config get registrybefore concluding. - Back up before upgrading: for what survives an upgrade and how to back up, see Will updating DeepSeek Harness lose my config.
Keeping the core on scheduled tasks and plugins on market prompts keeps the two from being confused. DSH Plugin Hub is the official plugin market built into DeepSeek Harness: its Settings page manages check-for-updates on startup along with the npm mirror and proxy channel, while the installed list marks plugins with newer versions so a single confirmation upgrades them in place, with no need to query each one from the command line.

Sources: npm Docs - npx, Apple developer documentation (launchd), systemd documentation - systemd.timer, dshplugin/dsh-plugin-hub GitHub repository
FAQ
DeepSeek Harness has no built-in auto-update switch: dsh will not install new versions by itself, so auto-update has to come from how you start it or from a scheduled system task. Automatic checking and prompting exists on the plugin side, where DSH Plugin Hub offers check-for-updates on startup and shows an update badge in the installed list.
The least effort way to always run the newest DeepSeek Harness is to switch to launching it through npx, for example npx -y @deepseek-ai/dsh@latest web. npx re-resolves against the latest tag on every run, so each start effectively updates to the newest stable release. The trade-off is a possible download wait each time, and you must avoid a stale npm cache copy.
A globally installed DeepSeek Harness can be auto-updated with a scheduled task. On macOS use launchd's StartCalendarInterval, on Linux a systemd timer, on Windows Task Scheduler, each running npm install -g @deepseek-ai/dsh@latest on a schedule, then restart your resident service. The update itself is quick; the real cost is that restarting interrupts work in progress.
Three ways to hear about a new DeepSeek Harness release right away: run npm outdated -g --depth=0 to see the gap between Current and Latest, run npm view @deepseek-ai/dsh version for the newest stable release on the source, and on the GitHub repo page choose Watch then Custom and tick only Releases so you get notified without noise.
DSH plugins never upgrade silently, but they do prompt: DSH Plugin Hub has check-for-updates on startup, which compares catalog data with installed versions and shows an update badge at the end of the row when a newer version exists. Clicking it and confirming installs the upgrade in place.
Related Terms
- auto-update
- In this context auto-update means obtaining new versions without manual work, rather than a built-in update switch. The dsh core achieves it through npx resolving the latest tag or through a scheduled task running the update command, while DSH plugins get update prompts from the market.— dshplugin/dsh-plugin-hub GitHub repository
- StartCalendarInterval
- StartCalendarInterval is a launchd plist key on macOS that schedules a job at fixed clock times using fields such as Hour and Minute, which is how an update command can be placed on a daily schedule.— Apple developer documentation
- systemd timer
- A systemd timer is a scheduling unit made of a .timer file paired with a .service file. It declares when to run through OnCalendar and is enabled with WantedBy=timers.target, which suits running a dsh update command on a schedule.— systemd documentation
- update badge
- The update badge is a status marker in the DSH Plugin Hub installed list, shown at the end of a row when a newer plugin version is available. Clicking it and confirming installs the upgrade in place, independently of the dsh core version.— dshplugin/dsh-plugin-hub GitHub repository