Preface

DeepSeek Harness (dsh) treats models, tools, conversations, and loops as plugins. The same agent can swap presets, tool surfaces, and system prompts. When actually running tasks, the problem rarely lies in “whether tools are available” but rather which thinking chain the model is steered into on its first request: some tasks are better suited for planning thoroughly before acting, while others benefit from thinking and acting incrementally. With the same prompt and same tool directory, even minor differences in the initial persona and visible tools can lead to completely divergent follow-up trajectories.

The community repository dsh-router-standard addresses exactly this: before the first model request, it places the conversation on an observable behavior profile based on the task, and injects the corresponding persona and initial tool surface. It is maintained by yjh051108, licensed under MIT, with current package.json version 0.2.0. This article is compiled after cross-checking against the community directory page, GitHub README, source code, and errata statement. The mentioned DeepSeek Harness Plugin Library is an independent community site with no official affiliation to DeepSeek / Fangduan; the official discovery entry remains the GitHub topic dsh-plugin and deepseek-ai/deepseek-harness.

What is this

dsh-router-standard is a set of agent preset for DeepSeek Harness, categorized under “Conversations and Messages”. It does not swap models or wrap another chat UI, but instead rewrites the system prompt and initial tool directory of the conversation on the agent plane.

The repository README summarizes it as: one preset, two routing modes (named as of v0.2.0), backed by three observable behavior intervals measured on the react ↔ spec axis. The directory page aligns with this description: it automatically selects a profile before the first model request, supports persona and initial tool injection, and exposes tuning tools to the agent.

As of 2026-08-17, both the GitHub repository yjh051108/dsh-router-standard and the directory page show 270 stars. The NOTICE states: this is a community product, not endorsed by DeepSeek; preset/agent.cordis.yml is derived from the official Standard preset (MIT), and the initial anchoring mechanism is ported from xiaobright/dsh-anchored-standard.

You need to distinguish two sets of “mode” names to avoid confusion later:
- Routing Presets (choose one or both during installation): Router Standard and Router Spec, corresponding to the config routerMode: standard | spec.
- Behavior Bands (for classification and tuning): spec / mixed / react, plus weak (internal routing) for cases with unclear classification.

Core Features

Two Routing Presets

Version 0.2.0 consolidates user-installable presets into two, as compared in the README below.

Routing Preset What the first request looks like Thinking Pattern (measured description from the repo)
standard (default recommended) Only retains the RL training phrase You are a helpful software engineer assistant., with the tool surface reduced to shell + str_replace_editor No “grand deliberation”: think one step, act one step
spec Injects persona categorized by task (spec / react / weak), retains full prompt sections Extremely long initial thinking chain; the README notes “101K reasoning steps and 0 tool calls are its feature, not a bug”

The preset/router-standard/preset.yml file displays the name Router Standard (experimental); preset/router-spec/preset.yml is Router Spec (experimental). The default configuration for router-bootstrap in agent.cordis.yml is routerMode: standard.

The standard mode removes the identity, web, tool guidance, and other sections in the first round, leaving only the RL phrase (plan-mode sections are retained). The spec mode uses applyPersona() to only replace the persona, leaving the rest of the sections unchanged. Regardless of which preset is used, after the first persistent tool call, the full Standard tool directory is unlocked, and the router will no longer modify the tool surface. The mode is stored as a persistable event in the conversation, and remains valid after resuming/reloading.

Three Observable Behavior Bands

The repository conducted fine-grained probing on V4 Pro (README: 21 mode points × n=2, official API, reasoning_effort=max), and concluded that behaviors on the persona axis collapse into three intervals, rather than being continuously adjustable:

Behavior Band Value Range Observable Behavior Described by the Repository
spec 0 – 0.19 Stable plan-collective trajectory (We, let-me close to 0)
mixed 0.2 – 0.49 Transition trap: mixed usage of We / The / Let, unstable
react 0.5 – 1.0 Stable executor trajectory (The / Let first-person)

Automatic classification will not select mixed. The dev_router_mode still accepts 0–100 or 0.0–1.0, but internally quantizes these values into the three bands. V4 Flash is described in the README as threshold-based: 0–0.5 leans towards the spec side, and the jump only occurs above 0.75.

