Align DeepSeek Harness across machines: DSH plugin drift
DeepSeek Harness will drift across machines from three independent sources: different update methods, different entry points (global and npx coexisting), and different timing. Saying it was upgraded is not enough when two copies on one machine can still diverge. The fix is a manifest with the CLI version and DSH plugin list, plus three fixed audit tables.
Why DeepSeek Harness drifts across machines
Bottom line: drift equals update-method differences plus entry-point differences plus timing differences. The most overlooked and most confusing is the entry point, because it produces identical versions with different behavior.
| Source | Typical situation | Consequence |
|---|---|---|
| Update method | Manual, npx latest, desktop auto-update | Versions differ |
| Entry point | Global and npx coexist; executed copy unknown | Updated but not in effect |
| Timing | Whoever remembers | Stuck on an old version, hitting fixed bugs |
| Plugin handling | Hub installs, CLI installs, missing installs | Same scenario, different behavior |
Option A: manifest-driven alignment (recommended, auditable)
Bottom line: write the CLI version and the DSH plugin list into one executable manifest, run it on each machine, and archive the output. Lowest effort, most stable payoff.
- Create the alignment manifest:
# dsh-align.txt
cli: @deepseek-ai/dsh@0.2.0-rc.2
plugin: <plugin-package>@<version>
plugin: <plugin-package>@<version>
- Encode execution as a script — the key is pinning the entry point and data directory:
set -euo pipefail
export DSH_HOME="$HOME/.dsh" # unify the data directory
npm i -g @deepseek-ai/dsh@0.2.0-rc.2
dsh plugin add <plugin-package>@<version>
dsh --version && dsh plugin # archive the output for comparison
- Run the same script everywhere and collect output in one place, even if that place is a shared channel — what matters is comparable text.
- Upgrade by editing the manifest and re-running; keep the previous manifest as the rollback point.
- Choose plugins in DSH Plugin Hub first, then write them into the script instead of installing while browsing.
Option B: image or distribution alignment (best with many machines)
Bottom line: preset the CLI and common plugins into an image or internal package so machines pull one artifact. Saves bandwidth and time, and makes versions identical by construction.
- Build an internal image (see Path C in installing DeepSeek Harness in Docker) and tag it by version.
- Document the distribution path so machines pull from the internal source instead of the public internet.
- Upgrade by publishing a new tag; machines change tags, and old tags remain for rollback.
- Keep data separate from the carrier: the artifact holds the program while DSH_HOME stays local to each machine. Upgrades should never touch data.
Option C: configuration management takes over (larger fleets)
Bottom line: once machine count grows, encode set-data-directory, install-pinned-version, install-plugin-list and verification as an idempotent task and let configuration management run it.
- Convert the Option A script into an idempotent task — re-running produces no side effects.
- Validate on one machine before rolling out; never flip the whole fleet at once.
- Collect output centrally so versions and DSH plugin lists are auditable at any time.
- Pair it with distribution: the task executes, the image or private registry supplies.
Three audit tables for DeepSeek Harness alignment
Bottom line: alignment is not "upgrade and done" — it is being able to answer what this machine has and how it differs from the standard. Three tables cover version, plugins and configuration.
- CLI version table: dsh --version plus which -a dsh to confirm a single entry point. More than one entry means not aligned.
- Plugin table: collect dsh plugin output per machine and compare counts and versions.
- Configuration table: DSH_HOME target, proxy and registry settings, profile selection. These three explain "same version, different behavior."
Four drift diagnostics for DeepSeek Harness
Bottom line: diagnose outside-in — entry point, version, plugin set, configuration. The first two explain obvious differences; the last two explain hidden ones.
- which -a dsh returns exactly one result. More means dual entry points.
- dsh --version matches the manifest. Otherwise the update missed the executed copy.
- dsh plugin matches the standard list. Missing entries mean skipped installs or a different profile.
- echo $DSH_HOME and proxy settings match. Otherwise behavior differs for reasons unrelated to version.
- Run one and two first — they take a minute — before touching three and four. Do not reinstall to start.
DSH plugin troubleshooting across machines
Bottom line: in multi-machine setups, matching versions is only the baseline; entry point, data directory and plugin list determine actual behavior.
- Unify the entry point — keep either the global install or npx, not both (see npx versus global drift).
- Unify the data directory — leaving DSH_HOME unset delegates the decision to defaults that may vary per machine.
- Make the plugin list exportable — if you cannot export it, you cannot compare it.
- Restart the service after upgrades, and include the restart in the script.
- Record validated version combinations — the only basis for rollback.
- Repair status, stated honestly: these options follow the official CLI's version and plugin management notes. There is no official guide for multi-machine alignment, so confirm package names, versions and flags against your own environment.
Sources: apps/cli/README.md, apps/desktop/README.zh.md, npm @deepseek-ai/dsh.
FAQ
In DeepSeek Harness, three sources: different update methods (manual upgrades, npx following latest, desktop auto-update), different entry points (a global install and an npx copy coexisting, so the executed one is uncertain), and different timing (whoever remembers upgrades). Aligning versions therefore means aligning entry point, update method and timing — not typing commands on each machine.
Compare three tables: the CLI version from dsh --version, the installed DSH plugin list from dsh plugin, and the key configuration differences. The first two expose drift immediately; the third explains why identical versions behave differently. Build these into a single command and archive the output.
Two approaches: bake the CLI and common DSH plugin packages into an image or internal distribution so machines only pull artifacts, or use configuration management (such as Ansible) to encode set-data-directory, install-pinned-version and install-plugin-list as a task. The first saves bandwidth and time; the second saves attention and missed steps. They combine well.
In DeepSeek Harness, matching versions means the same artifacts are installed, not the same environment. Three usual differences: a different data directory (DSH_HOME) leading to different profiles and configuration, different environment variables and proxy settings, and operating system differences in path and permission behavior.
Trigger alignment on impactful changes rather than a fixed calendar: when a change affects the DSH plugin packages you use (breaking changes, fixes for bugs you hit), upgrade together and record the validated combination. Fixed cadences tend to become upgrades for their own sake, while drift is usually discovered during an incident.
Related Terms
- version drift
- Version drift is the gradual divergence of the same tool's version across machines. In DeepSeek Harness it accumulates from differences in update method, install entry point and upgrade timing, making it a common source of multi-machine problems.— https://www.npmjs.com/package/@deepseek-ai/dsh
- manifest-driven alignment
- Manifest-driven alignment means writing the versions to install into one executable manifest and having each machine install from it. It makes version state auditable and reproducible, forming the basis for aligning DeepSeek Harness and DSH plugin packages across a team.— https://github.com/deepseek-ai/deepseek-harness/blob/master/apps/cli/README.md
- install entry point
- The install entry point is which copy of DeepSeek Harness actually executes, such as a global install or an npx temporary install. When entry points are not unified, machines can all report being updated while running different versions.— https://docs.npmjs.com/cli/v10/commands/npx
- distribution artifact
- A distribution artifact is a prepared carrier for multi-machine deployment, such as an image or internal package with pinned versions. Using artifacts turns per-machine installation into one distribution, reducing both drift and manual effort.— https://docs.docker.com/build/building/multi-platform/