One settings panel managing MCP, skills, memory, subagents, prompts and sessions; customize scene combos to switch the whole environment; the Agent can also operate this plugin for you.
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-plugin-tool-management
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:ouli-1242/dsh-plugin-tool-management
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
MCP servers, skills, subagents, prompts, memories and archived sessions for DeepSeek Harness — all in one panel. Bundle them into a scene, swap the whole environment with one click, and roll back to the pre-entry snapshot when you leave.
dsh plugin --profile web add dsh-plugin-tool-management@latest # web
dsh plugin --profile desktop add dsh-plugin-tool-management@latest # desktop
Hard-refresh the browser after installing for web (Cmd/Ctrl+Shift+R), or restart the desktop app — then open Settings → Tools Management. For desktop, open the app once and quit it completely before running the command. An older version usually means registry lag or pnpm's minimumReleaseAge — install an exact version (@0.X.X) instead.
Highlights
Demo
Player refuses to start (browsers with a stricter CSP sometimes block the inline embed)? Watch the same file directly.
Every interface shown is a real screenshot of the running product.
Music: Kevin MacLeod「Limit 70」, CC BY 4.0.
Screenshots
| Scenes | MCP |
| Skills | Subagents |
| Prompts | Memories |
| Sessions | Host |
Three scopes
Every conversation gets its own settings by default. Switch once on the Host page → Scope, and the whole panel plus every model tool follows that layer:
| All global | Per workspace | Per conversation (default) | |
|---|---|---|---|
| Who shares one set | Every conversation | Conversations in the same workspace | Each conversation separately |
| Best for | One person, one machine, consistent everywhere | One project, one environment | Parallel tasks in one project |
| Lost when switching? | — | Nothing is deleted; switch back to restore | Nothing is deleted; switch back to restore |
The selector at the top of the panel jumps to a specific conversation or workspace and shows its own copy; when that layer is locked, the unlock button sits on the same row. Within a layer, every switch resolves top-down: this layer's edit > entered scene > creation snapshot > global.
Scenes work in all three scopes. Under per-conversation, conversation A can sit in “Coding” while B stays in “Writing”, each with its own MCP servers, skills and personas.
What each tab does
Let the agent drive it
Six domains, 26 model tools: list, read, create, update, delete, toggle, enter or leave a scene, apply a prompt, run a persona.
- Only 6 ship enabled (~1.6k tokens/turn); the other 20 stay off. Off means not in the schema at all — the model cannot see them, let alone call them.
- Scoped writes: the model writes to the current layer by default and the receipt says which one;
scope: "global"is required to touch everything. - Confirmation cards: stopping servers, deleting, machine-wide toggles and similar writes ask first; recovery actions (restart, restore, undo apply) go straight through.
- Per-tool control: the model-tool table on the Host page adjusts visibility per layer. All 26 on is ~6.2k tokens/turn; profiles can be saved per task and switched together with a scene.
The Host page
More than a version number:
- Checks: host version, the plugin build actually loaded this run, and whether each action is native / adapted / unavailable, with reasons. If an upgrade quietly breaks something, it shows up here.
- Access token: set / disable / change / delete; writes and plaintext secrets go through it.
- Scope: all global / per workspace / per conversation.
- Injection: per-domain switches, minimal-preset fallback, the two slash-menu entries, sidebar entry.
- Model tools: per-tool visibility for all 26, saved per layer.
- Maintenance: old-backup cleanup, feature overview, recent changes.
| Content | Location |
|---|---|
| MCP definitions | ~/.dsh/cordis.patch.yml (the only file the plugin writes; backed up first) |
| Skill policy / custom directories | ~/.dsh/tool-management/skills-state.json |
| Skills / memories / personas / presets | ~/.dsh/tool-management/{skills,memories,subagents,prompts}/ |
| Memory index / scenes / profiles | ~/.dsh/tool-management/memories-index.json |
| Recycle bins (skills / memories / personas / presets / scenes) | ~/.dsh/tool-management/trash/<domain>-trash/ |
| Archive ledger / retention | ~/.dsh/tool-management/history-*.json |
| MCP sidecars (disabled tools / known tools / notes / settings) | ~/.dsh/tool-management/mcp-*.json |
| Injection settings (six domain switches) | ~/.dsh/tool-management/inject-settings.json |
| Model-tool table / scope overrides | ~/.dsh/tool-management/tool-table.json · scope-overrides.json |
| Runtime log / patch backups | ~/.dsh/tool-management/tool-management.log · backups/ |
- Only its own files: skill sources are never touched; MCP changes go to
cordis.patch.yml, with five backups per patch file. - Token: once set, every write and every plaintext secret requires
x-dsh-token; browser reads and writes use cookies, but plaintext still needs the token. - Process-level boundary is the token: writes normally sit behind the host's browser auth; when the host fence is absent the route falls back to a loopback-only check, which any local process can pass — only the access token gives you a process-level boundary.
- Plaintext on disk: masking happens in the UI only. MCP
env/headersand the plugintokenstay plaintext in the patch file, and backups are neither encrypted nor rotated. The token gate cannot stop disk reads — file permissions are the boundary. - Deletes are recoverable: skills / memories / personas / presets / scenes go to the recycle bin (permanent session deletion excepted), with an optional retention period (keep forever by default).
FAQ
| Symptom | Fix |
|---|---|
| No panel after installing | Hard-refresh the browser; if that fails, restart DSH. |
| The model cannot call a tool | Host page → “Model tools”, make sure the right conversation / workspace is selected (20 tools are off by default). The panel and scripts are unaffected. |
| Actions unavailable after a DSH upgrade | Check the reason on the Host page; run node scripts/doctor.mjs, then node scripts/host-deps.mjs --fix. |
| Version mismatch | Supports DSH 0.2.1 only (>=0.2.1-rc.2 <0.2.2); cross-generation upgrades wait for the plugin to catch up. |
| Duplicate MCP tab | Remove the old loader line from cordis.patch.yml and restart. |
| DSH won't start after a bad edit | Restore the newest cordis.patch.yml.*.bak-* from ~/.dsh/tool-management/backups/. |
Full troubleshooting guide: docs/TROUBLESHOOTING.md.
Docs
| Doc | When to read it |
|---|---|
| Troubleshooting | Missing panel, duplicate tab, actions unavailable after an upgrade, broken sidecars |
| Architecture | How content reaches the model, why one toggle differs between conversations, which file a change lands in |
| Compatibility matrix | Capability matrix per DSH version (verified / untested / unavailable) |
| Changelog · Release overview | What changed in each version |
Development
npm install
npm run build # tsc + sync client
npm test # build + i18n + contract tests
npm run doctor # host compatibility check
lib/ is not committed — run npm run build after cloning, and restart dsh web to pick up changes. Runtime dependencies are only fflate and js-yaml (lazy-loaded); every @deepseek-ai/* package uses the host's copy.
License
MIT
Links
More in this category
Tencent/WeKnora#dsh-weknora★ 35940
Four read-only tools over a WeKnora knowledge base: list knowledge bases, hybrid passage search, reassemble one document's chunks in order, and WeKnora's own cited RAG or ReAct-agent answer with a resumable session id.
superdesigndev/treg★ 6483
Tool catalog for agents: search ~2,600 external endpoints (SEO and SERP, backlinks, social, people and company enrichment, ad libraries, scraping) by the task you want done, read each one's parameters and per-call price, then call it with the credential injected server-side. Ships the skill plus an MCP row that stays disabled until TREG_TOKEN is set.
T-Auto/dsh-ops★ 4787
Provides bash, PowerShell 7, and high-performance Rust tools for DSH on Windows to reduce token usage.
sixtysevenlf/dsh-blender-plugin★ 1461
Lets a DSH agent drive a local Blender over a direct TCP channel with 15 tools: viewport frames, custom-angle renders, Python execution, headless and job offload, transaction rollback, and a planning layer of 228 ops across 34 families.
TencentCloudBase/CloudBase-AI-Toolkit#dsh-plugin★ 1152
Tencent CloudBase backend for DeepSeek Harness — scaffold and deploy full-stack apps from chat, render query results as table cards with paging, sorting and CSV export, preview a deployment on its domain, and call the CloudBase MCP toolset (`mcp__cloudbase__*`) with device-code login.
anysearch-team/anysearch-dsh★ 669
AnySearch-powered real-time web and vertical search provider for DeepSeek Harness.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.