Two API settings took GPT-5.6 Sol from 13.3% to 38.3% on ARC-AGI-3

Same model. Different harness: keep private reasoning, and compact instead of deleting. Output tokens per game fell to about one-sixth.
By OpenAI07-30 · 9 min read⚑ Tutorial / how-to
🎧 Listen to the podcast0:00 / --:--
0:00 / --:--
Translating the full HTML, visible text only, structure and markup preserved.Writing the full English translation carefully, then emitting the complete HTML.
Research brief · XiaoHu Explains
One-minute overview
  • OpenAI walked through a failed benchmark run of its own model: same GPT-5.6 Sol, same tasks, only two API settings flipped on—and the ARC-AGI-3 public-set score jumped from 13.3% to 38.3%.
  • The bug was in the harness that runs the model. After every step, the model's private reasoning was thrown away, so the next step had to re-learn the game from scratch.
  • Second problem: when context filled up, the oldest messages were deleted—including past keypresses. The model effectively had no past.
  • The fix is two switches: pass the previous response ID through the Responses API so reasoning sticks around, and turn on compaction so full context compresses into a summary at the limit instead of truncating the front.
  • The cost win is bigger than the score win: at max reasoning, output tokens per game fell from 2.9M to 0.49M. The new harness at "high" matched the old harness at "xhigh" on score, with about 12× fewer tokens.
  • ARC's own May analysis pointed elsewhere—three failure modes around never building a world model. And only the official-harness scores of 13.33% (public set) and 7.78% (semi-private set) are ARC Prize–verified.
⚑ Source material is OpenAI's official blog about its own model and APIs. The 38.3% result is OpenAI's self-run score. The only numbers independently verified by ARC Prize are 13.33% and 7.78% under the official harness—keep that boundary in mind when reading. Extra sources we checked ourselves are listed at the end.
Opening

Same model, same tasks, nearly 3× the score

OpenAI published a concrete postmortem: same GPT-5.6 Sol, same benchmark tasks, only two API settings turned on—score from 13.3% to 38.3%, and output tokens per game down to about one-sixth. If you run any multi-step job over the API, those two switches decide both score and bill.

When a model scores low, the usual first guess is "the model is weak." This time the answer is different: the harness was wiping the model's memory. They tested on ARC-AGI-3—puzzle games with no manual—and ran all five reasoning-effort levels.

What is a harness?
AI self-improvement starts outside the weights: Lilian Weng on harness engineering
The external program that runs a model is called a harness. What it controls—and how far it can go—is covered in full there.
13.3 → 38.3%ARC-AGI-3 public set, max reasoning
2.9M → 0.49MOutput tokens per game ≈ 1/6
48%Human average (OpenAI estimate from public logs)

Calling this a failure only makes sense because Sol looks nothing like one elsewhere. It resolved the cycle double cover conjecture in graph theory open for decades; cleared Pokémon FireRed from pixels alone with no game API; beat Slay the Spire in Codex; and finished the early levels of Baba Is You. In a log Wharton's Ethan Mollick shared, it won the Slay the Spire 2 daily random challenge in Codex—a game released after Sol's knowledge cutoff.

Ethan Mollick showing GPT-5.6 Sol clearing the Slay the Spire 2 daily challenge in Codex
Ethan Mollick showing GPT-5.6 Sol winning the Slay the Spire 2 daily random challenge in Codex. The game shipped after Sol's knowledge cutoff, so it was not in training data. Image source: Ethan Mollick's post as cited on the OpenAI blog.

That same model scored a little over 10% on 25 short 2D puzzle games. The side-by-side video below is the same game (id cd82) and the same Sol: official harness on the left, OpenAI's Responses API rewrite on the right. The game has six levels; no frontier model on the leaderboard clears level one. With the new harness, Sol clears all six.

Sped-up gameplay. Left: official harness. Right: Responses API harness with retained reasoning and compaction. Same model—GPT-5.6 Sol at max reasoning. Each side shows three counters: steps taken, levels cleared, output tokens burned. Video source: OpenAI.
Don't mix these two scores: 7.78% and 13.33% are both official harness at max reasoning. They differ only by set: 7.78% is semi-private, 13.33% is public—both ARC Prize–verified. The 38.3% used later for comparison is on the public set, so its baseline is 13.33%.
Rules of the test

No manual—and the score is not "how many puzzles solved"

ARC-AGI-3 is an ARC Prize benchmark: 135 hand-built mini-game environments, with 25 demos public so anyone can play at arcprize.org. One rule runs through everything: no manual. No object list, no rule text, no goal description, no intermediate reward scores.

Each step, the model gets only this: a 64×64 grid of cells colored 0–15, plus seven buttons it can press.

