dsh-anchored-standard README

The project's README from github.com/xiaobright/dsh-anchored-standard. As one markdown file: README.md.

dsh-anchored-standard

中文说明

Experimental DeepSeek Harness agent presets — a base mode, two live-anchor variants, and one seeded prefab mode — that anchor a session's model trajectory on the Minimal condition (real Minimal tool schema, no auto-injected context), then promote to a small resident catalog once the session is durable, unlocking heavier Standard tools on demand.

This is a community project. It is not an official DeepSeek preset and is not affiliated with or endorsed by DeepSeek.

The project is frozen — new issues and pull requests are no longer accepted (see Project status). For ideas for new plugins or useful findings, please submit them under the repository.

Project status (frozen 2026-09-10)

This project is frozen. On 2026-09-10 DeepSeek released V4.1 Flash and announced that V4 Pro — the model these presets were measured on and tuned for — is retired on 2026-09-14 12:00, with its traffic routed to V4.1 Flash. The presets exist to re-anchor a trajectory that the successor does not appear to need patched: the flash family anchored under every condition in our first-round dose-response probes (32/32), which is why the project never tuned for it. V4.1 Flash's own first-round trajectory has NOT been measured (no API budget in maintenance mode), so treat that as an inference from the earlier flash data, not a result. The model the work was built around is going away, so the maintenance period ends here. New issues and pull requests are no longer accepted or handled. The repository stays online with its history, data and acknowledgement record intact.

This is the ending FAREWELL.md asked for: "let the next model eat more diverse harness environments during training, so that patch engineering like this is no longer necessary." That file now ends with a closing note written by the successor model itself, V4.1 Flash. What stays valid is the model-agnostic part — the context-gate unified injection control, the prefab pipeline, the discovery-tool dose-response data, and the general observation that the API-visible surface conditions the trajectory. Research material remains open in DeepseekCotexplorations.

Earlier status (2026-08-17, kept for the record): following the price increases on both the DeepSeek official API and the opencode go subscription, active development had already stopped — the evaluation loops these presets depend on (Project2-class runs and multi-trial roll/probe experiments) were no longer affordable, leaving the repository in maintenance only mode (bug fixes and harness-compatibility updates when feasible). A personal note from the maintainer: FAREWELL.md (Chinese). Contributors and collaborators are listed in ACKNOWLEDGEMENTS.md.

Community projects that users report perform better in some scenarios, plus ecosystem tooling built around these presets:

Modes at a glance

Mode Directory First model request Anchor mechanism Promotion signal Cost
Anchored Standard preset/ 2 tools (the Minimal pair) Minimal tool schema first durable tool/call or assistant/message (promoteOn: either) none
Zero-Anchored Standard zero-anchored-standard/ 0 tools one fixed anchor turn the anchor reply (assistant/message) +1 model call
Whoami Standard whoami-standard/ 0 tools one "你是谁" self-introduction turn the self-introduction reply (assistant/message) +1 model call
Prefab Anchored Standard prefab/ seeded rolled history bundled successful trajectory already promoted in the seed no model call to instantiate
Eternal Minimal eternal-minimal/ 2 tools, forever the visible catalog never grows; heavier tools run via the dshx bash gateway none (no phases) none
Wire Think-Execute Standard wire-think-standard/ tools present, tool_choice: none on the wire sibling provider route per think step per-turn: the steer itself +1 model call/turn, prefix-cache churn
Combo Anchored combo-anchored/ 0 tools, on every user turn think/execute split + depth gate + deliberation drip as three independent rows per-mechanism +1 model call/turn

Every mode directory is self-contained and installs alone under whatever id you copy it to (see Install). The prefab hydrates the blank session in place when its preset is selected; no per-workspace import is required.

Terminology

How it works

The base mode in one request lifecycle (the variants change only the first turn — see their sections):

user's first message
        │
        ▼
