Three independent language channels for model output — tool-call descriptions (every tool-call card title, including run_code in PTC-style presets), thinking, and replies — each set to follow the web GUI language, force a specific language, or turn off (default: only descriptions, following the GUI). One global runtime-context prompt directive on the host; the client half reports the GUI language; a Settings plugin card switches the modes.
Install
# from npm (prebuilt)
dsh plugin --profile web add dsh-agent-lang
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:KannaKuron/dsh-agent-lang
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
Agent language control — three independently configured channels for DeepSeek Harness (DSH) model output: tool-call descriptions (including PTC mode's
run_codedescription, the call card title), model thinking, and replies — each follows the GUI language, forces a fixed language, or turns off, with one-click sync-all / off-all shortcuts. By default only the descriptions channel is on.
Why
Every tool call in DSH carries a required description argument that is displayed verbatim as the call's UI label. The tool schemas describe that field with English wording and English examples ("5-10 words … Examples: 'Count TODO markers…'"), so models default to English descriptions regardless of the GUI language.
This plugin changes only the PROMPT side: one global dynamic runtime-context directive states the GUI's display language and instructs the model to write every tool-call description in it. No preset, persona, or tool schema is modified — those are deployment-owned assets an upgrade overwrites anyway.
Coverage
| Mode / preset | Supported | Notes |
|---|---|---|
standard |
✅ | |
ptc (PTC mode, formerly code) |
✅ | run_code's description included |
cordis (Creation mode) |
✅ | |
User presets (incl. ptc-cordis, dsh-gitbash-shell variants) |
✅ | Host-plane registration covers every unsealed preset in the process |
minimal |
❌ (by design) | minimal mounts a complete persona and suppresses runtime context — its prompt is sealed against every late contributor; no prompt-level plugin can reach it |
How it works
- Detection order (auto mode): the explicit Settings → General → Language choice > the browser-reported active locale. English is a regular target too (v0.3.0+): some models mix languages inside thinking/replies, and an explicit English directive pins them; only a fully undetected language injects nothing.
- Channel:
systemPrompt.context()— the same per-request runtime-context snapshot as the sandbox/approval policies, rendered near the end of each request so recency beats the English tool-schema guidance. A GUI language switch takes effect on the very next request. - Settings card: Settings → Plugins pairs Host-served namespaces with registered cards automatically; switch behavior (follow GUI language / force a BCP 47 tag — pick from the dropdown or type one, e.g.
zh,ja/ off) and inspect the detection chain.
Install
dsh plugin --profile web add dsh-agent-lang
Plain JS, no build step, no installed dependencies (schemastery is a peer resolved through the profile). Restart DSH after installing.
Verify
- Install, restart DSH, open the Web GUI (browser language or setting on Chinese);
~/.dsh/settings.yamlgains aagent-lang:section (uiLocale: zh) once a page loaded;- Any new session: tool-call descriptions come out in Chinese;
- Switch the GUI language in Settings → General — descriptions switch on the next request;
- Settings → Plugins → Tool Description Language: pick
jafrom the force-language dropdown (or type any tag), switch off, etc.
Known limits
minimalis sealed by design (see table).- Without a browser page (pure CLI deployments) only the explicit choice is detectable.
- The GUI language is one global value; the most recently loaded page's report wins.
- Subagents / workflow models see the directive too (their descriptions are user-facing as well).
License
MIT
Links
More in this category
V1ki/dsh-plugin-subscriptions★ 318
Use ChatGPT (Codex), Claude, and Grok subscriptions as DeepSeek Harness LLM providers, with Settings login, model catalogs, usage, plus image_generate, video_generate, and x_search tools.
Mars-Sea/dsh-commandcode-provider★ 145
Unofficial Command Code LLM provider: registers a `commandcode` route with a live model catalog and reasoning-effort support.
volcengine/ark-cli#ark-plan-api★ 116
Registers Ark Agent Plan, Coding Plan and postpaid model routes in the native DSH model picker.
Stormycry-cryp/dsh-AuthInOne★ 105
Adds account login, API and custom Provider setup, model switching, image fallback for text-only models, and token/cost attribution to DeepSeek Harness 47f.
franksong2702/dsh-codex-connect★ 80
Connect ChatGPT OAuth and OpenAI Codex models to DeepSeek Harness, with opt-in search and image tools.
WSL043/dsh-codex-subscription★ 40
ChatGPT OAuth provider for Codex models with subscription web search, quota and safe reset, image tools, Fast mode, and model-aware context; no API key or Codex CLI.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.