What it sees
A 64×64 grid; each cell is a color ID from 0 to 15
What it can press
RESET
restart run
ACTION1
up
ACTION2
down
ACTION3
left
ACTION4
right
ACTION5
confirm / delete
ACTION6
click a cell (x, y each 0–63)
Schematic we drew. Left grid is a casual color layout, not a real level. Right-side key names and roles match ARC's open-source definitions. Which keys matter in each game is also hidden—the model has to discover that.

The only way through: act, guess the rules, revise when wrong. Press a key, watch what changes, infer what that key does, then test the next step.

That percentage is not "puzzles solved"

The ARC-AGI-3 score is RHAE (Relative Human Action Efficiency). It does not count how many tasks you clear. It compares steps: model steps to clear each level versus steps a first-time human needed on that same level—and the penalty is squared.

Toggle to see the score collapse: human clears this level in 10 steps
100251pts
Same step count as a human—full marks on this level.
Only 2× the steps, and the score falls to one-quarter. Squared penalty: double the steps, divide the score by four.
Ten times the steps leaves 1 point. On this benchmark, detours cost far more than intuition suggests.
These three numbers come from ARC's scoring docs.

Three more scoring details matter if you want to read the numbers: each level's score is weighted by level index—later levels count more; early tutorial levels barely matter; a run's ceiling is capped by how far you got, so missing the last level blocks 100% no matter how efficient you were; the human baseline is a high-median first-timer across players on that level, so an ordinary person will not hit 100% either. OpenAI's estimated human average is 48%.

Keep this in mind for every number below

Actions that do not change the game screen do not count as steps—tool calls, thinking, retries, none of them.

So 13.3% → 38.3% measures only "how many fewer wrong turns," not "how much less thinking." Burning four-fifths fewer output tokens is a separate ledger. This run won on both.

Root cause

The model isn't dumb—its memory is wiped every step

If the score only punishes detours, where did Sol's detours come from? OpenAI reviewed several game logs. First impression matched ARC's: the model looked slow and unfocused, deliberating at length on each step and spinning in place. Digging further showed the model was fine—the harness was not. Two issues.

First: after every step, the private reasoning the model wrote for itself was discarded wholesale. On the next step, Sol had to re-learn the game from scratch. It could see which keys it had pressed and short notes, but not why it pressed them, what it had already figured out, or what it planned next—all gone.

Second: the harness used rolling truncation. Once context crossed a limit, the oldest messages were dropped. So past ideas could not stick around—and even the record of past keypresses was slowly pushed out of the window.

Step 1
Private reasoning"Paint pours downward"
Dropped after this step
ACTION5
Step 2
Private reasoningGuess again from scratch
Dropped after this step
ACTION3
Step 3
Private reasoningGuess again from scratch
Dropped after this step
ACTION6
Context window
The left slot is the oldest action record squeezed out: when the window is full, it's gone.
Schematic we drew. Struck-through dashed boxes are the model's private reasoning—discarded after each step, so steps 2 and 3 start blank. The row below is action history still in the context window; once full, the oldest messages drop first.
A quick analogy

Imagine playing a puzzle game where every keypress wipes your last thought, leaving only a list: "you pressed right, right, up." The list never says what you had already figured out. You can see the path you took, not why. Every step you re-derive the game—and often re-try routes you already ruled out.

Both issues show up in ARC's open-source harness

ARC open-sourced the evaluation harness on GitHub (ARC-AGI-3-Agents; latest commit May 28, 2026). We pulled it and checked. Both problems are in the code.

First: every OpenAI call in the repo goes through chat.completions.create—20 call sites total. Zero responses.create, zero previous_response_id. That is stronger than "a setting was left off": the older API cannot structurally carry encrypted reasoning into the next turn. Dropped reasoning is not a missed flag—pick that API and the outcome is baked in.

Second: the message stack is true FIFO—oldest first to go:

ARC open-source harness · agents/templates/llm_agents.py
def push_message(self, message):
    """Push a message onto stack, store up to MESSAGE_LIMIT with FIFO."""
    self.messages.append(message)
    if len(self.messages) > self.MESSAGE_LIMIT:
        self.messages = self.messages[-self.MESSAGE_LIMIT :]

That last line is rolling truncation: keep only the newest MESSAGE_LIMIT messages; drop the rest. In the public templates the cap is message count (10 for the basic agent, 5 for the reasoning agent).

One discrepancy, noted as-is: OpenAI describes the truncation threshold as "context over 175K characters." In the public repo we only found a message-count limit—not 175K, and no note on which build the leaderboard actually runs. So the code proves "the mechanism is rolling truncation," not "the threshold is 175K."
How it works

When context fills, compress into a summary—don't delete the oldest

If the root cause is forgetting, the fix is two moves: let it remember, and stop freeing space by deleting.

OpenAI's models are trained to write private reasoning first, then answer or call a tool—and those reasoning messages are meant to stay in the dialogue history. When history no longer fits, compress and keep going. That is how ChatGPT and Codex are deployed. To match that production setup, they rewrote the ARC-AGI-3 harness on the Responses API.

