DeepSeek Harness plugin

dsh-thinking-levels

DSH host plugin: thinking-level (reasoning_effort) control for dsh — auto-adjust per tool round, with optional manual lock and per-tool timing telemetry.

Jump to install

Source facts

Repository
drscrewdriver/dsh-thinking-levels
Latest update
Aug 20, 2026
Category
Tools & Capabilities
GitHub stars
1
Format
plugin
Catalog evidence
Upstream dsh.bundle evidence
Evidence path
package.json#dsh.bundle
Checked against
0.1.0-rc.8
Upstream check date
2026-08-20

This evidence comes from the upstream catalog. This site has not installed, run, or security-reviewed the plugin.

Install

Start with a prompt that asks an agent to review the GitHub repository and source. Switch to the command if you want to install it yourself.

Copy this prompt into DSH, Codex, or another agent and ask it to review the GitHub repository and source first.

Do not install or run any commands yet. Read this plugin's GitHub repository, README, and relevant source code. Then answer the questions below clearly and directly so I can decide whether it fits my needs:

1. What is this plugin, and what problem does it solve?
2. Who is it for, and what are its typical use cases?
3. How is it used after installation? Include one minimal example.
4. What known limitations or privacy, security, compatibility, or maintenance risks does it have?
5. Give a clear recommendation: recommend, conditionally recommend, or do not recommend, with reasons.

Distinguish statements documented by the repository, inferences from source code, and unknowns. If evidence is insufficient, say so explicitly. Do not guess or simply repeat the README.

GitHub: https://github.com/drscrewdriver/dsh-thinking-levels
Plugin: dsh-thinking-levels
Author: drscrewdriver

Check the source files

Read the README and other files from this plugin directory before installing.

File explorer3 files
README.mdSource · read only
README language

dsh-thinking-levels

Per-round thinking-level (reasoning_effort) control for DeepSeek Harness (dsh): pick Auto (a mask) in the session model selector and the plugin schedules low / high / max from the recent tool-call history before submitting the API effort — or fix a wire level (off / low / high / max) manually. Cheap tool rounds stay cheap; heavy work never starves.

中文文档 · English

In a multi-step tool chain, the model re-thinks before every tool call — and that thinking dominates the wall-clock time (a 50-step agent task can spend minutes reasoning between tools). dsh-thinking-levels plugs into the agent/request waterfall that dsh re-resolves for every step (registered with prepend so the session model-selection assembly cannot overwrite its decision) and injects a thinking level into the next model request.

Levels

LevelMeaningWhere
offthinking disabled (manual only — never auto-picked)model selector / default level
lowmanual pick for simple chat tasks (cheap rounds stay cheap)model selector / default level
highthe official default effortmodel selector / default level
maxheavy workmodel selector / default level
automask: schedule per step from the recent tool-call history, resolved to a wire level before submissionmodel selector (injected by the plugin) / default level

Wire-level facts (verified against the official DeepSeek docs and dsh's llm-deepseek adapter): low maps 1:1 on deepseek-v4-flash / v4-pro, while medium / xhigh collapse onto high. The adapter accepts off | low | high | max and rejects anything else with UNSUPPORTED_REASONING_EFFORTauto is the plugin's mask layer, never sent to the API, always resolved to a concrete wire level before injection.

Model-selector Auto

The session model selector (next to the model) now offers Auto after Off / Low / High / Max (injected into the model-directory metadata by the plugin):

Model-selector pickBehavior
Autoplugin schedules via tool history + the upgrade/downgrade toggles, resolves to low / high / max before submission
off / low / high / maxmanual choice wins — plugin does not intervene
unsetthe plugin's default level applies (below)

Auto scheduler

The hub is high (the official default). auto schedules between low / high / max; it never picks off.

Recent tool callsLevel
none (fresh prompt, pure chat)low
≥75% simple tools, small args, downgrades allowedlow
mixed / heavy toolshigh
very heavy payloads, upgrades allowedmax

The scheduling policy is the same source as dsh-tool-turbo (same simple-tool whitelist / payload thresholds / 75% ratio rule).

Install

# 1. install the plugin into a profile from npm (web shown; any profile works)
#    (the web profile is a pnpm workspace root, so -w is required)
dsh plugin --profile web add dsh-thinking-levels -w
#    GitHub alternative (drscrewdriver fork):
#    dsh plugin --profile web add github:drscrewdriver/dsh-thinking-levels#master
#    local-path alternative (no network needed):
#    dsh plugin --profile web add /absolute/path/to/dsh-thinking-levels

# 2. restart dsh web (a running instance does not hot-load new bundle layers)
dsh web

> ⚠️ GitHub reachability: installing via github: requires access to github.com; if your network is restricted, set up a working proxy or mirror first, otherwise add may stall while fetching.

> Note: the dsh runtime uses pnpm 11, whose minimumReleaseAge supply-chain policy may block a > freshly published version with ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION — add the version to > minimumReleaseAgeExclude in ~/.dsh/profiles/web/pnpm-workspace.yaml to lift the cooling period.

Manual link: registration (alternative to dsh plugin add):

#    ~/.dsh/profiles/web/package.json dependencies:
#      "dsh-thinking-levels": "link:<absolute path to dsh-thinking-levels>"
#    ~/.dsh/profiles/web/cordis.patch.yml:
#      - insert:
#          - id: thinking-levels
#            name: dsh-thinking-levels
cd ~/.dsh/profiles/web && pnpm install && dsh web

Configuration

Two surfaces share one schema:

  • Assembly — the plugin row's config: in the profile composition (e.g. cordis.yml):

```yaml config:

level: auto # off | low | high | max | auto — the default level when the session picks nothing

allowDowngrade: true # let the scheduler drop below high allowUpgrade: false # forbid the scheduler lifting to max ```

  • Runtime — the dsh-settings namespace thinking-levels (level, allowDowngrade, allowUpgrade, enabled): changes apply to the next model request, no restart needed. A visual editor is available under Settings → Plugins → configurable plugins.

Defaults: { enabled: true, level: 'auto', allowDowngrade: true, allowUpgrade: false }.

> Semantics: the model-selector pick outranks the plugin's default level. Pick auto (mask) → plugin schedules; pick off/low/high/max → applied directly; pick nothing → the plugin's level default is used. allowDowngrade / allowUpgrade constrain auto scheduling only.

Dependency note

The host half does not value-depend on @deepseek-ai/dsh-settings (settings registration goes through the cordis settings service provided by the dsh runtime) — no need to install official packages into the profile manually. dependencies is just @deepseek-ai/schemastery (installed automatically with the package).

Development

npm run lint        # eslint (typescript-eslint flat config)
npm run typecheck   # tsc --noEmit
npm test            # vitest — 21 tests

Test coverage: level policy (manual pass-through, auto scheduler, validation, simple-tool boundary), session-event parsing (guards, window cap, malformed records), and the config schema (defaults lockstep, out-of-band rejection).

drscrewdriver DSH Plugin Family

This project is one of the DSH plugins maintained by drscrewdriver. If this one helps you, the others likely will too:

PluginOne-liner
dsh-input-trafficBusy-time input queue: three-tier traffic control, drag-to-reorder, session freeze
dsh-thinking-levelsPer-round reasoning_effort control: Auto scheduling or manual wire level
dsh-seatbelt-sandboxmacOS Seatbelt sandbox adapter: native libsandbox loader replacing deprecated sandbox-exec
dsh-switch-searchSession content search sidebar: title/content toggle, type-filter by user/reply/tool

License

MIT