SkinDeepRESEARCH
SearchSteve Seguin

Longer context: the measured results

Task outcomes, speed, recall and the source records behind the explanations.

Keeper led the long-history tests; files and code led the structured ledger. Compare methods within the same task. Each section links to the measurements, failures and original research.

Keeper: a million-token history through a small window

The same 32K working budget, stream and 228 questions. These test remembering facts and applying rules throughout the history; the ledger and narrative totals below are separate tasks.

One million tokens, a 32K working windowCorrect answers · scale 0–228 · longer is better
Keeper proxy, in-place notes50 min
226/228
Keeper, in-place notes50 min
228/228
Keeper, full notes rewrite83 min
226/228
Keeper proxy, full notes rewrite95 min
222/228

Same stream and seed: 203 questions during the task, plus 25 at the end. One run per bar; all four finished and were graded by the task’s own checker. The keeper runs inside the test harness. The proxy is a separate small program between an ordinary agent and the model server. In-place notes keep the same notes at lower cost: the model writes down only what changed, and nothing is read twice. On a second million-token stream the keeper with in-place notes answered 210 of 222 and the proxy 214 of 222. Qwen3.8-27B on two B70 GPUs; total elapsed time.

One model and one machine; each bar is one run. The proxy has not yet been tested under a real coding or research agent. How the proxy caught up · Question types, missed answers and original evidence · Why in-place notes are faster · Retrieval alone on the same history · How keeper works.

Completing a long task

Each approach used Qwen3.8-27B on two B70 GPUs. A synthetic ledger delivered 20 batches totaling about 121K input tokens. Updates set, add to or delete roughly 160 counters; accompanying memos were irrelevant. The final question asked for 24 current values. Each batch could be fetched only once. Large-window and revised self-editing arms used seeds 0 and 1; other 121K arms used seed 0. Model setup and task prompts.

Large window: 26 minutes, 24 of 24 correct. Summaries: 41 minutes, 24 correct. Original self-editing: 64 minutes, 19 correct. Revised self-editing: 15 minutes and 24 correct on seed 0, 21 minutes and 21 correct on seed 1. Both file-using agents: 1.9 minutes, 24 correct.
121K ledger: seed 0 for each approach, plus seed 1 for revised self-editing. The large-window seed-1 run returned no answer; see the full comparison.
121K ledger results, context budgets and token counts
StrategyExternal filesContext budgetCorrectElapsed timeTokens generated
Large window, exact cache on, seed 0nofull window24/2426 min89K tokens
Large window, exact cache on, seed 1nofull windowNo answer38 min99K tokens
Original self-editing agentno32K19/2464 min233K tokens
Summarise at 75% of the budgetno32K24/2441 min211K tokens
Self-editing, files allowedyes32K24/241.9 min7K tokens
No management, files allowedyes32K24/241.9 min8K tokens
Large window, earlier reasoning removednofull windowNo answerstopped at 2.6 h397K tokens
Improved self-editing agent, seed 0no32K24/2415 min67K tokens
Improved self-editing agent, seed 1no32K21/2421 min91K tokens
Improved self-editing agent, thinking only when needed, seed 0no32K24/246.6 min20K tokens
Improved self-editing agent, thinking only when needed, seed 1no32K24/245.7 min18K tokens

Both file-using agents answered 24/24 in about 1.9 minutes. Their peak active contexts were 8.2K and 8.9K tokens. The equal-score large-window and summary runs took about 26 and 41 minutes: approximately 14× and 22× the elapsed time in this particular trial.

These totals combine generation, prompt processing and tool use. They are not per-token decode speeds. The “large window” arm imposed no context-management budget, but the model still filtered batches through code; it did not retain every raw memo in its conversation.

Why the failures matter

The original self-editing run got 19/24. Its five missed answers exactly matched a ledger with batches 2, 3, 4, 5 and 7 omitted: the harness rolled back those already-delivered batches. The model’s recorded state edits were not the source of these five misses.

The earlier 12-trial key-value comparison also does not rank context policies: all arms wrote data to files, and incomplete file writes caused the losses. Some summary calls were empty after reasoning used the output allowance.

