DeepSeek Harness Plugin Architecture Deep Dive: Everything is a Plugin, the 'Lego Moment' of Agent Operating Systems

1. Introduction: An Unusual Night

On the evening of August 13, 2026, DeepSeek did something unusual: instead of releasing new model weights, it dropped an open-source project called DeepSeek Harness (abbreviated DSH, CLI name dsh) onto GitHub under the MIT license, with full source code.

That same night, DeepSeek also did two other things: announced API pricing changes (V4 Pro peak output rising from 6 CNY to 27 CNY per million tokens), and launched DeepSeek-V4-Pro-0813 official version. Three announcements in one night—it was impossible not to trend.

But what truly ignited the community wasn’t the price hike or the new model—it was the Harness.

On launch day, GitHub stars crossed 10,000 in 30 minutes, hit 22,000 in 1.5 hours, surpassing the record pace of Grok-1 and DeepSeek-R1. By August 15, total stars had exceeded 60,000. Repositories tagged with dsh-plugin on GitHub surpassed 1,000, with community plugin growth outpacing official expectations.

What exactly is this thing, and why has it electrified the entire developer community?

This article will dissect the plugin architecture of DeepSeek Harness from a technical perspective—from the Cordis micro-kernel to the three-layer plugin runtime, from the four operating modes to the Trajectory system, and finally to its architectural philosophy differences with Claude Code and Codex.


2. Positioning: Model + Harness = Agent

Let’s first clarify a critical point: Harness is not a new model.

DeepSeek’s official formula is elegantly simple:

Model + Harness = Agent

The model handles reasoning and decision-making; Harness handles actual execution—reading files, calling tools, managing context, running terminal commands, dispatching sub-agents, retrying on failure… everything the model “cannot do by itself” is handled by Harness.

Think of Harness as the “operating system for Agents.”

┌──────────────────────────────────────────────┐
│                  Agent                        │
│                                               │
│  ┌──────────────────────────────────────┐    │
│  │          Model (Soul)                 │    │
│  │   Thinking, Reasoning, Code Gen       │    │
│  └──────────────────────────────────────┘    │
│                      │                        │
│                      ▼                        │
│  ┌──────────────────────────────────────┐    │
│  │        Harness (Body/OS)              │    │
│  │  ┌────┐ ┌────┐ ┌──────┐ ┌───────┐  │    │
│  │  │Tools│ │Session│Sandbox│Storage │  │    │
│  │  ├────┤ ├────┤ ├──────┤ ├───────┤  │    │
│  │  │Loop│ │Sched│ │SubAgt│ │UI    │  │    │
│  │  └────┘ └────┘ └──────┘ └───────┘  │    │
│  └──────────────────────────────────────┘    │
└──────────────────────────────────────────────┘

This directly positions it against Anthropic’s Claude Code and OpenAI’s Codex. But from day one, DeepSeek didn’t intend to build a “better Claude Code”—it chose a different path: open-sourcing the entire layer.

This distinction is critical.


3. Core Design Philosophy: “Everything is a Plugin”

The core design philosophy of Harness is stated in the most prominent position on the repository home page:

“Everything is a Plugin.”

This is not marketing hype—it’s a thorough technical commitment.

In Harness, the following capability modules are all replaceable plugins:

DeepSeek Harness Plugin Landscape
┌─────────────────────────────────────────────────────┐
│                                                     │
│  Model Adapter                      ← Plugin        │
│  Tool Registry                      ← Plugin        │
│  Skills                             ← Plugin        │
│  Session Management                 ← Plugin        │
│  Sandbox                            ← Plugin        │
│  Storage                            ← Plugin        │
│  Agent Loop                         ← Plugin        │
│  Scheduler                          ← Plugin        │
│  User Interface                     ← Plugin        │
│  Approval Policy                    ← Plugin        │
│  Credential Management              ← Plugin        │
│  Telemetry                          ← Plugin        │
│                                                     │
│  ──── Not a single line is hard-wired ────          │
│                                                     │
└─────────────────────────────────────────────────────┘

