Pin DSH plugin versions and roll back: DeepSeek Harness

Configuration & UsagePublished 2026-10-17Author: DeepSeek Plugin Market
DeepSeek Harnessdsh plugindsh updateversion pinningrollbackplugin management
Should you pin DSH plugin versions in DeepSeek Harness? Three pinning strategies, a three-step rollback, and a decision table for automatic updates.

Whether to pin DSH plugin versions is a choice between reproducibility and automatic currency — you cannot have both. Pinning tells you exactly which version ran last time and gives rollback a target, at the cost of manual, group-wise upgrades. This guide covers three strategies, a three-step rollback, and an automatic-update decision table.

Why DSH plugin versions deserve pinning in DeepSeek Harness

Bottom line: three concrete costs — irreproducibility, hard rollback, and overnight upgrades that cascade.

  1. Irreproducible: it worked yesterday and fails today, and you cannot say what changed. DSH plugin packages release independently, so following latest wires upstream cadence into your environment.
  2. Hard rollback: without a known previous version, rollback becomes guesswork.
  3. Cascading failures: plugins may require specific versions of each other, and a CLI upgrade also affects plugin compatibility.
  4. See the cost too: pinning means you stay on an older version until you upgrade deliberately.

Option A: pin at install time (smallest change)

Bottom line: switch from "install latest" to "install this version" and prevent later automatic upgrades. Smallest change, immediate effect.

  1. Install with an explicit version:
bash
dsh plugin add <plugin-package>@<version>
# expected: the install output shows the version you specified
  1. Verify immediately:
bash
dsh plugin            # expected: the plugin appears at the pinned version
  1. Check whether your entry point has automatic updates enabled and decide per the decision table.
  2. Record it: package name, version and date — three columns is enough, and it is your rollback reference.

Option B: manifest plus scheduled upgrades (best for teams)

Bottom line: write the plugin list to a file and make upgrading an explicit action. You keep reproducibility without freezing forever.

  1. Maintain a manifest:
text
# dsh-plugins.txt
<plugin-package>@<version>
<plugin-package>@<version>
  1. Install and upgrade by reading it, so every machine and every rebuild gets the same set:
bash
set -euo pipefail
while read -r pkg; do
  [ -n "$pkg" ] && dsh plugin add "$pkg"
done < dsh-plugins.txt
dsh plugin        # archive this output as the state snapshot
  1. Upgrade by editing the manifest, re-running, and recording what changed and why.
  2. Upgrade in groups when dependencies are involved, not one plugin at a time.
  3. Choose candidates in DSH Plugin Hub so decisions are based on version notes rather than trial and error.

Option C: images carry pinned DSH plugin versions (fleet-wide)

Bottom line: pin the plugin set into an image or distribution artifact so machines only consume it. This is the most drift-resistant approach at scale.

  1. Install the manifest during the image build (see Path C in installing DeepSeek Harness in Docker).
  2. Tag by version and document the distribution path; upgrading means publishing a new tag.
  3. Keep old tags so rollback is a tag switch rather than per-machine edits.
  4. Separate program from data: the plugin set lives in the image while user configuration and sessions live in DSH_HOME, so upgrades never touch data.

Rollback and three-step verification for DSH plugin

Bottom line: rollback is not uninstall and reinstall; it is installing the last known-good version and verifying. With a manifest it is a one-line change.

  1. Approach one (manifest, fastest): revert the line and re-run the install script.
  2. Approach two (single plugin): install the specific older version, useful when only one plugin broke.
  3. Approach three (whole set): switch back to the previous image tag or manifest snapshot when several plugins fail together.
  4. Verify three steps: the list shows the right version, restart the actual entry point so it takes effect, and call the plugin core function. Installed is not verified.
  5. Record the outcome: which version broke and which version you rolled back to.
  6. Compatibility breakage uses the other guide: when a plugin is incompatible with a new CLI version rather than mispinned, follow plugin version rollback and downgrade.

Decision table: automatic DSH plugin updates

Bottom line: want reproducibility, turn automatic updates off; want always-newest, keep them and record versions.

