Introduction¶
When debugging multi-turn agents in the DSH Web client, several recurring issues often arise: casual notes of decisions and temporary credentials scattered in the chat bubbles become unrecoverable once a branch forks; when the session list is long, important sessions require repeated scrolling to find; and with a cluttered right sidebar filled with files and preview tabs, clicking to close them individually takes a lot of time. The official client’s current UI focuses on session and workspace management, so these issues are largely dealt with by users manually using external notes, lacking a mechanism for in-place storage that flows with sessions.
dsh-handy is a DSH Web client enhancement plugin maintained by dayutech that fills these gaps by focusing on a “session-level notebook + key info panel.” It stores the notebook, key info, session groups, and stars in the browser’s local storage on the device; key info only enters the current session context when explicitly clicked “Re-inject.”
This article is organized based on the plugin’s README, first clarifying the capabilities it provides, followed by installation commands and typical usage.
What is this¶
dsh-handy is a DeepSeek Harness Web plugin positioned as a client enhancement, not a replacement for host functions. It belongs to the “Client” category of plugins listed in the community directory skillhub, is maintained by dayutech, and the repository address is https://github.com/dayutech/dsh-handy.
The core problem it solves is: DSH sessions themselves are conversational flows that lack an independent space suitable for storing “analysis records” and “temporarily unused credentials,” and this information does not automatically accompany the session when forking. dsh-handy uses browser local storage to save this information isolated by session and inherits it automatically when forking, while also conveniently handling interface-level trivial operations like batch sidebar tab closing and workspace sorting.
The plugin only modifies the current Web interface state and does not write to the Host session logs or workspace files.
Core Features¶
The following capabilities are all taken from the feature list and detailed descriptions in the README.
Session Notebook¶
The entry point is the “Notebook” tab within “Conversation / Trace / Notebook” at the top of the session. Each session has an independent text area that does not intertwine with content from other sessions.
- Auto-saves approximately 250ms after input; it also saves on blur, tab switch, or leaving the page.
- Restores after page refresh or reopening the session; syncs across different tabs in the same browser.
- Provides word count, copy full text, and clear current session notes.
- Data is only saved locally, does not sync across devices, and is not automatically sent to the model.
Key Info Floating Bar¶
The entry point is the key icon in the top-right corner of the session page. It is collapsed by default, and the icon displays the number of items when there is content. It is used to centrally record target addresses, SSH account credentials, Web login info, database connection info, and arbitrary custom key-value pairs.
Key points:
- Each item contains “Name / Value / Description (Optional)” and supports copying the value and deleting the item.
- Quick add presets: Target address, SSH account credentials, Web account credentials, Database account credentials, as well as custom items.
- Each item can be collapsed individually; when collapsed, only the name is displayed, but the single-item inject, copy, and delete buttons are still retained.
- Each item has an independent “Inject this item” button that sends only the current item; the “Re-inject all” at the bottom sends all items with values.
- The top of the panel provides “Collapse All / Expand All”.
- The expanded panel can be dragged by the title to move; when collapsed to an icon, it can be dragged by holding the right mouse button.
- The floating bar position is saved per session and limited to the current session workspace; when the right sidebar is open, it moves left with the workspace’s right edge, and double-clicking the title restores the default position.
- If the current session is occupied by another DSH process, injection will prompt “Session is currently occupied.” This is a host write handle limitation, not a silent failure.
Specifying Turn Forking and Fork Inheritance¶
Entering /fork in the chat bubble lists the user turns loaded in the history of the current session. Selecting one of them creates a branch from that turn onward and automatically opens a new session. You can also use the native DSH fork entry.
- Forking from a completed turn continues from the reply after that turn; for an ongoing turn, it forkes from the current progress, and the host completes the unclosed tool calls.
- Both native forking and
/forkcopy the source session’s notebook and key info to the new session. - The copied content includes key info items, values, descriptions, item collapse states, and the floating bar position; it does not copy workspace ownership, session groups, highlighted stars, or model settings.
- Fork inheritance is the
dsh.handy.v1state saved locally. If the source session has not auto-saved the newly typed notebook content, only the most recently saved content may be copied.
Workspace Session Groups¶
Session groups are logical subfolders under a workspace, not real filesystem directories.
- Entry: Workspace row
...→ “New Session Group”; Session group row...manages the group; Session row menu “Join Session Group…” moves the session. - Supports up to 3 levels of nesting; groups and sessions must belong to the same workspace.
- You can add sessions to a group, create new sessions, or move session cards by dragging them onto a session group row.
- Groups and ownership relationships are saved locally and do not write to the Host session logs; cross-workspace drag-and-drop will be rejected with a prompt.
Session Highlighting¶
The entry point is the star on the right side of the session row, or “Mark as Important” in the session row menu. Important sessions have a colored gradient background and a left-side color bar in the left list, making them easy to scan in a long list. Highlight status is saved per session locally and supports cross-window synchronization; it does not change the session content or archive status.
Running Workspace Sorting¶
Workspaces that have sessions running, or sessions with sub-agents running, are automatically promoted to the top of the sidebar; multiple running workspaces are stably arranged in the order of the Host’s original order and restored after tasks end, without permanently scrambling workspaces. Running sessions change the spinner to a more distinct blue with a slight blue glow. This part only adjusts the display order and status color of the Web sidebar, not the session state or workspace data.
Batch Close Right Sidebar Tabs¶
Right-click any right sidebar tab to select “Close Current Tab,” “Close All Tabs to the Left,” “Close All Tabs to the Right,” or “Close All Tabs.” This capability applies uniformly to files, previews, terminals, and subsequent new dock tab types, independent of the tab content type.
- The system’s native “Close” menu item is hidden to avoid duplication with the plugin’s “Close Current Tab,” but the individual X button on the tabs remains.
- Close operations are executed via the sidebar controller and still follow the host’s judgment on which tabs can currently be closed.
Installation and Enablement¶
Install from npm (recommended, pre-built package, no build needed during installation):
dsh plugin --profile desktop add dsh-handy
Install from GitHub source:
dsh plugin --profile desktop add https://github.com/dayutech/dsh-handy
Install from local directory:
dsh plugin --profile desktop add D:\path\to\dsh-handy
If using a CLI profile, replace desktop with the actual profile name. After installation, restart the corresponding Harness process and refresh the page. To uninstall:
dsh plugin --profile desktop remove dsh-handy
You can also add this package to dependencies in ~/.dsh/profiles/<profile>/package.json and ensure dsh.profile.bundles includes dsh-handy.
Version and Compatibility: The current latest version is 0.8.1. The plugin declares engines.dsh as >=0.2.1-rc.3 <0.2.3-0, built and verified on DSH 0.2.2-rc.1; license is MIT. Note that starting from 0.2.2, DSH uses engines.dsh to judge third-party plugin compatibility. If the declared range does not cover the current version, the entire bundle layer will be skipped, and the plugin will appear as “installed but completely unresponsive.”
Typical Usage¶
The following provides a reproducible workflow in the order of “Configure Session → Fork → Maintain Interface.”
- Open a session under any workspace, click the key icon in the top-right corner, and use presets to add two key info items: “Target Address” and “SSH Account Credentials,” filling in the values and descriptions.
Name: Target Address
Value: https://example.internal
Description: Pre-production environment entry
-
Expand the floating bar, drag the title to a convenient position (e.g., top-right of the session area), and double-click the title to restore the default position.
-
Switch to the “Notebook” tab at the top of the session and use short entries to record the issue to be investigated and intermediate conclusions. It auto-saves about 250ms after typing; switching tabs or refreshing the page won’t lose it.
-
Type
/forkfor the current session, select a user turn, and the plugin will create a branch from that turn and automatically open a new session. The new session will carry the source session’s notebook and key info content, and the item collapse state and floating bar position will match. -
Drag the current session card onto a session group row to move it into that group. Cross-workspace drag-and-drop will be rejected with a prompt.
-
Right-click a file or preview tab in the right sidebar, select “Close All Tabs to the Left,” to clean up redundant tabs at once.
Applicable Scenarios and Notes¶
Suitable scenarios: DSH Web users who frequently fork sessions, need to keep troubleshooting notes and temporary credentials within the same session, have sidebar tabs that easily accumulate, and want to organize long lists by workspace using session groups.
Points to note before use:
- Plugin code runs with the permissions of the current dsh process. Before installing, you should check the source code and license to ensure the Host-side patch in
cordis.patch.ymland the injection list indsh.client.injectmeet your security requirements. This plugin does not guarantee the security of third-party plugins, models, or the Host itself. - The notebook and key info are saved in the
dsh.handy.v1key in locallocalStorageon the device, not through the plugin’s own network requests. Key info is plain text data and may contain SSH, Web, or database credentials; do not use them on shared devices or in untrusted browser configurations. - Clicking “Re-inject” sends this content as user messages to the current session queue; you should confirm that the current session and model environment allow processing these credentials.
- Old versions of “Global Grouping” data from 0.2.x are no longer compatible; after upgrading, you need to recreate session groups by workspace.
Conclusion¶
The value of dsh-handy lies in bringing the “session notebook” and “key info panel” together back inside the session, where they originally scattered elsewhere, and letting operations like fork inheritance, session groups, highlighting, and batch closing each return to their proper place. It does not replace host capabilities but simply fills a few gaps at the Web client interface level.
Directory Page: https://www.skillhub.cn/plugins/dayutech/dsh-handy
GitHub: https://github.com/dayutech/dsh-handy