The separate old-thinking-removal trial was stopped after 2.6 hours without a final answer. It generated about 397K tokens while repeatedly reconstructing state and hitting the output cap.

Call-by-call analysis · Readable explanation

Revised self-editing scored 24/24 in 15 minutes and 21/24 in 21 minutes. Every batch was retained. On the second seed, a bug in the model’s rewritten update script stopped applying deletes from batch 17, causing three wrong totals.

The second large-window run returned no answers after 38 minutes. Raw batches and repeated copies filled its context before the final questions arrived. How this approach works and why it ran out.

A stream larger than the full window

The 478K-token ledger contained 76 batches, about 1.8 times the model’s full window. Code processed most input without placing its raw text in the model’s context.

TrialCorrectTime
Revised self-editing24/248.2 min
Files, no context editing24/241.9 min
Files, editing available24/241.3 min

The revised agent peaked at 10K active context; the file agents peaked at 9.7K and 7.1K. This demonstrates processing a longer stream, not attending to all 478K tokens at once.

Verified-fold revision and task scope

The later revision retains and checks the update script and enables thinking only when needed. It scored 24/24 on both 121K ledger seeds, in 6.6 and 5.7 minutes. The completed 478K results above used the earlier revision.

The 121K ledger exceeded the 32K working budget but remained below the model’s full 262K position limit. The tasks were locally constructed, not a reproduction of the paper’s benchmark scores.

Where the time went: reconstruction from saved calls
RunTotal secondsEstimated writing + call overheadEstimated readingTool seconds
Large window158914611102.7
Original self-editing384134763365.8
Summaries246420682534.4
Files, editing available11276162.7
Files, no context editing11180152.5
Revised self-editing, seed 08967581094.5
Revised self-editing, seed 1125810951305.6

Wall and tool times come from run records. Reading time is estimated from cold-read rates; writing is the remaining call time and includes call overhead. Summary-call time is estimated too. The columns omit other harness and setup time.

Most time went into generation, much of it thinking. All file-using tool commands together took 2.5–2.7 seconds. This does not isolate disk I/O, buffered versus durable writes or per-token decode rates.

Method, engine-log cross-checks and reuse calculations

Why files helped · Original reported task results

Bookkeeping and historical questions

Code applies the numeric changes the model submits. Correct answers still depend on interpreting the source and connecting each question to the right time and owner. The streaming tests independently checked saved states as well as final answers.

TestFinal answersWhat the state checks show
Short prose: summaries, saved tables, quoted changesFinal answers: summaries 84/84; saved tables 82/84; quoted changes 84/84.Saved states: tables 44/48; quoted changes 48/48. Summary states were not observed.
Wide numeric tables: original task and new seed/styleOriginal task: both 24/24. New task: both 24/24.Original states: both 24/24. New states: table 17/24, quoted changes 24/24. Correct final answers hid earlier table errors.
Historical balances and changing owners: two documentsSource retrieval: 24/24 in all four runs. Adding saved-state lookup: 19–23/24.Saved states: 96/96. Wrong answers connected questions to initial ticket owners.
Complete source in one request: the same two documentsClinic: 24/24 in 27.7 s. Theatre: 24/24 in 34.9 s.Final questions and source were available together. Intermediate states and extracted events were not measured.

For these short documents and final questions, start by supplying the complete source. Both documents fit comfortably in one prompt. Saved states and extracted events offer intermediate records to inspect, but exact balances alone did not ensure correct answers about changing ownership.

Scope, timing and original evidence

These are controlled development tests, mostly numeric bookkeeping. The short prose and historical-question sources were authored and independently annotated by AI assistants; they are not a verified human corpus. The wide-table test changed seed and prose style together; few of its historical answers differed from the final balances. The later historical-question documents deliberately require earlier balances and ownership transfers. They fit in one prompt and do not establish a benefit beyond the model’s window, general document memory or bounded total storage.

Every model call in these selected diagnostics reported zero cached prompt tokens. The one-request times include the request and local task records, excluding server startup and later auditing. Streaming agents saw the final questions after processing the source, while the one-request baseline received everything together. These are different protocols; the table makes no general speed claim. Quote checks establish source support for submitted events; the separate state and event audits test their completeness and interpretation.