What does this mean in practice?

  • DeepSeek’s own model has no privileged status—it’s just another plugin. Want to switch to Claude, GPT, Gemini, Kimi, or GLM? It’s the same operation as changing a theme.
  • Even the Web UI itself is a plugin. Not satisfied with the default interface? The community has already rewritten the entire UI as a Claude Code-style full-screen terminal.
  • The Agent Loop is a plugin. If you’re dissatisfied with the default loop logic, write a custom loop plugin to replace it.
  • The sandbox is a plugin. The community offers sandbox-micro, sandbox-mxc, and sandbox-nono—three sandbox plugins with different isolation strategies. Pick one and swap it in.

The official documentation says it best: “There is no privileged core that needs patching.” To extend Harness, you don’t modify source code—you just attach a new plugin alongside it.


4. The Cordis Meta-Framework: The Mathematical Foundation of Spatiotemporal Composability

If “Everything is a Plugin” is the slogan, Cordis is the engine that makes it real.

4.1 What is Cordis

Cordis (Latin for “heart”) is a meta-framework—a framework for building frameworks. It doesn’t couple to any specific business domain. It focuses on one core problem: how to safely compose, hot-swap, and cleanly reverse all side effects of software components when they are unloaded.

Cordis was originally extracted from the well-known chatbot framework Koishi, where it served as the underlying plugin system. Over four years, Koishi accumulated over 4,000 community plugins covering instant messaging adapters, database drivers, admin consoles, and more. Cordis’s maturity has been battle-tested in production.

Cordis Architecture Layers
┌─────────────────────────────────────────────────┐
│                  Koishi Application Layer         │
│        (Chatbot Framework, 4000+ Plugins)        │
├─────────────────────────────────────────────────┤
│                  Cordis Meta-Framework            │
│   ┌──────────┐ ┌──────────┐ ┌───────────────┐  │
│   │ Plugin   │ │ Plugin   │ │ Dependency    │  │
│   │ Loading  │ │ Unloading│ │ Management    │  │
│   │ Lifecycle│ │ Side     │ │ Service Reg/  │  │
│   │ Mgmt     │ │ Effect   │ │ Discovery     │  │
│   │          │ │ Cleanup  │ │ Event Comm    │  │
│   └──────────┘ └──────────┘ └───────────────┘  │
├─────────────────────────────────────────────────┤
│           DeepSeek Harness Application Layer      │
│   (Model/Tool/Session/Sandbox/Storage/Loop/UI)   │
└─────────────────────────────────────────────────┘

In August 2026, Peking University and DeepSeek jointly published the paper “A Programming Paradigm for Spatiotemporal Composability” (80+ pages, 20+ theorems and proofs). Authors include Yifan Shi (also affiliated with DeepSeek), Wei Zhang, and Tianyi Cui (lead of the DeepSeek Harness team). This paper provides a formalized model for Cordis’s design.

4.2 Temporal Composability: Reversible Effects

Temporal Composability solves this problem:

In traditional software architectures, components are hard to cleanly uninstall once loaded. A module may register event listeners, open file handles, modify global state—when it’s removed, these side effects often linger, causing memory leaks, state pollution, or crashes.

The paper provides empirical evidence: as of June 9, 2026, of the top 100 VSCode Marketplace extensions, 87 contain executable code that cannot be unloaded individually at runtime—disabling or removing them requires restarting the entire extension host.

Cordis’s solution is Reversible Effects:

Side Effect Tracking During Plugin Loading
┌─────────────────────────────────────────────────┐
│  Timeline →                                        │
│                                                     │
│  Plugin A loaded                                    │
│    ├─ ctx.on('event', handler1)  → records disposer1│
│    ├─ ctx.effect(conn.open())   → records disposer2│
│    └─ ctx.service('my-svc', impl) → records disposer3│
│                                                     │
│  ┌──────────────────────────────────────────────┐  │
│  │  Disposal Stack (LIFO)                        │  │
│  │  [disposer3, disposer2, disposer1]            │  │
│  │  → On unload, execute from top of stack       │  │
│  └──────────────────────────────────────────────┘  │
│                                                     │
│  Plugin A unloaded                                  │
│    ├─ Execute disposer3 (undo service registration) │
│    ├─ Execute disposer2 (close connection)          │
│    └─ Execute disposer1 (remove event listener)     │
│                                                     │
│  System state = exactly restored to pre-load state  │
└─────────────────────────────────────────────────┘

