deepseek-harness-vscode
DeepSeek Harness (DSH) for VS Code — AI coding with native diffs, tool approvals, persistent sessions, and Trace insights. | AI 编程助手:原生 Diff、工具审批、持久会话与 Trace 分析。
- Stars
- 10
- Language
- TypeScript
- Created
- Aug 13, 2026
- Updated
- Sep 6, 2026
Introduction
DeepSeek Harness for VS Code
Your coding agent, with every change in view.
Bring DeepSeek Harness (DSH) into VS Code: work with your code, review native diffs, and follow each task with built-in Trace and usage insights.
English | 简体中文
Install for VS Code · Open VSX · Download VSIX · Changelog
An independent community project. Issues welcome.
For JetBrains IDEs (IDEA, PyCharm, etc.), please see dsh-intellij-integration.
Why DSH?
- See what changed. Review tool edits in VS Code's native side-by-side diff, even outside a Git repository.
- Decide before execution. Approval cards show commands and target files, with proposed diffs for supported file writes.
- Start with context. Bring files, selections, Git diffs, or paused debugger state into a task without copying everything by hand.
- Pick up where you left off. Resume persistent sessions and follow tools, subagents, Todos, and token usage in the Activity panel.
Quick start
Requires VS Code 1.106.0 or later and a configured DSH model provider with credentials.
- Install the extension from the Marketplace or Open VSX links above, or search for
harcochen.dsh-vsc-integrationin Extensions. - Open chat. Open and trust your project folder, then run
DSH: Open Chatfrom the Command Palette. The extension automatically starts or connects to a Runtime; by default, it attempts a managed Runtime download when no usable environment is available. - Set up your provider. Run
DSH: Configure API Keyfor DeepSeek credentials. For other providers, useDSH: Open dsh Web UI in Browser. Select or register a DSH Workspace, then choose a model. - Give it a task. Type
@to reference a file, or right-click a selection for DSH actions. Follow the task, respond to approval requests, and open diffs from tool cards to review the result.
A DSH Workspace groups sessions in Harness and can be associated with a project path. When using the same Runtime, you can continue sessions created in the Web UI.
Try it on real work
| Your task | A place to start |
|---|---|
| Understand unfamiliar code | Select code and use the DSH explain action: “Walk through the execution flow and edge cases.” |
| Review a change | Use the DSH review action on a Git diff in Source Control: “Check these changes for regressions and point to the relevant lines.” |
| Investigate a breakpoint | While paused, run DSH: Explain Current Debug State to attach context including the call stack and local variables. |
| Continue earlier work | Switch to a previous session and use the conversation outline to revisit the discussion. |
Features
Native diff for every edit, no Git required
After a write/edit tool call, open the target file to see VS Code's native side-by-side diff. The before-image is reconstructed by replaying hunks backwards from the Session log, so it also works in non-Git repositories and Git-ignored files.

Preview before approval
The approval card shows the actual command line, working directory, and target files that will be written. For supported file-writing tools, open a native diff of the proposed change before approving it.
Slash commands enumerated live from the Runtime
The slash menu dynamically fetches commands registered by the Runtime for the current session (/plan, /compact, /goal, etc.) and merges them with the extension's own IDE commands.

Editor and Git context
- Right-click the current file, selection, or Git diff to explain, fix, review, or generate documentation.
- Right-click
Ask about resourcein Explorer to ask about a file or folder. - The
@menu autocompletes project files and previous Sessions. DSH: Capture AppShot(macOS only) captures a window screenshot and inserts it into the conversation as a draft.
Sessions, Trace, and Activity at a glance
The sidebar provides a native conversation-outline TreeView. Trace, token usage, Todo lists, and subagents are gathered in the Activity panel. The UI supports VS Code's dark and light themes.

Credentials and balance
The bottom bar shows your current balance, including peak and off-peak pricing. Low balances are highlighted clearly.

