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.

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.

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

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 point | What it replaces | Scope of one call |
|---|---|---|
| Plugin | Any part of the runtime, including the main loop | System-wide |
| MCP server | Nothing internal — bridges an external tool | A single tool call |
| Skill | Nothing — a reusable text recipe invoked as /name | One instruction, one model |
| Subagent | A whole separate agent and loop | An 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.

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.

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.
