Skip to main content
Lightning Jar - Web Studio Lightning Jar Wordmark

Barkup Bench

Atom

Barkup Bench is our open research project measuring how large language models read and edit structured document trees. Every study is pre-registered: the hypotheses, task corpora, prompts, and analysis plan are committed to a public repository before a single model is called, and the results are published as found, corrections included.

The Findings in One Sentence

Give every node a stable id, never make the model reproduce anything it is not changing, and hand it everything the request assumes: the nodes it must read in the view, the goal it must satisfy in the memo. Everything the benchmark validated ships in the open-source barkup library, linked in the sidebar with the full article series below.

Barkup Bench · pre-registered · corrected 2026-07-06 · studies F–AO

Every id-stable interface works, until trees get big or sessions get long. Then only anchored patches do, and they barely need to see the tree.

What the Recipe Costs

Finding where to look costs one search call. Remembering the session costs two worked examples plus a memo, even 36 edits in. The view is a correctness contract: what the model must read, it must be shown. Views carry values; memos carry goals. The agent can be trusted to write the memo itself, and "undo that" needs an echo, not a transcript.

Asking Beats Guessing

The series-long villain fell too. Offered one sentence of permission, every model asked instead of guessing, 270 out of 270. The silence was protocol, not blindness. Re-running the whole core stack on claude-opus-4.8, the tier our surfaces actually ship, passed every gate: the frontier does not need the training wheels, though they cost nothing to keep.

Where the Late Studies Closed the Borders

Restating a goal the model merely read does nothing; where a goal comes from matters more than saying it aloud. The memo is flawless until its twenty-note cap, where it silently discards exactly what it exists to remember, so the eviction is now deterministic and goal-safe. Some gaps are capabilities, not prompts: the ambiguity fix rescued the model we do not run and added nothing to the one we do. And told nothing but "that was invalid," models fixed their patches anyway. The error message was for us, not them.

Methods & Provenance

Main study: 200 seeded tasks × 6 conditions × 4 models × 2 regimes at temperature 0 (July 2026). Every follow-up study is pre-registered by commit before its first scored run and published as found, corrections included; the full catalog lives in the study index below, one page per study. All numbers are protocol-v2 corrected: the original interface-reliability gaps were an artifact of conversation histories that hid the model's own tool calls (vercel/ai#16840). Charts show parity prompts, models pooled unless noted, with Wilson 95% intervals. Conditions: A HTML + whole-tree rewrite, B JSON + rewrite, C JSON + mutation tools, D HTML + tools, E JSON Patch, and F id-anchored patch.