Short prose (saved audit) · Wide tables (saved audit) · Historical questions (saved audit) · Complete source (saved audit)

Selected audits, source hashes and pinned research revision.

Reading narrative text

These tasks require reading counter changes from prose. The read-mode agent updates its own table; the quoted-events agent supplies event lines with supporting quotes and the harness updates the table. The quoted agent also has a read-only archive. Question counts vary by task and seed, so each score shows its own denominator.

On the matched 480K narrative stream, read mode scored 10/10 and quoted events scored 10/10. Quoted events took 19.6 min versus 25.6 min for read mode, about 24% less elapsed time in this one-seed comparison. Both agents used a 32K working budget. These measurements used prefix caching in both methods and different agent protocols. They describe one paired task; a cold-request or replicated speed comparison has not been established.

On the matched million-token narrative stream, quoted events scored 24/24 in 47.9 min; read mode scored 23/24 in 62.2 min. This is one completed pair on the same seed and task, with a 32K working budget. It does not establish reliability across other tasks or seeds.

Re-checked on 2026-10-07 with the fixed scorer: 480K stream 10/10 in 19.4 min; million-token stream 24/24 in 47.8 min. A review had found three holes in the quoted-events checker; after the fix, both runs were repeated on the same task and gave the same scores. Repeated with a 65K server window instead of 262K to leave host memory free; the agent never used more than about 23K of context plus 4K of output. The checker still does not verify event meaning or completeness; final answers are scored. What was repeated · Lab note

TrialFilesCorrectTimeTokens generated
Improved self-editing agent, prose ledger (the model must read)noVoid (rule breach)3.5 h926K tokens
Read-mode self-editing agent, narrative text (the model must read), seed 0no23/245.4 min14K tokens
Read-mode self-editing agent, narrative text (the model must read), seed 1no18/185.2 min13K tokens
Keep everything in the window, narrative textno24/2420 min53K tokens
No management, files allowed, narrative textyes24/245 min21K tokens
Read-mode self-editing agent, narrative text, 480K stream (larger than the window)no10/1025.6 min68K tokens
Paper's self-editing agent (as released, lab harness fixes only), narrative textno24/2438.7 min171K tokens
Summarise at 75%, narrative textno24/2416.9 min78K tokens
Guarded read-mode agent, 6 changes per batchno22/228.8 min31K tokens
Guarded read-mode agent, 12 changes per batchno14/1613.4 min46K tokens
Quoted events: the model quotes each change, code keeps the books, 480K narrative streamarchive only10/1019.6 min37K tokens
Quoted events, narrative text at 119K (3 changes per batch)archive only24/244.7 min9K tokens
Quoted events, 119K narrative text (12 changes per batch)archive only16/167.4 min25K tokens
Read-mode self-editing agent, narrative text, 1,000K-token stream (3.8 times the window)no23/2462.2 min170K tokens
Quoted events, narrative text, 1,000K-token stream (3.8 times the window)archive only24/2447.9 min112K tokens

Trial scores, source hashes and copied grader results.

Unless a different seed is shown, these are seed-0 trials. The dense prose-ledger attempt is void because it broke the no-files rule. Verifying supplied quotes and computing their arithmetic does not establish that the model found every relevant change.

Trial history and quoted-event revisions

The quote checker initially rejected some correct written-number events. Subsequent revisions fixed number reading, protected the final questions, strengthened file guards and increased the thinking allowance after refusals. The history preserves unsuccessful and void attempts alongside later reruns; different harness revisions are separate trials.

