# dsh-effort-slider > **A Claude Code–style reasoning-effort slider for DeepSeek Harness** — click **Effort** in the model menu, drag without steps, snap on release, with a WebGL fire trail; any third-party model/provider gets real, working thinking-effort control. [](LICENSE) [](https://github.com/deepseek-ai/deepseek-harness) [](https://github.com/2768651338/dsh-effort-slider/releases) [](https://www.typescriptlang.org) [](https://react.dev) [](https://github.com/topics/dsh-plugin)
[**中文**](docs/lang/README_ZH.md)
Click the **Effort** row (second row of the official model menu) instead of the built-in level list: an **Effort slider panel** pops up — OFF/MAX scale ticks, Low/Medium/High/Ultracode status shown live, and after the panel closes the effort value stays color-coded on the menu row and on the model-seat trigger button. [Features](#features) · [Compatibility](#compatibility) · [Install / Uninstall](#install--uninstall) · [Quick Start](#quick-start) · [Configuration](#configuration) · [Permissions & Data](#permissions--data) · [How It Works](#how-it-works) · [Troubleshooting](#troubleshooting) · [Development](#development) **Demo screenshots** (menu-row coloring / model-seat trigger / Effort panel — effort level is color-coded): | Menu row | Model-seat trigger | Effort panel | | --- | --- | --- | | [**中文**](docs/lang/README_ZH.md)
|
|
| --- > 🔧 **v0.2.5** — Fixed the real landing bug in universal effort provisioning: explicit `models` arrays are now replaced as a whole (dsh-settings path ops cannot traverse array nodes, otherwise `models` is corrupted, the schema rejects the write, and provisioning fails silently). > > 🔧 **v0.2.4** — Fixed universal effort provisioning never landing when the pi-ai settings section registers late: provisioning now retries until the section is ready (registration happens after the adapter and does not emit `settings/updated`). > > 🆕 **v0.2.3** — The model-seat trigger button (「model · effort」 above the composer) also color-codes its effort name, persistent after the menu closes. > > 🔧 **v0.2.2** — Fixed menu-row coloring breaking on whole-tree menu remounts: painting now does a full scan and re-paints on any DOM change (throttled), and infers the color from the effort text when the panel has not reported one yet. > > 🆕 **v0.2.1** — After the panel closes, the effort value on the model menu's Effort row keeps its level color (OFF rose-gray / Low amber / Medium blue / High purple / Ultracode bright purple with glow). > > ✨ **v0.2.0** — Any custom third-party model/provider gets working thinking-effort control (adapter metadata provisioning + pi-ai wire-level provisioning, hot-applied). > > 🎛️ **v0.1.0** — Initial release: intercepts the official Effort menu and shows a Claude Code–style Effort slider panel. --- ## Features | Feature | Description | | --- | --- | | 🎚️ Stepless dragging | Continuous 0–100 dragging that writes `reasoningEffort` in real time (16 ms throttle, no request pile-up while dragging) | | 🎯 Snap on release | Snaps to the nearest level on release / blur / keyboard end, with one confirmation write | | 🔥 WebGL fire trail | Three-pass shaders (ignite → blur → composite); the fire front follows the thumb with spring damping | | 🏁 OFF/MAX ticks | First/last levels always show `OFF` / `MAX`; middle levels show the API-returned name | | 🎨 Level status | Effort name shown in the panel header, colored/glowing per level; menu row and model-seat trigger keep the same color after closing (v0.2.3) | | 🌐 Universal effort | Third-party models without `reasoning` metadata automatically get the universal 5-level scale; pi-ai models get wire-level dictionaries patched in, **hot-applied** (v0.2.0) | Only `reasoningEffort` is written — model selection is untouched. Models with no multi-level reasoning show 「当前模型不提供多档推理等级」 (no multi-level reasoning available). ### Universal effort provisioning (v0.2.0) **Any custom third-party model/provider gets thinking-effort control that actually works on the wire**: - **Adapter metadata provisioning (host)**: models without `reasoning` metadata get the universal 5-level scale injected (`off/low/medium/high/max` → OFF/Low/Medium/High/Ultracode), so the official model menu and this panel are selectable and request validation passes; - **Wire-level provisioning (host, pi-ai)**: for `llm-pi-ai` models missing `reasoningEfforts`, the dictionary and `compat` wire dialect are patched in (**hot-applied, no restart**); pi-ai translates the level into real wire fields (`reasoning_effort` / `thinking` / OpenRouter `reasoning.effort`, etc.); - **Client fallback scale**: if the directory returns no reasoning metadata, the panel still opens with the universal 5-level scale; - Existing user declarations (`reasoningEfforts: false` or a custom dictionary) are always respected and never overwritten. Supported wire dialects for custom endpoints (set `effort-slider.defaultDialect` or `routes.