Switch 1: retained reasoning—pass back the previous response ID

This switch is retained reasoning. On the Responses API, feed the previous response's ID (previous_response_id) into the next request and reasoning is kept automatically across tool calls and turns. Two things change: each step takes less thinking time, because the model does not need to re-learn the game; and it actually learns—strategies stay coherent instead of restarting every step.

Switch 2: replace rolling truncation with compaction

compaction is context compression. Per OpenAI's API docs, set context_management's compact_threshold on the request: once rendered tokens cross that threshold, the server runs a compression pass, packing prior state and reasoning into an encrypted compact item, then continues. That item is a black box to humans, but it carries what the conversation needs next.

The difference in one line: rolling truncation deletes the oldest records when memory is full—gone for good; compaction writes those records into a condensed form, frees space, and keeps writing. One truly forgets. The other keeps an abbreviated memory.

Click through: same context window, two harnesses when it no longer fits
Rolling truncationOfficial harness
175K limit
Deleted—gone for good
compactionResponses API
175K limit
Compact summary (encrypted)
Start. Window holds only the system prompt and first frame. Both sides look the same—and empty.
Dozens of steps later. Frames, actions, and reasoning pile up. Both bars grow.
Hit 175K. Nothing more fits; space must free up. The two harnesses split here.
Left: delete the oldest chunk and keep going—deleted content never returns. Right: compress the whole history into an encrypted summary pinned at the bottom; earlier learning rides along in that summary.
Further along. Left's hole grows; early observations and actions vanish. Right keeps writing above the summary; early judgments still live inside it. That is where the same model nearly triples its score.
Schematic we drew. Both bars are the same 175K context window. Hatched block = compact summary; dashed region = deleted content.

OpenAI's own diagram shows this mechanism across a real multi-step run:

OpenAI diagram: GPT-5.6 Sol reasoning, tool calls, and context compaction over a long task
OpenAI's official diagram, "How GPT-5.6 Sol reasons over long tasks." Column one starts from the user question, then stacks reasoning, tool calls, tool results, more reasoning—down to a dashed COMPACTION LIMIT. Column two opens with a hatched compact summary, then stacks new reasoning and tool calls to the limit again. Column three also starts from a compact summary, reasons, and finally answers. Image source: OpenAI.

Rolling truncation has a secondary side effect: the model spends most of its time in a nearly full context window, and fuller windows slightly hurt performance. Compaction empties the window again and sidesteps that too.

Results

All five reasoning levels move up—~12× fewer tokens at the same score

The chart below plots both harnesses: x-axis is output tokens per game, y-axis is score. Each line has five points for low, medium, high, xhigh, and max reasoning.

0 20% 40% 1M 2M 3M Output tokens / game Human avg 48% (est.) Retained + compact Official harness Same ~13%, ~12× fewer tokens
Redrawn by us from the ten data points on OpenAI's official chart—values unchanged. English labels and the same-score link line are ours. Deep-red solid line: retained reasoning + compaction. Olive dashed line: official harness.

The shapes tell the story at a glance: the official line crawls right—2.9M tokens per game to hit 13.3%; the new line climbs almost up the y-axis—0.49M tokens per game at max for 38.3%.

ReasoningOfficial scoreOfficial tokens/gameRetained+compact scoreNew tokens/game
low0.9%58,8093.7%84,316
medium1.5%207,1887.3%141,939
high5.2%728,18813.4%243,258
xhigh7.2%1,285,39325.7%428,540
max13.3%2,900,99738.3%485,485
Numbers copied from OpenAI's official chart. Tokens per game × 25 equals the total tokens on that chart—matching the 25-game public set. Highlighted rows are the two points compared below.

All five levels move up—first takeaway. OpenAI's own summary: at max, about 3× the score on about one-sixth the output tokens.

Second, from the same two points on the chart: the new harness hits 13.4% at "high," essentially matching the official harness's 13.3% after grinding all the way to "max." Tokens: 243K vs 2.9M per game—about 12×. Same score, roughly an order of magnitude less spend. OpenAI did not write this comparison; we divided the two highlighted rows.

Go back to the scoring rule and the two ledgers separate cleanly: RHAE does not count thinking steps, so 13.3% → 38.3% is pure "fewer wrong turns"—remember your own judgments and you stop replaying ruled-out routes. Lower output tokens means you no longer re-learn the game from scratch every step. One change, two non-overlapping gains.

OpenAI also shipped a 4:29 animation that follows Sol's 175K context window across a sequence of levels:

Per OpenAI's note on this animation: the middle two columns contrast how the two harnesses use the context window; once the past sticks, Sol thinks less per step and advances faster. An implementation detail: the limit here is 175K tokens, not 175K characters—close enough, because most of the text is grid frames that tokenize near 1:1 on their tokenizer. Video source: OpenAI.
The other side

