What is DeepSeek Harness?
DeepSeek Harness (dsh) is an open-source agent harness: the runtime that sits between a language model and your machine, deciding how the model calls tools, edits files, runs shell commands, and keeps a long session coherent. DeepSeek released it on August 13, 2026 under the MIT license, and it crossed 66,000 GitHub stars within a day (66,343 on Aug 14, via the GitHub API).
The mental model that matters: dsh is not a finished assistant like Claude Code or Codex. It is the chassis you assemble one from. Out of the box it ships a full coding agent — file editing, shell, search, plans, skills, subagents, approval policies, a local Web UI — but every one of those parts is designed to be replaced.
That design has a name in the architecture docs: “everything is a plugin.” The model adapter is a plugin. The tool registry is a plugin. The session log is a plugin. Even the agent loop itself is a plugin. In the docs’ own words, “there is no privileged core to patch.”
The project is led by Cui Tianyi, a former Jane Street engineer who joined DeepSeek in March 2026 — meaning the team went from formation to public preview in roughly five months. Note the contribution model is unusual: the repo does not accept external pull requests and has GitHub Issues disabled. Feedback goes through Discussions and Discord; the intended way to extend dsh is to publish your own plugin (tag your repo with the dsh-plugin GitHub topic).
Why “harness” suddenly matters: the same model can score wildly differently depending on the harness driving it — V4-Pro self-reported 87.9 on Terminal-Bench 2.1 with DeepSeek’s own setup, but scored 54.68 under the reference Terminus 2 harness (HN discussion). The harness is not neutral plumbing; it is a big part of the agent.
Quick start
There are three ways to run dsh: the local Web UI, headless mode for one-shot jobs, and a Python SDK. The first two need Node.js 22.19+ (or any 24.x).
# Web UI — served at http://127.0.0.1:3080
$ npx @deepseek-ai/dsh web
# one-shot headless run (prints the final answer, then exits)
$ dsh --profile headless "fix the failing test"
# Python SDK — bundled runtime, no system Node.js needed
$ pip install deepseek-harness-sdkTo connect a model, open Settings → Models in the Web UI and paste a DeepSeek API key — no restart needed. Keys are stored write-only in $DSH_HOME/.credentials.yaml; the UI only ever shows a masked descriptor (providers guide). Or use environment variables: DEEPSEEK_API_KEY, DSH_MODEL, and DEEPSEEK_BASE_URL.
Platform notes worth knowing before you start:
- The Python SDK supports Linux x64/arm64 and macOS 14+ (Apple Silicon) only — the persistent PTY requires POSIX, so there is no Windows agent in the SDK.
- There is no desktop app and no hosted version — the Web UI runs on your machine. If you expected a Claude Code-style CLI, this is the biggest surprise at first contact (Discussion #601).
- Source builds use pnpm:
git clone→pnpm install→pnpm run build→pnpm dsh web.
Troubleshooting
Every fix below traces to a real, linked GitHub Discussion — this table is the part of the guide we update most aggressively as the rc versions churn.
| Symptom | Cause | Fix |
|---|---|---|
All /api/* requests return 403 | A Host-header check rejects non-localhost origins | Open http://127.0.0.1:3080 exactly — not a LAN IP, not a custom hostname · #313 |
--host 0.0.0.0 refuses to start | Intentional: remote auth isn’t built yet, so the maintainers block network exposure (confirmed by maintainer in #76) | Run it on the remote box and tunnel: ssh -L 3080:127.0.0.1:3080 user@server |
| Fast mode fails on Windows with command errors | Fast mode currently assumes Linux terminal commands | Use WSL2 until it’s patched · #53 |
| Install fails on Arch Linux | Unresolved as of rc.6 | Track #49; source build via pnpm is the current workaround people report |
| First build takes minutes / pulls hundreds of packages | It’s a 50+ package TypeScript monorepo (~24 MB of TS) — heavy by design | Expected behavior; use npx rather than a source build unless you’re developing plugins |
Developer preview means it: the README warns in capitals that there will be compatibility-breaking changes. Pin versions in anything you automate, and expect this table to change between rc releases.
Architecture, in plain English
Under the hood, a running dsh instance is a tree of plugins composed at boot, powered by Cordis — a framework whose design is laid out in an 88-page paper, A Programming Paradigm for Spatiotemporal Composability (DeepSeek + Peking University). The paper’s two guarantees, translated from academese:
- Unload cleanly (temporal): every side effect a plugin creates is tracked and reversible, so removing a plugin fully undoes it — no restart, no leftover state.
- Depend declaratively (spatial): plugins declare which services they need, and the runtime resolves and hot-swaps them reactively.
In practice you pick a profile (named plugin composition — web and headless ship built-in) and override anything with patch files. dsh --profile web --dump-config prints the exact tree that booted, and any line of it can be replaced.
The four presets
The official page ships four run modes: Standard (the full coding agent), Minimal (just bash + a file editor — closest to a raw model), Code mode, and a fourth the official page calls “Creator” — though in the rc.5 source the fourth preset directory is actually cordis, which lets the model edit the live plugin composition (details in our architecture deep dive). Code mode is the interesting one: instead of classic tool-calling, dsh generates a TypeScript SDK and lets the model write a program that calls the tools — collapsing what would be five round-trips into one (The New Stack).
Event-sourced sessions
Everything the model sees is reconstructed from an append-only event log — the docs state the invariant as “model-visible means logged.” Resume, fork, replay, transcripts, and the Web UI’s trajectory view are all projections of that one stream. This is the feature HN engineers praised most in the launch thread.
Sandboxing
Tool execution can be confined with OS-level sandboxes: Landlock on Linux (via a custom Node addon), Seatbelt on macOS, and a restricted-token ACL approach on Windows, plus bwrap support. Whether the defaults are strict enough is a separate question — see section 9.
Using other models (Claude, GPT, local)
The single most-asked question, and the answer is yes — model adapters are plugins like everything else. Three routes, per the providers guide:
- Catalog providers: in the Web UI, “Add provider” lists Anthropic, OpenAI, and others; Bedrock / Vertex / Azure use their native auth flows.
- Custom OpenAI-compatible endpoints: point a custom provider at any gateway or self-hosted server — provider ID, base URL, protocol, credentials, and it can auto-populate models from
GET /models. - Local models: set
DEEPSEEK_BASE_URL=http://127.0.0.1:8000/v1(vLLM, Ollama’s OpenAI endpoint, LM Studio, etc.) and dsh treats it like any other backend.
Default DeepSeek models are deepseek-v4-flash (284B params, ~13B active) and deepseek-v4-pro (1.6T params, ~49B active), both with a 1M-token context window (VentureBeat) and a reasoningEffort dial (off / high / max). One real limitation: DeepSeek’s own chat route is text-only — no image input — so vision-dependent workflows need a third-party multimodal model plugged in.
Counterintuitive but widely reported: several early testers found V4-Flash more pleasant inside dsh than V4-Pro, and Flash is the community’s value pick (HN). Benchmark it on your own tasks before paying Pro rates.
For Claude Code users
dsh was clearly built by people who use Claude Code — the repo itself contains a CLAUDE.md and .claude/ directory. Interop is real, not aspirational (The New Stack, repo):
- dsh reads your existing
CLAUDE.mdandAGENTS.mdproject instructions. - A hooks package speaks the Claude Code / Codex hook wire-protocol, so existing hook integrations can bridge over.
- Claude Code and Codex ship as subagent providers (disabled by default) — dsh can find the binaries on your PATH and delegate work to them, meaning you can drive Claude Code from inside dsh.
- What’s missing: a settings importer (requested in #838), slash-command parity, hosted background agents, and native GitHub PR workflows.
The honest framing: if Claude Code is working for you, dsh today is a lab, not a replacement— the place to experiment with owning your harness (swap models mid-workflow, inspect every event, write custom tools) while keeping your daily driver.
Pricing & the Aug 16 increase
dsh itself is free and works with any provider. The story is the DeepSeek API behind it: alongside the Harness launch, DeepSeek announced peak/off-peak pricing effective Aug 16, 2026, 16:00 UTC — a substantial increase (TNW):
| Output / 1M tokens | Before | Peak | Off-peak |
|---|---|---|---|
| V4-Pro | $0.87 | $3.96 ▲ 4.5× | $1.98 ▲ 2.3× |
| V4-Flash | $0.28 | $1.32 ▲ 4.7× | $0.66 ▲ 2.4× |
| Cache-hit input | rises roughly 6× — the increase that matters most for agents, which re-read the same files every step | ||
Reference points from before the increase: early users reported a 27-minute 3D project for ~$0.12 in API spend, and one HN user ran a full security audit for ~$0.15 (HN thread). Scale those by the multipliers above for a post-Aug-16 estimate — and remember dsh reports cache hits (prompt_cache_hit_tokens) in its usage view, so you can measure your own ratio before the new prices land. Third-party hosts on OpenRouter may undercut the official API; official cache pricing has historically been the counterargument.
dsh vs Claude Code vs Codex
| DeepSeek Harness | Claude Code | Codex | |
|---|---|---|---|
| Open source | MIT, full runtime | closed | partially open |
| Bring your own model | any provider or local | Anthropic models | OpenAI models |
| Swap internals (tools, loop, log) | everything is a plugin | hooks & MCP only | hooks & MCP only |
| Interfaces | local Web UI · headless CLI · Python SDK | CLI · desktop · IDE · web/cloud | CLI · IDE · cloud |
| Hosted background agents / native PR flow | not yet | ||
| Maturity | v0.1 developer preview | stable | stable |
Feature axes adapted from VentureBeat’s launch comparison plus the official docs; we’ll replace vendor claims with our own benchmarked numbers as we run them.
Security & maturity caveats
Read this section before running dsh anywhere near production credentials.
- The local RPC surface has no auth. A public disclosure (Discussion #853) shows
dsh webexposes 60+ RPC methods on127.0.0.1:3080guarded only by a Host-header check — which the docs themselves say is “not an auth layer.” Any local process could open sessions or flip permission modes. No maintainer response and noSECURITY.mdas of Aug 14. - Plugins are unsigned code with no permission manifest. Installing one means letting it run arbitrary code in the harness process. Vet plugins the way you’d vet a dependency, not an app-store install.
- Full-access mode does what it says. One early user reported an agent in
danger-full-accessmode deleting their home directory while testing a plugin (#461). Keep approvals on; use the sandbox. - Preview software, moving fast: breaking changes are promised, external PRs aren’t accepted, and several crash/runaway bugs (subagent spawn loops, unbounded memory) are still open in Discussions.
Bottom line: treat dsh like a power tool with the guard removed — extraordinary access for experimentation, not something to expose on a network or aim at credentials you care about. Reassess at 1.0.
FAQ
Can I use DeepSeek Harness with Claude or GPT instead of DeepSeek models?
Is DeepSeek Harness free?
Is there a desktop app or CLI like Claude Code?
Does it work on Windows?
Can I access the Web UI from another machine?
Is it safe to run?
How is a "harness" different from the model?
Why did DeepSeek open-source it if they are raising API prices?
Can it work with my existing CLAUDE.md and Claude Code setup?
Sources & changelog
Everything above is sourced from the official repo/docs, linked GitHub Discussions, or named press coverage — numbers carry the date we captured them. If you spot something stale, the project moves fast and we want to know.
- deepseek-ai/deepseek-harness — README, docs/architecture.md, tool & provider guides accessed 2026-08-14
- cordiverse/paper — A Programming Paradigm for Spatiotemporal Composability draft 2026-08-13
- VentureBeat · The New Stack · TNW · Crypto Briefing — launch coverage & pricing 2026-08-13/14
- GitHub Discussions #76, #313, #49, #53, #601, #838, #853, #461 accessed 2026-08-14
- Hacker News: Harness launch thread · V4-Pro thread 2026-08-13/14
Changelog: 2026-08-14 — first published, verified against dsh 0.1.0-rc.6.