Every side effect produced during plugin registration is tracked. When the plugin is unloaded, all side effects are automatically reclaimed—no garbage, no memory leaks. In user experience terms, this means hot-swapping: install a plugin, remove a plugin, replace the entire UI—all without restarting. The system modifies parts of itself while running.

4.3 Spatial Composability: Reactive Coeffects

Spatial Composability solves a different problem:

In complex systems, components have numerous implicit dependencies. Module A depends on some feature of Module B, but without explicit declarations, the system doesn’t know B must load before A, nor can it gracefully handle A’s behavior when B becomes unavailable.

Cordis’s solution is Reactive Coeffects:

Automatic Dependency Orchestration
┌─────────────────────────────────────────────────────────┐
│                                                         │
│  Plugin B: Database Driver                               │
│    inject: []                                            │
│    provide: ['database']                                 │
│                                                         │
│         ↓ provides database service                      │
│                                                         │
│  Plugin A: Chat Feature                                  │
│    inject: ['database', 'messenger']                     │
│    provide: ['chat']                                     │
│    └─ waits for database + messenger → ACTIVE            │
│                                                         │
│         ↓ dependency auto-activates / provider removed   │
│         → dependent auto-pauses                          │
│                                                         │
│  ┌──────────┐       ┌──────────┐       ┌──────────┐    │
│  │ Plugin A │──────▶│ Plugin B │──────▶│ Plugin C │    │
│  │ (Consumer)│       │ (Provider)│       │ (Provider)│   │
│  └──────────┘       └──────────┘       └──────────┘    │
│       │                    │                               │
│       │ depends on db      │ depends on messenger         │
│       ▼                    ▼                               │
│  ACTIVE ← deps met     ACTIVE ← deps met                  │
│  INACTIVE → deps missing  INACTIVE → deps missing          │
│                                                         │
│  Topology is auto-derived from declarations              │
└─────────────────────────────────────────────────────────┘

Plugins declare required services via the inject property. Cordis waits for those services to be ready before activating the plugin. When a provider appears, dependents auto-activate. When a provider is removed, dependents pause first, allow their effects to be reverted, then the provider completes its uninstall.

4.4 Cordis’s Five Core Concepts

ConceptRoleDescription
PluginCapability unitAn object implementing Service, can be a function with inject and apply(ctx), or a Service subclass
ContextService containerA “service repository” where each service occupies a stable key, e.g., ctx.tools, ctx.llm, ctx.sessions
InjectDependency declarationPlugin declares needed services; loader ensures they’re ready before activation
Typed EventsCommunicationFour dispatch modes: emit (observe), waterfall (middleware, short-circuitable), parallel (concurrent), serial (sequential)
Reversible EffectsSafe uninstallAll registrations via ctx.effect() / ctx.on() are auto-reverted on plugin unload

Cordis’s core implementation is remarkably concise—approximately 2,000 lines of TypeScript. This leanness means low cognitive overhead: developers only need to understand the “plugin-context-side-effect” triangle.


5. Three-Layer Plugin Runtime Architecture

DeepSeek Harness’s runtime architecture is clearly divided into three layers, each addressing a different granularity of problems.

Layer 1: Assembly Layer

The Assembly Layer addresses “which plugins compose a running instance.”