FAQ
Do I need to install DSH manually? Usually no. The extension looks for a usable local environment and attempts to download a managed Runtime when needed. The first download requires network access; dsh.installWhenMissing controls automatic installation.
Can I connect to an existing Runtime? Yes. Set dsh.serverUrl to your running dsh web address. The extension supports the RC Remote RPC introduced in dsh 0.1.2-rc.1; the default managed Runtime is 0.1.2-rc.1.
What if startup fails? Run DSH: Diagnose Environment, then DSH: Show dsh Runtime Logs from the Command Palette. Include your extension version, OS, and redacted error details when opening an issue.
Does it support Chinese? Yes. Commands, chat, Activity, and Trace follow VS Code's display language, with English and Simplified Chinese available.
Architecture and runtime
The extension connects to the Runtime through RC Remote RPC, using HTTP calls and a multiplexed WebSocket for live session updates.
Multiple VS Code windows preferentially reuse the same local Harness Runtime. The Runtime launched by the extension publishes a random loopback port through a process lock; later windows connect directly, avoiding competing writes.
graph TD
A[VS Code Extension Host] <-->|RC Remote RPC| B[Standalone Harness Runtime]
A <-->|Typed Full-State Bridge| C[React Webview UI]
B <-->|CNB Distribution| D[Managed Local Engine]
A <-->|Process Lock| E[Multi-Window Shared Runtime]
Configuration
Search dsh in VS Code settings for the full list.
| Setting | Default | What it does |
|---|---|---|
dsh.serverUrl | "" | URL of an already running dsh web Runtime; when set, the extension connects directly. |
dsh.autoStart | true | Automatically start or connect to dsh web when the extension activates. |
dsh.installWhenMissing | true | Automatically download and manage a standalone Runtime when no usable npm/dsh environment is available. |
dsh.runtimeVersion | 0.1.2-rc.1 | Version to download for the managed Runtime. |
dsh.npmRegistry | https://registry.npmmirror.com | Registry mirror used as a download fallback. |
dsh.npxTimeoutMs | 120000 | Timeout while waiting for package-manager download and startup. |
dsh.maxContextBytes | 120000 | Maximum UTF-8 bytes of <ide_context> included per prompt. |
dsh.persistSession | true | Reuse the previous Session ID for the current workspace when possible. |
dsh.agentStatusLabels | fat-whale messages | Random text shown during each streaming turn; customizable. |
dsh.agentStatusLabel | "" | Pins a single fixed status line when set. |
dsh.enableEffortKnob | true | Use the runner sprite animation as the reasoning-effort slider button. |
Other ways to install
From GitHub Releases — download the .vsix from Releases and run Extensions: Install from VSIX.... Pre-release builds are published only to GitHub Releases.
Build from source:
npm install
npm run check
npm run package
Then install the generated .vsix via Extensions: Install from VSIX....
Extension API
Other VS Code extensions can hook into the API DSH exports.
Conversation navigation API — register custom nodes
const registration = api.registerConversationNavigation([
{ seq: 42, label: "Review the PPO implementation", detail: "Training config" },
]);
context.subscriptions.push(registration);
Agent status label API — customize streaming status text
const dsh = vscode.extensions.getExtension<import("dsh-vsc-integration").DshExtensionApi>(
"harcochen.dsh-vsc-integration",
);
const api = await dsh?.activate();
context.subscriptions.push(
api?.registerAgentStatusPresentation({ label: "🐋 Diving" }),
);
Development and testing
npm install
npm run check # TypeScript check (host + webview)
npm test # Release gate: webview check + compile + test suite
npm run compile # Build to dist/
npm run package # Compile + vsce package
npm run release # Test + version bump + CHANGELOG archive + tag
To verify the managed Runtime release logic:
node scripts/verify-managed-runtime.mjs # remote contract only
node scripts/verify-managed-runtime.mjs --full # install and smoke-test
More information
Acknowledgments
Thanks to dsh-reasoning-effort for the chibi runner sprite reference. The conversation outline takes inspiration from the dsh-milestone project.