The task classification logic is in preset/router-standard/router-core.mjs in the classifyTask() function: it counts hits for “build/develop” and “fix/debug” in Chinese and English keywords respectively; whichever side has more hits falls into react or spec, and in case of a tie or no hits, it returns weak, letting the model choose the style based on the task itself.

Initial Persona and Tool Injection

Under the spec routing preset, the core initial tools vary with the behavior band (the bootstrap will automatically supplement bash or pwsh for the current platform):
- spec: read / edit / glob / grep (read first)
- react: read / write / edit (write first)
- weak: str_replace_editor (forms the RL dual tool surface mentioned in the README with shell)

The standard routing preset does not use this categorized tool surface, and fixes the initial round to the RL phrase + shell + str_replace_editor.

The weak band will also append a near-field prompt after each real user message. For simple tasks, it uses fast-converging guidance; if judged as complex by isComplexTask() (length over 120, or hits keywords like “architecture / refactoring / architecture”), it switches to deep guidance for decision closure. The README labels this set of deep adaptive guidance as v20.

Tuning Visible to the Agent

The preset registers three tools for the model:
- dev_router_status: Current routing preset, mode, band, persona, initial core tools, and whether an override exists
- dev_router_mode <spec|weak|mixed|react|0-100|0.0-1.0|auto>: Explicitly change the band; auto clears the override and reverts to task classification
- dev_mode_subagent <spec|react|balanced> <task>: Run a task once in a brand new isolated context with another reasoning mode, without altering the current conversation trajectory

The README emphasizes: changing the persona mid-session will invalidate the entire prefix cache, and appending a persona at the end is largely ineffective (experiment number P6), and the native subagent will inherit the current persona. Therefore, changing the band mid-session can only use mode-isolated subagents.

Automatic Model Matching

There are no separate Pro / Flash configuration items. The personaFor(mode, modelId) function reads the model routing of the current conversation: when the model id matches /flash/i, it uses Flash’s weak persona (with review / anti-off-topic anchors), otherwise it uses Pro’s w6c (spec phrase + classification instructions, no anchors). The persona is locked on the first request; switching models in the GUI will open a new conversation and re-match the persona.

Installation and Activation

The installation command given on the community directory page is as follows, run in the DeepSeek Harness terminal:

dsh plugin add github:yjh051108/dsh-router-standard

The directory page also notes that for reproducible installations, you should pin the commit hash. The latest commit on the current main branch is f9667f72d45e743f1683f36420ce34c2027fe7b2 (2026-08-15):

dsh plugin add github:yjh051108/dsh-router-standard#f9667f72d45e743f1683f36420ce34c2027fe7b2

The repository’s package.json does not have a dsh.bundle declaration, and the README states that the actual activation path is “copy the agent preset”, rather than relying solely on the bundle layer mounting. After cloning the repository, copy the two presets into ~/.dsh/.agent-presets/ (the README uses PowerShell; the equivalent commands for Linux / macOS are as follows):

# Standard Routing Preset (RL interface restoration, default recommended)
mkdir -p ~/.dsh/.agent-presets
cp -R ./preset/router-standard ~/.dsh/.agent-presets/router-standard

# Spec Routing Preset (deep thinking first)
cp -R ./preset/router-spec ~/.dsh/.agent-presets/router-spec

On Windows, follow the README:

# Standard Routing Preset (RL interface restoration, default recommended)
$target = Join-Path $env:USERPROFILE '.dsh\.agent-presets\router-standard'
Copy-Item -Recurse .\preset\router-standard $target

# Spec Routing Preset (deep thinking first)
$target = Join-Path $env:USERPROFILE '.dsh\.agent-presets\router-spec'
Copy-Item -Recurse .\preset\router-spec $target

There is a loader limitation in the README: installed copies must maintain distinct module file names. ESM caches modules by URL, so do not overwrite files with the same name in place.

Then restart dsh, open a new conversation, and select Router Standard (experimental) or Router Spec (experimental) in the Agent preset menu. Existing conversations will not switch presets.

The package.json requires Node.js >=22. Self-test command:

node --test router.test.mjs

Typical Usage

The steps below are from the README and source code, and can be reproduced as-is.

1. Start a new conversation with the standard routing preset, letting it automatically select the band based on the task

