DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Chinese Language — DeepSeek Harness 插件(DSH Plugin)
← Plugins
C

dsh-chinese-language

Chinese Language

DeepSeek Harness 插件:通过精简 token 的 system-prompt 部分,以及一行同样可传达到长会话或恢复会话的运行时上下文提醒,让代理持续使用简体中文进行推理和回答。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:fzy3232/dsh-chinese-language#1fe26b97cc08b4c6d7d182ff052813f47ce6a6a7
README兼容性版本

兼容性与来源证明

Chinese Language 以 dsh-chinese-language 发布,当前版本为 0.2.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
any
发布来源
github
Registry 更新时间
2026/9/25

版本

0.2.0stable
2026/9/25

相关插件

正在加载相关插件…

最新版
0.2.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
any
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/9/25
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录

相关插件

继续浏览 memory-context 分类下经过校验的插件。

Contextdsh-context用于上下文洞察和管理的 DeepSeek Harness 插件,提供上下文仪表板和上下文命令,帮助了解上下文的构成及其演变过程。Archive Manager@michengai/dsh-archive-manager可通过 NPM 安装的 DSH Web 插件,用于管理已归档的会话。Memsearch Dsh@zilliz/memsearch-dsh适用于 DeepSeek Harness 的 MemSearch 插件:在多个代理之间共享 Markdown 记忆,支持捕获、步骤前上下文注入、记忆召回技能和技能候选审核面板。Dejadsh-dejaDeepSeek Harness 的 deja-vu 记忆:三十三个其他编码代理的会话历史,可搜索并在每个步骤前检索——本地索引,无需 LLM。

README

dsh-chinese-language

Make a DeepSeek Harness (dsh) agent think and answer in Simplified Chinese — through a token-lean system-prompt section plus a one-line runtime-context reminder, without touching the deployment persona.

English | 中文


Why

DeepSeek Harness ships an English-first system prompt. The model's hidden reasoning follows that prompt, and the visible answer follows the reasoning, so unless something explicitly says otherwise a long session drifts into English.

Telling the agent "answer in Chinese" in every message works, but it is per-session, easy to forget, and gone the moment you resume in a new window. This plugin states the rule where the model always reads it.

What it does

The plugin registers one rule through two channels with different token profiles:

ChannelWhere it landsCost
System-prompt section user:chinese-language, order 10300after deployment:persona-suffix (order 10200), i.e. the very end of the assembled system promptResent with every request; kept short for that reason
Runtime-context reminder user:chinese-language, order 100the dynamic-context snapshot the harness projects next to the newest messagesPersisted once and retained: the harness writes a new snapshot only when the text changes, and this text is static

Why both: a fresh session is covered by the section alone. A long or resumed session carries a history full of English reasoning, where a single rule at the head of that history loses influence — the runtime-context reminder restates it next to the live conversation, which is what makes an already-running session pick the rule up without being restarted.

Both registrations are purely additive: the plugin never replaces personaPrefix / personaSuffix, never rewrites a tool, skill, or workspace-instruction row, and never reorders a first-party section. It covers every agent that inherits the mounting scope, so a root mount reaches every session and every subagent that joins it.

The default section is two lines, and the reminder is one shorter line:

语言规则:始终使用简体中文进行内部推理(thinking)与最终回答,历史内容为英文时同样适用。
代码、命令、路径、URL、报错原文和专有名词保留原文。
语言提醒:本轮内部推理与可见回答使用简体中文。

Token budget

VersionSteady-state default text
0.1.0 (section only, four lines)~148 characters
0.2.0 (two lines + one reminder line)~99 characters

Two properties keep the cost flat:

  • The section text is short, and it sits at a stable position inside the prompt prefix, so it does not invalidate the prefix cache.
  • The runtime-context text never changes, so the harness persists it once and keeps reusing that message. It does not accumulate per step, and it adds no per-turn reminder text.

Turn the reminder off entirely with context: false if you want the absolute minimum; on the 0.1.7 line the old behavior is exactly context: false plus a four-line lines list.

Install

1. From GitHub (recommended)

dsh plugin --profile web add github:fzy3232/dsh-chinese-language
dsh web   # restart to apply, then start a new session

2. From npm, once published

dsh plugin --profile web add dsh-chinese-language

Either channel works the same way: the package declares dsh.bundle.patch, so dsh plugin add appends dsh-chinese-language to dsh.profile.bundles, and boot merges the bundled cordis.patch.yml, which inserts the plugin row. No profile file is edited by hand.

Replace web with your profile name (tui, headless, ...) if you are not on the Web profile.

3. Single-file local mount (no package manager)

The plugin is one dependency-free ES module, so it also works as a local file.

mkdir -p "$DSH_HOME/dsh-plugins"
curl -fsSL -o "$DSH_HOME/dsh-plugins/chinese-language.mjs" \
  https://raw.githubusercontent.com/fzy3232/dsh-chinese-language/main/lib/index.js

Then add one insert to $DSH_HOME/cordis.patch.yml (create the file if it does not exist):

- insert:
    - id: user-chinese-language
      name: ./dsh-plugins/chinese-language.mjs

Upgrading

A GitHub dependency is pinned to the installed commit, so a running profile keeps the old build until you refresh it:

dsh plugin --profile web update dsh-chinese-language
dsh web   # restart the profile to load the new module

Already-running sessions keep the system prompt they were assembled with; the runtime-context reminder reaches them on their next step after the restart.

Configuration

Every field is optional. Unknown keys are ignored, and an unusable value falls back to that key's default instead of failing the loader entry.

KeyDefaultMeaning
linesthe two built-in rulesSection lines, joined with newlines. Empty or non-string entries are dropped.
text-Replaces lines entirely when non-empty. Wins over lines.
orderderived, else 10300Section sort order. Anything above 10200 lands after the first-party sections.
sectionenabled, named user:chinese-languageEither false to skip the section channel, or a string naming it.
sectionNameuser:chinese-languageSection name. Must stay unique within the scope; a duplicate name throws.
contextTextthe one-line reminderReplaces the reminder text without touching the section text.
contextenabled, named user:chinese-languageEither false to skip the reminder, or a string naming it.
contextNameuser:chinese-languageReminder name, unique within the scope.
contextOrderderived, else 100Reminder sort order; lower values print earlier in the snapshot.

On harnesses that expose getSectionOrder() / getContextOrder(), the two orders are derived from DEPLOYMENT_PERSONA_SUFFIX and SANDBOX_POLICY, so they still track the registry if those slots move. Older harnesses use the constants.

Example, keeping both channels but tightening the wording:

- insert:
    - id: dsh-chinese-language
      name: dsh-chinese-language
      config:
        lines:
          - 始终使用简体中文回答。
          - 代码、命令和报错原文保留原文。
        contextText: 提醒:用简体中文。

A patch replaces the targeted row's whole config, so restate every key the row needs whenever an override adds one.

Verify

dsh --profile web --dump-config | grep -A2 dsh-chinese-language

For a local mount, look for your file path instead:

# == /Users/you/.dsh/cordis.patch.yml
- id: user-chinese-language
  name: file:///Users/you/.dsh/dsh-plugins/chinese-language.mjs

Then start a new session: the rule reaches the model from the first turn. In a session that is already running, the reminder arrives on its next step — the runtime-context snapshot the harness shows above the newest message carries a contribution named user:chinese-language:

Current runtime context. This snapshot supersedes earlier runtime-context snapshots.
...
语言提醒:本轮内部推理与可见回答使用简体中文。

That snapshot is written once and then replaced in place, so the reminder neither accumulates nor repeats: only the changing parts of the snapshot (sandbox state, recalled memory, ...) cause a new one.

When a channel is unavailable

The two channels degrade independently. The rule never disappears because one of them is missing:

SituationSection channelReminder channel
Normalyesyes
Harness without systemPrompt.context() (older than the runtime-context API)yesskipped
Deployment sets includeRuntimeContext: false on dsh-system-promptyessuppressed by the harness
An agent preset claims the prompt with a complete: true persona sectionreplaced — the harness restores that section as the sole prompt sectionyes

The last row is the reason the reminder exists rather than being a duplicate: a complete persona is exactly the case where a section-only language plugin goes silent. Registering one rule through both channels keeps at least one of them in front of the model.

Both channels were exercised against every @deepseek-ai/dsh-system-prompt release installed on the development machine — 0.1.5-rc.2, 0.1.5-rc.3, 0.1.7-rc.1 and 0.1.7-rc.2 — and mount identically on each, with the section staying last. Releases older than 0.1.5-rc.2 are untested; they keep the section channel and skip the reminder.

Scope and limits

  • This constrains the prompt — the system section plus the runtime-context snapshot — which is what the model reads before it starts reasoning. It is not a token-level filter.
  • Hidden reasoning is model output. A prompt strongly steers it, but nothing at this layer can give a mathematical guarantee; expect the rule to hold in practice rather than absolutely.
  • Code, commands, file paths, URLs, API names, and verbatim error text are meant to stay in their original form. That is part of the shipped rule.
  • If another plugin registers a section or a context with the same name in the same scope, the loader fails loudly. Change sectionName / contextName to resolve it.

Uninstall

dsh plugin --profile web remove dsh-chinese-language

For a local mount, delete the insert entry from $DSH_HOME/cordis.patch.yml and remove the .mjs file.

Development

There is no build step and no runtime dependency. lib/index.js is the whole plugin.

npm test          # node --test: contract + manifest (+ real-harness when available)
node --check lib/index.js
SuiteWhat it covers
test/contract.test.mjsBoth channels, every config key, the older-harness path, the steady-state token budget
test/manifest.test.mjsnpm pack --dry-run carries the module, the patch, the READMEs and the license
test/rc2-integration.test.mjsAssembles against the real @deepseek-ai/dsh-system-prompt: section last, reminder in the snapshot, complete persona, suppressed runtime context, and every release found in the profile's pnpm store

The third suite imports @deepseek-ai/*, which lives in a dsh profile rather than here, so it reports as skipped unless those packages resolve. To run it for real, point the checkout at an installed profile (the link is ignored by git):

ln -sfn "$DSH_HOME/profiles/web/node_modules" node_modules
npm test

To exercise it against a real tree, mount it with the local-mount recipe above and re-run dsh --profile web --dump-config.

License

MIT. See LICENSE.