Limited offer

What Is DeepSeek Harness: How dsh Combines Models and Tools

DeepSeek Harness · dsh · plugins
2026-09-14 ~12 min read

We pulled 0.1.5-rc.1 with npx @deepseek-ai/dsh and ran help plus --dump-default-config.

DeepSeek Harness is a replaceable agent chassis, not a model price list. Default web tree: 152 plugins, model deepseek-flash, port 3080.

Hands-on notes

  1. DeepSeek Harness is an open-source agent chassis. The CLI is dsh. It is not a DeepSeek model and not an API price list.
  2. We pulled 0.1.5-rc.1 with npx @deepseek-ai/dsh on Node.js v24.14.1. dsh --help calls the product an ordered stack of plugin-bundle patches.
  3. dsh --profile web --dump-default-config printed 152 plugin rows. Default model: deepseek-official / deepseek-flash. Web listen: 127.0.0.1:3080. Default agent preset: standard.
  4. Models register on ctx.llm, tools on ctx.tools, the loop on ctx.agentLoop. Swapping a model does not swap the bash backend or the loop.
  5. Developer preview: breaking changes are promised. Start at deepseek.com/harness and the GitHub repo.
Separate model / tool / loop before you decide whether dsh should be your daily coding agent.
Developer reviewing a DeepSeek Harness plugin composition in an editor
dsh splits models, tools, and the loop into replaceable plugins. Read the composition layer first.

What DeepSeek Harness is

DeepSeek Harness is DeepSeek’s open-source agent runtime. The README is blunt: Cordis makes everything a plugin — model adapters, the tool registry, session logs, sandboxes, and the agent loop itself can be swapped in configuration without forking the harness. The product page lists the same surface: models, tools, skills, sessions, sandbox, storage, loop, scheduler, UI.

The CLI name is dsh. That is a different query from “how much is DeepSeek V4-Flash.” One is inference. The other is the chassis that wires a model to tools and a session log. Token cost still follows the provider; see DeepSeek V4-Flash API pricing.

The project is a developer preview and warns about compatibility breaks. The repo went public on 2026-08-13. Docs assume you may write plugins. This article only answers what it is, how the pieces compose, and what we actually printed from the CLI.

What we ran: environment, commands, raw numbers

If the piece says hands-on, it needs environment, tasks, method, and raw output. This is what we ran locally — not a restated screenshot of the marketing site.

Environment: macOS (darwin 25.4.0), Node.js v24.14.1. Install path: npx --yes @deepseek-ai/dsh, no source checkout. DSH_HOME pointed at an isolated directory so we did not write the default ~/.dsh.

Tasks: (1) CLI help and version; (2) web help; (3) export the web profile’s default tree (no user layer, no --patch). We did not run a full coding task with an API key, so this article does not claim “we patched a repo.”

Commands we ran
npx --yes @deepseek-ai/dsh --version
# 0.1.5-rc.1

npx --yes @deepseek-ai/dsh --help
npx --yes @deepseek-ai/dsh web --help

export DSH_HOME="$PWD/.tmp_dsh_home"
npx --yes @deepseek-ai/dsh --profile web --dump-default-config

dsh --help defines the product as an ordered stack of plugin-bundle patch layers under your overrides. Two command families matter: web (alias of --profile web) and plugin (forwards the rest to pnpm in that profile). Examples also show headless for one-shot tasks, --dump-config, and --from-default-profile.

dsh web --help matches the docs: --host, --port (0 lets the OS pick), --no-open, --trusted-host. In the composed tree, webserver defaults to 127.0.0.1 and 3080.

ItemValue we sawEvidence
npm version0.1.5-rc.1dsh --version
Default modeldeepseek-official / deepseek-flashagent-default-model in the dump
Web bind127.0.0.1:3080webserver in the dump
Default presetstandardagent-presets
Default tree539 YAML lines / 152 ids--dump-default-config
disabled flags26 rows (mostly tool-*)same dump

Those 26 disabled: true rows are mostly model-facing tools (tool-bash, tool-fs, tool-skill, tool-web). dsh-web-app turns them off until a workspace or preset turns them back on. A grey tool in the dump does not mean the Web UI has no bash. Marketing pages skip this.

How models, tools, and the loop compose

The architecture doc describes a running dsh as a plugin tree stacked at boot. Day to day you touch four objects:

  • Profile: a named composition under $DSH_HOME/profiles/<name>. Shipped templates: web, headless, sdk, sdk-minimal, acp.
  • Bundle: an npm package with dsh.bundle that contributes a patch. First init puts @deepseek-ai/dsh-base at the bottom.
  • Plugin module: TypeScript that exports apply(ctx). Adapters call ctx.llm.registerAdapter(); tools use ctx.tools; the loop is ctx.agentLoop.
  • Layer order: each bundle patch → the profile’s cordis.patch.yml → home-level patch → --patch overlays.
