Every model spec sheet leads with a context window: 128K, 200K, a million. It reads like a capacity — the amount of information the model can work with. It isn't. It's the amount the model will accept without throwing an error. Whether it can reason well across all of it is a different question, and in 2025 two studies finally put numbers on the answer. The numbers are worse than the folklore.

The window is a storage spec, not a performance spec#

Chroma's Context Rot report tested 18 models — GPT-4.1, Claude 4, Gemini 2.5, and Qwen3 among them — on tasks deliberately kept trivial: find a fact in a long input, or copy a long string. If a context window were a flat capacity, accuracy would hold steady until the model ran out of room. It doesn't. Performance erodes as the input grows, the erosion starts well before the advertised limit, and it's uneven from model to model. There's no clean cliff at the number on the box; there's a slope that begins much earlier.

The sharper finding is why. Chroma showed the score depends less on whether the answer is present than on how it's presented. When the question and the buried answer share wording, the model coasts. Add distracting passages, or make the answer something the model has to infer rather than match, and the same length gets much harder. Length is the axis everyone watches; the ambient noise and phrasing turn out to matter as much.

The context window tells you what the model will accept. It says nothing about what the model can use — and the gap between the two is where agents quietly fail.

The reasoning case is where it collapses#

If Chroma showed the slope, Adobe Research's NoLiMa showed the cliff hiding underneath the standard test. The classic "needle in a haystack" evaluation hides a sentence in a long document and then asks a question that repeats the sentence's keywords. A model can win that by string-matching — no long-range reasoning required — which is exactly why nearly everyone scores well on it and why it flatters the spec sheet.

NoLiMa removes the shortcut. It writes the needle and the question to share almost no vocabulary, so answering forces the model to make the connection across the whole context. That one change is brutal: at just 32K tokens — a quarter of a 128K window — 11 of 12 tested models fell below half their short-context accuracy, and every one of the twelve advertised at least 128K. The capacity was on the box. The comprehension was gone at a fraction of it.

This is the part founders should sit with, because most real agent work is the NoLiMa case, not the keyword case. Your agent rarely gets a question phrased in the exact words of the answer. It gets a goal, a pile of retrieved context, tool outputs, and prior turns, and it has to infer which parts connect. That's the regime where long context rots fastest.

What this changes about how you build#

The correction isn't "never use long context." It's to stop treating the window as storage and start treating it as a performance budget — a resource with diminishing returns, where every low-signal token you add makes the high-signal ones a little harder to use. Three consequences follow.

Benchmark on your inputs, not the vendor's. A clean needle test at 8K tells you nothing about your noisy 120K agent transcript. Run the lengths you actually run, with the noise you actually carry. This is the same discipline that applies to reading an agent-memory benchmark: a test short enough to fit the window barely exercises the thing you're worried about.

Keep the working context lean. Retrieve the handful of chunks and tools a step needs instead of pre-loading everything; prune stale content; compact or clear old turns once they've done their job. These are the ordinary context-engineering moves, and context rot is the empirical reason they pay off rather than a matter of taste.

Don't assume the cheap million-token window ends the argument. When context got cheap, the temptation was to stop managing it and just paste everything in. Chroma and NoLiMa are the evidence that you still can't. The window got bigger. The reliable zone inside it did not grow nearly as fast — and the failures it hides, from context distraction to context clash, show up precisely on the inference-heavy tasks you built the agent to do.

The number on the box is real. It's just answering a question you weren't asking.