deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
The plugin marketplace for DeepSeek Harness (DSH): browse, review, and install DSH plugins from inside DSH's own Settings UI — with evidence-based install safety, consent-gated install scripts, curated solution packs, and zero telemetry.
中文文档:README.zh-CN.md(界面语言跟随 DSH 自动切换)
DSH Plugin Marketplace is an out-of-tree, installable DSH bundle that adds a full plugin marketplace to DeepSeek Harness. It is not part of the official DSH repository, requires no changes to DSH source code, and is not a standalone web product. Once installed into the web profile, DSH's Host Loader mounts the marketplace Host plugin, and the package's declared dsh.client browser entry registers itself under Settings → Plugins → Marketplace. The UI is bilingual and follows DSH's display language automatically (中文 / English).
At a glance:
dsh-plugin topic — no GitHub account or token needed to browse.
From npm:
dsh plugin --profile web add @w2112515/dsh-plugin-marketplace
Or pin an immutable commit from GitHub (this repository commits its built lib/, so no prepare runs on your machine):
dsh plugin --profile web add github:w2112515/dsh-plugin-marketplace#<40-char-commit>
Regular users need no GitHub token. Automatic installs require the Host to run pnpm 11 (the plugin also tries corepack pnpm); consent-gated script installs require pnpm ≥ 11.7. When no package manager exists, the WebUI keeps browsing and shows a recovery hint instead of a fake success. Uninstall: dsh plugin --profile web remove @w2112515/dsh-plugin-marketplace.
The default catalog is served from this repository's GitHub Pages. During development you can override it:
$env:DSH_PLUGIN_MARKETPLACE_CATALOG_URL = 'https://w2112515.github.io/dsh-plugin-marketplace/plugin-marketplace/catalog-v1.json'
dsh plugin --profile web add D:\Work\dsh-plugin-marketplace
dsh --profile web --dump-config
dsh web
Automatic installs pin an immutable 40-character commit and always go through capability preflight → short-lived review plan → confirmed execution, with rollback of the profile manifest, lockfile, and workspace config on failure. Eligibility is decided by evidence at the pinned commit:
| Catalog entry | What the scanner proved | What happens on install |
|---|---|---|
| Automatic install | Every install target (entry files, patch) exists in the pinned commit's git tree | pnpm add --ignore-scripts — third-party lifecycle scripts never run |
| Needs script review | Targets are absent (build output not shipped), but the package declares lifecycle scripts | Scripts are shown verbatim in the review step; after your explicit consent, the Host installs once with --allow-build=<name> instead of --ignore-scripts, scoping script execution to exactly the reviewed package within that single invocation. Nothing is written to allowBuilds; consent is never persisted |
| Manual install | Neither of the above | Repository link only; the marketplace never runs anything |

A pack is a curated list of plugin repositories — nothing more. A repository becomes a pack by carrying both the dsh-plugin and dsh-plugin-pack topics plus a dsh.pack.json manifest:
{
"schemaVersion": 1,
"name": "My Essentials",
"description": "A curated starter set",
"items": ["owner/plugin-a", "owner/plugin-b"]
}
items holds 1–50 owner/repo strings; resolution to stable repository ids happens at scan time against the catalog itself, so renames never rewrite identity silently.install N of M count. Pack cards also disclose the install composition up front (7 one-click · 1 script-review · 1 manual), computed from catalog truth at scan time.FEATURED_MARKETPLACE_PACKS), then freshness. Curation follows 宁缺毋滥 (quality over quantity): a missing capability slot stays empty rather than being filled with an unproven plugin.If you use Codex, Claude Code, or Cursor to author a pack, install the portable dsh-marketplace-publish Skill. This page and the scanner remain the admission rules.