Layer 1: Assembly Layer
┌──────────────────────────────────────────────────────────┐
│                                                          │
│  Bundle (Distributable Plugin Group)                     │
│  ┌────────────────────────────────────────────────────┐  │
│  │  dsh-base (Foundation for all profiles)             │  │
│  │  ├─ Model Adapters      ├─ Tool Registry           │  │
│  │  ├─ Persistence         ├─ Sandbox                 │  │
│  │  ├─ Approval Policy     ├─ Settings                │  │
│  │  ├─ Credential Mgmt     ├─ Telemetry               │  │
│  │  └─ ...                                            │  │
│  └────────────────────────────────────────────────────┘  │
│                                                          │
│  Profile (Named Runtime Composition)                     │
│  ┌────────────────────────────────────────────────────┐  │
│  │  profile: web                                      │  │
│  │  bundles: [dsh-base, dsh-web-ui, ...]              │  │
│  │  config: cordis.patch.yml                          │  │
│  │  └─ Users can override any config via patch        │  │
│  └────────────────────────────────────────────────────┘  │
│                                                          │
│  Preset (Predefined Profile = Mode)                      │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐  │
│  │ Standard │ │ PTC      │ │ Minimal  │ │ Creator  │  │
│  └──────────┘ └──────────┘ └──────────┘ └──────────┘  │
│                                                          │
│  Inspect the actual loaded config:                       │
│  $ dsh --profile web --dump-config                       │
│  → Every line printed can be overridden by your patch    │
│                                                          │
└──────────────────────────────────────────────────────────┘

Bundle is the distribution format for Cordis configuration + code. dsh-base is the foundation layer for all profiles, providing model adapters, tools, persistence, sandbox, approval policy, settings, credentials, and telemetry.

Profile is a named runtime composition containing an ordered list of bundles, installed plugins, and the user’s cordis.patch.yml. dsh web essentially launches the web profile; dsh --profile headless launches the headless profile.

Preset is a predefined Profile—the four operating modes. The interesting design implication: official modes and community-made integration packs have equal status. They’re all just plugin compositions.

Layer 2: Cordis Runtime Layer

The second layer is the actual runtime environment of the Cordis micro-kernel, handling plugin lifecycle management, service registration/discovery, and event communication.

Layer 2: Cordis Runtime Layer
┌──────────────────────────────────────────────────────────┐
│                                                          │
│  Context Service Container                                │
│  ┌────────────────────────────────────────────────────┐  │
│  │  ctx.tools     │  ctx.llm      │  ctx.sessions    │  │
│  │  ctx.sandbox   │  ctx.storage  │  ctx.scheduler   │  │
│  │  ctx.ui        │  ctx.skills   │  ctx.credentials  │  │
│  └────────────────────────────────────────────────────┘  │
│                                                          │
│  Service / Provider / Consumer Pattern                    │
│  ┌────────────────────────────────────────────────────┐  │
│  │  Plugin A (Provider)  → registers service: 'db'    │  │
│  │  Plugin B (Consumer)  → injects: ['database']      │  │
│  │  Cordis auto-matches providers and consumers       │  │
│  └────────────────────────────────────────────────────┘  │
│                                                          │
│  Event System (Four Dispatch Modes)                      │
│  ┌────────────────────────────────────────────────────┐  │
│  │  emit(serial broadcast) : all listeners notified   │  │
│  │  waterfall(middleware)  : short-circuitable        │  │
│  │  parallel(concurrent)  : all execute simultaneously│  │
│  │  serial(sequential)    : ordered, wait each done   │  │
│  └────────────────────────────────────────────────────┘  │
│                                                          │
│  Plugin Lifecycle Fiber State Machine                    │
│  ┌────────────────────────────────────────────────────┐  │
│  │  PENDING → LOADING → ACTIVE → DISPOSED            │  │
│  │  Each transition is deterministic; rolls back on   │  │
│  │  failure (transactional loading)                   │  │
│  └────────────────────────────────────────────────────┘  │
│                                                          │
└──────────────────────────────────────────────────────────┘

The Context Service Container is Cordis’s core abstraction. Each service occupies a stable key (e.g., ctx.tools, ctx.llm), and other plugins find services by key rather than importing a concrete implementation. This fundamentally decouples direct dependencies between plugins.

The Event System provides four dispatch modes. The Agent Loop execution is orchestrated through events:

Agent Execution Event Chain
┌─────────────────────────────────────────────────────────┐
│                                                         │
│  turn/start → agent/pre-step → agent/request            │
│      → llm/stream → tool/call → tools/pre-execute       │
│      → tools/execute → tools/post-execute               │
│      → tool/result → step/end → turn/end                │
│                                                         │
│  Each event is an extension point:                      │
│  - Modify or reject input before agent/request          │
│  - Add approval/timeout/monitoring around tool exec     │
│  - Intercept or record streaming output in llm/stream   │
│                                                         │
└─────────────────────────────────────────────────────────┘

Layer 3: Agent Capability Layer

The third layer is the actual capability layer facing end users, composed of a series of Cordis plugins.

Layer 3: Agent Capability Layer
┌──────────────────────────────────────────────────────────┐
│                                                          │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐   │
│  │ Model Plugin │  │ Tool Plugin  │  │ Skill Plugin │   │
│  │              │  │              │  │              │   │
│  │ • DeepSeek   │  │ • File Edit  │  │ • Code Review│   │
│  │ • Anthropic  │  │ • Shell      │  │ • Arch Diag  │   │
│  │ • OpenAI     │  │ • Search     │  │ • Refactor   │   │
│  │ • Custom     │  │ • Custom Tls │  │ • Custom Skls│   │
│  └──────────────┘  └──────────────┘  └──────────────┘   │
│                                                          │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐   │
│  │ Session Pln  │  │ Sandbox Pln  │  │ Storage Pln  │   │
│  │              │  │              │  │              │   │
│  │ • Sessions   │  │ • Landlock   │  │ • File System│   │
│  │ • Event Log  │  │ • Container  │  │ • Database   │   │
│  │ • History    │  │ • Remote Sbx │  │ • Cloud Stor │   │
│  └──────────────┘  └──────────────┘  └──────────────┘   │
│                                                          │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐   │
│  │ Agent Loop   │  │ Scheduler    │  │ UI Plugin    │   │
│  │ Plugin       │  │ Plugin       │  │              │   │
│  │              │  │              │  │ • Web UI     │   │
│  │ • Standard   │  │ • Task Sched │  │ • TUI        │   │
│  │ • PTC        │  │ • SubAgent   │  │ • Custom     │   │
│  │ • Custom     │  │ • Cron       │  │ • Remote Chn │   │
│  └──────────────┘  └──────────────┘  └──────────────┘   │
│                                                          │
└──────────────────────────────────────────────────────────┘

6. Four Operating Modes: Same Plugins, Different Compositions

Harness ships with four built-in modes, which are essentially four different plugin configuration manifests. The design implication is significant: official modes and community-made packs have equal status.

Standard Mode

Standard mode is the full coding agent, designed for day-to-day development. Out-of-the-box tools include:

  • File editing (str_replace_editor)
  • Shell terminal
  • File and web search
  • Skills
  • Planning and Goals
  • Subagents
  • Workflows

This is the default entry point for most developers and the most feature-complete mode.

PTC Mode (Programmatic Tool Calling)

PTC mode is the most technically innovative feature of this release.

Traditional mode: every tool call requires a round-trip between the model and the client:

Traditional Agent Tool Calling
User: "Refactor this project"
  → Model: "Let me check the file structure" → Tool: readdir
  → Model: "Read package.json" → Tool: read_file
  → Model: "Check main.ts" → Tool: read_file
  → Model: "I need to modify 3 files" → Tool: edit_file × 3
  → Model: "Run tests" → Tool: shell
  → ... Each tool call requires a full model round-trip

PTC mode changes the approach: the model directly generates a TypeScript script via the Code Mode SDK, combining multiple tool operations into a single execution:

PTC Mode Tool Calling
User: "Refactor this project"
  → Model: Generates a TypeScript script
    async function refactor() {
      const files = await readdir('.');
      const pkg = await readFile('package.json');
      const main = await readFile('src/main.ts');
      // ... batch edits
      await editFile('src/main.ts', newContent);
      await shell('npm test');
    }
  → Tool: run_code(refactor)
  → Single execution completes all operations
  → Model: "Refactoring done, tests pass"

