Preface¶
The core philosophy of DeepSeek Harness (dsh) is “Everything is a plugin”: models, tools, sessions, sandboxes, and the Web UI can all be replaced or reconfigured at the configuration layer. The official repository has made this very clear, and the source code for the developer preview has been made public. When actually launching the web interface with npx @deepseek-ai/dsh web, the middle column is usually still the session view: when the agent edits files in the sandbox, the user needs to verify the content, and often has to open another editor or switch back and forth between tabs.
The community plugin dsh-workbench addresses this interface gap: it adds a VS Code-like three-column layout to the Web GUI – the left sidebar remains unchanged, the middle column switches between “session” and “file content”, and the right side permanently displays the Explorer file tree. When a file is clicked, the middle column becomes a Monaco editor; when opening Markdown files, you can also switch to the rendered preview. It is maintained by Dpf555, licensed under MIT, and the repository address is Dpf555/dsh-workbench. The community directory currently categorizes it under the “Memory” section, with 6 GitHub stars. Based on the README and package.json, it solves the workspace layout problem, not cross-session memory.
One important note first: the community plugin directory (deepseek-harness-plugin.com) is an independent website and has no official affiliation with DeepSeek / Horizon Robotics, and should not be treated as an official app store. The following content is organized after cross-checking the directory details page, GitHub README, package.json and source code.
What is this¶
dsh-workbench is a Cordis plugin for the DeepSeek Harness Web GUI, with the npm package name @dsh-local/dsh-workbench. The current package.json version is 0.2.0, and dsh.client.platform is declared as web. It is maintained by Dpf555 and licensed under MIT.
The problem it solves is specific: the default client shell does not have public extension points for a “permanent right sidebar + switch middle view by clicking files”. This plugin fills this gap by adding an Explorer slot, and uses Monaco (VS Code’s editor core, fixed at version monaco-editor 0.52.2) to turn the middle column into an editable code view.
The layout can be understood as shown in the README:
┌─────────┬──────────────────────────┬────────────┐
│ Left │ Middle: Session ⇄ File │ Right: File│
│ Sidebar │ Content │ Tree: │
│ (unchanged)│ Click file → Monaco Editor │ Explorer │
└─────────┴──────────────────────────┴────────────┘
The host half registers the /wb/* static assets and file operations under /wb/api/ in index.js; the browser half loads /wb/workbench-client.js via client.js. File read/write operations go through DSH’s ctx.fs and are sandboxed by the current session’s workspace.
Core Features¶
Right-side Explorer¶
The right column is a permanent file tree, designed with reference to microsoft/vscode, and uses the official VS Code seti font icons. The repository has submitted assets/seti.css, seti-map.json and seti.woff.
The capabilities listed in the README include:
- Expand / collapse directories
- Create new files, create new folders
- Refresh, collapse all
- Panel can be resized; the width range is 240–420px as noted in the patch notes, with a default of 300px
- Collapse with «; after collapsing, a 28px narrow strip remains on the right, which can be clicked to re-expand
The root of the file tree is not the entire disk, but the workspace of the currently active session, corresponding to the session’s header.cwd, which is the sandbox boundary of that session. When switching sessions, the right sidebar and editor tabs will be rebuilt. When there is no active session, it falls back to the deployment root of sandboxPolicy, which can be fixed in the profile’s cordis.patch.yml.
Middle Column: Monaco Editor¶
When a file is clicked, the middle column switches from the session view to the code editor. The editor is monaco-editor 0.52.2, and the README states that it provides:
- Multiple tabs
- Syntax highlighting
- Minimap
- Ctrl+S to save
- Unsaved dirty marker
- “Reload / Force overwrite” prompt when save conflicts occur (writes use versioned CAS to prevent overwriting each other)
When editing, the bottom input box and docked bar will automatically hide, and the editor will fill the entire column. You can switch back to the session view using the top “Conversation / Code” tabs, or the “Back to Session” button.
index.js sets the single-file read limit to 5MB; binary files are rejected as FS_NOT_TEXT and will not be opened as text.
Markdown Preview¶
When opening a .md file, a “Preview” button will appear on the tab bar, allowing one-click switching to the rendered view, which updates in real time as you edit. The renderer is built into the plugin and does not require additional dependencies.
The README states that it covers a subset of GFM: headings, bold/italic text, inline code and fenced code blocks, lists and task lists, blockquotes, tables, links, images, and horizontal rules. Nested lists, footnotes, and HTML passthrough are not currently supported – all HTML is escaped to prevent injection attacks.
Security Boundaries¶
All file operations go through DSH’s ctx.fs. The host half also performs an additional path sandbox check: first parse the workspace root, then use fs.contains to verify that the target is within the root, returning outside-workspace if it crosses the boundary. Writes include version numbers, and FS_STALE_VERSION errors are treated as conflicts rather than overwriting directly.
The client will pass the current active session ID to every /wb/api/* request, and the server uses sandboxPolicy.resolve({ session }) to determine the sandbox root. The operations exposed by index.js are: describe, listDir, readFile, writeFile, createFile, createDir, assetText.
Installation and Enablement¶
The installation command given on the directory details page, run in the DeepSeek Harness terminal:
dsh plugin add github:Dpf555/dsh-workbench
For reproducible installations, pin the commit hash as shown on the directory page. As of 2026-08-15, the latest commit on the repository’s main branch is 16f20acf544abcefa9e40b6159fd1b9badd425a6:
dsh plugin add github:Dpf555/dsh-workbench#16f20acf544abcefa9e40b6159fd1b9badd425a6
Just running this single command is usually not enough to get the full three-column interface described in the README, for two reasons.
First, the Monaco distribution is not included in the repository. The assets/vs/ directory needs to be downloaded with npm run setup:assets, which is approximately 13MB; scripts/install-profile.mjs will check for assets/vs/loader.js and exit immediately if it is missing. The repository already contains the UI bundle and seti icons, but not the editor core files.
Second, the three-column layout relies on three patches to the DSH checkout. The README notes: without applying the patches, there will often only be floating windows and no right sidebar. The patches are based on DSH 0.1.0-rc.6 and directly modify the client bundle in the checkout; DSH reads these files on demand with cache-control: no-cache, and a hard refresh will take effect without needing to rebuild.
The full steps given in the README are as follows. The prerequisites are Node.js ≥ 18, git, and network access to the npm registry:
git clone https://github.com/Dpf555/dsh-workbench.git dsh-workbench
cd dsh-workbench
# 1. Download monaco assets and generate seti icons (~13MB)
npm run setup:assets
# 2. Install to DSH profile (loads /wb routes and client bootstrapping after next `dsh web` restart)
node scripts/install-profile.mjs --profile web
# 3. Apply three-column layout patches to the current DSH checkout
node scripts/apply-patches.mjs --checkout <checkout-root>
# When --checkout is not passed, the script will try to detect the checkout under ~/.npm-cache/_npx
Then restart dsh web and perform a Ctrl+F5 hard refresh in the browser.
The checkout root refers to the directory containing node_modules/@deepseek-ai/. When installing via npx, the common location is under ~/.npm-cache/_npx/. install-profile.mjs will package the plugin into ~/.dsh/profiles/web/node_modules/@dsh-local/dsh-workbench/ by default (the root directory can be changed with the DSH_HOME environment variable), and append the line workbench to the profile’s cordis.patch.yml.
The three patches each perform one task:
1. ui-layout.patch: Add a 4th grid track explorer to AppFrame, including a slot, resize handle, and toggleExplorer
2. ui-conversation.patch: Expose window.__DSH_CONV_BRIDGE__[sessionId].setView, allowing switching the middle view only after clicking a file
3. ui-sidebar.patch: Attach the UI bundle on page load, and self-heal after refresh
After upgrading DSH, if the patches fail to apply, you will need to regenerate them against the new bundle. The README recommends using git diff --no-index to compare the original and patched files.
Usage¶
Follow the operation order from the README:
1. Hard refresh the page, and the file tree should appear in the right column.
2. Click a directory to expand it, then click a file to switch the middle column to Monaco, with the input box hidden.
3. Press Ctrl+S to save. You can switch back using the top “Conversation / Code” tabs or the “Back to Session” button.
4. You can create new files or folders, refresh, collapse all, or collapse the panel from the right column header; drag the left edge to adjust the width.
After modifying index.js or client.js, you need to restart dsh web and perform a hard refresh again. Session-level workspace parsing relies on the sessions service injected by the host half, so refreshing the frontend alone is not sufficient.
Uninstallation also follows the README:
1. Delete the line - insert: workbench from <DSH_HOME>/profiles/web/cordis.patch.yml, then restart dsh web
2. Delete the directory <DSH_HOME>/profiles/web/node_modules/@dsh-local/dsh-workbench/
3. Revert the patches: reinstall the corresponding npm packages (npm i @deepseek-ai/dsh-client-ui-{layout,conversation,sidebar}@0.1.0-rc.6 and overwrite the checked-out lib/client.js), or run git apply -R patches/*.patch
Applicable Scenarios and Notes¶
It is suitable for users who are already using dsh web and want to browse and modify the current session’s workspace files on the same page. It is not a terminal TUI, nor a memory storage for Agents. There are other repositories with the same or similar names on GitHub (such as workbench / explorer plugins maintained by other developers), so be sure to install Dpf555/dsh-workbench using the command listed on the directory page.
Be aware of these limitations before use:
- ctx.fs currently does not have rename / delete contracts, so renaming and deleting files are not supported yet.
- Binary files cannot be read as text; the single-file read limit is 5MB.
- When no session is open, the right sidebar may still be visible, but clicking files will not switch the middle view (the view cycle is session-level), and the file tree will display the deployment root at this time.
- Markdown preview only covers the GFM subset listed above.
- The patches are targeted at 0.1.0-rc.6. DSH is still in developer preview, and changes to the client bundle may break the patches.
The plugin runs with the permissions of the current dsh process, and may execute code during installation. The directory page also includes the same warning: check the source code repository and license before installing; for reproducible installations, pin the commit hash. The community directory is not an official app store, so do not decide whether to install based solely on category names or star counts.
Summary¶
dsh-workbench complements DeepSeek Harness’s web session interface into a workspace with “left sidebar unchanged, middle column switching between session and editor, right sidebar permanently displaying file tree”. The editor uses Monaco 0.52.2, Markdown files can be previewed, and file operations are restricted to the current session’s workspace. For the three-column layout to fully work, in addition to running dsh plugin add from the directory page, you also need to download the Monaco resources and apply the three patches to the DSH checkout as described in the README.
Directory page: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-workbench/
GitHub: https://github.com/Dpf555/dsh-workbench