DeepSeek Harness subagents: DSH plugin delegation providers

Configuration & UsagePublished 2026-10-03Author: DeepSeek Plugin Market
DeepSeek HarnessDSH pluginsubagentdelegationconfiguration
DeepSeek Harness subagents delegate work to child agents; the DSH plugin seam registers providers by name in ctx.subagents and rejects unsupported capabilities.

The DeepSeek Harness subagent seam lets one agent delegate work to child agents — it is an optional capability, not part of the agent loop, and a single context can host multiple providers registered by name in ctx.subagents, so you can pick a different backend per task (source).

What a DeepSeek Harness subagent is: delegating work outward

A subagent is outsourcing a relatively self-contained piece of work to another agent; unlike a seam such as bash, which allows only one executor, subagents can host multiple implementations in one context (source). Key points:

  1. It is an optional capability — not part of the agent loop, so its type definitions are not in core. Expected: things work fine without it; only using it requires the matching provider.
  2. Registered by name, many implementations coexist — the registry follows the pattern of an LLM adapter registry. Expected: you can mount several backends at once and choose by name.
  3. Two kinds of model-facing consumer — dsh-tool-subagent delegates by provider; dsh-tool-subagent-control optionally provides global send_message, interrupt_agent, and list_agents control tools. Expected: the former starts delegation, the latter controls it.
  4. Parent-child relationships are discoverable — the same ctx.subagents service discovers direct children through a parent catalog and descendants recursively through parent catalogs. Expected: you can trace a delegation tree, not just one level.

Which DeepSeek Harness subagent providers you can choose

The official docs give six sibling packages as service providers, covering in-process spawning, fork, and backends for ACP / Codex / Claude Code / DeepSeek Harness SDK (source). Meet them one by one:

  1. dsh-subagent-spawn-in-process — in-process spawning. Expected: lightweight and fast to start, good for short delegations.
  2. dsh-subagent-fork-in-process — in-process fork that inherits the current directory context. Expected: use it when you want to carry over the current working directory and state.
  3. dsh-subagent-acp — for ACP backends. Expected: connect an agent that supports ACP.
  4. dsh-subagent-codex — for Codex. Expected: reuse Codex as a subagent.
  5. dsh-subagent-claude-code — for Claude Code. Expected: reuse Claude Code as a subagent.
  6. dsh-subagent-dsh-sdk — for the DeepSeek Harness SDK. Expected: integrate with other DeepSeek Harness setups; once registered it is callable by name like any other backend.

Mounting a backend usually means getting its plugin into your config tree. To find community subagent-related plugins, browse DSH Plugin Hub.

One-shot vs continuable subagents, and capability mismatch errors

A provider declares its startup capabilities through a capability descriptor, and the service validates before delegating to start() — a request that depends on a capability the provider lacks is explicitly rejected rather than silently ignored (source). Key points:

  1. Tell the two paths apart — one-shot delegation goes through SubagentProvider.start(), where the provider composes the child; continuable subagents are composed by the continuable execution manager through prepareContinuable. Expected: use the continuable path when you need to keep talking.
  2. Five capability switches — SubagentCapabilities contains agentOptions, outputSchema, depthLimit, toolFilter, and persona, matching the startup request options one to one. Expected: check what a provider supports before choosing it.
  3. Unsupported means an error — a missing required capability throws SubagentError('UNSUPPORTED_CAPABILITY'). Expected: following fail-loud rather than silent degradation surfaces problems early.
  4. List existing subagents — the subagentCatalog projection extracts SubagentCatalogEntry[] from the session event stream, each with child id, creation time, mode, and labels; historical entries whose mode cannot be determined are marked mode: 'unknown'. Expected: you can list the subagents a session dispatched.

Notes and common questions

  1. Align capabilities first: different providers support different capabilities, so checking SubagentCapabilities before sending a request saves one error.
  2. Do not treat one-shot as continuable: if you need follow-up questions, use the continuable path, or the child conversation cannot be resumed.
  3. Historical entries may have an unknown mode: mode: 'unknown' preserves identity display but does not guarantee continuable execution; do not retry based on it.
  4. Subagents also create sessions and jobs: long delegations involve background jobs and session records too; see Handle long-running DeepSeek Harness tasks and Where DeepSeek Harness sessions are stored and how to query them.
  5. Control tools are optional: send_message, interrupt_agent, and list_agents come from the optional dsh-tool-subagent-control; without it those tools are absent.

Sources: Subagent (official docs), Tool schema catalog (official docs)

FAQ

What does the DeepSeek Harness subagent seam do?

The DeepSeek Harness subagent seam lets one agent delegate work to child agents. It is an optional capability and not part of the agent loop, so its type definitions are not in core; think of it as outsourcing a self-contained piece of work.

How does the DeepSeek Harness subagent differ from bash?

The DeepSeek Harness subagent differs from bash most in reuse: bash allows only one executor, while subagents can host multiple provider implementations in the same context, registered by name in ctx.subagents, so the registry behaves more like an LLM adapter registry.

Which DeepSeek Harness subagent providers can I choose from?

DeepSeek Harness ships six sibling subagent packages officially: spawn-in-process, fork-in-process, acp, codex, claude-code, and dsh-sdk, covering in-process spawning, directory-inheriting fork, and backends for ACP, Codex, Claude Code, and the DeepSeek Harness SDK.

What happens if I pick the wrong provider for a DeepSeek Harness subagent?

The DeepSeek Harness subagent service validates capability flags before delegating: a capability the request needs but the chosen provider lacks is explicitly rejected (SubagentError('UNSUPPORTED_CAPABILITY')) rather than silently ignored, following the fail-loud rule.

How do I list the subagents in a DeepSeek Harness session?

Use the DeepSeek Harness subagentCatalog projection, which extracts SubagentCatalogEntry[] from the session event stream; each entry has the child id, creation time, mode, and mode-determined labels. Historical entries whose mode cannot be determined are marked mode: 'unknown'.

Related Terms

subagent seam
The subagent seam is the optional DeepSeek Harness capability for delegating work to child agents; it is not part of the agent loop, and its type definitions live in the subsystem page.— DeepSeek Harness Documentation - Subagent
ctx.subagents
ctx.subagents is the subagent service; it lets multiple provider implementations coexist by name in the same context and uses an internal activation manager to orchestrate continuable subagents.— DeepSeek Harness Documentation - Subagent
SubagentCapabilities
SubagentCapabilities describes which capabilities a provider supports at startup (agentOptions, outputSchema, depthLimit, toolFilter, persona); the service validates before delegating and rejects requests missing a capability.— DeepSeek Harness Documentation - Subagent
continuable subagent
A continuable subagent is composed by the continuable execution manager through the SubagentProvider.prepareContinuable path rather than the one-shot start() path; it lets a child agent's conversation be resumed.— DeepSeek Harness Documentation - Subagent

Sources