DeepSeek Harness Plugin Hub

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

探索

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

社区

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

相关链接

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

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

Custom First Control Prompt — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins

@wm-coders/dsh-custom-first-control-prompt

Custom First Control Prompt

为 DeepSeek Harness 部署配置的提示前缀:将有序的系统提示部分置于角色设定之前,并将参考的用户/助手交互作为真实的交替消息注入每个普通对话请求中(请求路径拦截,不写入会话日志)。

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

npx -y @deepseek-ai/dsh plugin --profile web add @wm-coders/dsh-custom-first-control-prompt@0.3.0
README兼容性版本

兼容性与来源证明

Custom First Control Prompt 以 @wm-coders/dsh-custom-first-control-prompt 发布,当前版本为 0.3.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
npm
Registry 更新时间
2026/9/1

版本

0.3.0stable
2026/9/1
0.2.3stable
2026/8/21
0.2.1stable
2026/8/21

相关插件

正在加载相关插件…

最新版
0.3.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
npm
GitHub
★ 57
周下载
0
安全扫描
✓ v0.3.0 扫描通过
最近提交
2026/9/1
查看源码 ↗
README Badge

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

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

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

认领这个 Plugin →
报告问题

README

@wm-coders/dsh-custom-first-control-prompt

English | 中文

Deployment-configured prompt prefix. Ordered system-prompt sections render ahead of the deployment persona, and configured reference user/assistant exchanges are injected into every ordinary conversation request — as real alternating messages prepended on the request path (llm/stream interception, zero session-log writes). Static content renders byte-identically on every request, preserving prefix-cache reuse.

Installation

# From GitHub (recommended — built artifacts committed, no build approval needed)
dsh plugin --profile web add github:WM-CODER/custom-first-control-prompt

# From npm
dsh plugin --profile web add @wm-coders/dsh-custom-first-control-prompt

# From local directory (development)
dsh plugin --profile web add ./path/to/custom-first-control-prompt

After installation, restart the web app (dsh --profile web or run restart-web.ps1 / restart-web.sh).

To uninstall:

dsh plugin --profile web remove @wm-coders/dsh-custom-first-control-prompt

Install / deployment / debugging obstacles and test methods: DEBUG-NOTES.zh.md (in Chinese; web fail-loud root causes, duplicate-id inserts, API verification chains — all paths scrubbed). One-command install: INSTALL.md. Full cross-machine walkthrough: INSTALL-FULL.zh.md (Chinese).

Configuration

- id: custom-first-control-prompt
  name: '@wm-coders/dsh-custom-first-control-prompt'
  config:
    sections:
      - name: house-rules
        order: -50
        text: |
          …stable system text…
    history:
      - user: …
        assistant: …
    includeSubagents: false
KeyDefaultMeaning
sections—Ordered system-prompt fragments; absent or empty registers nothing.
sections[].namerequiredEntry name; the registry sees custom-first-control-prompt:<name>.
sections[].orderrequiredRender position among all sections. Factory convention: harness identity −100, persona 0, tool guidance 100–199; values below 0 prepend ahead of the persona.
sections[].enabledtruefalse keeps the entry in configuration without registering it.
sections[].textrequiredStatic section text; keep it free of volatile values — any change breaks prefix reuse from the first changed token.
history—Ordered user/assistant reference exchanges injected ahead of every ordinary conversation request; both texts must be non-empty and free of reserved tags (case-insensitive: <user>, <assistant>, <exchange>, <custom-history and all closing tags). Absent or empty injects nothing.
includeSubagentsfalsefalse skips sessions whose header meta marks subagent origin.

Invalid configuration fails plugin load naming the offending entry: empty text, duplicate section names, or a non-finite order. Per-entry section problems (blank/duplicate name, bad order, empty text) and per-pair history problems (empty text, embedded reserved tags) degrade to skipping that entry with a warning instead of failing the plugin tree.

Injection mechanism

The reference exchanges are built once at plugin activation into alternating real Message objects (deep-frozen, shared by reference across requests), then prepended onto every ordinary conversation request by an llm/stream waterfall listener:

  • Clone and redispatch: loop-built requests are deep-frozen and marker-tagged (markAgentLoopRequest(deepFreeze(...))) and never mutated; the listener clones the request, prepends the seed messages, and redispatches through ctx.llm.stream. The clone carries no loop marker, the agent-loop log-reconstruction invariant does not apply to it, and the discarded original is a pure deriveMessages() projection.
  • Zero log writes: seed messages live only on the request path — real turn numbering starts at 1 with no collisions, forks are ordinary copies, and compaction cannot shadow the reference history (every request re-injects it).
  • Scope filtering: auxiliary calls (purpose-stamped, e.g. session-title, compaction) and hand-built requests (no sessionId) pass straight through; subagent-origin sessions are skipped by default (includeSubagents: true opts in).
  • Panel verification: not seeing the seed messages in the chat transcript is expected; use the panel's LLM listener to inspect the injected real request (Settings → "Custom first control prompt" → LLM listening, or the dock strip above the composer).