TrialTaskArmSeedCorrectTime
zvGETUykey value, 121KB32in02/2435.2 min
WuwjqE5ledger, 121KAw1Void; raw 1/2466.6 min
d5QqA7Xledger, 121KC32124/2477.7 min
Bxu6YPmledger, 121KD32124/241.5 min
KSx4aVVledger, 121KE32124/242.5 min
8gCWSuSnarrative, 999K, density 3B32ir023/2462.2 min
QuVH42knarrative, 999K, density 3B32iq024/2447.9 min
6nQ7wM5narrative, 120K, density 12B32iq016/167.4 min
EbpSRThnarrative, 120K, density 12B32ir014/1613.4 min
JVEXzAunarrative, 119K, density 3B32iq024/2412.4 min
LduPkBenarrative, 119K, density 3C32024/2416.9 min
MFciE7anarrative, 119K, density 3B32iq024/244.7 min
QExekr8retention, 119K, density 3B32iq031/3612.5 min
ULQ78qPnarrative, 120K, density 12B32iq016/1660.9 min
XqHBYPXnarrative, 119K, density 3B32024/2438.7 min
cYMHaL5narrative, 120K, density 6B32ir022/228.8 min
egPxnvznarrative, 120K, density 12B32iq0Void; raw 0/1619.1 min
rpcehLDretention, 119K, density 3B32iq035/365.7 min
w3fFKXYnarrative, 119K, density 3B32ir023/245.4 min
yM9GpoMretention, 119K, density 3B32iq024/369.8 min
4yngWURretention, 119K, density 3B32ira129/305.6 min
UithpWjnarrative, 119K, density 3B32ir1Void; raw 18/185.0 min
cyVkoEMretention, 119K, density 3B32iq126/3019.4 min
fyzUWqhretention, 119K, density 3B32iq129/305.1 min
tyQwrPZnarrative, 119K, density 3B32ir118/185.2 min
BHQ43ffnarrative, 480K, density 6B32ir013/1328.5 min
DKggW8rnarrative, 480K, density 3B32iq010/1019.6 min
YzT5eSknarrative, 480K, density 3B32ir010/1025.6 min
jbtpxHFnarrative, 480K, density 3E32r010/105.2 min

Unfinished attempts

TrialTaskArmSeedStatusTime
pdCwkGvnarrative, 480K, density 3B32iq0interrupted11.0 min
vZzo3qsnarrative, 480K, density 3B32iq1incompleteNot recorded

Portable trial manifest and source hashes · Pinned lab export. Scores and timing fields are generated from the copied grader and summary records. Trials without completed evidence cannot enter the measured tables.

Research record and failed attempts · Run the reading arms

Longer context slows generation

The server accepted a 262,144-token configured window; the probes supplied up to about 250K input tokens with room for an answer. Weights were FP8; the attention cache stayed at 16-bit precision.

Observed output rate: 127 tokens per second at 8K context, 99 at 30K, 70 at 60K, 49 at 120K, 40 at 160K, 35 at 200K, 31 at 230K and 27 at 250K.
Separate prompt tests: one reply each at 8K and 30K; medians of 20 replies at the longer lengths.
Speed values and how they were measured
ContextOutput tokens/sReplies measured
8K1271
30K991
60K7020
120K4920
160K4020
200K3520
230K3120
250K2720

8K and 30K: one chat recall prompt each, cache disabled. 60K–250K: medians over 20 six-code replies per length, two filler styles, exact prefix cache enabled. These are separate prompt tests, not a matched speed comparison across methods. Short replies and draft acceptance affect the measured output rates.

Cold reading speed and the first empty-answer result
Input tokensCold time to first tokenInput tokens/s
7,8482.4 s3288
29,8659.8 s3059
59,83622.1 s2704
119,72054.7 s2187
199,588114.4 s1745
249,599160.8 s1552

These are the initial uncached bare-text probe’s input-processing measurements. Its short rows ran out of the 96-token output allowance, and at 250K both drafting settings immediately ended the answer. A follow-up using chat formatting answered at 213.5K and 250K, so the apparent bare-text cutoff was not an engine window limit.

The first probe’s drafting-on and drafting-off token sequences matched at all tested lengths, including the empty 250K response. That equality does not itself establish successful recall at every length. Later chat and recall results answer that separate question.

How caching changes the wait · Original protocol, corrections and results

Record lookup accuracy

Two prompt styles, six lengths, ten questions per length and six codes per question: 708/720 codes correct. Each question sampled records spread through the context.