PriorityAutomatic updatesCompanion practice
Stable and reproducible (team, production)OffManifest, explicit upgrades, archived combinations
Fast-moving (personal experimentation)OnRecord the actual version after each upgrade; roll back per record
MixedOff for critical plugins onlyCritical plugins pinned in the manifest, others follow latest
  1. Test question: "If it upgrades tonight and breaks, how fast can I recover tomorrow?" If you cannot answer, turn it off.
  2. Do not forget to upgrade: set an explicit cadence, for example along with CLI upgrades, so you do not sit on old versions missing fixes.

DSH plugin troubleshooting around pinning

Bottom line: two lines of inquiry — is this the version I intended, and can I get back to the previous one. Get both solid before optimizing.

  1. Record the manifest after every change; this underpins all rollback capability.
  2. Verify function, not just installation.
  3. Treat plugin dependencies as groups to avoid single-point pins blocking upgrades.
  4. Separate CLI version from plugin version — both affect compatibility (CLI side: updating DeepSeek Harness in CI).
  5. At fleet scale, pin in artifacts rather than editing each machine (see aligning DeepSeek Harness across machines).
  6. Repair status, stated honestly: these options follow the official CLI's plugin subcommands and npm version pinning. Whether dsh plugin exposes an automatic-update switch depends on your version — confirm with dsh plugin --help.

For choosing a version or understanding rc builds, see version selection and pinned installs.

Sources: apps/cli/README.md, docs/user/develop/basic/publish.md, npm Docs · package.json.

FAQ

Should I pin DSH plugin versions in DeepSeek Harness, and will pinning miss fixes?

In DeepSeek Harness, pinning buys reproducibility: when something breaks you can state exactly which version worked yesterday, and rollback has a definite target. The cost is that upgrades become manual, so you may briefly stay on an older version. The practical pattern is pin, upgrade explicitly on a cadence, and record validated combinations — you cannot have automatic updates and reproducible state at the same time.

How do I install a specific DSH plugin version?

In DeepSeek Harness, include the version in the install command, appending @version to the package name when adding the plugin. To keep it there, also make sure no automatic upgrade pulls it forward. Confirm subcommand and flag names with dsh plugin --help, since they vary by version.

A DSH plugin breaks after upgrading. How do I roll back?

In DeepSeek Harness, three steps: reinstall the last known-good version (or remove the broken one), restart dsh web or the relevant entry so the change takes effect, then verify the plugin core function rather than just checking that it installed. If you recorded validated combinations, change the version line back instead of trying versions one by one.

Should I turn off automatic DSH plugin updates?

Decide by your DeepSeek Harness priority. If you want to avoid compatibility surprises and keep state reproducible, turn them off and upgrade from a manifest. If you want to always run the newest and accept occasional breakage, keep them on and record versions carefully. Teams usually choose the former; individual experimentation may choose the latter.

Does pinning DSH plugin versions affect plugin dependencies?

Yes, indirectly: some DSH plugin packages declare version requirements on each other, so pinning one old version can prevent another from upgrading. Pin as a group — record a set of versions that run together — rather than pinning each plugin in isolation.

Related Terms

version pinning
Version pinning fixes a dependency at an exact version rather than allowing automatic upgrades within a range. For DeepSeek Harness DSH plugin packages, pinning makes environments reproducible at the cost of manual upgrades.— https://docs.npmjs.com/cli/v10/configuring-npm/package-json
validated version combination
A validated version combination is a recorded set of versions that has actually been run together — the CLI plus each plugin. It is the only reliable basis for rollback and more useful to a team than verbal assurances.— https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/user/develop/basic/publish.md
explicit upgrade
An explicit upgrade is initiated and recorded by a person rather than performed automatically by a tool. It pairs with version pinning: pinning provides stability, explicit upgrades provide traceability and rollback.— https://github.com/deepseek-ai/deepseek-harness/blob/master/apps/cli/README.md
plugin dependency coupling
Plugin dependency coupling refers to version constraints between DSH plugin packages, where pinning or upgrading one can affect another's upgrade path. Pin as a set rather than individually because of it.— https://github.com/deepseek-ai/deepseek-harness/blob/master/docs/user/develop/basic/publish.md

Sources