The official plugin page in DeepSeek Harness is read-only: it lists module names but does not explain what they do. To disable a plugin, you must manually edit cordis.patch.yml. The skills side is even worse: 57 skills are installed, and 14 of them are completely invisible to the model. This plugin adds a “Plugin Manager” tab to the same page to close these gaps.

Plugin Management

1. Plugin Description

The interface displays the plugin’s Chinese name and description. The description is obtained by priority: dshhub.summary, the description field in package.json, and the first paragraph of README.md (Markdown markup is automatically stripped). In actual measurements, description covers the vast majority of plugins.

2. Source Badge

The interface determines the source based on pnpm-lock.yaml:
* Official: the package name is in the @deepseek-ai/ namespace.
* Community: the lockfile contains a regular semver version number.
* GitHub direct install: the lockfile specifier is github:owner/repo#tag.
* Local link: the specifier is file: or link:.

3. Hot Reload Switch

Provides one-click disable/enable functionality, implemented through the Entry.update({ disabled }) update channel in Cordis. When disabled, the loader calls await _dispose(fiber) to unregister tools and routes; when enabled, it reruns init() to reassemble. This operation takes effect without a restart. The state is saved in ~/.dsh/plugin-manager.json and automatically replayed after restart.

4. Safe Uninstall

The uninstall process includes snapshot, removal, and validation:
1. Snapshot the entry’s options first.
2. Execute loader.remove().
3. Validate that it has actually been removed; if it still exists, restore the original state using loader.create() according to the snapshot.
Uninstalling official @deepseek-ai/* components is prohibited because it would break startup; the interface grays out the relevant buttons.

5. Noise Filtering

The list automatically filters out non-plugin libraries (regular dependencies without dsh.bundle) and framework-internal entries (such as cordis:include, node:*, etc.).

Skill Management

The Plugin Manager page supports switching between the “Plugins” and “Skills” segments.

1. Available Trigger Methods

The interface displays the skill’s invocation policy:
* Model auto-loading + / command: the model calls it automatically, and it can also be manually invoked with /name.
* Model auto-loading only: visible to the model, but /name is unavailable.
* / command only: invisible to the model; it can only be manually invoked with /name.
* Neither available: disabled.

2. Two Real Switches

It provides two independent switches: model auto-loading and / command availability. The plugin registers a rank 0 shadow provider and sets the policy to false. All consumption points (model catalog, loading guard, command catalog) filter according to the policy, achieving true hot reload.

3. Cleanup Clues

The interface marks skills that are not effective:
* An ineffective SKILL.md in a nested directory: the loader only recognizes <skill name>/SKILL.md; nested directories are ignored entirely.
* Non-skill files mixed in: for example, package.json appears in the root directory.

4. Source and Upgrade

Ownership is resolved from the path:
* The path contains node_modules/<pkg>/: displayed as “Provided by plugin · Upgrade target <pkg> v<version>”.
* The path is under ~/.agents/skills/ or ~/.dsh/skills/: displayed as “User installed”.
* Note: The plugin does not provide an automatic upgrade button because the skill itself has no git repository or installation metadata.

Installation and Enablement

dsh plugin --profile web add "github:Amouren7/dsh-plugin-desk#v0.2.1"

After installation is complete, restart dsh web, and open Settings → Plugins → Plugin Manager.

The page uses lazy loading; the browser may cache an older front end. If the new tab is not visible, press Ctrl+Shift+R to force refresh.

Compatibility and Dependencies

System Requirements

  • DSH: >=0.1.5-rc.1
  • Node: >=20
  • Profile: web

Service Dependencies

The skill features require a deployment that provides the skills and agentPresets services, as well as a resolvable @deepseek-ai/dsh-scope. If any of these is missing, the skill switches will refuse to take effect.

Permissions and Data

Read Permissions

  • The profile’s node_modules (only package.json and README.md are read).
  • pnpm-lock.yaml.
  • Running loader entries.
  • The skill registry.

Write Permissions

  • ~/.dsh/plugin-manager.json (plugin disable/uninstall memory).
  • ~/.dsh/plugin-desk-skills.json (skill switch overrides).

Note: The skill switches do not modify any SKILL.md file; they override the policy through the shadow provider. Deleting the state file restores the default policy.

Uninstall

dsh plugin --profile web remove dsh-plugin-desk

After uninstalling, the two state files mentioned above are retained. If they are no longer needed, you can delete them manually.

License

MIT