dsh-anchored-standard
编辑精选维护状态: 活跃xiaobright/dsh-anchored-standard
Two-phase DeepSeek Harness preset: Minimal-aligned bootstrap, then full Standard tools (Project2 98/99)
3,119
星标
97
Fork
JavaScript
语言
NOASSERTION
许可证
2026-08-14
创建于
2026-08-17
最近推送
README
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.
Feel free to submit feedback on the plugin in the form of Issues or PRs. For ideas for new plugins or useful findings, please submit them under the repository.
Project status (2026-08-17)
Following the price increases on both the DeepSeek official API and the opencode go subscription, active development of this project has effectively stopped: the evaluation loops these presets depend on (Project2-class runs and multi-trial roll/probe experiments) are no longer affordable. The repository stays available as-is and receives maintenance only (bug fixes and harness-compatibility updates when feasible). The mechanism findings, the dose-response data, and the tooling (context-gate, the prefab pipeline, the probe suite) remain valid and are largely model-agnostic. 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:
- dsh-routing-suite — a runtime injector plus task-aware thinking-mode routing presets (the router-standard family).
- J-Space Cognition Suite — a model-agnostic inference-time cognitive control layer packaged as a Skill.
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
- trajectory — the style of the model's first reasoning chain. The Minimal condition produces "We need…" first lines; the Standard condition produces "Let me…" ("standard-like") first lines.
- anchor — the first-request conditions that select the trajectory. Issue #11 isolated three levers: the tool schema, the output budget, and the injected reminders.
- bootstrap phase — request #1 of a session: the bootstrap tool pair, no auto-injected context, optional output cap.
- promotion — the durable session event that ends the bootstrap phase.
Base mode: first
tool/callorassistant/message, whichever comes first. Variants: the anchor reply. - durable — recorded in the session event log. Phase state is derived from durable events, so resume and reload preserve it.
- resident catalog — the promoted tool set: the bootstrap pair plus the discovery tools plus every tool the model explicitly unlocked.
- discovery tools —
dev_tool_search,skill_search,skill_load: the on-demand unlock surface for heavier Standard tools. - materialized copy — the committed copy of a
shared/plugin inside a mode directory, generated bynpm run sync.
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):
- 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.
- Output budget — a 1024 first-request cap also anchored the trajectory
(26/32), independent of the tool descriptions. The base mode leaves this
lever unset (
bootstrapMaxTokensis opt-in). - 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-gateplugin), 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:
- Keep the complete Minimal system prompt.
- 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). - Suppress EVERY auto-injected context on that first request — at the
harness's unified injection paths, not per source name (the
context-gaterow, mounted FIRST; lever 3). While the session is unpromoted the assembly's dynamic runtime-context contributions are blanked (the wholeSystemPrompt.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. Acompaction/endboundary re-closes the gate the same way. - After the session records its first durable promotion signal — a
tool/callor the firstassistant/message, whichever comes first — promote to the RESIDENT catalog: the bootstrap pair plus the discovery tools plus whatever the model has explicitly unlocked viadev_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 onedev_tool_searchcall 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. (promoteOnin thetool-bootstraprow selects the trigger:eitherdefault,tool-call, orassistant-message.) - 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):
- Tool-surface dose-response + Project2 replication — methodology, per-run scope, tool-surface experiments, and limitations.
- Anchor-mass quantification + single-request probe methodology — the prefab template quality model and the post-price-hike low-cost evaluation loop.
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. |
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
wire-think-standard/ variant: wire-level condition (tools + tool_choice=none)
combo-anchored/ combination package: think split + gate + drip rows
shared/ single source of truth for plugins used by 2+ modes
scripts/sync-modes.mjs materializes shared/ plugins into every mode dir
test/ zero-dependency test suite (npm test)
verify/ one-shot headless verification runner
prefab/ Prefab Anchored Standard + bundled session template
prefab/ ships a generic template by default and a Project2-specific template
as an explicit opt-in. Both contain real model reasoning; read the mode's
installation notes before use.
Invariants, enforced by npm run check:
- Every mode directory is self-contained: installable by copying it alone;
agent.cordis.ymlrows may reference only./local.mjsfiles, never../. - Plugins shared by several modes live once in
shared/; the copies in mode directories are generated. Editshared/, runnpm run sync, commit both — never edit a materialized copy. - The
context-gaterow stays the FIRST row ofpreset/agent.cordis.yml(the gate must register before every injecting plugin), withtool-bootstrapright after it. The same first-row rule holds for thecontext-gaterow inzero-anchored-standard/andwhoami-standard/.
This repository deliberately ships no AGENTS.md/CLAUDE.md: the presets' whole mechanism is a clean request #1, stripping exactly those instruction-file digests from it (issue #6: 0/9 anchored with the injection present). Shipping one would only feed later rounds and contradict the mechanism being documented. Everything an assistant needs is in this README.
Compatibility
Developed and tested against:
- DeepSeek Harness
0.1.0-rc.5 - repository commit
47f9438 - Node.js 24 on Windows
The persistent shell resolves shellPath adaptively: it keeps the
terminal-bash plugin default /bin/bash on hosts where that absolute path
exists, and falls back to bash (PATH lookup) otherwise — e.g. NixOS, where
bash lives under the Nix store. Hosts that ship /bin/bash keep the previous
behavior exactly; the fallback only activates where the default would make
every bash call fail with "PTY shell exited during startup".
On the 0.1.0-rc.5 source checkout, bootstrapMaxTokens reaches the actual
first request (the first request/header records the cap, adapterDefaults
stays empty), because llm.prepareCall only materializes a default maxTokens
when the proposed config has none. One prebuilt profile package observed in
issue #11 (CLI launcher reporting 0.1.0-rc.6) overwrote the proposed cap
with adapterDefaults.maxTokens; there the cap is a no-op. The default
composition therefore relies on the Minimal tool schema alone (which anchors
at the adapter default with no cap) and leaves bootstrapMaxTokens as an
opt-in for standard-schema bootstraps.
DeepSeek Harness is currently a developer preview and explicitly permits breaking changes. This preset is a full snapshot of the Standard composition, so review upstream changes before using it with a newer release.
Install
For the prefab mode, the recommended path is AI-assisted one-command setup.
Give your coding agent this repository and ask it to follow the
installation-agent contract. When it reports
INSTALL READY, start DSH, select Prefab Anchored Standard, create a new
session in the target workspace, and send the real task prompt. This installs
the generic template; the Project2 benchmark template requires an explicit
--template project2 selection and installs under a separate preset id.
Clone this repository, then copy the entire preset directory into the user
preset root under the id anchored-standard. Every mode directory in this
repository is self-contained: the zero-anchored-standard/,
whoami-standard/, prefab/, eternal-minimal/, wire-think-standard/, and
combo-anchored/ variants install the same way, alone or together, with no
other directory required (see their sections below). prefab/ automatically
hydrates newly selected sessions; follow prefab/README.md.
PowerShell:
$target = Join-Path $env:USERPROFILE '.dsh\.agent-presets\anchored-standard'
if (Test-Path -LiteralPath $target) { throw "Preset already exists: $target" }
New-Item -ItemType Directory -Force -Path (Split-Path -Parent $target) | Out-Null
Copy-Item -Recurse -LiteralPath '.\preset' -Destination $target
Linux/macOS:
dsh_home="${DSH_HOME:-$HOME/.dsh}"
mkdir -p "$dsh_home/.agent-presets"
test ! -e "$dsh_home/.agent-presets/anchored-standard"
cp -R preset "$dsh_home/.agent-presets/anchored-standard"
Fully restart DeepSeek Harness, create a blank session, and select Anchored Standard (experimental). Do not switch an active session from a different preset.
Verify
Export the session JSONL and inspect request/header events. Reproduction
checklist (issue #11 asks for the first two explicitly, because both are the
variables that decide the anchor):
- First-request
config.maxTokensvalue: withbootstrapMaxTokensunset (the default), the first header records the adapter default (e.g. 256000 withadapterDefaults.maxTokens: true); with a cap configured it records the cap (e.g. 1024 with no maxTokens adapterDefault). - First-request tool schema source: the first header's
toolsarray must be exactly["bash", "str_replace_editor"]— the official Minimal preset's real schemas, not Standard'spwsh/read. - the first request's messages should contain no AGENTS.md/CLAUDE.md digest and no available-skills reminder — only the user message and the minimal persona system prompt;
- after the first tool call or the first assistant reply, the next changed
header should contain the promoted resident catalog: the bootstrap pair plus
dev_tool_search/skill_search/skill_loadplus any tools the model already unlocked; - subsequent requests should keep that resident set (it grows only through
explicit
dev_tool_searchunlocks) and restore the standard context injections.
Run the local zero-dependency tests with:
npm test
Important behavior
更多「会话与消息」插件
engramory
作者 tinqiao-oss
A portable memory protocol for AI agents — load it as standing rules; a curation discipline + reference spec + optional cap hook.
dsh-noema
作者 zseven-w
Noema long-term memory plugin for DSH: durable, inspectable agent memory with recall tools and a settings page.
dsh-mnemon
作者 omdsh-dev
Mnemon 驱动的本地记忆系统:三层存储(运行时热记忆、项目档案 Documents、长期记忆体 Memory Spaces),受监督写回、检索工具与 Web UI。
dsh-suite
作者 whyihaveyou
The living DeepSeek Harness plugin directory — refreshed hourly, compat-tested daily, with an in-app plugin store and scaffolder. DSH 插件活目录:每小时刷新,每日兼容实测,内置插件商店与脚手架。
