{"slug": "deepseek-harness-dsh-what-it-is-how-to-install-it-and-what-is-actually-inside", "title": "DeepSeek Harness (dsh): What It Is, How to Install It, and What Is Actually Inside", "summary": "DeepSeek released dsh (DeepSeek Harness), an open-source agent harness built on the Cordis plugin framework in which the agent loop, model adapters, tool registry and session log are all swappable plugins rather than a fixed core. The web profile on version 0.2.1-rc.2 composes 193 separate @deepseek-ai/dsh-* plugin packages, and the tool runs via a single npx command, serving a Web UI on localhost with headless, SDK and ACP profiles also available.", "body_md": "DeepSeek Harness, or **dsh**, is DeepSeek's open-source **agent harness**: the software that wraps a language model and turns it into an agent that can read files, run commands, search the web and work on a task over many steps. Its design idea is unusual - *everything is a plugin*, including the agent loop itself.\n\nI installed it on Windows, ran its command-line tool, and dumped the configuration of its web profile to see what it is really made of. This guide covers what an agent harness is, how to install dsh, what is inside it, which models it can use, how its permission modes work, and the safety warnings DeepSeek itself attaches to it.\n\nA language model on its own only produces text. An **agent harness** is everything around the model that lets it act:\n\nClaude Code, OpenAI's Codex CLI, OpenCode and Hermes are all harnesses. The model is the engine; the harness is the rest of the car. Two harnesses running the same model can behave very differently, which is why \"harness engineering\" has become a topic of its own.\n\nMost harnesses have a fixed core and an extension system bolted on. dsh is built on [Cordis](https://github.com/cordiverse/cordis), a plugin framework in which plugins contribute services, typed events and reversible effects to a shared context. DeepSeek's architecture document says there is \"no privileged core to patch\": the model adapter, the tool registry, the session log and the agent loop are all plugins, so each one can be swapped through configuration.\n\nIn practice that means:\n\n`web`, `headless`, `sdk`, `sdk-minimal` and `acp`, and the CLI help also shows a `tui` example.`cordis.patch.yml`) overrides or adds plugin rows without forking anything.\nYou need Node.js. The quickest start is one command:\n\n```\nnpx @deepseek-ai/dsh web\n```\n\nThat boots the web profile and serves the Web UI at `http://127.0.0.1:3080` (add `--no-open` to stop it opening a browser). Then go to **Settings → Models**, add an API key, choose a workspace folder, and start a session. The agent cannot do anything until a workspace is selected.\n\nOther ways to run it, from the CLI's own help:\n\n```\ndsh headless \"run the tests\"              # answer one task, print the result, exit\ndsh --profile sdk                         # JSON-RPC server for the Python SDK\ndsh --profile acp                         # automation clients over ACP\ndsh --profile web --dump-config           # print the composed plugin tree and exit\ndsh plugin --profile tui add \n# install a plugin into a profile ```\n\n On my machine, `npx -y @deepseek-ai/dsh --version` reported **0.2.1-rc.2** and ran fine on Node.js 22.18.0. There is also an official Electron desktop app in the repository, and a crop of unofficial \"DeepSeek Harness desktop\" wrappers on GitHub - check that you are installing from `deepseek-ai/deepseek-harness` or the `@deepseek-ai/dsh` npm package, because several projects reuse the name.\n\n## What is inside: 193 plugins\n\nRunning `dsh --profile web --dump-default-config` prints the full plugin tree without booting anything. On version 0.2.1-rc.2 the web profile is composed of **193 separate `@deepseek-ai/dsh-*` plugin packages**. Grouped by job:\n\n- **Agent core:** `dsh-agent-loop`, `dsh-system-prompt`, `dsh-agent-instructions`, `dsh-agent-preset`, `dsh-plan-mode`, `dsh-persona`, `dsh-goal`.\n- **Tools:** filesystem and file search, Bash and PowerShell (each with a persistent variant), web fetch and search, to-do lists, background jobs, scheduling, ask-the-user, skills and a workflow tool.\n- **Subagents:** spawn and fork in-process subagents, and control them.\n- **Context management:** basic compaction, a tool-result pruner, image offload and a token meter - the parts that keep long sessions from overflowing.\n- **Safety:** a local sandbox, a sandbox policy, separate Bash and PowerShell sandboxes, a filesystem sandbox, user approval and permission presets.\n- **Models:** a DeepSeek API-key adapter, a DeepSeek account adapter, a retry layer and an adapter called `dsh-llm-pi-ai` for other providers.\n- **Sessions and storage:** JSONL persistence, SQLite queries, checkpoints, export, titles and telemetry (OpenTelemetry).\n- **MCP:** a `dsh-mcp-resources` plugin is part of the profile.\n- **The Web UI itself:** chat, file browser, terminal, document preview, plan view, settings pages - each one a plugin too.\n\nThat granularity is the point. If you want a different compaction strategy or a remote sandbox, you replace one row in the patch file rather than forking the project.\n\n## Which models can it use?\n\nDeepSeek's models are built in: **Settings → Models** has a DeepSeek card with a single API-key field, and DeepSeek's models offer \"off\", \"low\", \"high\" and \"max\" reasoning levels. It is not DeepSeek-only, though. According to the provider guide you can add:\n\n- **Third-party providers** from a catalogue, including ids such as `anthropic`, `openai`, `moonshotai` (Kimi) and `zai` (GLM).\n- **Custom endpoints** - a company gateway or a self-hosted server - speaking one of three protocols: OpenAI Chat Completions, OpenAI Responses or Anthropic Messages.\n\nKeys are stored in `$DSH_HOME/.credentials.yaml`, and provider settings live in the profile's `cordis.patch.yml`.\n\n## Permission modes\n\nThe dumped configuration shows three permission presets:\n\n| Preset | Sandbox | Approval |\n|---|---|---|\n| `read-only` | read-only | ask |\n| `workspace-write` (default) | workspace-write | ask |\n| `danger-full-access` | full access | never |\n\nThe default comes from the `DSH_PERMISSION_MODE` environment variable and falls back to `workspace-write`, which means the agent can change files in your chosen workspace but asks before operations that need approval. Only `danger-full-access` turns approvals off - and the name is an honest warning.\n\n## The safety notice: read it before you run it\n\nDeepSeek describes dsh as experimental developer-preview software that has not had a security audit, and warns that there will be compatibility-breaking changes. Its safety notice is blunt: the harness can run model-generated commands, modify or delete files it can reach, and access the network and any credentials made available to it, and third-party plugins may be untrusted. Sandboxing and approvals reduce the risk but \"cannot protect resources that the project is allowed to access\".\n\nThe recommendations are the same ones I would give for any agent harness:\n\n1. Run it in a disposable virtual machine or container for anything important.\n2. Give it the narrowest workspace and the fewest credentials possible - never your production keys.\n3. Keep backups of anything it can touch.\n4. Review plugins and proposed commands before approving them.\n\n## DeepSeek Harness vs Claude Code and OpenCode\n\nPeople search for these comparisons, so here is what can be said honestly without running a benchmark:\n\n- **Claude Code** is Anthropic's harness, tuned for Claude models, mature and terminal-first, with hooks, skills and MCP support. dsh is younger, open source under MIT, web-first, and designed around replacing any part of itself.\n- **OpenCode** is an open-source, provider-agnostic terminal harness. dsh is also provider-agnostic, but its plugin model goes further: even the loop and the session log are swappable.\n- **Maturity:** dsh is a developer preview (0.2.x release candidates at the time of writing). For day-to-day client work I would still reach for a mature harness; dsh is the one to study if you want to understand, or build, an agent harness.\n\nI have not measured task success between them, so treat anyone's \"X beats Y\" chart with care unless they publish the tasks, the model and the settings.\n\n## Who should try it?\n\n- **Developers building their own agents** - the plugin tree is a working reference architecture.\n- **Teams that need a self-hosted agent** pointed at their own model gateway.\n- **DeepSeek API users** who want an official interface beyond the chat app.\n\nIf you only want to run DeepSeek's models locally without an agent, my guide to [running DeepSeek R1 locally on Mac, Windows and Linux](https://knowledgemarkg.com/blog/how-to-run-deepseek-r1-locally-for-free-on-macwindowslinux) is the simpler place to start, and [DeepSeek vs ChatGPT](https://knowledgemarkg.com/blog/deepseek-ai-vs-chatgpt-which-ai-best-fits-your-needs-2025) covers the models themselves. For the other big agent story of 2026 - agents driving disassemblers - see [AI reverse engineering with Ghidra and IDA](https://knowledgemarkg.com/blog/ai-reverse-engineering-ghidra-ida-mcp).\n\n## FAQ\n\n**What is DeepSeek Harness?**\n\nDeepSeek Harness (dsh) is DeepSeek's open-source agent harness: the software around a language model that lets it read and edit files, run commands, search and work on multi-step tasks. It is built on the Cordis plugin framework, so every part - including the agent loop - is a plugin.\n\n**How do I install DeepSeek Harness?**\n\nWith Node.js installed, run npx @deepseek-ai/dsh web. It serves the Web UI at http://127.0.0.1:3080. Add an API key in Settings, choose a workspace folder, and start a session.\n\n**What is an agent harness?**\n\nAn agent harness is everything around a model that turns it into an agent: the loop that runs tools and feeds results back, the tools themselves, context management, sandboxing and approvals, and the user interface. Claude Code, Codex CLI, OpenCode and DeepSeek Harness are all harnesses.\n\n**Does DeepSeek Harness only work with DeepSeek models?**\n\nNo. DeepSeek models are built in, but you can add third-party providers from its catalogue, including Anthropic, OpenAI, Kimi and GLM, or any custom endpoint that speaks the OpenAI Chat Completions, OpenAI Responses or Anthropic Messages protocol.\n\n**Is DeepSeek Harness safe to use?**\n\nIts own safety notice calls it experimental, unaudited developer-preview software that can run commands and modify files it can reach. The default mode asks before risky operations, but you should run it in a VM or container, give it minimal credentials, and keep backups.\n\n**Is DeepSeek Harness free and open source?**\n\nYes, the harness is open source under the MIT licence. You pay only for the model API you connect, such as DeepSeek's API, unless you point it at a self-hosted model.\n\n**What are the DeepSeek Harness permission modes?**\n\nThere are three presets: read-only and workspace-write, which both ask for approval before sensitive operations, and danger-full-access, which turns approvals off. The default is workspace-write, set by the DSH_PERMISSION_MODE environment variable.\n\n---\n\n_Originally published on [knowledgemarkg.com](https://knowledgemarkg.com/blog/deepseek-harness-dsh-guide)._\n```\n\n", "url": "https://wpnews.pro/news/deepseek-harness-dsh-what-it-is-how-to-install-it-and-what-is-actually-inside", "canonical_source": "https://dev.to/kausarraza/deepseek-harness-dsh-what-it-is-how-to-install-it-and-what-is-actually-inside-3dcc", "published_at": "2026-10-20 16:39:56+00:00", "updated_at": "2026-10-20 16:48:29.799307+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "ai-products"], "entities": ["DeepSeek", "dsh", "Cordis", "Claude Code", "Codex CLI", "OpenCode", "Hermes"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/deepseek-harness-dsh-what-it-is-how-to-install-it-and-what-is-actually-inside", "markdown": "https://wpnews.pro/news/deepseek-harness-dsh-what-it-is-how-to-install-it-and-what-is-actually-inside.md", "text": "https://wpnews.pro/news/deepseek-harness-dsh-what-it-is-how-to-install-it-and-what-is-actually-inside.txt", "jsonld": "https://wpnews.pro/news/deepseek-harness-dsh-what-it-is-how-to-install-it-and-what-is-actually-inside.jsonld"}}