ARC's own analysis points somewhere else

OpenAI says this deeper look was sparked by an ARC analysis. Published May 1, that piece reviewed 160 game replays and reasoning traces and landed elsewhere: the model never builds an understanding of the game. Same material; two readings side by side.

OpenAI's take

The confusion comes from the harness: private reasoning dropped every step, old actions truncated out—no past, so no learning.

Evidence: fix those two and the same model nearly triples score while cutting tokens to one-sixth.

ARC's take

The model never builds a working model of the game. Three failure modes:

  • Local effects correct, global rules missing—knows ACTION3 rotates an object, never gets to "aim the bucket first, then dip paint."
  • Forces old training-game templates onto new ones—treats cd82 as sand physics and Flood-It, ls20 as Breakout.
  • Clears a level without learning the game—level one passes on a wrong theory that locks level two.

ARC's closing contrast: Opus 4.7 compresses into a confident wrong theory; GPT-5.5 never compresses at all.

They didn't fail because they didn't observe things. They failed because they couldn't ground those observations into a world model.

ARC Prize, "Analyzing GPT-5.5 and Opus 4.7 with ARC-AGI-3," May 1, 2026

The two stories are not mutually exclusive—forgetting last step's judgment makes a coherent world model harder. They do point at different places: one at the harness, one at the model.

Two more facts belong together. First, ARC's own footnote in that piece: under default testing GPT-5.5 does not return reasoning traces, so the qualitative analysis used a special setup—the official score does not come from that mode. That confirms from ARC's side that missing reasoning is a real phenomenon.

Second, ARC's July results page for the GPT-5.6 line is quite positive on Sol itself: the only competitive model of its generation, able to read unfamiliar scenes in the game's own vocabulary, replan when hypotheses fail instead of thrashing, and the first model to truly win a full public ARC-AGI-3 game (id ft09, 87%). "Looked not very smart" was OpenAI's impression from replays—not ARC's verdict on Sol.

Push the harness rewrite further and the numbers can climb much higher.

Same benchmark, same model weights
Swap only the shell: Opus 4.8 and Fable 5 hit 99% on ARC-AGI-3
A harness called Schema has the model write each game's rules as runnable code and verify before acting. Self-scored 98.98% on the public 25—also not independently ARC Prize–verified.
How to do it

New API, keep the model's thinking, compact instead of delete

For practitioners, OpenAI's advice to API developers is three lines—no expansion in the original.

✅ Three settings for multi-step tasks

The concrete fields look like this.

From OpenAI's compaction docs; field names unchanged
previous_response_id
context_management.compact_threshold
store=false
POST /responses/compact

First: pass back the previous response ID so reasoning is kept across tool calls and turns. Second: compact threshold—once rendered tokens cross it, the server compresses automatically, no extra call. Third: with this set, server-side compaction also works when data is not stored. Last: a standalone compact endpoint, fully stateless—you send full context, get a compressed context back, and hand it to the next request as-is.

Their closing claim: benchmarks rarely measure the model alone. They also measure a pile of less-visible choices—API settings, harness design, prompts. And this is not the first time: they have seen public scores look oddly low before, only to find the eval's generic harness was dropping reasoning messages.

We hope these experiments are a reminder: benchmarks rarely measure the model alone. They also measure a whole set of less-visible choices—API settings, harness design, and prompts.

Ilan Bigio, Ted Sanders, OpenAI, July 29, 2026

One step further: Sol's score on this benchmark runs from ARC-verified 13.33%, to OpenAI's self-run 38.3%, to Schema's self-reported 95.35%—with the model weights never moved. Human baseline: 48%. Lined up like that, "how capable is this model?" still does not have a single settled answer.

Source
How enabling two settings tripled our scores on the ARC-AGI-3 benchmarkIlan Bigio, Ted Sanders / OpenAI·openai.com·2026-07-29
Our notes
Both videos and the official three-column diagram are from OpenAI. The line chart is our redraw of the ten official data points—values unchanged; English labels and the "same score, ~12× fewer tokens" link are ours. Input schematic, amnesia schematic, and dual context-bar schematic are ours; grid colors and legend text are illustrative, not real levels. Key names/roles and the FIFO truncation snippet come from our pull of ARC's open-source harness (latest commit 2026-05-28); 20× chat.completions and 0× responses.create across the repo are our counts. 7.78% and 13.33% are from ARC's results page; 38.3% is OpenAI's self-run.
↑ End of article
✓ This article is free to read in full

Members can copy or download the full Markdown, and let their AI subscribe and ask.

Read the original ↗
📮 New explainers, straight to your inbox

Found this useful? Leave your email — every new explainer, the moment it's out. Unsubscribe anytime.