Benefits: faster, fewer tokens, reduced round-trips between model and tools. Ideal for structured, multi-step, parallelizable operations.

Cost: model-generated code gains stronger scheduling capabilities, demanding higher standards for sandbox isolation, timeouts, resource quotas, and permission control.

Minimal Mode

Minimal mode keeps only two tools:

  • A persistent Bash terminal
  • A str_replace_editor file editor

The system prompt is compressed to a single line: “You are a helpful software engineering assistant.”

This mode is not for daily use—it’s designed for model benchmarking in a minimal environment. DeepSeek used minimal mode for its own official Coding Agent benchmarks. It removes the influence of Harness peripheral variables to directly measure the model’s autonomous planning, code modification, and terminal operation capabilities.

Creator Mode

Creator mode is the most experimental of the four. It has all the capabilities of Standard mode, but additionally allows the Agent to:

  • Inspect the current runtime: view the active Cordis plugin tree
  • Experiment with plugins in memory: dynamically load and unload temporary plugins
  • Compose new modes: turn successful experiments into reusable Presets
Creator Mode: Agent Self-Modification
┌─────────────────────────────────────────────────────────┐
│                                                         │
│  User: "Create a security audit mode for me"            │
│                                                         │
│  Agent inspects current runtime:                        │
│  → Discovers missing read-only file plugin              │
│  → Creates a temporary plugin in memory (read-only fs)  │
│  → Mounts it to the current runtime                     │
│  → Creates a new Profile (security audit mode)          │
│  → Exports as a reusable Preset                         │
│                                                         │
│  No restart, no file writes, no config changes          │
│  Temporary plugins disappear on restart                 │
│                                                         │
└─────────────────────────────────────────────────────────┘

The trust level for this mode is equivalent to Shell access—default off. Temporary plugins exist only in process memory, with no file writes, package installations, or config changes. They disappear on restart.


7. Trajectory System: Traceable Session Logs

If “Everything is a Plugin” is Harness’s horizontal extensibility, then Trajectory is its vertical observability.

Harness employs an append-only session log design. Everything the model sees—system prompts, reasoning traces, tool calls and results, subagent scheduling, every context injection—is recorded in an append-only session log.

Trajectory Trace System
┌─────────────────────────────────────────────────────────┐
│                                                         │
│  Session Event Stream (append-only)                      │
│                                                         │
│  Event 1: [system] System prompt                        │
│  Event 2: [user] User message                           │
│  Event 3: [reasoning] Model reasoning trace             │
│  Event 4: [tool_call] Tool call: read_file package.json │
│  Event 5: [tool_result] Tool result: {"name":"express"} │
│  Event 6: [context_inject] Context injection: file sum  │
│  Event 7: [subagent] Subagent dispatch: "analyze deps"  │
│  Event 8: [compression] Context compression event       │
│  ...                                                         │
│                                                         │
│  Hard constraint: Model-visible means logged            │
│  Every byte the model sees must be reconstructable      │
│  from the log, verified by runtime assert               │
│                                                         │
│  Capabilities derived from the same event stream:       │
│  ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐       │
│  │Resume│ │Fork  │ │Replay│ │Search│ │Trans │       │
│  └──────┘ └──────┘ └──────┘ └──────┘ └──────┘       │
│                                                         │
└─────────────────────────────────────────────────────────┘

Key design principle: context compression does not delete original history—it uses replacement events to change what the model sees going forward. The original event stream is always fully intact and queryable.

This means that when an Agent makes a wrong decision at step 50, developers can go back to the exact context the model saw at that point, inspect each record, and determine whether the problem came from the model’s judgment, tool returns, prompt changes, or incorrect context injection. For long-running task debugging, this is a qualitative leap—from “guessing what it saw” to “watching the recording.”


8. Plugin Ecosystem: 72 Hours, 1000+ Plugins

The community response to Harness has been astonishingly fast.

When 36Kr tested on the night of August 13, a directory had already indexed 288 plugin repositories. By August 15, GitHub repositories tagged with dsh-plugin had surpassed 1,000 and counting.

Notable community plugins:

PluginDescription
dsh-vision-toolkitAdds vision capabilities to text-only models: image Q&A, long-screenshot OCR, UI restoration
dsh-TUIClaude Code-style full-screen terminal interface
dsh-web-uiWeb UI enhancement pack: task board, Git graph, skin center
DSH-better-sidebarVSCode-style workspace: file editing, terminal, Git, subagent management
dsh-session-supervisorSession lifecycle guardian: timeout/silence/abnormal turn alerts
dsh-dream-reflectionPeriodic model reflection with human-approved knowledge consolidation
dsh-browser-automationIsolated browser automation with DNS-level egress control, per-action approval
dsh-ui-whalePixel-art whale pet that blinks, swims, and spouts water during thinking

The most whimsical example: Nagi-ovo/dsh-ads—a plugin that adds 2005-era Chinese website sidebar ads, in-feed ads, and corner popups to the Web UI, with deliberately tiny close buttons. Right next to it in the directory is a dedicated ad-blocking plugin. Ads are a plugin, ad-blocking is a plugin—the ecosystem completed its first offense-defense cycle on its own.

Remote channel plugins also emerged rapidly: qqbot, dsh-weixin-bot, dsh-feishu-bot, dsh-wecom-bot, telegram. Once installed, DSH becomes a bot that can be @mentioned in QQ groups or Feishu.


9. Architectural Comparison: Harness vs. Claude Code vs. Codex

Harness is most frequently compared to Claude Code and OpenAI Codex, but the three have fundamentally different architectural philosophies.

Architectural Philosophy Differences

DimensionDeepSeek HarnessClaude CodeOpenAI Codex
PhilosophyRecomposable plugin frameworkFinished product toolboxFinished product + open-source CLI
Model Lock-inNone, model is a pluginPrimarily Claude familyPrimarily OpenAI family
Extension BoundaryEntire runtime (Loop/UI included)Tool/Skill/MCP layerTool/Skill/MCP layer
Agent LoopReplaceable pluginFixedFixed
UIReplaceable pluginTerminal/IDE/Desktop/WebCLI/IDE/Desktop/Web
LicenseMIT open sourceCommercial productCommercial + open-source CLI
SandboxReplaceable pluginBuilt-in mature systemBuilt-in granular control
Hot-swapRuntime, no restartNot supportedNot supported
MaturityDeveloper previewEstablished commercialEstablished commercial

The Core Difference: What Can You Actually Change?

Claude Code and Codex are delivered as “integrated appliances.” Model, tools, execution loop, UI—all coupled together. The vendor decides what you get. You can write Skills and MCP Servers, but the Agent Loop is welded shut, the UI is welded shut, and the scheduling logic is welded shut.

Harness reverses this. From model to UI, from sandbox to scheduler, every component is a replaceable plugin. This is not the “we opened a few API endpoints for you to write plugins” kind of pseudo-openness—even the Agent’s loop logic itself is a plugin, and you can replace it.

Strategic Divergence: Why Anthropic Needs Harness to Be Expensive, and DeepSeek Needs It to Be Free

Anthropic’s business model is “model + shell” integrated delivery. Claude Code’s closed-source shell is its product moat—subscribers pay for the tight integration between model and shell. Others can’t pry it open or replicate it.

DeepSeek’s strategy is the opposite. Its models are strong and cheap, but previously, the Agent integration section of its API docs listed a dozen third-party tools—Claude Code, Codex, Cursor, Copilot… without a single DeepSeek Agent product. The models were theirs, but the “hands doing the work” belonged to others.

Harness changes this. Once the Agent execution layer is leveled into an MIT-licensed open public good, competition compresses back to model capability and pricing—and that’s now DeepSeek’s home turf.


10. Strategic Significance: From Model Provider to Agent Ecosystem Hub

10.1 Tianyi Cui and the Harness Team

