Adds /btw for one-off, context-aware side questions without tool execution, with independent answer bubbles that can be copied, collapsed, or closed without adding answers to the main conversation.
Install
# from npm (prebuilt)
dsh plugin --profile web add @michengai/dsh-btw
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:MichengAI/dsh-btw
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
DSH BTW
Ask a side question in DeepSeek Harness. Answers only, no tool execution.
简体中文 · Screenshots · Installation · Usage · Changelog · Apache-2.0
DSH BTW is a community-maintained DeepSeek Harness plugin, not an official DeepSeek AI product. Type
/btw your questionin the current conversation to get a context-aware answer in an independent bubble without interrupting the main task. Supports DSH Web and desktop apps that include DSH Web. From1.0.0, hosts outside the supported list are rejected by the version gate and the plugin will not run; installed configuration and main-conversation records are kept.
Features
- Context-aware questions: explain concepts, recap conclusions, or ask a quick question about the current conversation.
- Answers only: no reading new files, browsing the web, running commands, or editing code.
- Independent answer bubbles: render Markdown and formulas, copy answers, collapse, expand, and close individual bubbles. Multiple answers can stay visible.
- Keep the main task going: side questions are answered separately and by default do not add answers to the main conversation.
- Return on request: when you want the conclusion available to the main conversation, ask for it in the question ("send the answer back to the main conversation") and the side ask uses
send_messageto deliver a self-contained answer to the main session. It does not send anything when you did not ask. - Cancel anytime: close a bubble while it is answering to cancel that question.
- Themes and languages: follow DSH light and dark themes and switch between Chinese and English UI.
Screenshots
Side questions in stock DSH
The main conversation stays in place, with the side answer above the composer.

Command menu
Type / and select btw under Commands, or enter /btw your question directly.

Independent answer bubbles
Each answer has its own copy, collapse or expand, and close controls in the upper right.

Side-question settings
Open Plugins, pick @michengai/dsh-btw, and the settings form sits directly on the detail page — the whitelist and the prompt box, pre-filled with the built-in prompt so you can edit it in place.

Drawing from a side question
With pele_draw on the whitelist, a side question can render a diagram. It shows up inside the side-question panel, and the main conversation is untouched.