Codes correct out of 60 per style. Ordinary words and look-alike codes: 60K, 60 and 60; 120K, 60 and 58; 160K, 59 and 58; 200K, 58 and 57; 230K, 60 and 60; 250K, 60 and 58.
Correct codes out of 60 for each context length and filler style.
Recall data table
ContextCodes buried in ordinary wordsWall of look-alike codes
60K60 of 6060 of 60
120K60 of 6058 of 60
160K59 of 6058 of 60
200K58 of 6057 of 60
230K60 of 6060 of 60
250K60 of 6058 of 60

All 12 misses returned another record’s real code. Half were the preceding record; half had a similar record number. Errors appeared at different positions, and results did not worsen steadily: both styles were perfect at 230K.

The preset rule required at least 59/60 in both styles at a length and every shorter tested length. Only 60K met that continuous-range rule. It is a result on these similar-code prompts, not a universal reliable-context limit.

Raw data: codes among ordinary words · Raw data: wall of codes

Reusing an unchanged prefix

Prompt or editFirst token without reuseFirst token with reuse
Repeated 30K prompt11.4 s0.8 s
Middle edit in 30K, first request11.3 s6.7 s
Same edit, repeated11.3 s0.7 s
Question over 200K (separate probes)114 s2.0 s

With drafting on, the matched cache experiment produced identical output token sequences in 99/99 cases: eleven prompts, nine variants each, up to 30K input and 48 output tokens. Both servers used 832-token reading chunks. Two additional cold-versus-cached checks at 120K also matched.

ServerFirst passRepeat passExact per pass
Cache off88.5 tokens/s88.7 tokens/s12/12
Cache on89.6 tokens/s89.7 tokens/s12/12

The separate standard gate compared the shipped 4,096-token read configuration with the 832-token exact-cache configuration. Both returned 12/12 reference answers on the first and second passes. Their roughly 1% decode-rate difference does not establish a speed gain.

The cached 200K questions started in about 2 seconds; the original separate cold run took 114 seconds. Fixed small chunks raised cold-read latency: 30K went from about 9.8 to 11.4 seconds (16% longer), and 120K from about 55 to 69.6 seconds (about 27% longer).

Checkpoint cost and equality scope

The target model has recurrent layers as well as full attention. A reusable point needs the matching attention prefix and saved recurrent state. Checkpoints cost approximately three 832-token attention blocks’ worth of memory, with drafting and allocator details affecting actual allocation.

The add-on excludes generation-produced blocks and retains periodic reading checkpoints. An edit resumes before the change and recomputes what follows; it does not reuse stale post-edit states. The 99-case drafting test compared output tokens, not scores. Multi-user scheduling, one-card execution and disk restore were not established by this test.

How the cache works · Cache experiments · 99-case data · Standard decode gate data

Remembering what was dropped

The 119K narrative task with twelve extra questions about earlier text. Moving dropped batches to a searchable archive matched summarising on correctness, with less time and writing.

ApproachFilesRightTimePeak contextTokens written
Table plus archive and recallarchive only36/366.1 min23K14K tokens
Table onlyno25/365.7 min20K15K tokens
Summarise at 75%no36/3626 min23K121K tokens
Keep everything in the windowno34/3614 min144K33K tokens
No management, files allowedyes3/366.6 min27K26K tokens

Quoted events with an archive

These two trials used different harness revisions. Seed 0 is the rerun with the final questions pinned in context; its earlier attempt lost those questions. The question counts shown below come from each trial’s grader.

TrialCorrectTimeTokens generatedPeak context
Quoted events, retention test, seed 035/365.7 min12K tokens21K
Quoted events, retention test, seed 129/305.1 min10K tokens21K

What this shows and how the archive works · How to reproduce

Past the window: questions by distance