Tianyi Cui, lead of the Harness team, has an unusual background for AI. Born in the 1990s, he earned his bachelor’s degree from Zhejiang University’s Computer Science department (a younger alumnus of Liang Wenfeng, DeepSeek’s founder). During university, he won six gold medals at ACM ICPC Asia Regional competitions. After graduation, he spent nine years at Jane Street (Hong Kong and New York offices), a top-tier quantitative trading firm, specializing in high-concurrency, high-fault-tolerance trading systems.

The logic of choosing such a person to lead the Agent infrastructure is clear: Harness is essentially a control system for model execution. It demands not “smarter algorithms” but extreme stability and determinism, full-chain observability and traceability, and strict risk and permission boundaries—requirements nearly isomorphic to the exacting standards of high-frequency trading infrastructure.

10.2 From “Blue Whale” to “Killer Whale”: The Brand Metaphor

A noteworthy detail: DeepSeek’s main brand has long used a blue whale logo, while the Harness team’s logo is a black killer whale.

This is more than visual differentiation—it’s a strategic metaphor:

  • Blue Whale: massive size, quantity-driven—representing the model’s capability ceiling and scale
  • Killer Whale: high intelligence, strong social structure, skilled at group coordination—representing the ability to organize, schedule, and collaborate to accomplish complex tasks

DeepSeek seems to be declaring through brand language: the decisive factor in the LLM era is shifting from “who is smarter” to “who can organize intelligence into productivity.”

10.3 The Deeper Meaning of MIT Open Source

The MIT license choice is strategic. MIT is one of the most permissive open-source licenses—anyone can freely use, modify, and redistribute, even in commercial closed-source products.

DeepSeek’s bet: the infrastructure layer, not the model itself, is where value accumulates. If Harness becomes the “Android open-source base” for the Agent domain, DeepSeek will occupy an irreplaceable position at the entrance to the Agent ecosystem.


11. Current Limitations and Risks

Let’s be honest: Harness is still v0.1 Developer Preview. The official README says it in all caps:

THERE WILL BE COMPATIBILITY-BREAKING CHANGES.

Major Risk Points

  1. Unfrozen APIs: Core plugins and APIs will continue evolving. Using it in production now is betting they won’t change.

  2. Steep Learning Curve: Cordis, plugins, services, events, Profiles, Bundles—a whole conceptual system with a significant onboarding cost.

  3. Unknown Maturity: No independent third-party benchmarks, no large-scale production cases. While there are ~12,293 commits, this is mostly internal evolution with limited external field testing.

  4. Early-Stage Ecosystem: 1,000+ plugins look impressive, but quality varies wildly. No official review mechanism or version compatibility guarantees exist.

  5. Hype ≠ Maturity: 60,000+ GitHub stars largely reflect the DeepSeek brand and the “Claude Code competitor” narrative, not engineering stability.

  6. Data Governance Challenges: Append-only logs contain code, credential traces, and internal file content. Replayability improves auditability but also expands the attack surface requiring protection.


12. Conclusion and Outlook

DeepSeek Harness is not another Claude Code clone. It’s an architectural signal—representing a paradigm shift in AI Agent frameworks from “monolithic core, hard to extend” toward “micro-kernel + event sourcing + runtime hot-swap.”

Its core value can be summarized in three statements:

  • Architectural Signal: The “spatiotemporally composable” plugin paradigm exemplified by Cordis may be a credible path for Agent frameworks to escape the dead end of monolithic architecture.
  • Ecosystem Signal: Open source + MIT + community cold-start demonstrates that DeepSeek aims not for another closed-source Agent product, but for an open base platform that can be extended by anyone.
  • Strategic Signal: The next battleground for model vendors has shifted from “context window size, benchmark scores” to “execution layer and feedback loop.”

For developers, the best posture right now is: clone it, run npx @deepseek-ai/dsh web, read docs/architecture.md, and experience firsthand what “Everything is a Plugin” actually feels like.

The AI engineering battlefield has quietly shifted from “whose model is stronger” to “whose Agent runs more stably and scales more flexibly.” DeepSeek Harness’s answer is radical—make every piece of the Agent a swappable component. Whether that answer is correct, time will tell.

But one thing is certain: on the night of August 13, 2026, the rules of the Agent game were rewritten.