Ratings borrow GitHub's native reactions: every catalog plugin gets a ballot comment under the ratings issue, and a 👍/👎 reaction on it is a vote — one vote per real GitHub account. Detail pages show an overall window plus a trailing 90-day window, and no verdict appears below 10 votes. The client is read-only; voting itself happens entirely on GitHub, so the marketplace never holds your credentials.
The marketplace is agent-native: the Host plugin registers four tools the DSH agent can call in any session — marketplace_search, marketplace_detail, marketplace_install, and marketplace_manual_guide. Search and detail are read-only. Installs run the same plan→execute pipeline as the WebUI, and every call asks for one-time human approval with the plugin name, pinned commit, and risk signals in the prompt — consent is never persisted and never bulk-granted. Script-gated entries are refused by design (verbatim script review stays in Settings → Plugins → Marketplace); manual entries are never executed by the marketplace — the guide tool fetches the repository's own install instructions for the agent to follow with its ordinary shell tools. Plugins activate after a dsh web restart. Set agentTools: false in the bundle config to disable the agent surface.
An agent can also install the marketplace itself with its ordinary shell tool:
dsh plugin --profile web add github:w2112515/dsh-plugin-marketplace#<40-char-commit>
dsh --profile web --dump-config # verify the bundle layer
# restart dsh web to activate
The marketplace is read-only against a static catalog and never phones home: no install counts, no telemetry, no analytics endpoint. There is deliberately no server to collect them — the catalog is plain JSON on GitHub Pages, and every install decision happens on your machine. Popularity signals come from GitHub's own public data (stars), nothing else.
dsh.bundle.patch.settings.plugins.tab Slot contribution providing search, category filters, detail pages, risk signals, review confirmation, and solution packs./api/plugin-marketplace JSON API. DSH's static Typert Remote manifest is untouched.dsh-plugin topic. Only statically validated, non-archived bundles enter the public catalog; rejects are kept in the workflow artifact. Searches that hit GitHub's 1,000-result cap are bisected by creation-date windows. Only the central scanner uses the repository's own GITHUB_TOKEN.dsh-category-<slug> topic or conservative whole-word tokens; a plugin with no honest signal stays uncategorized rather than being misfiled.To be discoverable, your repository needs the dsh-plugin topic, a package.json declaring dsh.bundle.patch, and a valid cordis.patch.yml. An optional dsh-category-theme|memory|usage|skill|security|channel|ui|tool|provider topic sets your catalog category explicitly.
To qualify for automatic install, the files your bundle loads must exist in the git tree at the pinned commit — commit your built output (e.g. lib/), the way this repository does. If built output is intentionally not committed and your prepare/install scripts produce it, users will see your scripts verbatim and can consent to run them per install; the consent never extends beyond the reviewed commit.
If you use Codex, Claude Code, or Cursor to list a plugin, install the same dsh-marketplace-publish Skill. It does not replace the rules above.
The bundle's patch row id is plugin-marketplace. Override the full config in $DSH_HOME/profiles/web/cordis.patch.yml (patch config is replaced wholesale, not deep-merged — write every field):
- id: plugin-marketplace
config:
catalogUrl: https://w2112515.github.io/dsh-plugin-marketplace/plugin-marketplace/catalog-v1.json
maxAgeMs: 172800000
timeoutMs: 15000
maxBytes: 15000000
dsh-plugin-marketplace/
├── package.json
├── cordis.patch.yml
├── src/
│ ├── index.ts # Host plugin & same-origin API
│ ├── catalog*.ts # schema, network, LKG cache, queries
│ ├── profile-operations.ts # plan/confirm/rollback, consent-gated execution
│ └── client/ # WebUI Slot plugin (zh/en)
├── scripts/ # GitHub scanner (plugins + packs)
├── website/public/ # workflow-generated static catalog
└── .github/workflows/ # CI and the daily Pages publication
Requires Node.js ^22.19.0 || >=24 and pnpm 11.
cd D:\Work\dsh-plugin-marketplace
pnpm install --frozen-lockfile
pnpm run build
pnpm run check
pnpm pack --dry-run
deepseek-ai/deepseek-harness.CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: plugin-marketplace。