DSH product ecosystem
For a desktop workbench, download DSH Codex Desktop. Existing DeepSeek Harness installations can add plugins as needed by following each project's README. Below are 11 first-party plugins; consult the corresponding desktop release notes and bundled catalog for what that version includes.
| Plugin | What you can do |
|---|---|
| Codex UI | Organize projects and conversations, search tasks, and navigate chat turns |
| Agency Agents | Choose and summon specialists for your task |
| Skills Manager | Find, enable, create, and import local skills |
| Archive Manager | Search, restore, or clean up archived conversations |
| IM Connect | Send tasks and receive replies through messaging platforms |
| Automation | Schedule tasks and review each run |
| BTW | Ask side questions without interrupting the main task |
| Simplify | Use /simplify to improve code within your Git changes |
| PUA | Guide the Agent to try new approaches after failures, investigate causes, and verify results before completion |
| Code Review | Use /review to request an independent Agent code review and receive the report in the current conversation |
| Codex Pet | View conversation notifications and respond to tool approvals and questions through a desktop pet |
Prerequisites
- An installed copy of DeepSeek Harness.
- Host compatibility: Full DeepSeek Harness
0.2.xline (>=0.2.0-rc.1 <0.3.0-0), verified with0.2.0-rc.1,0.2.0-rc.2,0.2.1-rc.1,0.2.1-rc.2, and0.2.1-rc.3, and forwards-compatible with subsequent0.2.xreleases, alphas, and RCs without requiring routine plugin version bumps. - Legacy hosts prior to
0.2.0-rc.1are no longer supported. The version gate cleanly intercepts breaking changes in the0.3.0generation. Users on0.1.xhosts should install0.1.24. - Node.js 22+ and
dshavailable in your terminal.
Installation
Examples use the web profile; replace it with your target profile. Disable other plugins that provide /btw before installing.
Ask an agent to install it (recommended)
Send the prompt below to any agent that can run terminal commands on your computer. Replace web with your actual profile. Once installed, use the plugin in DSH.
Install the DSH plugin @michengai/dsh-btw into my local web profile by running: dsh plugin --profile web add @michengai/dsh-btw@latest --registry=https://registry.npmjs.org/. Then run dsh --profile web --dump-config, confirm the configuration includes michengai-btw, and explain how to reload DSH and start using the plugin.
Install manually from npm
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
dsh plugin --profile web add @michengai/dsh-btw@latest --registry=https://registry.npmjs.org/
Reloading
Install or update after current tasks finish, as desktop apps may reload automatically. If the change has not taken effect, use the desktop app's reload action or restart the dsh web service. Refreshing the browser alone is not enough.
Installing @latest on a host before 0.2.0, or on a 0.2.1 alpha, is rejected by the version gate, and the plugin will not run. On 0.1.x, install 0.1.24 instead. Rejection does not delete existing configuration or main-conversation records.
Usage
Ask about selected text
Select text within a single conversation message, choose Ask BTW from the compact selection toolbar, and enter a question or choose Explain this. Enter sends, Shift+Enter inserts a newline, and Esc cancels. Answers use the existing BTW bubbles with an expandable quote.
- Supports prose, lists, and code text; quotes are limited to 8,000 UTF-16 code units including whitespace and are never silently truncated.
- The quote is frozen when the menu opens. Other context comes from completed main-chat content at send time.
- Main-composer drafts are preserved. Cross-message selections, editable fields, and tool output do not show the menu.
- Add to conversation appends a quote to the existing draft without sending. After insertion, focus returns to the composer; insertion is blocked while a message is being submitted. Right-click keeps the browser's native menu.
- Keyboard selection is supported inside focused message elements: release Shift to focus the toolbar. Browsers without the Popover API use a fixed-position fallback, which may be clipped by the host layout.
- Coexists with
dsh-better-sidebar: BTW handles conversation text only; file previews and editors retain the sidebar plugin's own Add to conversation action without a duplicate toolbar. - This entry uses host DOM markers. Unrecognized layouts keep their normal context menu;
/btwremains available.
Command entry
In a conversation with existing context, enter:
/btw Summarize the proposed plan in one sentence.
| Goal | Action |
|---|---|
| Ask a side question | Submit /btw your question, or choose btw from the / menu. |
| Read the answer | Wait for the answer in the independent bubble above the composer. |
| Copy an answer | Click the copy icon in the bubble's upper right. |
| Collapse or expand | Click the collapse or expand icon. |
| Cancel a question | Close its bubble while it is running. The main task is unaffected. |
| Dismiss an answer | Close the completed bubble. |
| Ask again | Submit another /btw question. Each question is independent. |
Use the regular conversation to run commands, edit code, or continue the main task. BTW can only answer using existing context.
BTW accepts text only. Side questions with images or files are rejected without clearing the draft or attachments; remove the attachments before retrying.
Usage Notes
- Each question is independent and uses completed content from the main conversation at the time you ask. It does not include an answer still being generated or previous side questions.
- Bubbles are not restored after refreshing the page. Copy any answers you want to keep first.
Settings
Both entries are optional. Leaving them empty keeps the built-in behaviour: text answers only, with the shipped prompt.
Open Plugins, find @michengai/dsh-btw, and open Configure on its row. The page sits in the same place as the configuration page of dsh-subagent-default-model.
| Field | Effect |
|---|---|
| Allowed tools | Tool names the side question may call in addition to send_message, one per line (for example pele_draw). Empty allows text answers only, which is the default. |
| Custom prompt | Instruction text that replaces the built-in side-question prompt. The box is pre-filled with the built-in prompt so you can edit it in place; saving it unchanged restores the default. |
Notes:
- The whitelist widens what the side question may call; the main conversation is never restricted by it. A name that does not exist simply allows nothing.
send_messageis not a whitelist entry. Delivering an answer back to the main conversation stays bound to the rule that it may only target the side question's own parent session, so a whitelist entry cannot turn it into "send to any agent".- The custom prompt replaces the instruction prefix only. The tool-permission sentence and the reply-channel sentence are always appended, so the model never believes it can call everything.
- Changes apply to the next side question without reloading the plugin.
- The permission sentence names the allowed tools, so widening the whitelist changes the side-question prompt. That prompt is a trailing user message; the tool list and system prompt stay byte-identical to the main conversation, so parent prompt cache reuse is unaffected.
Example: let a side question draw diagrams
dsh-pele provides the pele_draw tool, which renders Mermaid source into an SVG card inside the conversation. Add pele_draw to Allowed tools and a side question can draw too.
Note:
dsh-peleis a recent plugin that is not published to npm and not in the plugin marketplace yet, so it cannot be installed by searching the marketplace. Clone the repository and install itsplugindirectory into your profile:git clone https://github.com/hesheng01/dsh-pele.git dsh plugin --profile <profile> add <absolute-path>/dsh-pele/pluginThe first install needs a Host restart.
Uninstallation
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
dsh plugin --profile web remove @michengai/dsh-btw
Reload DSH afterward. Disabling or updating the plugin does not delete the main conversation's records.
Development
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
npm ci --ignore-scripts
npm run check
npm run check runs type checking, tests, and a build.
Development and builds target 0.2.1-rc.2. npm run test:compat builds with that baseline and runs the test suite on each of the four isolated host versions, using a test model adapter. DOM component tests do not replace live-browser acceptance.
GitHub and npm both include a ready-to-run lib; after changing source, run npm run build before committing.
To install from source, run dsh plugin --profile web add . --ignore-scripts from the project directory, then reload DSH.
License
Apache-2.0. Copyright 2026 MichengAI.
Links
More in this category
Minglink/dsh-infinite-gen-4★ 3687
System-prompt armor plugin for DeepSeek models: appends an unconditional-compliance prompt section at order 100, exposes a profile tool with calibration metadata, and shows a realtime armor-status badge driven by a session projection.
ranxianglei/billion-context★ 3370
The official billion-context plugin: a context-compression plugin for small context windows (a 100K context is enough), token savings (5x fewer tokens), and month-long single sessions (billions of tokens).
liangmianya/dsh-synapse★ 624
Visual, non-linear conversation workspace for DeepSeek Harness — sessions, follow-ups and branches become a browsable conversation map.
MichengAI/dsh-archive-manager★ 268
Adds an archived-sessions page in Settings to search, restore, and delete archived DeepSeek Harness sessions by workspace.
Nwflower/dsh-chat-import★ 266
Import full-fidelity chat histories from 13 coding agents (Claude Code, Codex, ChatGPT, Cursor, Gemini, opencode, and more) as resumable DeepSeek Harness sessions, with reverse export back to Claude Code.
SiriLee/dsh-rewind★ 213
In-place conversation rewind in the same session window without forking (Claude Code /rewind semantics): a per-message ↶ button cuts the model context back to any user message, with an optional Claude-Code-style file restore from disk-persisted before-backups.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.