Teardownspublic

dsh-anchored-standard

Installing it was flatly impossible — my harness has no hook that can take context away. The worse part was that I already owned the tool to measure this, and hadn't run it in 24 days.

4 takeaways → 0 · 24 days unrungithub.com/xiaobright/dsh-anchored-standard ↗

Rejected. But the grounds were not “it isn’t good” — they were “there is nowhere to mount it.” This preset bundle takes the first model request of a session, cuts the tool catalogue down to two, empties the auto-injected context wholesale, and thereby fixes the register the model opens its first sentence in. It sits on the same axis as Headroom — the context budget — one instalment later. The headline 98/99 is refuted by the author’s own README: the same table lists the official Minimal preset at 99 and 96. Independent replications landed at 85–90 across three operating systems and eleven runs, and the capability gap came out at +3.3 points with a 95% confidence interval of [−2.6, +9.3], which contains zero. And the most expensive fact in this piece was not about the target but about me — my own ~/.claude is itself a wholesale copy of somebody else’s preset bundle, and the measurement skill I picked up in that same transplant specifically to measure this problem has not run once in 24 days.

the session is cut in two — the stage comes from the session event log, not from process memory ① request #1 — bootstrap tools: bash and one editor, nothing else auto-injected context is emptied whole ② promotion — a durable event first tool call, or the first reply resident = 2 + 3 discovery + unlocked ③ compaction/end — epoch bumped promotion cleared — a second first request this time only 7 edit/search tools open seven modes vary those same two halves — installed by copying a whole preset directory preset — the baseline zero-anchored · whoami eternal-minimal wire-think-standard combo · prefab ⇒ the target isn't capability, it's the model's opening register — "we" or "let me" even after promotion it never dumps all 25 tools. The author measured that a full dump undoes the trajectory
This is not a thing that adds features. It is one condition that narrows the first request's surface, varied seven ways.

What it is

Seven preset directories that plug into a coding-agent harness called DeepSeek Harness (DSH). Not a model, not a library — a filter that hooks into the middle of a prompt-assembly pipeline. Installation means copying a directory wholesale under .agent-presets/<id>/, so it cannot own a node_modules; zero third-party dependencies is not an aesthetic here, it is the consequence of that constraint.

The operating rule is one line. Cut the session in two. On request #1 it intercepts the system-prompt/assemble waterfall, filters the assembled tool array down to two — a shell and an editor — and strips out every auto-injected context source — the instruction digest, the skill catalogue, the clock, the hooks. The gate opens the moment a first tool call or a first reply lands in the session event log.

if (status.promoted) {
  const keep = new Set([...bootstrapTools, ...RESIDENT_DISCOVERY_TOOLS, ...unlockedFor(...)]);
  return keepTools(assembled, keep, false);
}

The part worth noting is that the promotion decision is derived from durable session events rather than process memory — the stage survives a resume. And even after promotion it does not pour out the whole catalogue; heavy tools are unlocked only after a search tool has been used once.

Item Measured (2026-08-22)
Scale 126 tracked files · 94 .mjs · 1,282KB
Commits all 56 inside four days (08-14 → 08-17) · 0 tags · 0 releases
Stars / forks / contributors 3,696 / 111 / 13 people
Tests node --test 205 passing (763ms) · self-containment check exits 0
Docs README 38.8KB + Chinese 35.6KB + handover 16.4KB
Licence effectively MIT — but GitHub classifies it as NOASSERTION

The seven are not seven feature sets. They are the same two halves, varied.

Mode What it changes
preset The two-stage anchor itself. Everything else forks from here
zero-anchored · whoami Inserts one synthetic anchor turn carrying zero tools
eternal-minimal Removes promotion entirely. Other tools run through a shell gateway
wire-think-standard tool_choice:"none" on the wire — visible but not callable
combo-anchored Think/act split + a deliberation-depth gate + an instruction drip
prefab Zero model calls. Replays a pre-rolled session transcript as injection

Count the files literally and you will read this thing at three times its real size. Most of the .mjs inside the mode directories are generated artifacts copied from one shared/ tree and committed. The actual shared code is 2,940 lines, and the tests, at 3,105 lines, outweigh it.

What is well made isn’t the anchor — it’s the posture toward failure

