DeepSeek Harness Plugin

qingmomo233/dsh-thinking-language

Stars ★ 2 Category Sessions & Messages Added 2026-08-29

Switch the language of the agent's thinking/reasoning process (chain-of-thought): 简体中文, English, Русский, Français, Deutsch, Español, 日本語, 한국어 and more, or auto-follow the system locale. Adds a Settings → General row, a system-prompt instruction (per-prompt assembly, applies to new sessions), and the /thinking-language command.

Install

# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)

dsh plugin --profile web add github:qingmomo233/dsh-thinking-language

Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).

README

简体中文 | 🌐 English

dsh-thinking-language

A DeepSeek Harness plugin that lets you switch the language of the agent's thinking/reasoning process (chain-of-thought). Supports Chinese, English, Russian, French, German, Spanish, Japanese, Korean and many more mainstream languages, or "auto" to follow the system locale.

What it does

  • Settings row — Settings → General now shows a Thinking language picker with the same Setting-Cell layout as the built-in Language / Permission rows: title and hint on the left, the selector pill (dropdown menu) on the right.
  • System prompt instruction — when a language is selected, the plugin injects an instruction telling the model to write its internal reasoning in that language. With Follow the system (auto) the instruction uses the system UI locale (Settings → General → Language; defaults to Chinese). The instruction is evaluated per prompt assembly, so it applies to every new session. Existing sessions keep the prompt they already composed.
  • /thinking-language command — set or inspect the language directly from chat, e.g. /thinking-language ru or /thinking-language auto.

The setting is stored in the standard user-settings document under the thinking-language namespace, so it survives restarts and is shared by the settings row and the command.

The final answer to the user is not affected: the setting only targets the model's internal thinking/chain-of-thought.

Supported languages

auto (follow the system) · zh-CN 简体中文 · zh-TW 繁體中文 · en English · ru Русский · fr Français · de Deutsch · es Español · pt Português · it Italiano · ja 日本語 · ko 한국어 · ar العربية · hi हिन्दी · tr Türkçe · vi Tiếng Việt · th ไทย · pl Polski · uk Українська · nl Nederlands · sv Svenska · id Bahasa Indonesia · cs Čeština

Install

Run once from a shell (adjust the profile name if you use a different profile, e.g. desktop):

From GitHub (recommended):

dsh plugin --profile web add github:qingmomo233/dsh-thinking-language

Or from a local source checkout:

dsh plugin --profile web add C:\ZiYong\ds-hs-work\dsh-thinking-language

The command installs the package into the profile and appends it to the profile's bundle layer (because the package declares dsh.bundle.patch).

One-time harness patch (settings exposure)

DeepSeek Harness keeps a hard-coded allowlist of settings namespaces that the browser may read/write (WEB_SETTINGS_NAMESPACES in dsh-host-apiproxy), so a plugin-owned namespace is registered host-side but refused by the browser (settings-not-exposed) until it is added to that list. This installation already applied the one-line patch to the installed dsh-host-apiproxy (both the profile copy and the CLI install share the same file). To re-apply it after a reinstall or on another machine, run:

node scripts\patch-apiproxy.mjs

Then restart the GUI (dsh web / the desktop app) — bundle layers, the client-module scan, and the patched allowlist are read at boot, so a page refresh alone is not enough.

Usage

  1. Open Settings (gear icon) → General.
  2. Pick a language in the Thinking language row (or choose Follow the system (auto) to use the system UI locale).
  3. Start a new session — its thinking process is written in the selected language.

Or from chat:

/thinking-language              → show the current value and usage
/thinking-language ru           → set Russian
/thinking-language auto         → back to auto
/thinking-language 日本語       → ids, English names, and native names all work

How it works

Part File Role
Host entry lib/index.js registers the thinking-language settings namespace, the app:thinking-language system-prompt section (order 85), and the /thinking-language command
Browser bundle lib/client.js registers the picker row into the settings.general.item slot; reads/writes the same namespace through the client settings scope
Bundle patch cordis.patch.yml inserts the plugin row into the composed profile tree

The two halves share the thinking-language settings namespace, so changing the value in either surface keeps the other in sync.

Content from the project README on GitHub ↗

Links

More in this category

View the whole category →

Community comments

Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.