DeepSeek Harness (dsh) for VSCode
Looking for installation & usage? Start with
docs/users/getting-started.md for the
5-minute tour, or the surface & command tables below.
Contributing? See CONTRIBUTING.md for local setup,
CI gates, and the PR checklist, plus
DEVELOPING.md for the 30-second developer orientation.
Run the DeepSeek Harness (dsh) agent runtime inside VSCode. dsh-vscode
does not reimplement the dsh UI — it spawns (or reuses) a dsh web
instance on 127.0.0.1:3080 and surfaces it through seven parallel
surfaces, each tuned for a different task.
Pick what to read
The seven surfaces
| Surface |
Where |
Best for |
In-editor chat (dsh.openInEditorChat) |
Editor tab |
Day-to-day conversation — queue chips, slash popup, mention menus, attachments, ask/approval modals, feedback + stats pills. Multiple windows can be open, each bound to its own session |
Simple Browser (dsh.openPanel) |
Editor tab |
Deep control — full session history, MCP settings, file tree, dsh's own slash-command console |
@dsh chat participant (dsh.chatParticipant: true) |
Chat panel |
Quick conversational entry point from VSCode's built-in chat panel |
Sessions sidebar (dsh-sessions) |
Activity bar |
Browse / switch / locate / open every dsh session this machine knows about |
Models sidebar (dsh-models) |
Activity bar |
At-a-glance provider/model status; jumps into the Models panel webview |
Trajectory panel (dsh.openTrajectory) |
Editor tab |
Read-only wire-event log for the bound session, with save-to-disk |
Agent Team panel (dsh.openTeamPanel) |
Editor tab |
Experimental team view bound to a session's team — requires dsh 0.1.2-alpha.1+ with the experimental agent-team profile |
Every surface operates on the same dsh session store. Session binding is
shared: focusing a session in the sidebar opens (or reveals) its in-editor
chat window — one window per session — and /switch, the webview picker,
and the Simple Browser all resolve sessions through the same store.
The status bar at the bottom of VSCode reflects the current server
lifecycle. The click target is state-dependent: in the stopped
state clicking starts the server (dsh.restartServer); in the
starting / reused / spawned states it opens the panel.
5-second install
code --install-extension dsh-vscode-companion-0.6.12.vsix
(For alternative install paths — Marketplace, source build — see
docs/users/getting-started.md.)
Status bar cheat sheet
| Status |
Meaning |
$(radio-tower) dsh: stopped |
Not launched — click to start |
$(radio-tower) dsh: starting… |
Spawning or cold-cache download in progress |
$(radio-tower) dsh: running :3080 (reused) |
Adopted an already-running dsh |
$(radio-tower) dsh: running :3080 |
Extension just launched dsh |
The prefix $(radio-tower) dsh: comes from
src/host/ui/statusFormat.ts; if the icon glyph
is missing in your theme, the status still parses correctly — only the
icon disappears, the wording stays. If the status never moves past
starting…, open the OutputChannel
dsh-vscode (View → Output → dsh-vscode) — see
docs/users/troubleshooting.md.
Configuration
Only seven settings matter day-to-day — permissionPreset, model,
effort, agentPreset, autoStart, executable, profile. For the
full list including advanced keys, see
docs/users/configuration.md. API keys
are stored in VSCode SecretStorage (dsh-vscode: Set DEEPSEEK_API Key
from the command palette).
Security, license, acknowledgements
- SECURITY.md — supported versions, vulnerability
reporting.
- CODE_OF_CONDUCT.md — Contributor Covenant v2.1.
- License: MIT — see LICENSE.
dsh is upstream DeepSeek Harness; this extension is a VSCode
companion. The two are tracked under
@deepseek-ai/dsh
and dsh-vscode-companion respectively.
The deep dive — wire protocol, transport details, lifecycle channel
topology, project layout, ADR (architectural decision record), build &
test pipeline — lives under docs/developers/.
It is intentionally not in this file; keeping the user-facing README
short is the whole point of the split.