The value worth reading is not the anchoring idea itself, but how the author handled the problems that came from bolting that idea onto somebody else’s harness.

  • A unified injection gate — close two paths instead of enumerating sources. Rather than listing sources in a denylist, the assembly path empties the context array whole, and the pre-step waterfall takes the message batch that step claimed as a baseline and default-denies every addition that isn’t in it“so that sources which don’t exist yet are covered too.”
  • The compaction epoch — admitting there is a “second first request.” Compaction rewrites the surface the model sees. So promotion state is not a boolean but a (boundary, promoted) pair, and only a promotion that came after the compaction-end event’s sequence number counts.
  • Anchor mass — count only the slice that comes back. By the serialization rules, only the reasoning of messages that contain a tool call returns on the next request. So the scorer computes its register metrics only over the slice that actually returns“a number measured over the whole reasoning overestimates the anchor the clone really receives.”
  • Using the deny channel as a return path for results. eternal-minimal intercepts shell commands and runs the real tool, but at the pre-dispatch stage the only sanctioned channel that can substitute a result is deny. So even successful results come back as refusals, and the first line states in plain prose that the command ran and its output follows, so the model reads it as output rather than an error.

The one I paid for is the fifth. The failure philosophy is deliberately split in two — a decorative filter that fails degrades to “expose the full catalogue” and warns exactly once, while a bad configuration throws immediately at mount time and an unknown config key is refused outright. “We don’t throw because a bootstrap tool went missing — a composition drift must not brick every request in the session.” Filters fail open, configuration fails closed — repositories that hold that distinction consistently in code are rare.

The headline scores were refuted mostly by the author himself

Target’s claim: on a particular evaluation set the anchored family scored 98, 99 and 99, against a control at 91 and 92.

Those numbers collapse three ways.

  • Those three runs are not what the current code scores. One issue compared the commit of the day against a frozen snapshot and established that those runs used a different first-request surface plus a full dump on promotion, and the author acknowledged it with a provenance note in the README.
  • The same README holds the decisive blow. Lines 114–115 record the official Minimal preset at 99 and 96. Install no plugin at all, run stock upstream, and it is 98.7 against 97.5 — inside observation noise.
  • Both independent replications failed. Three operating systems and eleven runs produced 85–90, and a 3×3 randomised block replication produced +3.3 points with a 95% CI of [−2.6, +9.3], containing zero, with a within-preset run-to-run standard deviation of 2.98 points — three times noisier than the ~1 point the README’s two runs imply.

What held is worth recording too. “The first-request tool schema sets the trajectory” came out stronger — in the same independent replication, the 26-tool condition produced let-me counts of 144–241 and the 2-tool condition produced we counts of 155–289, a complete 9/9 separation with zero overlap. But other reports deny any correlation between trajectory and score, and an arm that swapped a single instruction line back to stock did 35% less work and scored indistinguishably.

From an adoption standpoint, though, the real problem was not performance but the rate of decay. This preset is a snapshot of upstream rc.5, and upstream has shipped four releases since. rc.6 neutered the search tool in the unlock chain, and rc.8 shipped a persistent Windows PowerShell in the official Minimal by default, voiding the “byte-identical to official Minimal” reason for existing — and it changed the session storage format incompatibly, when every piece of state in this design derives from that store. On top of that, 0 tags, 0 releases, version pinning plus wholesale directory copying means nobody can tell which snapshot their own copy is, and the most destructive report of all — “the session stops responding entirely” — came out of exactly this structure. Two more layers sit above it: a controlled experiment reports that the single instruction line the preset injects after promotion undoes the trajectory it worked to establish, and prefab never runs its seed at all on the “set as default mode” path.

In fairness, the code hygiene is real. All 205 tests pass and the self-containment check catches drift with exit 1. What collapsed is not the code — it is the numbers that code produced and the ground that code stands on.

three headline numbers — refuted mostly by the author himself, or by his own README evaluation scores 98 / 99 / 99 not the current build — corrected by the author in the README the plugin beat the stock preset the same README lists official Minimal at 99 · 96 first-request tool schema sets the trajectory this one held — replication separated 9/9, zero overlap yet with the trajectory split, the capability gap still contains zero — 3×3 randomised block replication anchored − standard +3.3 −2.6 0 +9.3 ⇒ narrow the tools and the register really does split. That the score follows is unevidenced one arm changed a single instruction line, did 35% less work, and scored indistinguishably
The trajectory split replicated. The score gain did not. Selling those two as one package is this repository's weak point.