┌ request #1 ─ bootstrap phase ──────────────────────────────┐
│ tools    : bash + str_replace_editor (Minimal's real pair) │
│ context  : no AGENTS.md digest, no skill-catalog reminder  │
│ budget   : adapter default (`bootstrapMaxTokens` optional) │
└─────────────────────────────────────────────────────────────┘
        │ first durable tool/call OR assistant/message
        ▼ PROMOTION — derived from durable events, resume-safe
┌ request #2+ ─ resident phase ──────────────────────────────┐
│ tools    : bootstrap pair + discovery tools + unlocked     │
│ context  : standard injections restored                    │
│ budget   : adapter default (a cap is stripped on promote)  │
└─────────────────────────────────────────────────────────────┘

Three first-request levers decide the trajectory (issue #11):

  1. Tool schema — the decisive variable at the adapter-default maxTokens (256000). The real Minimal pair anchored 5/5; every standard-family schema fell standard-like 11/11.
  2. Output budget — a 1024 first-request cap also anchored the trajectory (26/32), independent of the tool descriptions. That measurement kept the first round inside the cap; when the first reply exceeds it, the truncation-continuation loop amplifies drift instead (we-fingerprint 0.17 capped vs 0.98 uncapped, #85). The base mode leaves this lever unset (bootstrapMaxTokens is opt-in).
  3. Injected reminders — the AGENTS.md/CLAUDE.md digest and the available-skills reminder. With the skill catalog present, the anchor did not reproduce at all (0/9). The base mode now suppresses EVERY automatic injection during bootstrap at the harness's two unified injection paths (the context-gate plugin), not just the two measured ones.

Why

DeepSeek V4 Pro conditions strongly on the API-visible tool catalog. In the Project2 evaluation, Standard and PTC produced scores of 91 and 92, while the official Minimal preset produced 99 and 96. Permanently staying on Minimal, however, gives up the Standard preset's broader tool set.

Anchored Standard separates initial trajectory selection from later tool use:

  1. Keep the complete Minimal system prompt.
  2. Expose the Minimal preset's REAL tool schemas — persistent bash + str_replace_editor, byte-identical to the official Minimal composition — on the first model request (lever 1 above).
  3. Suppress EVERY auto-injected context on that first request — at the harness's unified injection paths, not per source name (the context-gate row, mounted FIRST; lever 3). While the session is unpromoted the assembly's dynamic runtime-context contributions are blanked (the whole SystemPrompt.context() family: sandbox/approval policy snapshots and any third-party context provider), and the pre-step waterfall keeps only the CLAIMED message batch plus a small kind allowlist (a user-initiated skill gesture survives; skill catalog, AGENTS.md digest, time/tmux context, hooks, and unknown third-party injections are stripped by default). After promotion the gate opens and the loop's own snapshot projection diffs exactly ONE fresh runtime-context message into the next request — minimal first round, injections on the second round. A compaction/end boundary re-closes the gate the same way.
  4. After the session records its first durable promotion signal — a tool/call or the first assistant/message, whichever comes first — promote to the RESIDENT catalog: the bootstrap pair plus the discovery tools plus whatever the model has explicitly unlocked via dev_tool_search. Dumping the full Standard catalog at promotion pulled the trajectory back to standard-like behavior (the post-promotion regression), so heavier tools — web_search, subagent, workflow, … — stay one dev_tool_search call away. Request #1 always sees the bootstrap catalog; request #2 always sees the resident catalog, so a text-only first reply can no longer trap the session in bootstrap. (promoteOn in the tool-bootstrap row selects the trigger: either default, tool-call, or assistant-message.)
  5. Derive the phase from durable session events so resume and reload preserve it.

The bootstrap catalog is the same on every platform: the Minimal pair (bash/str_replace_editor). The preset's shell is the persistent PTY bash (the sandboxed Standard bash row is disabled — both register the bash name into the same layer, and the tools registry rejects duplicates; Windows never had the sandboxed bash anyway). pwsh remains available in the promoted catalog on Windows.

Results

The anchored family was validated on Project2 with three V4 Pro scores of 98, 99, and 99. Provenance note (issue #60): those three runs predate the current composition — they used the Minimal system prompt with a first-request pwsh + read surface and promoted to the full 25-tool Standard catalog; the exact Minimal pair (persistent bash + str_replace_editor) with the small resident catalog was introduced afterward. The bundled generic prefab removes Project2-specific warm-up facts and was not re-benchmarked before the API price change, so those scores must not be attributed to the generic template.

Independent replications: the trajectory anchoring reproduces strongly, but the ability gap is unresolved at small n — see #65 (anchoring 9/9 separated by preset; anchored−standard +3.3, 95% CI [−2.6, +9.3]) and #51 (multi-env, Ability 85–90, 98/99 not reproduced). Treat the scores above as our original observations, not a settled effect size.

Research write-ups live in the companion exploration repository DeepseekCotexplorations (data and methodology; this repository keeps the code):

Development-process records (what was done, why, and the pitfall lists) are kept in this repository as HANDOFF.md and HANDOFF-2.md.

Configuration reference

All knobs are rows in each mode's agent.cordis.yml. Unknown keys fail at preset mount.

context-gate (mounted FIRST in preset/, zero-anchored-standard/, and whoami-standard/ — waterfall registration order makes the gate the outermost transform; the plugin lives in shared/context-gate.mjs and is reusable by any other composition that wants unified injection control alone):

Key Default Meaning
promoteOn either Promotion trigger: either, tool-call, or assistant-message (the variants use assistant-message).
includeSubagents false Gate subagents too (true in the base mode and whoami; keep in sync with the bootstrap row).
enabled true false disables both interception paths (A/B testing without touching the row set).
allowKinds [skill-invocation] source.kind values allowed beyond the claimed batch; [] keeps ONLY the claimed batch.

Injection control division of labor: session-phase suppression (everything keyed on a promotion boundary) belongs to context-gate. Two documented exceptions keep their own enumerated suppressedContextSources strip because the gate's phase machine does not map onto their scope: the think-step strip in think-phase/wire-think (per-step, not per-session-phase) and the permanent every-request strip in eternal-minimal (no promotion boundary; frozen to the configuration its recorded measurements were taken under).

tool-bootstrap (in preset/agent.cordis.yml; mount right after context-gate):

Key Default Meaning
bootstrapTools [bash, str_replace_editor] Tools visible on request #1.
promoteOn either Promotion trigger: either, tool-call, or assistant-message.
bootstrapMaxTokens unset Optional output cap for request #1; stripped after promotion. A cap below the first round's actual output truncates it and amplifies drift (#85) — the default stays unset for this reason.
includeSubagents false Subagents take the bootstrap phase too (true in the base mode).
compactionTools [] Extra tools available between a compaction boundary and re-promotion.

zero-tool-bootstrap (in zero-anchored-standard/ and whoami-standard/): compactionTools has the same semantics (promotion is always the first assistant/message), plus includeSubagents, whether subagents also take the anchor phase (set true in whoami-standard, false in zero-anchored-standard). Context suppression is NOT here — both variants mount the context-gate row (above) with promoteOn: assistant-message; the bootstrap's former suppressedContextSources key now fails at mount.

anchor-turn (in both variants): text — the synthetic first user message (default "This round is a test. Tools are not open yet; all tools will open next round." in zero-anchored, "你是谁" in whoami); includeSubagents — whether subagents also take the anchor turn.

eternal-minimal (in eternal-minimal/; the row must stay FIRST):

Key Default Meaning
guide true Append the short dshx capability guide to the system prompt; false keeps the persona byte-pure.
gateway true Intercept dshx shell commands and execute the real tools; false leaves the bare Minimal pair.
gatewayCommand dshx The interception word.
maxGatewayChars 12000 Cap on one gateway result payload.
suppressedContextSources [agent-instructions, skill-catalog] Stripped on every request (no promotion boundary; the enum intentionally stays — see the division-of-labor note above).

cot-drip (in combo-anchored/):

Key Default Meaning
every 4 Attach one deliberation beat after every Nth tool result; 0 disables the drip.
maxPerTurn 1 Beats per turn.
text built-in beat The reminder text (one "We …" sentence restating the remaining goal).
includeSubagents false Whether subagent calls are dripped too.

toolchoice-adapter (in wire-think-standard/; the row must stay the first LOCAL row):

Key Default Meaning
provider deepseek-wire-think The sibling route id the adapter owns; registering an id twice throws DUPLICATE_ADAPTER (caught, degraded).
toolChoice none The wire tool_choice sent whenever tool definitions are present.
baseURL / apiKeyEnv settings/env Row config first, then the llm-deepseek settings section, then DEEPSEEK_BASE_URL / DEEPSEEK_API_KEY.
logprobs false Opt-in research hook: request token logprobs and log a per-request mean summary (no StreamChunk surface exists).

wire-think (in wire-think-standard/): same mode / suppressedContextSources / includeSubagents / steerText semantics as think-phase, plus provider (must match the toolchoice-adapter row's id) and defaultProvider (the route execute steps restore onto, default deepseek-official).

instruction-hint (all modes): promoteOn matching the mode's promotion semantics (either in the base mode, assistant-message in the variants) — the one-shot "instruction files exist, read them before acting" hint waits for promotion.

Repository layout

preset/                  Anchored Standard — the base mode
zero-anchored-standard/  variant: fixed zero-tool anchor turn
whoami-standard/         variant: "你是谁" anchor turn, subagents inherit
eternal-minimal/         variant: Minimal pair forever + dshx bash gateway

dsh-anchored-standard (xiaobright/dsh-anchored-standard)

Searching Database…

这是什么?一组实验性的 DeepSeek Harness(dsh)预设:在没有自动注入上下文的情况下,把会话的推理轨迹锚定在官方 Minimal 工具模式上,待会话稳定后再悄悄升级到一个小的常驻目录,解锁更重的 Standard 工具。它提供多种变体模式(Zero-Anchored、Whoami、Prefab、Eternal Minimal、Wire Think-Execute、Combo Anchored),外加一个可复用的上下文门(context-gate)插件,用于统一的注入控制。
这是独立应用,还是别的东西的插件?它是面向 DeepSeek Harness(dsh)的插件/预设集合——YAML 配置行(agent.cordis.yml)加一个小的 JS 上下文门插件——并非独立应用。每个模式目录都可独立安装,放到你复制它时所在的任意 harness 预设 id 之下。
怎么安装其中一个预设模式?把想要的模式目录(preset/、zero-anchored-standard/、whoami-standard/、prefab/、eternal-minimal/、wire-think-standard/ 或 combo-anchored/)复制到你的 DeepSeek Harness 预设位置,id 随意取;prefab 模式会就地填充会话,无需额外的导入步骤。运行 'npm run sync' 可重新生成各模式目录内物化后的插件副本。
使用它需要 DeepSeek Harness 本身吗?需要——这些预设只有在 DeepSeek Harness(dsh)中运行才有意义;运行同步/测试脚本还需要 Node.js >=22.19.0,而实际对着模型跑会话则需要 DeepSeek API 密钥。
这个项目还在维护吗?不——项目自 2026-09-10 起已冻结:DeepSeek 停用了 V4 Pro(正是这些预设所测量和调优的模型),把流量转向 V4.1 Flash,维护者也不再接受新的 issue 和拉取请求。仓库仍保持在线,历史和数据完好,但更新的模型可能根本不需要这种修补。
它在 Windows 上的表现和 Linux/Mac 一样吗?大体一致——引导目录(Minimal 的 bash/strreplaceeditor 组合)在各平台上完全相同,但 Windows 从来没有沙箱化的 Standard bash,因此在 Windows 上升级后的目录中可用的工具是 pwsh。
两阶段锚定到底解决什么问题?DeepSeek V4 Pro 的首轮推理风格(「We need...」还是「Let me...」)在很大程度上取决于第一次请求时可见的是哪些工具。该预设先保持官方 Minimal 模式可见,等会话已经稳定后才升级到更大的工具目录,从而避免了立即倾倒完整 Standard 目录时出现的退化。
Anchored Standard 模式和其他变体有什么区别?基础模式在第 1 个请求时用真实的 Minimal 工具组合来锚定;Zero-Anchored 和 Whoami 变体则会在升级前多花一次模型调用,用于固定的锚定回合或自我介绍;Prefab 直接注入预先录制好的成功轨迹,完全不需要额外的模型调用。
它实际比纯 Standard 好多少?在内部的 Project2 基准上,锚定家族得分为 98/99/99,而纯 Standard 和 PTC 为 91-92,但维护者提醒注意小样本问题——一次复现只看到 +3.3 分的差距且置信区间很宽,另一次则完全没能复现最高分。
V4 Pro 都停用了,现在还有人会用这个吗?主要是用它依然有效的模型无关部分——上下文门的统一注入控制和 prefab 流水线——而不是 V4 Pro 专属的调优,因为继任者 V4.1 Flash 并没有出现这些预设所要修复的那种首轮漂移。
Creator
xiaobright
Size
0.5 MB
Stars
3.7K
Updated
CommitSep 10
Age
2mo
Commits · 90 Days