LayerWhat you touchWhat you swapDo not confuse
ModelSettings → Models, or $DSH_HOME/settings.yamlOfficial card, catalog provider, custom gatewayA new model does not replace bash
ToolsPreset / DSH_TOOLS_MODE / tool pluginsFull standard set, minimal pair, your ownTool schemas join the prompt; the model catalog is a different book
LoopDefault dsh-agent-loop, replaceableAnother loop pluginMost products hard-code the loop; dsh does not
Entrydsh web / headless / sdk / acpSame CLI, different profileDo not invent a second binary

Official install for a third-party plugin is dsh plugin --profile web add <package or git>. When we ran dsh plugin --profile web --help, we got pnpm’s help text — “forwards to pnpm” is literal. Local experiments: dsh web --patch ./cordis.yml (first plugin tutorial). Tag public repos with dsh-plugin.

The official DeepSeek card stores one write-only key in $DSH_HOME/.credentials.yaml. A custom gateway needs a lowercase Provider ID, base URL, and a protocol (openai-completions, openai-responses, or anthropic-messages). The Provider ID is permanent. A working key can still 400: reasoning models may send the system prompt as role developer and the cap as max_completion_tokens. Official fix: compat.supportsDeveloperRole: false and maxTokensField: max_tokens in settings.yaml. Details: Configure models.

The Web UI blocks the composer until you pick a workspace. The suggested first prompt is “summarize this repository.” See Use the Web UI. Skills are procedural memory, not the same object as a dsh plugin; see Hermes Agent Skills list.

Which of the four modes to pick

The product page lists four modes. Our dump’s default preset is standard. The other three below are official descriptions — we do not call them “tested” beyond that label.

ModeWhat shipping docs give youUse it whenDo not expect
StandardEdit, shell, search, skills, plan, goals, subagents, workflowsDaily coding agentIt will not pick your model price
PTCStandard plus Code Mode SDK — the model writes TypeScript to chain toolsLong tool chains, fewer round-tripsWrong gateway shape still fails
MinimalPersistent bash + str_replace_editorSmallest tool bench for a modelNo full search/workflow set
CreateStandard plus runtime inspection, in-memory plugin trials, new presetsYou are authoring a compositionPreview APIs will move

Permissions are a separate triad in the dump’s permission plugin: read-only, workspace-write (default, override with DSH_PERMISSION_MODE), and danger-full-access. Standard mode is not “write the whole disk.”

dsh vs Claude Code / Hermes

Treat dsh as a chassis you can unscrew and the choice gets simpler.

  • You want replaceable models, tools, and loop, and you will write plugins: DeepSeek Harness. Pin the version in preview.
  • You want a productized coding agent with a subscription bill: start from Claude Code 2026 pricing. dsh will not clone that checkout flow.
  • You want Skills / Gateway procedural memory: Hermes is closer. dsh ships dsh-skill, but the filesystem skill is disabled in the default dump until composition turns it on.
  • You already run MCP: the protocol stays its own layer — MCP developer guide. Docs treat dsh as an MCP client, not a replacement.

Third-party writeups mention optional bundles that delegate to Claude Code or Codex. Our default web dump does not list subagent-claude-code, so we do not call that out-of-the-box. For how stacks layer, see 2026 AI agent stack.

FAQ

Is DeepSeek Harness the same thing as a DeepSeek model?

No. The harness is a runtime; the model is inference. The default route is official DeepSeek, but you can add OpenAI, Anthropic, or a custom gateway. You pay whoever you selected.

How do I install dsh, and what port does the Web UI use?

Official: npx @deepseek-ai/dsh web. We saw 0.1.5-rc.1 and 127.0.0.1:3080. Add --no-open over SSH. From source: pnpm install && pnpm run build && pnpm dsh web.

How do models and tools actually combine?

A profile stacks bundles; bundles insert plugins via patches. Models land on ctx.llm, tools on ctx.tools, the loop on ctx.agentLoop. Print your tree with dsh --profile web --dump-config.

Which of the four modes should I use?

Daily coding: standard (default). Bench the model: minimal. Long tool chains: PTC. Author presets: create. Names can move in preview.

Can I run developer preview in production?

Officially, expect breaks. Experiment in an isolated DSH_HOME and pin the npm version. Do not hang unpinned npx on the Mac that holds production certs.

Summary

DeepSeek Harness answers how you unscrew an agent chassis, not where DeepSeek ranks on a model board. Hard facts from 0.1.5-rc.1: 152 plugins in the default web tree, Flash as the default model, port 3080, preset=standard. Composition is profile → bundle → adapter / tool registry / loop — not one frozen binary.

Run dsh on a Mac that does not close its lid

dsh web wants a long-lived Node process, a workspace disk, and API keys. Close a laptop and sessions, subagents, and Trajectory replay die together. A cloud Mac mini is a cleaner Harness host: dsh web --no-open over SSH, DSH_HOME and the workspace on the same box, production certs stay elsewhere. Keep workspace-write until a day-rent check passes, then lock a month.

Compare options · View plans · Onboarding checklist · Get started