dsh_workspace_switch
Manifest validPer-workspace activation control: a dialog opened from the workspace row menu switches individual plugins, MCP servers, and skills on or off, and the host applies the choice in that workspace's own ag
dsh-workspace-switch
Per-workspace activation control for DeepSeek Harness: each workspace decides which plugins, MCP servers, and skills its sessions may use, and a dialog on the workspace row edits that decision.
English | 中文
What it does
Two halves, one plugin:
- Host half (
index.js, built tolib/index.js) reads the per-workspace configuration when an Agent is created and applies it to that Agent's own Cordis scope, so two Agents in two workspaces inside one harness process see different capabilities:- a disabled skill is shadowed in that scope by a same-name non-invocable registration, which removes it from the model's skill catalog;
- a disabled MCP server has every
mcp__<serverName>__*tool denied in that scope; - a disabled plugin has the tool names its entry declares denied in that scope. The same half serves the configuration routes the dialog uses.
- Browser half (
src/client/, built tolib/client.js) adds one row to a workspace's...menu. It opens a dialog listing what the running composition offers under each category, with a switch per capability.
A workspace with no entry inherits the deployment's composition unchanged, so the plugin changes nothing until a workspace is configured.
Configuration
Two sources describe one workspace, in increasing precedence:
<DSH_HOME>/workspace-switch.json, whoseworkspacesmap is keyed by workspace directory;<workspace>/.dsh/workspace-switch.json, which replaces the shared entry for that workspace when it exists.
{
"workspaces": {
"E:\\my_project\\godot-game": {
"plugins": { "mcp-godot-ai": { "enabled": false, "tools": ["mcp__godot-ai__run"] } },
"mcp": { "godot-ai": { "enabled": false } },
"skills": { "godot-scene-authoring": { "enabled": false } }
}
}
}
enabled: false switches a capability off for that workspace; an absent entry
means enabled. A plugin entry also declares the tool names the plugin
registers — the gate denies tools by name, so a plugin without tools has
nothing to deny.
The dialog writes the document that currently answers for the workspace: the project file while one exists, the shared store otherwise. Output is published through a temp-file rename, so a reader never sees a half-written document.
Install
The plugin is a DSH bundle: add it to a profile and select it.
dsh plugin add link:/path/to/dsh_workspace_switch
then add dsh-workspace-switch to the profile's dsh.profile.bundles. A new
bundle row loads at the next harness start.
Build
The browser half is a DSH client bundle and must be built; the repository
toolchain is required (the plugin vendors its copy of the client build preset at
scripts/tsdown.client.ts, which resolves the harness sources from the checkout
it sits in).
# from a deepseek-harness checkout
pnpm exec tsdown --config dsh_workspace_switch/tsdown.config.ts # or, inside the plugin: pnpm build
pnpm exec tsc -p dsh_workspace_switch/tsconfig.typecheck.json # typecheck the browser half
node --test "tests/**/*.test.js" # unit tests
lib/ is committed. The package's main and ./client both point into it,
and a clone has neither the harness sources nor a build toolchain, so a
build-from-source install (dsh plugin add github:…) would otherwise install a
package with no entry points. Commit the rebuilt files with any change that
alters them.
A standalone clone cannot run the build: the vendored preset imports the harness
sources (../../packages/…, ../../scripts/…) that only exist inside a
checkout. Build inside the checkout, then commit lib/ here.
Known limitations
- Skills are gated, not unloaded — a disabled skill keeps its files on disk; only its catalog entry and loading are removed for that workspace.
- A plugin needs declared tools — the gate denies tools by name, so
switching a plugin off only removes what its entry names in
tools. - The dialog lists what the Host can address — plugin rows come from the profile's plugin manager (or the read-only inventory); a capability the composition does not expose cannot be configured.
Licence
MIT.
Comments
Loading…
Similar plugins
by whiteS18
MCP server management panel in Settings: add, edit, enable/disable and delete servers across user and workspace scopes with form or JSON editing, and auto-register discovered MCP tools as native conve
★ 0
MIT
JavaScript
Sep 28, 2026
dsh plugin --profile web add dsh-mcp-servers-panelby SanYe-SanJiu
Windows-only process control for the harness: a sidebar button that shuts DSH down through the host's own graceful exit path, an app-window / normal-tab switch on the Plugins card that rewrites the de
★ 0
MIT
JavaScript
Sep 24, 2026
dsh plugin --profile web add dsh-power-switchby pure-craft
DeepSeek Harness plugin: see what your agent can actually reach — skills, MCP servers, system tools with true in-context state, and per-session / per-preset switches
★ 8
↓ 480/wk
MIT
TypeScript
Sep 30, 2026
dsh plugin --profile web add dsh-capability-panelby SeanWang114514
Per-workspace memo/todo panel that auto-captures queued and running user instructions, marks preempted tasks as interrupted, and restores them to their previous state with one click.
★ 0
MIT
JavaScript
Aug 27, 2026
dsh plugin --profile web add memo-notebookby Max-Null
Skill and MCP management center for DeepSeek Harness: browse and toggle user/project skills, add/edit/remove MCP servers hot without restart, with live per-session status in the sidebar.
★ 1
↓ 191/wk
MIT
TypeScript
Oct 6, 2026
dsh plugin --profile web add @max-null/dsh-skill-mcp-centerby functy23
DeepSeek Harness 的 MCP 服务与 Skills 管理器:面板里增删改 MCP 行、扫描导入其他 Agent 配置、管理 Skills(DSH Web 插件)
★ 17
↓ 450/wk
MIT
TypeScript
Oct 6, 2026
dsh plugin --profile web add dsh-mcp-studio