DeepSeek Harness’s default behavior is to treat all model calls uniformly. The dsh-model-router plugin solves this problem by splitting a session into two roles: “Planner” and “Executor.”
Plugin Overview¶
This is a small plugin for DeepSeek Harness, maintained by thedeveloper256. It divides the agent session into two roles:
- Planner: uses
deepseek-flashby default (V4.1 Flash, native multimodal). Responsible for understanding requirements, designing the path, reviewing results, and writing the final answer. - Executor: also uses
deepseek-flashby default. Responsible for executing the specific tasks delegated by the Planner.
Before the release of V4.1-Pro, the two roles shared the same model. This role separation is retained in the configuration so that the Planner can later be switched back to a Pro model without paying Pro prices for every tool call.
Core Features¶
The plugin implements routing through the following three core mechanisms:
- Request Routing: rewrites requests at the outermost layer of the request pipeline and labels each model call with a role. The root agent receives the Planner label, while delegated subagents (such as
subagent,subagent_fork, and workflow workers) receive the Executor label. - Prompt Injection: inserts a short instruction before the agent role prompt, explicitly telling the Planner that “you are the thinker; delegate execution,” preventing the model from directly taking over all tasks.
- Skill Pack: provides the
pro-flash-routingskill, demonstrating the standard execution rhythm: Plan, Delegate, Review, and Report.
In addition, the plugin provides a Vision Routing feature (must be enabled manually) for handling image requests.
Installation¶
The plugin is pre-built via npm and requires no build steps. Add it to the web configuration profile (the configuration profile name can be changed):
dsh plugin --profile web add dsh-model-router
After installation, restart the configuration profile. The model-router configuration line should appear in dsh web --dump-config.
Configuration and Usage¶
GUI Settings¶
The plugin registers a settings card at Settings → Plugins → Model router.
- Enable/Disable: simply toggle the “Enabled” switch. Changes take effect immediately and are persisted under the
model-routerkey insettings.yaml. - Vision Routing: in v0.6.0+, the card includes a “Vision” switch to enable routing for image requests.
Note: the GUI settings page is only available in a Loopback browser (localhost / 127.x). If accessed through a remote browser, the settings card may appear read-only or unavailable. In that case, control is required through the configuration file or Patch lines.
Configuration File Management¶
Settings are saved in the configuration profile’s settings.yaml:
model-router:
enabled: true
vision:
enabled: false
Patch Line Control¶
You can also control the plugin behavior through the cordis.patch.yml file. For example, add the following line to the configuration file to disable the plugin:
- enabled: false
Vision Routing¶
The Vision Routing feature is disabled by default. Once enabled, if an image appears in the session log, all subsequent requests (whether from the Planner or the Executor) are marked as vision requests and handled with the deepseek-flash model.
The plugin checks for image content in user/message, assistant/message, and tool/result. Once an image is detected, the session will continue to use the vision model for subsequent requests until the log is compressed or pruned.
Ecosystem and License¶
- License: MIT.
- Directory: View details at skillhub.cn.
- Source Code: GitHub repository.