deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:Relistencode/dsh-extension-hub
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
New in v0.2.18 — the Add-ons block now carries odai-dsh-plugin (profile-wide Odai governance & responsibility routing) and dsh-cost-meter (session cost & token statistics, budgets, balances and Coding Plan quotas).
New in v0.2.15 — the Add-ons block now carries dsh-vision-toolkit: a more powerful vision toolkit — paste an image directly for image understanding, UI restoration, long-screenshot analysis, and more visual tasks.
New in v0.2.8 — one-command install: the package now ships a bundle layer, so dsh plugin --profile web add dsh-extension-hub wires the plugin row into your profile automatically (no more manual cordis.patch.yml edits in the quick start).
New in v0.2.7 — the Add-ons block now also carries dsh-recall: conversation history recall for DSH — literal/fuzzy/semantic retrieval over every past session, fully local & offline.
New in v0.2.6 — A curated plugin store inside DSH: browse 400+ community-curated plugins (11 categories, bilingual descriptions), install from npm in seconds with anti-squatting checks, search every GitHub dsh-plugin repo — and keep them updated. Plus dsh-myrules — a companion plugin to edit your host-wide global instructions from the settings page. And a new Add-ons block in the Plugin Management tab: install, disable, uninstall and update companion features together with the main plugin.
Manage DeepSeek Harness (DSH) skills and MCP servers from one place.
Skills management · MCP servers · Skill import · Plugin management · Plugin market
A service-oriented extension center for DeepSeek Harness: a zero-dependency persistence core and CLI, plus a durable settings-page UI embedded in DSH Web — create / edit / enable / disable skills and MCP servers, one-click import from Claude Code and OpenAI Codex, and a full plugin manager (official vs third-party, enable / disable / uninstall, check & update, plus a Plugin Market with a curated store and GitHub search).
🌏 中文 · English
Prerequisites: DSH installed and running (dsh web works), Node.js ≥ 22, pnpm ≥ 10.
dsh plugin --profile web add dsh-extension-hub@0.2.19
One command: the package ships its own composition patch (bundle layer), so the plugin row is wired into your profile automatically — no manual cordis.patch.yml edits. Restart dsh web, then open Settings → Extension Management.
Install once — use the header's Check Updates button to upgrade later.
| Feature | CLI | Settings UI |
|---|---|---|
| List skills / MCP (enabled state, scope) | ✅ | ✅ |
| Create / edit / delete skills | ✅ | ✅ (form + Markdown body) |
| Enable / disable skills & MCP | ✅ | ✅ |
| Create / edit / delete MCP (stdio / streamable-http) | ✅ | ✅ |
| Import skills & MCP from Claude / Codex and other tools | ✅ | ✅ |
| Project-scope install with folder picker | ✅ (folder cmd) |
✅ (DSH directory picker) |
| Manage plugins (official vs other, enable / disable / uninstall) | — | ✅ |
| Plugin Market: curated store (npm install) + GitHub search | — | ✅ |
| Check & update third-party plugins | — | ✅ |
| dsh-myrules — edit host-wide global instructions (Customize page); search "dsh-myrules" in the plugin manager to disable or uninstall it | — | ✅ |
| Add-on manager: install / disable / uninstall companion features, update together with the main plugin | — | ✅ |
Built-in skills are read-only: the list also shows skills bundled with the
deployment (shipped presets, e.g. the cordis preset's skills) and skills
shipped inside user presets, marked "Built-in/Preset" and not editable /
deletable / toggleable — they belong to the deployment or preset layer. To
override, create a same-name skill in the user or project directory.
The Extension Management page ships a full plugin manager since v0.2.0, with four tabs: Skills / MCP Servers / Plugins / Plugin Market.

The Plugins tab lists every plugin row in your DSH composition, split into two collapsible groups:
@deepseek-ai/* packages (collapsed by
default). They can be disabled but not uninstalled; the cordis:include
entry is the composition loader itself and is marked Core — it cannot be
disabled or removed.Click a plugin to see its details: description, source, repository link, entry id and module name. From the detail block you can:
cordis.patch.yml; takes
effect after a dsh web restart. Disabling warns you that an unknown plugin
may cause serious problems.The Other Plugins group header has Check Updates: it compares npm
packages against the registry and local git clones against their origin HEAD.
Updateable plugins get a green Update Available button next to their status
label — click it to pull the new version (npm tarball or git pull), or use
Update All to update every updateable plugin at once.

The Plugin Market tab has two sub-views:
dsh-plugin (a
free-text query narrows the search). Each result shows stars and an
"Installed" badge when the repo is already present locally.Click a curated/discovered entry to open its detail page — description, stars, category (curated), install method and a link to the repository — then hit Install. Extension Hub:
node_modules without pnpm (no symlink/permission
requirements) and registers a bundle row. Packages installed this way are
managed by Extension Hub itself — keep updating them with its Check
Updates; the dependency is declared in the profile manifest, so a later
dsh plugin / pnpm install keeps it.~/.dsh/extension-hub/plugins/<repo> and verifies it ships a usable
package.json entry. Clone installs support zero-dependency plugins
only: packages with npm runtime dependencies are rejected (there is no
dependency-install step), and packages that rely on a bundle patch
(dsh.bundle.patch) are flagged because a clone cannot apply it. Be aware
that a monorepo root (e.g. the repo of dsh-myrules is this very
repository) clones as the root package, not the target plugin — use the npm
or Add-ons install path for those.cordis.patch.yml (managed insert
block) and self-checks the write.Mixing install paths (Discussion #2889): Extension Hub installs write a profile patch row plus a dependency declaration. Do not combine this with the official
dsh plugin add/list/updatecommands: DSH CLI appends every dependency declaring adsh.bundle.patchtodsh.profile.bundles, duplicating the manual row and crashingdsh webon boot withduplicate loader entry id(see deepseek-harness Discussion #2889). If you already ran adsh plugincommand, remove the duplicated entries fromdsh.profile.bundlesbefore restarting.
After a dsh web restart the plugin appears in the Other Plugins group,
where you can disable or uninstall it (GitHub-clone installs also remove the
clone directory) and keep it updated with Check Updates (npm packages
check the registry; local git clones update via git pull).

Installing runs third-party code. Only install repositories you trust, and check the repository's own README for install instructions — a repo tagged
dsh-pluginmay still be a skill, an MCP server, or need a custom setup.
dsh plugin add/list/update) appends every dependency declaring dsh.bundle.patch to dsh.profile.bundles, duplicating the manual row and crashing dsh web on boot (duplicate loader entry id, see Discussion #2889); the README now carries the same guidance.pnpm install fixes loading after restart).dsh plugin add (bundle) path is detected as installed (its row lives in the bundle's own patch, not the profile patch), so the Add-ons block no longer offers a duplicate install that would crash dsh web; installNpmPlugin refuses packages already registered by a bundle layer; bundle-installed add-ons are uninstalled via dsh plugin remove (guided in the UI) instead of profile-patch deletion.hostPatchPath() no longer auto-probes the profiles directory (a scan could hit a headless profile before web and make the MCP list read/write the wrong composition); extension management is bound to the web profile, with an explicit profile name still supported..mcp.json > project .claude.json > user configs; Codex project > global) instead of the reversed order; the MCP list shows home-level rows ($DSH_HOME/cordis.patch.yml, read-only, badge-marked); composition and state writes are atomic (temp+rename, lock retries) so a crash cannot corrupt cordis.patch.yml; clone-install rejection messages distinguish a missing package.json from a missing build output (git installs fetch sources, not artifacts); README notes that npm-installed plugins stay managed by Extension Hub across later dsh plugin/pnpm runs.file:// URL pointing at the clone's entry file (v0.2.9 pointed at the clone directory, which Node ESM still rejects with ERR_UNSUPPORTED_DIR_IMPORT and crashed dsh web); clone installs also refuse packages with npm runtime dependencies (there is no dependency-install step) and warn when a package relies on a bundle patch that a clone cannot apply. To repair a broken row by hand, edit cordis.patch.yml and point name at the entry file, e.g. name: file:///C:/Users/you/.dsh/extension-hub/plugins/foo/lib/index.js.file:// module names; superseded by v0.2.10 (entry-file URLs).cordis.patch.yml), so dsh plugin --profile web add dsh-extension-hub wires the plugin row into your profile automatically; the quick start no longer requires manual cordis.patch.yml edits.packages/dsh-myrules) — a Customize (个性化) page in Settings that edits the host-wide global instructions ($DSH_HOME/AGENTS.md, injected into every session, new sessions apply immediately); theme-inverted primary buttons across the plugin manager, slim save button, percentage budget meter; rolling .bak backup removed.@scope) row ids match in installed detection and uninstall; README overhaul with new screenshots.- id: row means "override" and silently no-ops; rows must be wrapped in - insert:). Reverted all patch writes to the managed insert-block region; the profile patch was rebuilt to the correct format. This restores plugin loading after restart.@-prefixed names; uninstall removes discover-installed clone directories.dsh-plugin repositories in one click../typert) fix /api/extensionHub/* 404 in layouts where the protocol package loads twice; one-click update downloads the npm tarball directly (no pnpm).lib/host.js) is a TypertRemoteService gateway exposed
under the extensionHub wire namespace; the browser half mounts its Remote
contribution and calls the mounted namespace service.dsh.client.platform: "web" in
package.json; DSH's client-modules system scans it at boot, injects the
boot manifest, and serves the bundle over
/plugins/dsh-extension-hub/client.js — no web bundle rebuild required.lib/ code as the CLI.| Source | Skills | MCP |
|---|---|---|
| Claude | <repo>/.claude/skills/*/SKILL.md, ~/.claude/skills/*/SKILL.md |
<repo>/.mcp.json, ~/.claude.json, ~/.claude/.claude.json |
| Codex | <repo>/.codex/skills/*/SKILL.md, ~/.codex/skills/*/SKILL.md |
~/.codex/config.toml, <repo>/.codex/config.toml |
Conversion: Claude/Codex stdio servers → DSH transport: stdio
(command/args/env); http/sse → transport: streamable-http
(url/headers). Skill name/description/whenToUse are preserved,
license/allowed-tools fold into metadata.
--scope project → <target folder>/.dsh/skills/<name>/SKILL.md--scope global → ~/.dsh/skills/<name>/SKILL.mdEnable/disable rewrites the disable-model-invocation / user-invocable
frontmatter flags; removal deletes the file.
# >>> dsh-extension-hub … # <<< dsh-extension-hub) of
~/.dsh/profiles/<profile>/cordis.patch.yml.<target folder>/.dsh/mcp-servers.yaml and
generates a dedicated preset
~/.dsh/.agent-presets/<slug>-mcp/agent.cordis.yml (based on the shipped
standard preset). Select that preset in the session roster to activate
the servers.DSH itself runs on Windows, macOS and Linux; this plugin has no platform specifics — the CLI works anywhere Node.js runs, and the settings UI follows the DSH Web host.
config.toml; anything
outside them is skipped or reported, never silently corrupted.dsh-skill-filesystem: only
<root>/<name>/SKILL.md and <root>/<name>.md are recognized; names must
be kebab-case.DSH Extension Hub can integrate most plugins, letting users manage and keep every related feature updated in one place. If you are interested, your plugin is very welcome here too — together we can grow the DSH plugin ecosystem. Once integrated, your plugin appears in the Add-ons block of the Plugin Management tab, where users can install, disable, uninstall, and update it together with the main plugin.
Thank you for your open-source contribution to the DSH community!
Open an issue or reach out directly: Open an issue · Relistencode 1405650786@qq.com
This project builds on the open work of the DSH community. Thanks to:
plugins.json, bilingual descriptions, npm mappings).MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。