实验性 DeepSeek Harness agent preset 集合——一个基础模式、两个实时锚定变体和一个预制 会话模式:把模型轨迹锚定在 Minimal 条件上(真实的 Minimal 工具 schema、不注入自动 上下文),会话产生持久信号后晋升到小型 resident 目录,重型 Standard 工具按需解锁。
在 DeepSeek Harness 终端运行:
dsh plugin --profile web add xiaobright/dsh-anchored-standardExperimental 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.
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:
tool/call orassistant/message, with the full PTC SDK kept intact via post-promotion wire| 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.
tool/call or assistant/message, whichever comes first.dev_tool_search, skill_search, skill_load: theshared/ plugin inside anpm run sync.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):
bootstrapMaxTokens is opt-in).context-gate plugin), not just the two measured ones.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:
bash +str_replace_editor, byte-identical to the official Minimal composition —context-gateSystemPrompt.context() family: sandbox/approval policy snapshots and anycompaction/end boundarytool/callassistant/message, whichever comes first — promote to thedev_tool_search. Dumping the fullweb_search,subagent, workflow, … — stay one dev_tool_search call away. RequestpromoteOn in the tool-bootstrap row selects the trigger:either default, tool-call, or assistant-message.)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.
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-requestpwsh + 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 andHANDOFF-2.md.
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/, andwhoami-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 aftercontext-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 firstassistant/message), plus includeSubagents, whether subagents also take the
anchor phase (set true in whoami-standard, false inzero-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, plusprovider (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.
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:
agent.cordis.yml rows may reference only ./local.mjs files, never ../.shared/; the copies in modeshared/, run npm run sync, commit both —context-gate row stays the FIRST row of preset/agent.cordis.ymltool-bootstrap right after it. The same first-row rule holds for thecontext-gate row in zero-anchored-standard/ and whoami-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.
Developed and tested against:
0.1.0-rc.547f9438DeepSeek Harness 0.1.3-alpha.1 removed the public session.events array in
favor of session.snapshotEvents() (a frozen copy whose cache is invalidated on
every append). Since PR
#88 every
history scan prefers snapshotEvents() and falls back to session.events, so
the presets load on both old and new harness builds. Verified against the0.1.3-alpha.1 source (the session API surface the plugins touch, plus the
plugin hook names) and by the mock suite; not by live runs on that build.
DeepSeek Harness 0.1.3-alpha.2 replaced the dsh-persona row's text key
with a required prefix (plus an optional suffix), so every mode's preset
failed to mount with invalid config: $.prefix missing required value. Since PR
#90 the persona
rows use prefix: — the persona TEXT is unchanged (it still matches the
official 0.1.3 minimal persona row byte-for-byte), so the byte-pure Minimal
anchor condition is unaffected. This part is a one-way migration: a preset
row cannot carry both keys (unknown keys fail at mount), so on dsh0.1.3-alpha.1 and older the persona row must use text: again — change that
one line per mode directory, or use the commit before #90.
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.
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 reportsINSTALL 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/, andcombo-anchored/ variants install the same way, alone or together, with no
other directory required (see their sections below). prefab/ automatically
hydrates both sessions switched to it and sessions created with it as the
default preset; 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.
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):
config.maxTokens value: with bootstrapMaxTokens unsetadapterDefaults.maxTokens: true); with a cap configured it recordstools array must["bash", "str_replace_editor"] — the official Minimal preset'spwsh/read.dev_tool_search/skill_search/skill_load plus any tools the modeldev_tool_search unlocks) and restore the standard contextRun the local zero-dependency tests with:
npm test
promoteOn: either, the session promotes after its firsttool/call OR its first assistant/message, whichever comes first —promoteOn: tool-call to restore the original behavior,tool/call already exists.bootstrapMaxTokens isdev_tool_search —bash row stays disabledread/write/edit tools keep the sandboxed filesystem whilestr_replace_editor uses the preset's local fs.promoteOn values fail at preset mount instead.context-gate plugin closes BOTH unifiedSystemPrompt.context() family, without enumerating sources),allowKinds entries. At promotion the loop's snapshot projection diffs indev_tool_searchYou are a helpful software engineer assistant., complete: true) — the byte-pure condition the anchordeepseek-v4-pro answering "I am Claude" when asked who it is; seetext: —You are a helpful software engineer assistant. You are an AI agent powered by DeepSeek Harness.instruction-hint after a host restartinstruction-hint injects its hint at most once per session via a durable scan ofsession.events. The scan is preventive, not guaranteed: if the first agent/pre-step
after a host restart runs before the session log is materialized, the scan sees an empty
event list and re-injects the hint. Older versions also used a deterministic id
(instruction-hint-<sessionId>), so a re-injected duplicate collided with the original
message and stopped history assembly. Since the unique-id change, a re-injection degrades
to a few wasted context tokens instead. If an old log was broken by the deterministic-id
collision, repairing it should dedup on source.kind === 'instruction-hint', which still
identifies the old rows (they share one id; new rows no longer do).
An extra test mode that does not change the Anchored Standard logic above. It
uses the same Minimal-aligned system prompt, but instead of exposing two tools
on the first request it injects one fixed zero-tool anchor turn:
anchor-turn plugin prepends aAnchoring on the first message — not on session creation — keeps the
blank-session preset switcher usable. Subagents always see the resident
catalog.
Measured behavior (opencode-go, DeepSeek V4 Pro, reasoningEffort=max): the
anchor request is stable "we"-style with zero let me; the following
tool-bearing requests return to the "The user wants…/Let me" style. This mode
is a comparison point for whether the zero-tool first turn is worth the extra
model call — not a claim that tool rounds stay "we"-style.
Install as a separate preset id:
dsh_home="${DSH_HOME:-$HOME/.dsh}"
mkdir -p "$dsh_home/.agent-presets"
test ! -e "$dsh_home/.agent-presets/zero-anchored-standard"
cp -R zero-anchored-standard "$dsh_home/.agent-presets/zero-anchored-standard"
Restart DeepSeek Harness, create a blank session, select Zero-Anchored
Standard (experimental), then send your first message.
A usability-oriented variant of the zero-tool anchor idea: the first turn is a
natural self-introduction prompt instead of a fixed test message, and the
user's real first message is deferred to the next turn. Whatever the user types
first, the session warms up exactly one round and everything is ready when the
real message is processed:
anchor-turn plugin prepends anext-turnnext-turn message per turn, so the first modelstr_replace_editor, the discovery tools) alreadydev_tool_search away.The anchor text is configurable via the anchor-turn row's text option
(default "你是谁"). Anchoring on the first message — not session creation —
keeps the blank-session preset switcher usable.
Whoami Standard ships with includeSubagents: true on both thezero-tool-bootstrap and anchor-turn rows, so subagents spawned from a
session inherit the same anchor flow as top-level sessions:
str_replace_editor, and the discovery tools).Set includeSubagents: false on both rows to restore the plain behavior,
where subagents start with the resident catalog immediately. Each subagent
costs one extra model call for its anchor turn — a delegation-heavy session
pays it per subagent.
zero-anchored-standard keeps subagents plain by default; enabling the same
flow there means setting includeSubagents: true on its zero-tool-bootstrap
and anchor-turn rows (its anchor text stays the fixed test notice).
The trade-off of the mode itself is one extra model call per session: the
anchor turn is always taken, even when the first message is urgent.
The directory is self-contained; install it alone or alongside any other mode.
Install as a separate preset id:
dsh_home="${DSH_HOME:-$HOME/.dsh}"
mkdir -p "$dsh_home/.agent-presets"
test ! -e "$dsh_home/.agent-presets/whoami-standard"
cp -R whoami-standard "$dsh_home/.agent-presets/whoami-standard"
Restart DeepSeek Harness, create a blank session, select Whoami Standard
(experimental), then send your first message — the self-introduction round
runs first, and your message is answered with the full tooling on the next
turn.
The "make the model believe it never left Minimal" mode: the model-visible
catalog stays EXACTLY the Minimal pair (bash + str_replace_editor) for
the WHOLE session — no anchor round, no promotion, no discovery tools, no
catalog growth — while the full Standard toolset stays registered and
executes FOR REAL behind the dshx bash gateway:
dshx list # list every gateway tool
dshx web_search '{"query": "..."}' # execute the real web_search
dshx read_image '{"path": "..."}' # execute the real read_image
system-prompt/assemble keeps only the shells +str_replace_editor on every request (think steps, post-compaction,tools/pre-execute listener intercepts bash commandsdshx, dispatches them through ctx.tools.execute() (thedshx capability guide is appended to the systemguide: false for a byte-pure Minimal persona) so the model knowsThe gateway refuses to dispatch the shells/str_replace_editor themselves
("invoke them directly"), which also makes recursion impossible. Unknown
tools, malformed JSON, and tool failures all come back as readable payloads.
Set gateway: false for a bare two-tool session with no interception.
Install as a separate preset id:
dsh_home="${DSH_HOME:-$HOME/.dsh}"
mkdir -p "$dsh_home/.agent-presets"
test ! -e "$dsh_home/.agent-presets/eternal-minimal"
cp -R eternal-minimal "$dsh_home/.agent-presets/eternal-minimal"
Restart DeepSeek Harness, create a blank session, select Eternal Minimal
(experimental), then work as usual — the model composes shell commands,
and dshx … lines run the heavier Standard tools for real.
The wire-level mode: every user turn opens with one think step that keeps
tool definitions PRESENT in the request while the wire forbids invocation
(tool_choice: "none"), then a steering notice opens the execute phase on
the official provider with the resident catalog.
tool_choice is outside the harness GenerateOptions vocabulary (the
official deepseek adapter documents the mapping as an MVP cut), so reaching
this condition takes the sanctioned wire seam:
toolchoice-adapter.mjs (row 1) registers adeepseek-wire-think) that puts tool_choice: "none" on the wireDeepSeekAdaptercontent: "" never null, reasoning_content replayed only onrole: "tool" with an (no output)llm-deepseek settings section > env, exactly likeDEEPSEEK_API_KEY serves both routes.wire-think.mjs keeps the think step's assembledagent/request waterfall — the frozen loop-builtagent/turn-stopping steers exactly once per turnsteering/message events), and execute stepsDegradation ladder: if the sibling route is not registered (row removed, or
a second preset already mounted the same id — DUPLICATE_ADAPTER is caught
and warned), think steps fall back to the zero-tool condition, so a
composition mistake can never brick a session. mode: first-turn limits the
routing (and its costs) to the session's first user turn.
Costs to know before adopting: the think/execute alternation switches the
tools block of the request prefix twice per turn, so DeepSeek prefix-cache
reuse breaks from the first changed token each switch (provider id itself is
invisible to the backend cache; the tools block is what diverges). Each swap
appends a request/header change event. Set logprobs: true on the adapter
row for the opt-in research hook — the adapter requests token logprobs and
logs a per-request mean summary (the harness StreamChunk vocabulary has no
surface for logprob data, so logging is all a plugin can do today; that log
stream is exactly what offline trajectory analysis would consume).
Install as a separate preset id:
dsh_home="${DSH_HOME:-$HOME/.dsh}"
mkdir -p "$dsh_home/.agent-presets"
test ! -e "$dsh_home/.agent-presets/wire-think-standard"
cp -R wire-think-standard "$dsh_home/.agent-presets/wire-think-standard"
The everything-is-a-plugin showcase: THREE orthogonal anchoring mechanisms
composed as independent rows, each with its own knobs, each removable or
retunable by editing one line of agent.cordis.yml. They attack the
pre-tool deliberation collapse at different moments of a turn:
| Row | Mechanism | Owns |
|---|---|---|
think-phase |
zero-tool think step + steering notice | the turn OPENING |
deliberation-gate |
depth gate denies the first tool call of a shallow turn | the FIRST ACTION |
cot-drip |
one "We …" beat after every Nth tool result (tools/post-execute additionalContexts — never blocking, never erroring) |
the LONG MIDDLE |
With mode: every-turn the think step opens every turn, the gate catches
the paths that skip it (steering continuations, resumed sessions,
straight-to-tools follow-ups), and the drip sustains deliberation across
long tool loops. Defaults are deliberately gentle (minChars: 400,every: 4, one beat per turn); tune per workload. Swapping thethink-phase row for wire-think + toolchoice-adapter upgrades the
opening to the wire-level condition (see above) at the cost of the sibling
route and its prefix-cache churn.
Explored and rejected for this package: pure Code Mode presentation
(presentAs('code') collapses the catalog into one run_code tool) — a
single-tool surface measurably underperforms the two-tool condition in the
sibling project's evaluations; and text-only fake tools or ghost tool-call
histories — both proved unreliable anchors in practice.
DeepSeek currently asks community plugin authors to publish plugins in their own
GitHub projects and add the dsh-plugin
repository topic for discovery. The official repository does not currently
accept external pull requests and does not mandate a community repository
template. See the officialCONTRIBUTING.md.
MIT. preset/agent.cordis.yml is derived from the DeepSeek Harness Standard
preset; the original DeepSeek copyright and MIT notice are retained inNOTICE.
登录后即可为该插件评分和评价。
还没有人评价这个插件,来抢个沙发吧!