Start with one capability

A useful first plugin is narrow: one structured tool, one settings panel, or one UI contribution. DeepSeek Harness composes capabilities through bundle layers, so your plugin does not need to behave like a standalone application.

dsh is still in developer preview. Use the official development and architecture docs as the source of truth when APIs differ from examples.

Understand the package shape

Community plugins commonly include a package.json, a dsh.plugin.json manifest, source code, and a built lib directory. UI extensions may declare both a host plugin and a browser client bundle.

my-dsh-plugin/
  dsh.plugin.json
  package.json
  src/
    index.ts
  lib/
  README.md

Design the contract first

Define the smallest stable surface the harness or model needs: tool name, input schema, result schema, cancellation behavior, and configuration. Keep administration and health checks out of the model tool list unless the model truly needs them.

  • Validate every model-controlled input.
  • Fence filesystem access to the active workspace.
  • Return structured results instead of log prose.
  • Dispose subscriptions, processes, and tools when the plugin unmounts.

Add a local checkout to a profile

Build your project, then add its local path to a clean development profile. Restart that profile after changing the bundle list.

pnpm install
pnpm run build
npx -y @deepseek-ai/dsh plugin --profile web add file:/absolute/path/to/my-dsh-plugin
npx -y @deepseek-ai/dsh web

Prepare it for discovery

Document prerequisites, the supported dsh version, an exact install command, permissions, configuration, and removal. Add the dsh-plugin GitHub topic so the project appears in the community topic directory.

  • Commit runnable build output if file or Git installs require it.
  • Choose and declare a license.
  • Add tests for registration, configuration, and cleanup.
  • Use a release tag so users can pin a known version.