DeepSeek Harness Plugin

ouli-1242/dsh-plugin-tool-management

Stars ★ 34 Downloads (30d) 7,668 Category Tools & Capabilities Added 2026-09-15 npm dsh-plugin-tool-management

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 / headers and the plugin token stay 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

Content from the project README on GitHub ↗

Links

More in this category

View the whole category →

Community comments

Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.