Preface¶
When running long tasks with DeepSeek Harness (hereinafter referred to as DSH), a common scenario is: the main conversation is modifying code or running commands, and you suddenly want to ask an unrelated question, or have another conversation look up a file. Opening a new session directly requires rebuilding the context; stuffing the question into the main conversation disrupts the rhythm of the current task.
dsh-side-chat targets this scenario: opening a side chat side-by-side next to the main conversation. Both sides are complete DSH sessions that do not interrupt each other. Following DSH’s philosophy of “everything is a plugin,” it loads as a Web plugin and does not modify the core DSH itself.
What is this¶
dsh-side-chat is a DSH plugin maintained by KarlOfLaw, under the MIT license. The current version is 1.2.0, with a badge showing 24 passing tests.
One-sentence positioning: next to a DSH main conversation, open a truly independent, native, context-aware parallel conversation.
It is not a temporary panel floating above the main conversation, nor is it a hand-coded chat interface. Upon first opening, the plugin creates a real Session with a parentSession via DSH’s agents.create/resume and immediately archives it, so it does not appear in the session list on the left side of the workspace. The side chat has its own transcript, independent from the main session, but shares the same workspace.
Core Capabilities¶
Below are the main capabilities listed according to usage concerns, all derived from the plugin’s README and package information.
- True Independent Session: Creates or resumes a Session with a
parentSessionvia DSH’sagents.create/resume, without occupying subagent routing. - Complete Native UI: Both left and right columns render the full
ConversationRoot. Messages, tools, approvals, attachments, input box, model, and permission controls are still provided by DSH. An empty side chat displays the native header and input box before sending the first message. - Context-Aware Main Conversation: The plugin does not copy the main transcript. When the side chat needs context, it retrieves bounded, relevant parent session snippets on demand via
side_chat_context. - Truly Side-by-Side: Only adds a minimal split shell. The divider is draggable; after focusing, fine-tuning can be done with arrow keys, and holding Shift accelerates the adjustment. The side chat’s percentage is limited to 25%–70%.
- Does Not Pollute Session List: The new side chat is archived immediately and does not appear in the workspace’s left session list.
- Quote to Chat: After selecting text in a main message, you can “Quote to Side Chat.” The quote can be previewed and deleted, and no
@or hidden text will remain in the native input box. The quote is only added to the side chat request upon sending. - Hide, Restore, Delete: Hiding only collapses the panel; it can be restored after hiding. When closing, you can choose to safely delete it.
- Native Mode and Models: New side chats default to Standard mode, with options for PTC, Minimal, or Creative mode.
- Session Isolation: Each main session maintains its own side chat state; switching main sessions does not alias to another side chat.
- Compatible with Better Sidebar: The two right-side parallel panels automatically exclude each other and align header controls.
The host side only adds the lifecycle and context capabilities required for the side chat, with the following structure:
Main Session
└─ archived side Session (parentSession=Main Session)
├─ Native DSH Agent / preset / tools / approvals
├─ Independent transcript, shared workspace
└─ side_chat_context → reads relevant parent session context on demand
The client side retains DSH’s registered native conversation component; the plugin has no custom message renderer or input implementation. The split shell is only responsible for layout, the divider, and lifecycle entry.
Installation and Enablement¶
Requires Node.js 22 or higher, and a DSH capable of loading Web plugins.
First, download the plugin package (preferably from GitHub Releases, or use the release/ directory in the repository), then execute the installation command:
# After downloading from GitHub Release:
dsh plugin --profile web add .\dsh-side-chat-1.2.0.tgz
# Or using a copy from the repository:
dsh plugin --profile web add .\release\dsh-side-chat-1.2.0.tgz
After installation, start DSH from the project directory where you want the Agent to operate, open the output URL, and the plugin will automatically load into the Web client:
cd D:\path\to\your-project
dsh web --port 3080
The plugin can be enabled or disabled in the “Side Chat” page in DSH settings. The same page allows you to choose the native Agent mode used by default for new side chats.
For subsequent updates and uninstallation, use the following commands. After updating, DSH Web needs to be restarted:
# Update
dsh plugin --profile web update dsh-side-chat
# Uninstall
dsh plugin --profile web remove dsh-side-chat
Typical Usage¶
After the installation steps above, the plugin is loaded into the Web client. Below is a complete side-by-side usage flow:
- Open the main session, click the message bubble + icon in the header, and the side chat appears immediately without needing to send the first message. The hide and close buttons are located in the top right of the native header.
- In the side chat, select the model, input messages, use attachments, tools, and approval flows just like a normal DSH session.
- Drag the middle divider to adjust the ratio of the two columns; after focusing the divider, fine-tuning can be done with arrow keys, and holding Shift accelerates the adjustment. The side chat’s percentage is limited to 25%–70%.
- Select text in a main message, click “Quote to Side Chat,” and a previewable, deletable quote prompt will appear above the input box. The input box draft itself remains empty, and the quote is only added to the side chat request upon sending.
- Click the panel icon in the side chat header to hide the panel; afterwards, restore the same side chat from the message bubble icon in the main header.
- After clicking the close button, you can choose “Keep Conversation” or “Delete and Close”.
For a side chat selected “Keep Conversation,” the most recently kept one will be restored upon next opening, rather than recreating an empty session.
Suitable Scenarios and Precautions¶
Suitable scenarios: when the main session is running a long task and needs to ask parallel questions, or have another conversation check resources or modify files without disrupting the current rhythm; or to perform an isolated small experiment without appearing in the session list.
Boundaries to understand before use:
- The main session and the side chat share the same workspace. Side effects such as file modifications, command execution, and approvals in the side chat are real; hiding, keeping, or closing the panel does not undo these operations.
- The side chat reads bounded parent session context on demand and does not guarantee containing all details of the main session’s history.
- A single text selection quote retains a maximum of 8,000 characters; the excess will be truncated.
- The current quote entry mainly targets mouse selection; long-press selection and touch operation bar on mobile have not yet been specifically optimized.
- Full session rendering depends on the DSH
SessionProviderBindingContext seam; if the upstream removes this seam, the plugin will throw an explicit error and will not fall back to a custom chat interface. - Safe and complete deletion depends on JSONL session storage and the deletion capability provided by the official local plugin package; if unsupported, data will be preserved and a clear error will be returned.
- Like other DSH plugins, the plugin runs with the permissions of the current dsh process. It is recommended to read the source code and LICENSE (MIT) in the repository before installing to ensure it meets your security requirements.
Summary¶
What dsh-side-chat does is not complicated: it takes “parallel conversation” from a floating layer or hand-coded interface and grounds it in a real, archived DSH Session with a parentSession. It fully reuses DSH native components for UI and capabilities, and the main conversation and side chat interconnect on demand via bounded context. If you frequently need to ask parallel questions next to your main task, it is worth a try.
- GitHub: https://github.com/KarlOfLaw/dsh-side-chat
- Community Plugin Directory: https://www.skillhub.cn/plugins/KarlOfLaw/dsh-side-chat (The directory is an independent community site with no official affiliation to DeepSeek / Hypothesis; information is collected from plugin sources)