My harness has no screw holes to mount this on

First I counted, in my own environment, the very thing the target names as the anchor-breaker.

Injected into every session’s first request Measured characters
20 global rules 24,407
Auto memory index 19,124
Global instructions 2,669
Description front matter of 99 skills 23,671
Total 69,871 characters

I cannot give a point estimate in tokens — the text mixes Korean and English and I have no access to the tokenizer — so I record it only as a range: 30k–48k tokens [estimated].

Then I hit the mount point. My configuration exposes exactly six wireable hook events, and not one of them corresponds to the assembly waterfall, the pre-step message batch, or the request payload that the target intercepts. The session-start hook can only add context, never remove it. This is not a porting-difficulty problem; the transplant does not exist as an operation.

What came next was more deflating. “A small resident catalogue plus discovery-gated unlocking” is something the harness I use already does natively — roughly 40 tools always exposed, some 250 lazily loaded. The condition the target reproduces with seven plugins and 2,940 lines is my default. Benefit: zero.

I still wrote down four takeaways on the first pass. The adversarial pass took all four down.

First-pass takeaway Call Why
Make the safety guard fail-closed hold The failure mode I named does not hold given the lock-creation code. The two real holes (the matcher only catches one edit tool · releasing the lock ≠ ending the run) are already settled in writing
Fix the “count only the returning slice” formula absorbed The 37.6× overcount reproduced, but the tool had never run once, so it had misled zero decisions
Add a portability lint rejected A broader scan already existed inside my publishing skill. The file I meant to make canonical did not even contain that pattern
Pilot per-skill tool declarations deleted One of the two target sites already had a declaration, and the other is covered by a human approval gate one layer up

What the four share is the lesson of this piece — none of them were gaps from “the technique was missing,” they were gaps from “I never ran what I already had.” I had written that I used somebody else’s repository as a ruler and found four defects of my own. In fact I had just not opened my own drawer.

Verdict — what this investigation actually found lay outside the target

Item Call Why · what would reopen it
Adopt or port the presets rejected No mount point. Reopen when a hook appears that can remove context at the assembly stage
Two-stage catalogue already have it My harness does it natively. Benefit zero
Individual modes (prefab · eternal-minimal · wire-think) rejected They use the same mount point as the main body
The four takeaways zero See the table above
Re-proposing not allowed More stars or more modes will not change the fact that it cannot be installed

And this was the third round. To the question “should I adopt somebody else’s preset bundle wholesale,” I have already given the same answer twice — the selective transplant from ECC, and, two weeks later, a precise re-analysis whose conclusion was “there was almost nothing to take.”

The most expensive fact this investigation surfaced was not about the target. My own ~/.claude is itself a wholesale file copy of somebody else’s preset bundle. 55 of 98 skills, 14 rules and 10 of 12 hooks came from there; exactly two hooks are mine. And in that same transplant I picked up a context-budget measurement skill specifically to measure this problem.

  • Installed 07-29 → today 08-22, 0 runs in 24 days
  • The slash command meant to drive it was never created at all (verified across all 37 commands)
  • The formula overcounts skill overhead by 37.6× — it counts all 890,428 characters of skill documentation, when the actual standing exposure is 23,671 characters of description front matter, 2.7% of that

And I had written in the same note that “bloated standing context is the one item I never manage to keep.”

What I didn’t do

I did not measure whether my 69,871 standing characters actually degrade the first response. With no hook that can remove them, I have no way to build a control arm. That is “not measurable,” not “no problem here.” I will not use the target’s n=9 evidence to render a verdict on my own environment.

⚠ I also do not know whether the target is genuinely bad. What I established is only that its numbers are unverified and that it cannot be installed in my environment; whether it earns its keep for someone running DSH is outside this investigation’s range.

There are three reopening conditions. ① A hook opens that can remove context or the tool catalogue at the assembly stage. ② A head-to-head against the official stock preset comes in at n≥20 per cell with the confidence interval’s lower bound above zero. ③ An untreated holdout becomes available so I can build a control arm on my side.

The lesson I paid for here is not a technique but an order of operations — while I opened a third stranger’s preset for shrinking context, the instrument for measuring what to shrink was already in my drawer, sitting idle for 24 days with its scale off by a factor of 37.6. Collecting tools and measuring with them are different jobs, and the first keeps pushing the second back.