DeepSeek Harness Subagents: Delegating Work to Claude Code, Codex and Itself

The most underrated part of DeepSeek Harness is that dsh doesn’t just sit next to other coding agents — it can sit above them. Through dedicated subagent packages it can launch a real Claude Code CLI and a real Codex as child processes inside its own workflow, hand each one a task, and read back the result, as described in the project’s GitHub repository. DeepSeek Harness itself went public on 13 August 2026, and the subagent packages described below are part of the same fast-moving developer preview.

DSH Field Guide is an independent community resource covering dsh harness. It is not affiliated with, endorsed by, or operated by DeepSeek, Anthropic, or OpenAI. DeepSeek, Claude Code and Codex are trademarks of their respective owners, and everything below describes public, documented behaviour rather than an official statement from any of those companies.

What a Subagent Is in dsh

A subagent in dsh is not “another system prompt” bolted onto the same loop — it is a provider, registered by a plugin, that runs its own agent loop and produces its own session log. The subagent package group in the repository ships five separate flavors: subagent-claude-code, subagent-codex, subagent-acp, subagent-dsh-sdk and subagent-fork-in-process, ranging from forking inside the same process to spawning a completely separate CLI.

Five subagent packages in DeepSeek Harness: claude-code, codex, acp, dsh-sdk and fork-in-process

A provider, not a prompt

Each of the five packages registers itself under a profile name and answers the same question differently: who actually runs the work, and in what process. subagent-fork-in-process stays inside dsh’s own runtime; subagent-claude-code and subagent-codex reach outside to a different vendor’s binary entirely.

Why this is architecturally possible at all

Everything in dsh is implemented as a plugin, including the main agent loop itself. A typical agent framework wires one loop and a fixed set of capabilities around it; dsh turned the loop itself into a swappable plugin, so running a second loop inside the first — even someone else’s loop — is ordinary composition rather than a hack. The underlying plugin framework, Cordis, is described in the project’s arXiv preprint, and the same “Agent = Model + Harness” framing appears on the official DeepSeek Harness product page.

Four-step delegation flow in dsh: parent session, subagent provider, child process, result written to the session log

Claude Code as a Child Process

What the package actually does

@deepseek-ai/dsh-subagent-claude-code registers a subagent provider under a profile name (claude-code by default) and launches the actual Claude Code CLI as a child process inside the delegating session’s working directory, through the official Agent SDK. It is not an emulation or a rewritten client — it is the same binary a developer would run from a terminal.

Installation and what it pulls in

It installs as a profile bundle:

  1. Run dsh plugin --profile <name> add @deepseek-ai/dsh-subagent-claude-code to register the provider under a named profile.
  2. Confirm the pinned Agent SDK version and matching CLI build landed alongside it, so the two never drift apart.
  3. Launch dsh with dsh --profile <name> so the profile with the subagent attached is actually active.
  4. Give the child process its own Claude authentication — dsh does not proxy or substitute it.
  5. Delegate a task from the parent session; the child inherits the working directory but not the parent’s history.
  6. Read the result back through the session log rather than the terminal output of the child.
  7. Remove it symmetrically with dsh plugin --profile <name> remove @deepseek-ai/dsh-subagent-claude-code when a profile no longer needs it.

Whose settings win

Claude’s own settings and authorization stay authoritative inside the child process. The practical consequence: a working Claude subscription and its own credentials are still required — dsh does not substitute or proxy them, it only launches the CLI that already expects them. Readers weighing whether delegating to a full agent is worth the added spend should also check how DeepSeek Harness pricing has shifted, since the parent run still pays for task preparation and response parsing on top of whatever the child agent bills.

Comparison of plugin, MCP server, skill and subagent showing where each one runs relative to the dsh runtime

Codex as a Child Process

A different protocol, same idea

@deepseek-ai/dsh-subagent-codex takes a different path: it brings up a real Codex through the official app-server --stdio protocol, opens a disposable thread, and sends that thread one self-contained text task. The disposability matters — state in the child thread does not accumulate, so the task has to be phrased so it can be solved without the parent session’s history. Package names and flags in this area are also the least stable part of the project, and the README says so in capital letters:

DeepSeek Harness is in developer preview and iterating rapidly. THERE WILL BE COMPATIBILITY-BREAKING CHANGES.deepseek-ai/deepseek-harness README

Configuring the model per subagent

As of version 0.1.2-rc.1, models for the Claude Code and Codex subagents are configured separately: the caller sets the provider, the model, the reasoning effort and the maximum output length for each. Before that release everything inherited from the parent, which is exactly why older config examples for delegation don’t carry over one to one. DeepSeek’s own X/Twitter announcement of the 13 August 2026 launch is the fastest way to track which release introduced which subagent-facing change.

Subagent vs MCP vs Plugin vs Skill

Anyone comparing DeepSeek Harness against Claude Code as an agent runs into the same four extension points, and dsh’s names for them don’t map cleanly onto any single competitor’s vocabulary.

Extension pointWhat it replacesScope of one call
PluginAny part of the runtime, including the main loopSystem-wide
MCP serverNothing internal — bridges an external toolA single tool call
SkillNothing — a reusable text recipe invoked as /nameOne instruction, one model
SubagentA whole separate agent and loopAn entire task, own model and own rights

Four extension points, four jobs

A plugin mounts into the runtime and can replace anything, up to and including the loop. An MCP server is an external process whose tools get bridged in under names like mcp__<server>__<tool>. A skill is a text recipe a user invokes as /name. A subagent is a full separate agent with its own loop, handed an entire task rather than a single tool call.

When to pick which

One call to an external service calls for MCP. Changing dsh’s own behaviour calls for a plugin. A repeatable instruction with a fixed model calls for a skill. Handing an entire task to something else — possibly on a different model, with different permissions — calls for a subagent.

Why Delegate to a Rival Agent at All

Three honest reasons

Different models for different steps. Planning can run on one model, implementation on another, review on a third, all inside a single pass, instead of forcing one model to context-switch between roles it isn’t equally strong at.

Four reasons to delegate to another agent: different model per step, reuse proven tooling, compatible hooks, separate permissions

Reusing tooling that’s already been battle-tested. Claude Code and Codex both carry more real-world mileage on production codebases than a brand-new DeepSeek Harness install, and reusing that tooling beats reinventing it.

Hooks stay compatible. Checks already written for Claude Code or Codex keep working inside the child process, so teams don’t have to port an existing hook library just to try dsh.

The cost side

Delegation is not free: the child agent spends its own tokens at its own rate, and the parent run still pays for preparing the task and parsing the response. That math is worth doing on its own, especially after DeepSeek’s own API prices moved on 16 August 2026.

Known Breakages

reasoningEffort gets dropped

The most visible breakage: subagents spawned via a spawn-based provider lose reasoningEffort, and a provider that requires thinking mode rejects the delegation outright. The symptom looks like a rejection on the provider’s side, but the cause sits earlier, in how parameters get passed at process spawn time.

Table of known subagent breakages in dsh with causes and fixes

Everything else that bites

The child process launches inside the parent session’s working directory, so the parent’s permissions and sandbox determine what the child agent can actually touch. Codex’s disposable thread doesn’t remember context, so a task phrased as “continue what we were discussing” simply cannot be solved. And more broadly: the project is still in developer preview, so package names and composition change between releases — worth checking GitHub Discussions before assuming last month’s config still applies. For the full breakdown of profiles, versions and installation steps, see the DeepSeek Harness guide.

FAQ