# How to install plugins in DeepSeek Harness (dsh plugin add)

> Plugins install with one command, dsh plugin add, which runs pnpm in a profile. GitHub-hosted plugins need one extra step because pnpm 10 blocks their build.

URL: https://claudegpt.si/news/deepseek-harness-install-plugins  
Published: 2026-11-08T22:56:38.085Z  
Author: ClaudeGPT Si Newsroom  
Section: Guides  
Topics: DeepSeek, DeepSeek Harness, AI agents, Open source  
Publisher: ClaudeGPT Si

## Key takeaways

- Install a plugin with dsh plugin --profile <name> add <package-or-git-spec>, which passes the arguments to pnpm.
- Git-hosted plugins fail on the first add under pnpm 10 or later until you copy the printed key into the profile's pnpm-workspace.yaml.
- A package only activates if its package.json declares dsh.bundle, and a running profile must be restarted to pick up changes.

To install a plugin in DeepSeek Harness, run `dsh plugin --profile <name> add <package-or-git-spec>`, then restart the profile. The command comes from the [official CLI reference](https://github.com/deepseek-ai/deepseek-harness/blob/master/apps/cli/reference/README.md). DeepSeek's project page and docs describe the harness as in developer preview, so details can change.

This guide covers the install commands the official docs give, the one extra step for plugins hosted on GitHub, and how to check that a plugin loaded. If you have not set up the harness itself yet, start with our piece on [what DeepSeek Harness is and what it costs](https://claudegpt.si/news/deepseek-harness-what-it-is-cost).

## What you need first

- The harness, called `dsh`. The [README](https://github.com/deepseek-ai/deepseek-harness) runs it with `npx @deepseek-ai/dsh web`, after you install Node.js.
- `pnpm` on your PATH. The `dsh plugin` command hands your arguments to pnpm, and the CLI reference says pnpm must be available.
- A profile name. A profile is a directory of plugins and settings for one setup of the harness. You pick the name, and dsh creates the profile the first time you use it. A name that is not one of the shipped profiles starts with only `@deepseek-ai/dsh-base`.

## How to install a plugin from npm

Plugins ship as bundles. Run:

```
dsh plugin --profile <name> add <package-name>
```

The `--profile` flag must come before the arguments that go to pnpm. The official docs show it with the subagent bundles:

```
dsh plugin --profile <name> add @deepseek-ai/dsh-subagent-codex
dsh plugin --profile <name> add @deepseek-ai/dsh-subagent-claude-code
```

You can add both in one command. To remove one, use `remove` with the same package name.

## How to install a plugin from GitHub

The docs give this example for a git-hosted plugin:

```
dsh plugin --profile tui add github:deepseek-harness/turtle-ui
```

Git installs fetch source code, so the plugin has to build itself during install. It does that with a `prepare` script. pnpm 10 and later blocks that script by default, so the first `add` fails. Do this:

1. Run the `add` command. It fails and prints a pnpm `allowBuilds` hint with a package key.
2. Open `pnpm-workspace.yaml` in the profile directory. dsh points you to it.
3. Copy the exact key pnpm printed into that file, under `allowBuilds`.
4. Run the same `add` command again.

Allowing a build lets the package run code on your machine during install. The docs say to do it only for sources you trust and to pin a commit with `#<sha>`. A built tarball or a local checkout needs no allowance.

## How to install a plugin from a local folder or tarball

Relative paths resolve against the folder where you run the command, not the profile. From a plugin checkout, `add .` installs that checkout. The publishing guide shows both forms:

```
dsh plugin --profile demo add ./hello-plugin
dsh plugin add ./hello-plugin-0.1.0.tgz
```

The tarball comes from `pnpm pack`.

## Why a plugin installs but does nothing

A package becomes an active plugin only if its `package.json` declares a bundle:

```json
"dsh": { "bundle": { "patch": "./cordis.patch.yml" } }
```

Without that declaration, the package installs as a plain dependency. dsh prints a one-time warning and activates no layer. After each successful run, dsh matches the profile's bundle list against the installed packages: a dependency with the declaration joins the stack, and a removed one leaves it.

A bundle can also declare which dsh versions it supports in `engines.dsh`, for example `">=0.2.0 <0.3.0"`. Install and profile startup refuse a bundle whose range your dsh does not meet. Without that field, dsh checks the `@deepseek-ai/dsh*` peer dependency ranges.

## How to check the plugin loaded

The publishing guide gives two commands:

```
dsh --profile demo --dump-config
dsh --profile demo
```

The first prints the composed configuration without starting the harness. Look for a layer named after your package, such as `# == dsh-hello-plugin`. The second starts the profile.

Restart a running profile after any add, remove or update. The CLI reference says a running profile keeps the bundle set it had at startup. For the subagent bundles, the docs add that each one registers only a dormant provider on the next start, and a copied preset must enable the matching tool row for new agents.

## How to remove a plugin

```
dsh plugin --profile tui remove turtle-ui
```

This removes the dependency and its layer from the profile.

## What the docs do not say

The docs we read do not list an official plugin directory or marketplace. The README says only that plugin authors can add the `dsh-plugin` topic to their GitHub repository so people can find it. Because the project is in developer preview and the README warns of compatibility-breaking changes, check a plugin's own README against your installed version before you rely on it.

Also note that another project uses the same `dsh` command name. This guide covers DeepSeek's official harness, which you run with `npx @deepseek-ai/dsh`.

## Frequently asked questions

### How do I install a plugin in DeepSeek Harness?

Run dsh plugin --profile <name> add <package-or-git-spec>, then restart the profile. The command forwards your arguments to pnpm, so pnpm must be on your PATH.

### Why did my DeepSeek Harness plugin install but not work?

The package probably does not declare dsh.bundle in its package.json. Without it, dsh treats the package as a plain dependency, prints a warning and activates no layer.

### Why does installing a DeepSeek Harness plugin from GitHub fail?

Git installs run a prepare script, and pnpm 10 or later blocks it by default. Copy the key pnpm prints into the profile's pnpm-workspace.yaml and run the add command again.

### How do I remove a DeepSeek Harness plugin?

Run dsh plugin --profile <name> remove <package-name>. It removes the dependency and its layer from the profile.

## Sources

- [DeepSeek Harness CLI reference](https://github.com/deepseek-ai/deepseek-harness/blob/master/apps/cli/reference/README.md), DeepSeek AI (GitHub)
- [Package and install a plugin](https://deepseek-harness.github.io/deepseek-harness/en/develop/basic/publish), DeepSeek Harness docs
- [deepseek-ai/deepseek-harness](https://github.com/deepseek-ai/deepseek-harness), DeepSeek AI (GitHub)