Histories of 240K to 1,000,000 tokens behind a 16K or 32K live window, with questions planted at known distances back. A keeper that manages the context from outside the agent answered 39/39 and 46/46 on two 240K histories that open with a rule and a method. Over 1,000,000 tokens it answered 226/228 in 83 minutes and, with in-place notes, 228/228 in 50 minutes; on a second 1,000,000-token history the in-place form answered 210/222 in 50 minutes. Run as a proxy with in-place notes, for an agent that manages nothing, it answered 226/228 in 50 minutes (one stream). All are finished, graded runs. With in-place notes the two 240K histories took about 10 minutes each in place of 16, with every answer right. Retrieval alone kept up at 240K (39/39 and 45/46) where the rule names what it covers, never found a rule that names nothing (0/16, against 16/16 for the keeper), and fell behind late in the 1,000,000-token history: 189 of the 203 questions asked along the way, in a stopped run. On a harder history the keeper with retrieval added answered 47/50 and 46/50, against 42/50 with notes only (one seed, exploratory), and 46/49 on a second seed where the run without retrieval did not finish. An earlier 1,000,000-token run by another method was stopped before its final check and is not a verified score.

On the plain histories at 32K over two seeds, archive and search answered 28/30 planted questions and all 35 final ones; window-drop answered 0/5 beyond about 25 batches back, and compaction reported six old values as current on one seed and none on the other. Summarising at a threshold scored 23/29 on one seed, below window-drop’s 25/29. Before the keeper, no method kept a rule stated once at the start without a pinned place for it.

Full tables, findings and limits · Lab note · Raw evidence

CPU cleanup and reasoning history
RuleContext freed
Conservative cleanup on three transcripts (combined rules)1.83% of approximately 4.99M tokens
Large tool outputs offloaded (separate rule)7.50% of transcript tokens; later hidden-line quotation in 54/152 outputs
Earlier reasoning in 277 separate 27B model calls9.9% median input share, 55.8% maximum

The cleanup census used roughly 4.99 million tokens from three existing agent transcripts. The 1.83% combined cleanup result is a text reduction, not an equal-answer model test. The 7.50% output-offload rule was measured separately and cannot simply be added to it.

54/152 large outputs had a line from the hidden middle quoted later, suggesting possible read-back work. It was not a measured retrieval experiment. Reasoning-history shares came from a different set of 277 model calls.

Plain-language implications · Census, methods and caveats

Disk cache: calculations, not a completed benchmark

The full-attention cache payload is 64 KiB/token for this target model at 16 bits. At 200,000 tokens that is 13.1072 GB, or 12.207 GiB, before other state. Saving text, parking this cache and streaming it while generating are different operations.

Assumed sustained storage read rateTime to move the 200K cache once
1 GB/sAt least 13.11 seconds
5 GB/sAt least 2.62 seconds
10 GB/sAt least 1.31 seconds

These are hypothetical single-transfer lower bounds, not measured tokens/s. Neither disk parking/restoration nor active disk streaming has a completed result in this snapshot. Explanation, assumptions and memory sizes.

Related result: short label decisions

One-step constrained labels and normal decoding without thinking agreed on 80/80 easy items; both got 78/80 correct. On the 24-item thinking subset, labels agreed on 24/24 and got 23/24 correct. Median response times were about 0.09 seconds without thinking and 0.59 with thinking.

Skipping reasoning supplied the saving; decoding a short label was already about 0.09 seconds. This is not a hard-reasoning benchmark or a context-offload speedup. Full one-step result.

How far to generalize these results

The ledger comparison uses one synthetic task family and one machine. The large-window and revised self-editing arms each have two 121K seeds; other rows have one task seed. The ledger was designed to have compact current state and irrelevant memos. Arbitrary documents or exact quotations can require much more retained information. Exact-match scoring checks the requested answers, not every possible question about the history.

One request ran at a time. Timings include different prompt shapes and reading configurations where identified. Do not use them as an SSD benchmark, a many-user capacity estimate, or a guarantee for another model. The source record includes proposals as well as completed trials; pending work has no measured score here.

Hardware and research snapshot

Qwen3.8-27B with FP8 weights and a 16-bit attention cache, two Intel Arc Pro B70 GPUs, R314 runtime, one request at a time. Research snapshot: 2026-10-12 14:54 UTC (10:54 EDT, 2026-10-12). K means approximately one thousand tokens; output speeds include drafting unless stated.

Original research

Website measurement record and aggregation notes · Latest research scripts · How to reproduce