−2.0pp
corrected A vs C overall: 91.9% vs 93.9%; tools at slight-edge parity, not −5.3pp behind
3.8→71%
gemini-flash multi-turn tools success when its own tool calls become visible in history (the footgun)
≥99.3%
first-pass validity in every arm; HTML and JSON fluency tied
87–100%
anchored patches (F) at 300–1000 nodes, both model tiers; where rewrite falls to 0–80%
4s vs 10min
solved 1000-node edit: F $0.26 + 4s vs rewrite $0.88 + 597s (sonnet)
−98%
input tokens with a minimal focused view at ~1000 nodes (85.6k → 1.5k); accuracy statistically unchanged (Studies I/J)
13–0
late-session paired wins, per-turn views vs serialize-once (sonnet, Study K); and views cost 4× less
7–9pp
the price of grounding a human-style description with the whole tree in context (Study L); before the search tool
1 call
median find_nodes searches to ground an id-free edit; 43/45 sonnet (= its oracle bound), 39/45 gemini, at ~10% of full-tree input (Study N)
15/20
stateless sessions ending byte-perfect even with exact positions printed on every node (history: 19/20); memory isn't doing arithmetic (Study O)
2 examples
replace a session's entire history: ~900 canned tokens in the system prompt restore stateless sessions to full-history accuracy, at half the cost (Study P)
~½ of N
targets actually edited when one prompt asks for N edits; fan-out degrades every strategy, even oracle retrieval (Study Q)
90/90
fan-out tasks solved by app-side decomposition; 674/674 single-target subtasks, both models, at ⅓ the cost of a whole-tree prompt (Study R)
5.6×
what keeping history costs vs two worked examples across a 36-edit session (449k vs 81k input tokens); accuracy at parity, no late-session decay (Study S)
0→80/80
callback steps ("the codename we settled on") rescued by an app-maintained memo: stateless fails all of them, three note lines recover every one at 1.02× the cost (Study T)
0/90
dependent edits solved against a target-only view; every failure a valid patch with a silently invented value; both-nodes views go 90/90 at 25× less input than the full tree (Study U)
117/120
judged comparisons lost by rewrites that had to READ their goal from the document instead of being told it; while the application memo carried the same goal at full parity (Study V, judge-graded)
36/36
declarables recalled per model when the AGENT writes its own memo; retractions 12/12, zero noise notes, ~4 tool calls per session landing exactly on the declarative moments; the laziness hypothesis refuted (Study W)
0/144
"undo that" follow-ups solved without a context carrier; every failure a valid, silently guessed patch; a one-line app-appended last-edit echo restores history-parity at half the cost and beats history outright on opus (Study X)
0 false notes
from 432 conversational chatter baits, while casually phrased declarations ("scratch that, the codename is X2 now") extracted at exact parity with formulaic announcements on all three models (Study Y)
0/324
contamination events from same-schema distractor clients while facts and styleguide rules from a ~3.3k-token standing pack scored 216/216 per arm on every model (Study Z)
0/24
literal readings by opus-4.8 in Study AA’s confirmation arm; the model our Study Z claim called MOST literal measured least (sonnet 10/24, gemini 7/24); the claim is retracted (Study AA)
270/270
asks on provably-unsolvable edits once a one-sentence escape hatch existed; against 0/270 silent wrong patches without it, with zero false asks on the solvable twins (Study AC)
720/720
session steps passed on claude-opus-4.8 in every policy, including bare stateless: the worked examples that rescued sonnet are sub-frontier insurance (Study AD)
135/135
resumed solves after an ask: every model integrated a plain-text answer into an exactly-correct patch, zero re-asks, zero wrong integrations (Study AE)
0/90
wins for restate-the-goal-first on view-read rewrites, with PERFECT restatement compliance: the model says the goal, then orbits it anyway; where a goal comes from beats saying it aloud (Study AF, judge-graded)
30/30
notes silently lost at the memo's cap edge were GOAL notes, on every model; the one note class only the memo carries (Study AH)
3→15/15
sonnet's asks on ambiguous references with one added sentence; while gemini stopped one short of the bar and the shipped tier gained nothing, so the clause stays unshipped (Study AI)
138/144
silent "undo that" guesses converted into questions naming the missing antecedent by the shipped ask sentence, on every tier; with one measured condition on its zero tax (Study AG)
0/3
models where structured error feedback significantly beat a bare "the patch was invalid" on seeded-failure recovery; the verbatim-issues habit is developer UX, not model accuracy (Study AJ)
0 → 10/10
goal survival at the memo's cap edge on opus once the measured eviction pipeline replaced the silent clamp (p=.002; 19/19 over-cap sends became designed evictions, zero goals evicted; Study AK)
p = .219
the anti-self-eviction fence against the client-prune pathway: directionally right at zero cost (pooled prunes 5→1), but the control halved AK's baseline; unproven, not disproven, and unproven does not ship (Study AL)
3 → 40/40
lossless cap-edge recoveries on opus once the eviction notice invites consolidation; every needle kept, kind fidelity 800/800, zero degradations, ~570 extra tokens; shipped v3.215.0 (Study AM)

H2 · task success by tree size

At benchmark sizes (5–150 nodes), no interface dominates

Whole-tree rewrite (A, B) leads granular tools (C, D) at every size tested. The gap peaks on small/medium trees and narrows; but never reverses; at ~150 nodes. JSON Patch (E) collapses to 69.6% on large trees; and the pre-registered addendum condition F (id-anchored patches) recovers it exactly to rewrite level at the lowest token cost.

Data table; success by condition × size (parity, pooled)

H4 · multi-turn reference tasks, by model

Corrected: multi-turn reference edits are near-parity

Success on “insert a node, then edit it by the id from your own output”; protocol v2. With the model's own tool history visible, every interface is near-parity (A 88.1% vs C 91.3%, n.s.); gemini's residual tools deficit is phase-1 editing accuracy, not follow-up dropout. Zero id-reference failures in any arm, ever. The dramatic v1 gaps live in the footgun chart below.

Data table; reference-family success by model × condition (parity)

H3 · mean tokens per solved task

Rewrite is cheap where trees are small; HTML is the terser artifact where they're large

Tools arms (C, D) resend a growing conversation every call, so they burn 4–5× more tokens on small/medium trees. At ~150 nodes the whole-artifact arms grow too; and the HTML dialect (A, 15.6k) undercuts JSON rewrite (B, 23.0k) by ~30%: the one place the format measurably matters.