After restarting, open a new conversation and select Router Standard (experimental). The first user message will be classified; under the standard preset, the initial system prompt is reduced to the RL phrase, and the model enters the think-act loop. If the task is more suited for “thoroughly planning first”, switch to Router Spec (experimental).

2. Ask the agent to report its current profile

In the conversation, have the model call:

dev_router_status

The returned content includes router-mode (standard / spec), mode and band, persona text, initial core tool list, and whether it is in override state.

3. Explicitly change the band, or revert to automatic classification

dev_router_mode spec
dev_router_mode react
dev_router_mode weak
dev_router_mode 0.3
dev_router_mode auto

Numeric inputs will be quantized into the three behavior bands. mixed / 0.3 can be manually enabled, but the README notes this is a transition trap that will not be selected by the automatic path. The band change will take effect on the next request.

4. Run a different reasoning style in an isolated context without altering the current conversation

dev_mode_subagent spec Write a migration plan for the current repository, only output the plan

The subagent uses an independent system prompt, and returns the text (truncated if too long) and the number of reasoning characters. The current conversation’s trajectory, persona, and tool surface remain unchanged.

Applicable Scenarios and Notes

This is suitable for users who are already using DeepSeek Harness and feel that “the same model is sometimes extremely efficient and concise, but sometimes wastes context on long thinking chains in the first round”. For maintenance tasks, debugging, or scenarios requiring reading first then editing, the spec band / spec preset is closer to the plan-collective style; for building from scratch and directly producing runnable products, the react band / standard preset is closer to the execution loop. Tasks with ambiguous classification will fall into weak, letting the model choose the style based on build / fix.

There are several boundaries to clarify before use.

This is an experimental preset. Both UI names include (experimental). It modifies the system prompt and initial tool directory on the agent plane, and does not replace the sandbox, approval, or model routing on the host. The NOTICE states that it is not endorsed by DeepSeek.

The path is locked once submitted. The first request determines the persona for this conversation; switching models in the GUI mid-conversation is equivalent to starting a new conversation. To use a different reasoning style in the same dialogue, use dev_mode_subagent, do not expect that changing a single persona line will reverse the trajectory.

The measured data is the author’s repository records, not a public benchmark. The README references score differences from Project2, Mario, and other metrics, as well as routing rates on Flash / Pro. The NOTICE points out that the Project2 numbers come from xiaobright/modeltest (V4.1b, frozen, personal harness), not a public benchmark. Please verify the numbers in the article against docs/experiments.md, and do not treat them as official evaluations.

The theoretical part has been deprecated, while the engineering part remains valid. The top of the repository README and docs/statement.md (2026-08-16) state: the paper is not retracted, but the “dual attractor” hypotheses A1–A4, as well as strong attributions such as god/ghost and the impossibility of self-routing, have been marked as deprecated. The author’s current statement is phenomenological: using the observed behavioral discontinuities as a routing layer. When writing configurations or reviewing tools, refer to the README’s Usage and source code, and do not treat the deprecated theoretical explanations as definitive mechanisms.

The plugin will run code with the permissions of the current dsh process. The directory page warns: plugins run with the permissions of the current dsh process, and may execute code during installation. You should inspect the source code repository and license before installing; pin the commit hash for reproducible installations. This repository is licensed under MIT, with the copyright statement Copyright (c) 2026 yjh051108.

Do not mix installation paths with the suite repository. The same maintainer also has dsh-routing-suite (packaging of the injector + this preset), with different installation steps. This article only covers the README for the dsh-router-standard repository itself.

Summary

dsh-router-standard turns the reasoning pattern of DeepSeek Harness conversations from “rolling the dice with the same Standard prompt” into two installable presets, and injects persona and narrowed tool surfaces before the first model request. The standard mode follows the think-act loop restored from the RL interface, while the spec mode prioritizes deep thinking; the three underlying bands spec / mixed / react come from the repository’s own probing, and mixed is not selected by default. Tuning tools are visible to the agent, and mid-session band changes require isolated subagents.

This is a community experimental preset, not a one-click toggle in the official app store. Read the source code, check the license, and pin the commit hash before installing; refer to the repository’s errata for theoretical narratives. The directory page and repository address:
- Directory page: https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-router-standard/
- GitHub: https://github.com/yjh051108/dsh-router-standard