Preface

DeepSeek Harness (command-line tool named dsh) is an agent runtime open-sourced by DeepSeek AI. The official repository summarizes its architecture in one sentence: everything is a plugin. Models, tools, sessions, sandboxes, and interfaces can all be replaced or combined without modifying the core code. It is currently in developer preview, and the API is subject to change.

The default dsh web command opens the in-browser chat interface. During local development, many users still switch to external editors to view files, open separate terminals to run commands, and use Git clients to check diffs. If these capabilities could be integrated into the same web workspace, the need to switch back and forth would be greatly reduced.

The community plugin DSH-better-sidebar was built for this exact purpose: it adds a full workspace to the right (and bottom) of the DSH web interface, including a file tree, editing preview, real terminal, Git panel, and sub-agent tasks, and exposes the ctx.betterSidebar service for other plugins to use. It is important to clarify the source: it is maintained by the GitHub organization omdsh-dev and uses the MIT license. The community plugin directory referenced in this article (https://deepseek-harness-plugin.com) is an independent site and has no official affiliation with DeepSeek / HyperMind, so do not treat it as an official app store.

What is this?

DSH-better-sidebar is a UI enhancement plugin for the DSH web client (web profile). The repository README positions it as “a service-oriented sidebar framework, an out-of-the-box complete workspace”: it adds a right sidebar and bottom panel with built-in pages for file editing, terminal, Git, and sub-agents; third-party plugins can register new sidebar pages and file previews via registerTab / registerFileViewer.

The current version in package.json is 0.12.3, which requires Node.js ≥ 20, and the client platform is declared as web. The repository was created on 2026-08-07. On the day this article was written, the GitHub repository had 1645 stars, while the community directory page showed 925; the two numbers may differ due to caching, so refer to the repository page for the accurate count.

Core Features

Based on the repository README (consistent with the directory page introduction), the implemented capabilities mainly include the following items.

File Workbench. The resource manager lazily loads the directory tree on demand; soft links are displayed according to their target type, directory soft links can be expanded, and broken links are marked in red. The editor uses CodeMirror. Images, Markdown, HTML, and PDF files can be previewed inline. The preview support for Office documents (.docx / .xlsx / .pptx) has been moved from built-in capabilities to the “Recommended Plugins” section of the settings page; when not installed, these files will fall back to code viewing or downloading.

Embedded Browser. Supports opening multiple web tabs, with back, forward, and refresh functions. Content runs in a sandboxed iframe. External links are split by default protocol: HTTP links open in the sidebar, while HTTPS links open in the system browser, and both behaviors can be adjusted separately in the settings page.

Real Terminal. Based on xterm.js and node-pty, it provides a real shell that can be reconnected and replayed after disconnection. The settings allow customizing the shell, and pwsh will be automatically detected on Windows. You can also choose to inject terminal_* tools for the model. If node-pty fails to load, the plugin itself will still be mounted, and the terminal page will display repair prompts without crashing the entire service.

Git Panel. Provides real diffs, VS Code-style diff tabs, commit history, and right-click staging, committing, and reverting operations. The built-in panel does not support push / pull / fetch. The recommended plugin directory in the README includes dsh-git-remotes, which specifically adds remote branch operations without replacing the built-in staging and committing functions.

Background Tasks and Sub-agents. The background task page displays the sub-agent topology, as well as the exit code, real-time output, and forced termination of background tasks.

Dual Workbench and Session Isolation. The right sidebar and bottom panel can be used simultaneously; tabs can be dragged to the edges of columns to split or merge, or dragged across panels. Layout, tabs, and panels are persisted per session, and stale states are automatically cleaned up. When the screen width is less than 768px, the bottom panel is hidden, and the bottom tabs are merged into the right sidebar.

On-demand Loading and Skins. The README states that the startup only pulls approximately 325KB of core code, and heavier dependencies such as the terminal and editor are loaded only when needed. Starting from v0.12.3, it fully consumes DSH design tokens and supports skin switching together with the skin center in dsh-web-ui. The interface text switches between Chinese and English following the DSH language setting.

The settings page turns each capability into an independent toggle in the form of a “sidebar card”, with secondary options in the gear popup. It includes 7 built-in tabs and 6 file previews, using the same ctx.betterSidebar API as third-party plugins for equal capabilities.

Installation and Activation

The prerequisites from the repository README are: you can already run dsh web locally, Node.js ≥ 20, and pnpm ≥ 10. The plugin only declares support for the web platform, so do not expect it to appear in headless configurations.

The installation command given on the community directory page, to be run in the DeepSeek Harness terminal:

dsh plugin add github:omdsh-dev/DSH-better-sidebar

For reproducible installations, the directory page recommends pinning the commit hash:

dsh plugin add github:omdsh-dev/DSH-better-sidebar#<commit>

Replace <commit> with the actual commit hash from the repository. The maintainer’s README also provides an alternative method to install the latest version from npm via the web profile, which is a separate channel from the directory page instructions—choose one:

dsh plugin --profile web add dsh-better-sidebar@latest

If you do not yet have the dsh command locally, the equivalent method provided by the README is:

npx -y --package @deepseek-ai/dsh dsh plugin --profile web add dsh-better-sidebar@latest

After installation, perform a hard refresh in your browser (macOS: Cmd+Shift+R, Windows / Linux: Ctrl+Shift+R). The README notes that DSH will hot-reload client-side changes, so a restart is generally not necessary; you only need to restart dsh when the host half is partially updated.

Both the directory page and the README remind users that the plugin runs with the permissions of the current dsh process, and may execute code during installation. You should inspect the source repository and license before installing. Do not use both npm/GitHub installation and the dsh registry channel at the same time, as the README states that enabling both will cause dual mounting, resulting in two sidebars appearing on the page. If this happens, check ~/.dsh/profiles/web/cordis.patch.yml for any leftover manual mounting entries for better-sidebar and delete the inserted section.

pnpm 11 may block build scripts with an Ignored build scripts error. According to the README, run this command in the profile directory (~/.dsh/profiles/web):

pnpm approve-builds --all

When the terminal prompts that node-pty failed to load, run the repair command given in the README in the same directory, then restart DSH and click retry on the terminal page:

pnpm approve-builds --all && pnpm rebuild node-pty

On Windows, if there is no pre-compiled node-pty binary matching your current Node.js version, you will need to install VS Build Tools to compile it. If you cannot find the profile directory, run dsh web once first to initialize ~/.dsh/profiles/web.

Typical Usage

After a hard refresh, a sidebar should appear on the right side of the web page. You can use the keyboard shortcuts from the README for daily operations:

Operation Keyboard Shortcut
Save edits Ctrl/Cmd + S
Git commit Ctrl + Enter
Close tab Middle mouse button
Split or merge columns Drag a tab to the edge or middle of a column
Reference a file to the input box Hover over the @file button at the end of a file row
Copy file path Right-click a row to copy the relative or absolute path

The tab bar supports horizontal scrolling with the mouse wheel. The settings page allows you to turn off unwanted sidebar cards one by one; on Windows, if the native title bar blocks the top-right buttons, you can enable “Position Compatibility Mode” to reserve space for the title bar.

Opening a text file in the file tree will open it in the editor, while opening images, Markdown, HTML, or PDF files will use the corresponding preview. The HTML preview renders the saved file, and will not reflect unsaved drafts in the editor. Sites that are blocked from embedding by X-Frame-Options or frame-ancestors (arxiv.org is given as an example in the README) will display a reason panel with an “Open in Browser” button.

The Git panel is ideal for viewing diffs, staging, and committing. Do not assume the built-in panel supports remote synchronization by default; install the corresponding extension from the recommended directory on the settings page if you need this functionality.

Registering Sidebar Pages for Other Plugins

Starting from v0.4.0, the plugin exposes ctx.betterSidebar to other plugins in the same process. The following example from the repository README is the minimal tab registration code:

import type {} from 'dsh-better-sidebar'  // Trigger ctx.betterSidebar type merging
export const inject = ['betterSidebar']
export function apply(ctx: Context) {
  ctx.effect(() => ctx.betterSidebar.registerTab({
    id: 'my-plugin:db',
    title: 'Database',
    component: ({ scope }) => <DbView sessionId={scope.sessionId} />,
  }))
}

There are three key points. First, the service only exists on the client half of the browser-side, and the host half does not have ctx.betterSidebar. Second, you need to use import type {} from 'dsh-better-sidebar' to enable type merging so that external plugins can detect this service on Context. Third, wrap the registration call in ctx.effect so that it will be automatically unregistered during uninstallation or hot updates.

After v0.12, additional capabilities were added, including capability detection (version / features), state subscription, tab badges, onOpen / onActivate / onClose lifecycle hooks, updateTab / activateTab / openFile, and plugin-specific settings. Refer to AGENTS.md and docs/external-plugin-guide.md in the repository for the complete field list and matching algorithms.

The dashed card at the end of the “sidebar cards” grid on the settings page opens a tab/preview plugin popup with a recommended plugin directory where you can copy installation commands. Extensions highlighted in the README include Git remote tabs (dsh-git-remotes) and inline video previews (dsh-video-preview). You can discover more extensions using the GitHub topic dsh-better-sidebar.

Use Cases and Notes

It is well-suited for these scenarios: you are already using dsh web for local coding or troubleshooting and want to keep files, terminal, and Git within the chat page; you need to view which files the agent modified and the progress of sub-agents; or you are developing DSH plugins and want to add a page or file preview to the sidebar.

Note the following limitations before use, all from the repository README and not speculative:
- The built-in Git panel does not support push / pull / fetch, and there is no file watcher—directory changes require manual refresh.
- Dragging a terminal tab to another column will remount the terminal and restart the shell.
- The browser sandbox does not have complete login state, and third-party cookies are restricted; some sites require pop-up login. The address bar will block javascript:, data:, file:, and localhost and other local addresses.
- Media and preview routes only allow files within the session’s working directory; Git only calls the CLI and will not write user identity information to the repository.
- You can disable HTML / browser sandbox in settings; after disabling, content will be same-origin with the interface. The README notes that this is only recommended for fully trusted content.
- The platform declaration covers Windows / Linux / macOS. The README states that macOS is the daily validation environment, and the other platforms are mainly covered by unit tests.
- The “Open File” button in the tool bar cannot be intercepted at this time.

For security, repeat: the plugin has the same permissions as the current dsh process, and can read the workspace, open terminals, and call Git. Read the source code and MIT license before installing, and for production or sensitive repositories, it is recommended to pin the commit or npm version instead of tracking @latest long-term.

Summary

DSH-better-sidebar consolidates file editing, preview, terminal, Git, and sub-agent functions into the right sidebar and bottom panel of the DSH web interface, and opens the same registration API to other plugins. It is a community-maintained MIT project and not an official built-in feature of DeepSeek. Installation and capability boundaries are subject to the directory page and repository README; for terminal or dual mounting issues, first troubleshoot using the common problems list in the README.

Directory page: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-better-sidebar/

GitHub: https://github.com/omdsh-dev/DSH-better-sidebar