Data table; mean total tokens per solved task (parity, pooled)

Overall · success per model × condition (parity, 200 tasks each)

Frontier models don't care; smaller models do

Per-cell task success. Down the sonnet-4.5 and gpt-5.4 rows the interface barely matters; down the haiku-4.5 and gemini-3.5-flash rows the tools arms give up 10–17 points against rewrite.

The follow-up series · studies G–AO

Every Study, One Page Each

The main study above set the baseline; everything since has been a pre-registered follow-up, each with its own charts, gates, and verdict. Grouped by theme, or subscribe to the Atom feed to hear about new studies as they publish:

Interface reliability

Views & grounding

Sessions & memory

Qualitative (Track 2)

Standing context

Asking & calibration

Confirmations & machinery

Agent-surface steering

Pre-registered design, corpora, prompts, corrections, and all analyses live in the Barkup Bench repository (REPORT.md, including the protocol-v2 correction and the Study G–AM addenda). Upstream bug report: vercel/ai#16840 (resolved July 2026: the maintainers confirmed the footgun is real but found no safe runtime warning or codemod; the v7 migration guide now documents the final-step vs accumulated split, so history construction remains an app-side audit). Reading accuracy (H5) tied across formats and is omitted from the charts. For the practical distillation, ten action items with code examples, see The Builder's Playbook.

The article series · every post, in order

The Full Series

Every post in the Barkup Bench series, in order. Start at the top for the whole story, or jump straight to the current capstone, Hand It Everything It Needs.

  1. HTML as a Native Data Format for LLMs: Why We Encode Our Data in Markup Instead of JSON Jul 4, 2026
  2. We Benchmarked It: What Held Up in 'HTML as a Native Data Format for LLMs', and What Didn't Jul 6, 2026
  3. barkup 0.2: We Shipped What the Benchmark Told Us Jul 6, 2026
  4. A Deprecated Accessor That Still Typechecks Broke My Benchmark (and Maybe Your Agent) Jul 6, 2026
  5. We Found the Crossover (It Wasn't Where Anyone Looked) Jul 7, 2026
  6. The Model Doesn't Need to See Your Tree Jul 7, 2026
  7. Your Agent's Session Is Drifting (and the Fix Is Cheaper Than the Bug) Jul 7, 2026
  8. barkup 0.3: Focused Views, or Why the Model Doesn't Need to See Your Tree Jul 8, 2026
  9. Stable IDs Are All You Need: Seven Studies on Letting LLMs Edit Trees Jul 8, 2026
  10. We Tried to Delete the Hard Parts. The Benchmark Said No. Jul 8, 2026
  11. Then We Found the Cheap Part: One Search Call Grounds LLM Tree Edits Jul 9, 2026
  12. barkup 0.4: The Model Finds the Node Now Jul 9, 2026
  13. Your Agent Doesn't Need a Memory: Two Worked Examples Replace Session History Jul 10, 2026
  14. barkup 0.5: Your Code Finds the Targets Now Jul 10, 2026
  15. The Thirty-Sixth Edit: Long LLM Sessions Don't Need Memory Either Jul 10, 2026
  16. The Two Things Your Agent Can't See: Memos and Mentioned Nodes Jul 10, 2026
  17. Views Carry Values, Memos Carry Goals: Our First Judge-Graded Study Jul 11, 2026
  18. Who Writes the Memo? Auditing the Safety Net We Shipped Jul 12, 2026
  19. Hand It Everything It Needs: 23 Pre-Registered Studies on LLM Document Editing Jul 12, 2026
  20. Undo That: The One-Line Echo That Replaces a Transcript Jul 12, 2026
  21. Stronger LLMs Follow Conflicting Instructions More Literally, Not Less Jul 13, 2026
  22. The Model Always Knew What It Couldn't See Jul 13, 2026
  23. The Frontier Doesn't Need the Training Wheels (We Re-Ran Everything to Find Out) Jul 15, 2026
  24. Only the Frontier Knows When to Ask Jul 15, 2026
  25. Repeating the Goal Doesn't Make It Yours Jul 16, 2026
  26. The Twenty-First Note: How Three Neutral Components Compose into Silent Data Loss in LLM Memos Jul 16, 2026
  27. It Asked About Things It Already Knew Jul 16, 2026
  28. The Error Message Didn't Matter Jul 17, 2026

Ask Eljay

Ask about the studio's work, research, packages, or writing. A few starters:

Answers come from this site's own content and link their sources. For anything that matters, email hello@lightningjar.com.