Back to home@leonardoxr

dsh-routed-subagent

Complexity-routed subagent delegation for DeepSeek Harness: the model picks the runtime tier per task.

Stars
0
Language
TypeScript
Created
Aug 22, 2026
Updated
Aug 22, 2026

Introduction

dsh-routed-subagent

Complexity-routed subagent delegation for DeepSeek Harness. The calling model judges each delegated task and picks the runtime tier — provider, model, token cap, reasoning effort — it deserves. Spawn chains bound what deeper delegation may exist at all.

Built only on public Harness seams (ctx.subagents.start() per-start agentOptions, the agent-scoped agent/request waterfall). No upstream source changes; works on CLI, plain dsh web, and community desktop distributions.

Configure in the app

After install, Settings → Plugins → Routed subagent opens a structured tier builder. Provider and model choices come from the same live Host catalog as Chat, and each model exposes its adapter-owned reasoning levels. Each tier also has dedicated controls for its name, token cap, persona, routing guidance, and child-delegation allowlist. Tiers can be added, duplicated, reordered, or removed without editing JSON. Changes are staged until saved, and the whole table can be discarded or reset to composition. Saved edits apply to new delegations immediately; no restart. Structural identity (toolName, providerName, maxDepth) stays in composition.

The editor uses the Harness client settings-scope contract (getSnapshot, subscribe, set, and unset), so it requires the browser half bundled with current DSH releases.

Install

dsh plugin --profile <your-profile> add dsh-routed-subagent   # once published
# or straight from a git checkout / packed tarball:
dsh plugin --profile <your-profile> add C:/path/to/dsh-routed-subagent

Configure

The tool refuses to load without tiers — set them in your profile's patch layer (~/.dsh/profiles/<profile>/cordis.patch.yml) by targeting row id routed-subagent. A tier is one runtime; spawnable chains what its children may hire:

# Sol's main agent gets the full menu; GPT children stay inside the codex pool.
- id: routed-subagent
  config:
    toolName: subagent            # optional: replaces the stock name
    maxDepth: 'provider-managed'
    tiers:
      gpt-fast:
        provider: openai-codex        # your codex subscription route
        model: gpt-5.4-mini
        maxTokens: 16384
        guidance: 'Lookups, mechanical edits, single-file changes, summarization.'
      gpt-deep:
        provider: openai-codex
        model: gpt-5.6-sol
        maxTokens: 65536
        reasoningEffort: high         # applied via the agent/request waterfall
        guidance: 'Multi-step reasoning, architecture, hard debugging.'
        spawnable: [gpt-fast]         # deep children may hire fast helpers only
      gpt-cheap:
        provider: openai-codex
        model: gpt-5.6-luna
        maxTokens: 16384
        guidance: 'Lower-cost Codex work where speed matters more than deep reasoning.'

Per-agent menus come from composition: mount this row (with different toolName + tiers) inside an agent preset to give that preset its own delegation menu. An agent whose preset lacks the row cannot delegate at all.

Config reference

KeyDefaultMeaning
toolNamerouted_subagentRegistered tool name; keep distinct from the stock subagent tool
providerNamespawnSubagent transport on ctx.subagents
enableRunInBackgroundtrueExpose run_in_background (jobs runtime required)
maxDepth'provider-managed'Numeric cap requires the provider's depthLimit capability
rootTiersall tiersTiers top-level agents may use
tiers.*.provider, .modelrequiredChild request routing (AgentOptions)
tiers.*.maxTokensOutput-token cap for the child
tiers.*.reasoningEffortEffort forced onto every child request
tiers.*.personaPer-child persona override (needs persona capability)
tiers.*.guidanceOne-line tradeoff shown to the calling model
tiers.*.spawnable[]Tier names children of this tier may delegate to

How the choice works

The tool description carries each tier's guidance; the model judges the delegated work per call and picks tier. Deeper in a chain, the exposed menu narrows to the caller tier's spawnable list — violating calls fail with a message naming what is valid, so the model self-corrects.

Security note

Harness's /api trust fence is DNS-rebinding defense, not authentication. Whatever a delegated child can do, anyone who can reach the server can set in motion. Keep expensive tiers behind routes whose accounts you accept spending.

License

MIT