Verifying the injection works: in a fresh session ask a question only the injected history can answer (e.g. "repeat our earliest user message") — the model quoting the configured content proves it. session.history shows no seed messages (a clean log is a feature, not a failure).

Panel save semantics: the panel's config editor writes an id-targeted override into the profile cordis.patch.yml (never an insert, so it cannot collide with the bundle layer's row), updating only this plugin's core row (custom-first-control-prompt) and preserving everything else — other entries, comments, and legacy rows. While the profile patch carries no row, the editor shows the composed config (bundle-layer defaults); saving then creates the override.

System sections

Each enabled entry registers via ctx.systemPrompt.section() at plugin load, so it participates in every assembly exactly like the factory sections: variable interpolation, scope shadowing, and the assembly waterfall all apply. Static configured text renders identically in every assembly, which is what keeps the request prefix reusable.

Model experience

Deployment system sections

What the model sees

Configured section text renders at its configured order position — by default ahead of the persona — alongside the factory sections from dsh-system-prompt.

Token impact

Every section repeats on every request; cost scales with rendered length.

KV-cache impact

Prefixes stay stable while section text, order, and the enabled set render identically. Any change can break reuse from the first changed system-prompt token.

Reference conversation history

What the model sees

Real alternating messages at the head of every ordinary conversation request — one user message per configured user text, one assistant message per configured assistant text:

[user]      configured user text 1
[assistant] configured assistant text 1
[user]      configured user text 2
[assistant] configured assistant text 2
[user]      the real prompt…

Token impact

A fixed single copy of the reference history per request (it never accumulates across turns, and compaction changes nothing — every request re-prepends the same frozen message sequence).

KV-cache impact

The reference history leads the message sequence byte-stably, keeping request prefixes reusable.

Known limitations and deferred work

  • The chat UI never shows the reference history — the seeds live only on the request path; neither alternating messages nor framework rows appear in the conversation UI. Reconstructing model-visible content requires the session log plus the deployment config (the framework exposes no plugin event-type registry and Session.append cannot carry an ignorable envelope) — a deliberate, declared deviation from the harness log-reconstruction default.
  • Seed text is model-visible reference material — treat it as prompt text the model reads, not a trusted channel.
  • No mid-session edits — configuration changes take effect for new requests after a web restart; a compliant "edit while quiescent" surface-replacement event carrying a source seq reference is deferred.

FAQ: how does the plugin enter the composition?

The package declares dsh.bundle (in-package cordis.patch.yml), and the reconciliation inside dsh plugin add activates that bundle layer — the core row custom-first-control-prompt (server logic: system sections, reference-history injection) appears with no hand-written patch rows. The browser panel (settings page, dock, LLM listener) is auto-discovered via the package's dsh.client declaration — no separate patch row for the UI half. dsh plugin remove drops the dependency and the bundle layer together.

  • Customizing: never copy a - insert: row. Write an id-targeted (non-insert) patch in the profile cordis.patch.yml to override the bundle row's config (last write wins) — sample in cordis.patch.yml.template; the panel's config editor saves exactly this form.
  • Offline junction installs skip reconciliation, so the bundle layer never activates — install.ps1 -Offline writes the same two rows into the profile patch instead.
  • Duplicate-id warning: once the bundle layer carries the rows, any leftover - insert: row with the same id in the profile patch (from a manual-era install) = root-list duplicate → the web fails to boot; uninstall.ps1 strips both shapes surgically.

相关插件

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

Memory Plugin@openviking/dsh-memory-plugin适用于 DeepSeek Harness 的 OpenViking 记忆与上下文套件Weknora@wxg-prc-cpg/dsh-weknora适用于 DeepSeek Harness (dsh) 的 WeKnora 知识检索工具:通过自有知识库进行语义搜索、文档阅读以及 RAG/代理回答。Memsearch Dsh@zilliz/memsearch-dsh适用于 DeepSeek Harness 的 MemSearch 插件:在多个代理之间共享 Markdown 记忆,支持捕获、步骤前上下文注入、记忆召回技能和技能候选审核面板。Reme@agentscope-ai/reme面向 TypeScript 代理的 ReMe 客户端和记忆集成