Skip to main content
PathWhat is DSH

What Is DSH

In one sentence: DeepSeek Harness(dsh) is an open-source coding / automation agent: an independent process with its own configuration, session, and permission system, built on an everything-is-a-plugin architecture: the core keeps only the loop and the abstraction seams, while every capability comes from composing plugins.

DSH is open-sourced by DeepSeek AI and is currently in Developer Preview. See deepseek-ai/deepseek-harness for the official source, install command, and current behavior. This site is community-maintained.

This page answers "what exactly is this thing, and is it worth using". By the end you will have a judgment, and know where to start.

1. What it is

dsh is an agent that can run tasks on its own — not a "chat box", and not an "IDE completion plugin". It:

  • is an independent process with its own configuration (~/.dsh/), sessions (~/.dsh/sessions/), permission, and sandbox system
  • can read files, run commands, search, and call tools, and also supports multi-model routing and multi-agent collaboration
  • extends almost everything (tools, services, events, UI panels) through plugins
  • provides a Hermes-style Web workbench via dsh web, and also supports one-shot command-line tasks

To put it in one sentence: it is "a workbench you start with a single dsh web, plus a composable set of agent capabilities".

2. What it is not (avoiding misconceptions)

NotIt actually is
IDE pluginIndependent process that manages its own configuration/sessions/permissions
Single-model chat boxCan route across multiple providers/models (llm-pi-ai)
Fixed-function toolYou can change not just settings, but the composition itself

Common misconception: "plan/execute automatically switches models": no such thing. /plan only maintains planning/coordination state, and does not switch models (see Model routing).

3. Core concepts

ConceptDescriptionLocation
SDKThe runtime stack that drives the Harness from another process (JSON-RPC wire protocol / client / server)packages/sdk
Cordis baseThe composition framework providing Context/service injection/plugin loading (everything-is-a-plugin)@deepseek-ai/cordis
HarnessThe complete composed agent application: loop, tools, sessions, sandboxwhole-repo composition
ProfileThe composed configuration of plugins: bundle patch layers stacked with a user overlay layer$DSH_HOME/profiles/<name>
BundleA plugin package that carries its own patch and joins a profile as a layerpackages/bundle/base
Seam (capability seam)Abstract capability interfaces (ctx.llm, ctx.tools, ctx.sandbox…), whose implementations are swappableindividual capability packages

4. What it can do (capability overview)

ScenarioHow
Modify code / read files / run commandstool-fs / tool-bash (see Built-in tools)
Search DSH's own past sessionstool session_search (dsh-tool-session-query)
Split a task across multiple agents in parallelSubagent / Workflow
Scheduled remindersScheduling
Connect external toolsMCP
Teach the model processesSkills
Long-term goal progressionGoals and tasks

5. Three ways to start

npx @deepseek-ai/dsh web # Official zero-install entry point
dsh web # Web workbench (default 127.0.0.1:3080)
dsh --profile headless "run the tests" # One-shot task; exits after it finishes
dsh --profile web # Explicitly specify a profile
  • web and headless are built-in profile templates
  • --profile headless <task> is the one-shot task entry point (dsh run has been removed)

6. The everything-is-a-plugin philosophy

The top-level README says it verbatim: "it adopts an 'everything-is-a-plugin' architecture":

  • Add a capability = write a plugin (tools, services, events, UI)
  • Change behavior = swap plugins / stack patch layers, without touching the core
  • The core keeps only one concrete AgentLoop: "new behavior should go into a plugin, not here"

That is why later you will see Plugin anatomy repeatedly stress "extension points first".

7. Quick verification

dsh web --dump-config # See the current composed plugin tree (the layering at a glance)
dsh web --dump-default-config # See the default bundle's composition

Where to start

Pick your entry point by your goal (the full navigation is in Learning path):