Codex-style /btw command: answer side questions in a conversation-seeded subagent (fork provider), rendered in the UI without entering the main session history.
Install
# from a prebuilt release tarball
dsh plugin --profile web add "https://github.com/JasonQQ/dsh-btw-plugin/releases/download/v0.1.2/jasonqq-dsh-btw-plugin-0.1.2.tgz"
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:JasonQQ/dsh-btw-plugin
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
A Codex-style /btw command for DeepSeek Harness.
/btw <question> answers a side question in a sub-context seeded with the main
conversation, and shows the answer in the chat without ever adding it to the
main conversation's model history. Ask "by the way…" questions freely — the
main context stays clean.
How it works
- The command is registered through
@deepseek-ai/dsh-commands(the same registry that powers/compact,/goal,/plan). - The question is delegated through
ctx.subagents.start("fork", …). Theforkprovider spawns a child agent seeded with the parent's completed turns, so the side question is answered with full knowledge of the main conversation. - The child's answer is returned as a plain command result. Command results are rendered by the UI adapter and never enter the model history — that is the "no pollution" guarantee.
Usage
In any session composer:
/btw <question>
The answer appears as a command result card. It does not become a message the main model sees, so you can reference it yourself without bloating the context.
Install
The plugin ships as a Cordis plugin and plugs into any profile that mounts
@deepseek-ai/dsh-commands and @deepseek-ai/dsh-subagent (both are part of
the shipped @deepseek-ai/dsh-base composition).
Make the package resolvable from the profile, e.g. link it into the shared profile store:
mkdir -p ~/.dsh/profiles/node_modules/@jasonqq ln -s "$PWD" ~/.dsh/profiles/node_modules/@jasonqq/dsh-btw-pluginAdd it to the profile patch layer (
~/.dsh/profiles/<profile>/cordis.patch.yml):- insert: - id: btw name: @jasonqq/dsh-btw-plugin config: provider: forkThe profile patch is read at boot. In the desktop app, restart the app after editing it (the CLI
dsh webrunner hot-reloads its patches).
Compatibility
Harness (@deepseek-ai/dsh-*) |
cordis | schemastery | Status |
|---|---|---|---|
0.2.0-rc.2 |
4.0.4 | 3.18.4 | ✅ Verified — DSH Desktop 2.0.17, end-to-end /btw run (2026-10-01) |
0.1.5-rc.2 |
4.0.2 | 3.18.2 | ✅ Verified — DSH Desktop 2.0.13, end-to-end /btw run (2026-09-23) |
0.1.1-rc.2 |
4.0.1 | 3.18.1 | ✅ Verified — DSH Desktop 2.0.3 |
The command surface this plugin depends on — commands.register(),
CommandInvocation, CommandResult, subagents.getProvider() / start(),
SubagentRun.result / dispose(), SubagentResult.output / stopReason and
the five stop reasons — is unchanged across those lines. The one difference in
0.2.0 is a tightening: SubagentResult.output is now readonly ContentBlock[], which this plugin's filter/map usage already satisfies.
Configuration
| Key | Default | Meaning |
|---|---|---|
provider |
"fork" |
Subagent provider. fork seeds the child with the parent's completed turns (sees the main context); spawn starts a fully standalone child. |
maxDepth |
(unset) | Optional recursion-depth cap for the child; defaults to the harness default when omitted. |
Development
npm test
The tests exercise the handler with a stubbed ctx.subagents seam — no live
model or host is needed.
License
MIT
Links
More in this category
Minglink/dsh-infinite-gen-4★ 2587
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★ 793
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★ 511
Visual, non-linear conversation workspace for DeepSeek Harness — sessions, follow-ups and branches become a browsable conversation map.
Nwflower/dsh-chat-import★ 223
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.
Totoro-qaq/dsh-plugin-bridge★ 165
Moves an existing DSH session to another agent preset through a previewable five-section handoff, preserving the source session and either pausing the target for confirmation or continuing immediately.
Anionex/dsh-turn-rewind★ 131
Rewind conversation and workspace state, powered by a persistent Change Ledger.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.