DeepSeek Harness: Everything Is a Plugin

DeepSeek Harness v0.1 developer preview ships with MIT license. Built on Cordis plugin system, every agent capability is a composable plugin.

TL;DR: DeepSeek just open-sourced their agent harness under MIT. The core idea: model, tools, sessions, sandboxes, storage, scheduling, UI — all plugins. You swap any piece without touching the source. It’s a developer preview (v0.1), expect breaking changes, but the architecture is worth studying now.

DeepSeek quietly dropped deepseek-harness on GitHub today. No fanfare, no launch event — just a repo with 18.5k stars (accumulated during internal testing) and a one-liner to try it:

npx @deepseek-ai/dsh web

That spins up a Web UI at localhost:3080. From there you get an agent environment where the model, every tool it calls, the session store, the sandbox, even the UI itself are all independent plugins that can be replaced at the config level.

DeepSeek Harness GitHub repository with 18.5k stars The deepseek-ai/deepseek-harness repo — 18.5k stars, MIT license, 12,293 commits at launch.

Why This Matters

Most agent frameworks hardcode their loop: prompt → tool call → result → prompt. If you want to change how sessions persist, or swap the sandbox runtime, or replace the scheduling logic, you’re deep in the framework internals.

DeepSeek Harness takes a different approach. The core is Cordis — a plugin framework where plugins contribute services, typed events, and reversible effects to a shared context. Every part of the product is a plugin: the model adapter, the tool registry, the session log, the agent loop itself. There is no privileged core to patch — you extend DSH by mounting a plugin beside the others.

The key architectural concept is capability seams: each capability has three roles — a Service Definition declaring the interface, a Service Provider implementing it, and a Consumer using it. Swap one provider and the whole stack follows. Point the filesystem and subprocess providers at a remote sandbox and bash, PTY, and LSP all move with them, no fork needed.

Architecture Overview

DSH boots from profiles (named compositions of bundles). A profile lists which bundles it stacks, plus any user patches. Two ship by default: web (full browser UI) and headless (one-shot runner, no server).

Each bundle contributes config rows to the Cordis plugin tree. The base bundle (dsh-base) provides model adapters, tools, persistence, sandbox policy, settings, credentials, and telemetry. Additional bundles add surfaces: dsh-web-app for the browser application, dsh-headless for CLI-only execution.

Layers compose in order: bundles → profile patch → home-level patch → --patch overlay. Any row can be replaced by a patch of your own without touching source.

ComponentRolectx Key
Agent LoopThe default driver: steps, turns, model callsctx.agentLoop
SessionAppend-only event log, in-memory storectx.sessions
System PromptPrompt-section and tool-schema assemblyctx.systemPrompt
ToolsScoped tool registry + guarded execution pipelinectx.tools
LLMMessage/stream vocabulary + adapter seamctx.llm
ShellBash/PowerShell execution via subprocessctx.shell
FilesystemRead/write/edit with policy eventsctx.fs
SandboxProcess confinement (local, Docker, remote)ctx.sandbox
TerminalsPersistent PTY sessionsctx.terminals
JobsBackground work (bash, subagent, terminal)ctx.jobs
SubagentsChild agent delegation (fork, fresh, remote)ctx.subagents
ScheduleCron-style future executionvia ctx.sessions

Every component is registered via Cordis services. Swap any provider — the consumers don’t change.

Cordis GitHub repository — the meta-framework powering DSH Cordis: “A Meta-Framework of Spatiotemporal Composability” — the plugin kernel that DSH runs on.

Profiles and Modes

DSH ships with multiple runtime profiles, each composing a different set of bundles and tool packages:

ProfileStackUse Case
webdsh-base + dsh-web-appFull browser UI, daily development
headlessdsh-base + dsh-headlessOne-shot CLI runner, CI integration
PTCCode mode enabledModel generates programs that compose multi-step tool calls
MinimalShell + file edit onlyBenchmarking (SWE-bench, Terminal-Bench)
CreativeCordis toolset loadedRuntime introspection, dynamic plugin experimentation

The Minimal mode strips the tool registry down to just bash and str_replace_editor — exactly what coding benchmarks expect. Creative mode loads the cordis_* toolset (cordis_define, cordis_run, cordis_inspect_*), letting the agent inspect its own runtime and define new packages in-memory.

Profiles are user-creatable. You can compose your own by listing bundles and applying patches:

dsh --profile web --dump-config  # see what your machine actually boots

Append-Only Session Log

The session log is the source of truth for everything the model sees. deriveMessages() projects model history from it. Raw assistant/chunk events preserve replay and UI fidelity. Fork, resume, transcripts, telemetry, and persistence all derive from this single stream.

The design rule is strict: model-visible means logged. Anything that reaches a model request must be reconstructable from the log. This is enforced by a runtime invariant.

The agent loop operates in turns (zero or more steps). A step is one model request plus the tools it calls. A turn opens before its first input is claimed and closes once nothing is owed. The flow:

turn/start → claim input → assemble prompt + tool schemas →
  step/start → model request → assistant/message → tool/call* → tool/result* → step/end
  → more input? → next step
turn/end

Key events (agent/pre-step, agent/request, llm/stream, tools/pre-execute) are waterfalls — listeners must call next() to delegate. This means any plugin can intercept, transform, or short-circuit at any point in the pipeline without patching the loop.

Tech Stack

LayerTechnology
RuntimeTypeScript / Node.js
Package managerpnpm workspace (monorepo)
Buildtsdown
TestsVitest (unit + e2e + snapshot + stress)
Python supportpytest, separate python/ directory
Lintingoxlint
Git hookslefthook
CIGitHub Actions + GitLab CI

The repo has 12,293 commits at launch — this isn’t a weekend project. The monorepo structure under packages/ suggests significant internal decomposition. There’s a native/ directory (likely desktop/Electron), apps/ (probably the web UI), and website/ (docs site).

What’s Missing (It’s a Preview)

Let’s be direct about limitations:

  • Breaking changes guaranteed. The README says it in bold. Plugin APIs will shift.
  • Documentation is sparse. There’s an architecture doc and a development guide, but no plugin authoring tutorial yet.
  • Ecosystem is young. The dsh-plugin GitHub topic exists but the third-party plugin count is minimal.
  • No hosted version. You run it locally. There’s no cloud offering.
  • Model support is unclear. The repo mentions “model provider” as a plugin but doesn’t enumerate which LLMs are supported out of the box beyond DeepSeek’s own models.

How It Compares

DeepSeek HarnessOpenHandsClaude CodeCursor Agent
ArchitecturePlugin-based (Cordis)Monolithic runtimeClosed sourceClosed source
ExtensibilityEverything replaceableFork to customizeNot extensibleNot extensible
LicenseMITMITProprietaryProprietary
MaturityDeveloper previewProductionProductionProduction
Model lock-inNone (plugin)NoneAnthropic onlyMulti-model
Session transparencyFull append-only logPartialLimitedLimited

The closest comparison in terms of architecture philosophy is probably the best open-source agent frameworks ecosystem — but DSH differentiates by making the framework itself nearly empty. The framework is just Cordis + conventions; all substance lives in plugins.

For those interested in how other production agent runtimes handle plugin architectures, see our analysis of agent plugin portability standards.

Getting Started

DeepSeek Harness official site at deepseek.com/harness The official DeepSeek Harness landing page — links to docs, Discord, and quick-start guides.

Quick start (npx)

npx @deepseek-ai/dsh web

Requires Node.js. Opens the Web UI at http://127.0.0.1:3080.

From source

git clone https://github.com/deepseek-ai/deepseek-harness.git
cd deepseek-harness
pnpm install
pnpm run build
pnpm dsh web

Community

FAQ

Is DeepSeek Harness production-ready?

No. It’s a v0.1 developer preview. The team explicitly warns about breaking changes. Use it for experimentation and evaluation, not production workloads.

Can I use models other than DeepSeek?

Yes, in principle. The model provider is a plugin. However, the current documentation doesn’t detail which providers ship built-in versus requiring community plugins.

How does DSH differ from LangChain or CrewAI?

LangChain and CrewAI provide opinionated orchestration with fixed loop patterns. DSH provides no built-in orchestration — everything (including the loop itself) is a plugin. The trade-off: more flexibility, more assembly required.

Is there a hosted/cloud version?

No. DSH runs locally. There’s no managed offering from DeepSeek at this time.

What’s the relationship between DSH and Cordis?

Cordis is the plugin system — think of it as the kernel. DSH is the agent harness built on top of that kernel. Cordis handles plugin lifecycle, dependency resolution, and hot-reload. DSH defines what “agent” means in terms of Cordis plugins.