Yaxin Luo, Haobin Jiang, Jialv Zou, Xu Huang, Wenhao Yan, Haodong Li, Zhengrong Yue, Jing Li, Xiaofu Chen, Xiaohan Zhao, Jiacheng Liu, Jiacheng Cui, Zhiqiang Shen, Xiaotong Li (Meituan · MBZUAI · HUST · PKU · Tsinghua · CUHK · SJTU) — arXiv:2608.13560, August 2026

Optimize the Harness,
Not the Artifact

Every agent framework you have used fixes the output when it fails. AutoDesign fixes the system that produced the output — one bounded, gated, attributable edit at a time — and never touches a single model weight.

Prerequisites: what an LLM agent loop is + what a train/test split is for. Harnesses, meta-optimization, acceptance gates, weighted rubrics, and Bradley–Terry are all built from zero.
11
Chapters
7
Interactive Sims
78.32
PosterBench Score
54
Accepted Harness Updates

Chapter 0: The Same Bug, Twice

You have built an agent that turns an academic paper into a conference poster. It is not a toy. It reads the PDF, pulls the figures, writes HTML, renders a PNG, looks at the render, notices that the results table has spilled past the bottom of its column, shrinks the font, re-renders, and ships. On a good paper it produces something you would print.

You run it on paper number two. The results table spills past the bottom of its column. The agent notices, shrinks the font, re-renders, and ships.

Paper three. The table spills. Font shrinks. Ships.

Nothing is broken. Every single run is a success by its own definition — the loop detected a defect and repaired it. And yet something has gone badly wrong, and it is worth naming precisely, because naming it is most of this paper.

The repair never propagated backwards. The agent fixed the poster. It did not fix the thing that makes posters. Run one hundred papers and you pay the overflow-detection-and-repair tax one hundred times, because the system that lays out results tables has learned nothing at all from the ninety-nine times it laid them out wrong.

Two different objects that both look like "the model got better"

Hold two things apart in your head, because almost all confusion about agentic self-improvement comes from letting them blur.

The first object is the artifact — in this paper, the poster. Call it y. It is what the user asked for. It exists for one task and then it is done.

The second object is the system that produced the artifact — the prompts, the tools, the render loop, the validator, the retry budget, the fallback policy. The paper calls this the harness and writes it H. It persists across every task you will ever run.

Self-Refine (Madaan et al., 2023), which the paper cites as the canonical case, improves y. So does every critic-and-revise loop you have written. The improvement is real and it is local: it lives inside one task and dies when that task ends. The paper's phrasing for this is exact — such systems "treat individual human-aligned feedback as transient signals rather than reusable design knowledge."

Reflexion (Shinn et al., 2023) stores verbal reflections; Voyager (Wang et al., 2023) accumulates executable skills; ExpeL (Zhao et al., 2024) mines reusable experience from solved tasks. Each of these pushes memory outward from a single attempt, and the paper credits them for exactly that. But it also draws the line: "these mechanisms preserve useful information beyond a single attempt, but they typically do not update the harness that repeatedly produces outputs."

Level 0 — single-shot
Generate once. Any defect ships. The system is static and so is the output.
↓ add a critic and let the artifact be revised
Level 1 — artifact-level refinement (Self-Refine)
Generate, critique, revise, repeat. y improves within the task. H is untouched. Task 100 costs exactly what task 1 cost.
↓ carry something across tasks
Level 2 — experience memory (Reflexion, Voyager, ExpeL)
Store reflections, skills, or distilled experience. Retrieval helps the next task — but the production system's code, tools, and loop control are the same code, tools, and loop control.
↓ make H itself the optimization variable
Level 3 — meta-harness optimization (AutoDesign)
A coding agent reads many rollouts, finds a recurrent failure, edits the harness source, and the edit is kept only if it survives a held-out gate. Task 100 runs on a better machine than task 1.

Why this is not just "prompt engineering with extra steps"

The temptation is to say: fine, so you append "watch out for table overflow" to the system prompt and move on. Two reasons that fails, and both are load-bearing for the rest of the lesson.

First, a prompt is one of five things a harness contains, and the smallest one. When the paper's optimizer decides that overflow is a recurrent failure, the fix it lands might be a new deterministic checker in the validator, or a change to the retry budget, or a different artifact specification — not a sentence in a prompt. Chapter 1 makes that five-way decomposition concrete.

Second, and more importantly: who decides the fix is a fix? Appending a sentence to a prompt feels free, so people append sentences forever, and the prompt becomes a graveyard of instructions that helped on the one example the author was staring at. AutoDesign's answer — the single most transferable idea in the paper — is a held-out acceptance gate. An edit is admitted only if it improves a training set and does not degrade an independent development set the optimizer is never allowed to see. That is Chapter 5, and it is where a fun idea becomes an engineering discipline.

Model weights never move. Throughout the entire paper, the parameters θ of the underlying model πθ are frozen. Nothing here is fine-tuning, RLHF, or distillation. The optimization acts on the system surrounding the model. The paper places this explicitly inside "the model-versus-scaffold distinction in recent self-improving-agent taxonomies" (Ren et al., 2026).

See the difference before you formalise it

The simulation below runs eight papers through two pipelines. Both have the same frozen model. Both have an inner critic-and-revise loop, so both repair the overflow on every task. The difference is only that the right-hand pipeline is allowed, after enough evidence has piled up, to edit itself.

Static harness vs meta-optimized harness

Step through eight design tasks. Watch the defect column: a static harness keeps hitting the same failure and keeps paying to fix it. The meta-optimized harness accumulates evidence, edits one component, and the class of failure disappears. Scores here are illustrative — the real per-task numbers appear in Chapters 8 and 9.

Three things to notice. First, both lanes succeed on every task — "success" is a terrible metric here, because it is measured per-task and the pathology is across tasks. Second, the meta lane's improvement arrives as a discrete step, not a smooth curve: a harness edit either lands or it does not. Third, the meta lane is more expensive early on, because it has to run rollouts it does not need in order to gather the evidence. Meta-optimization is an investment with a payback period.

Put a number on the repeated tax

"You pay the repair cost every time" is a slogan until you cost it. The paper gives us the pieces for a rough estimate, so let us do the arithmetic.

One fully autonomous poster run is reported at 11 editing turns in 40 minutes. So one editing turn averages:

40 minutes ÷ 11 turns = 3.64 minutes per editing turn

Now suppose — and this is our supposition, not the paper's — that four of those eleven turns are spent detecting and repairing a defect class the harness produces on every paper. Overflow, say. On one paper that is:

4 turns × 3.64 min = 14.6 minutes of the 40, or 36% of the run

Run the whole 100-paper Main Track and that is 1,460 minutes — over 24 hours of wall clock — spent fixing the same bug one hundred times. The same arithmetic applies to the tool-call budget: 253 tool calls across eleven turns is 23 calls per turn, so four wasted turns is roughly 92 wasted tool calls per paper and 9,200 across the benchmark.

The comparison that motivates everything. One outer-loop iteration — propose an edit, run the candidate on train and dev, decide — costs a bounded number of rollouts, once. Repairing the same defect one hundred times costs a fraction of every rollout, forever. The moment your task count exceeds the outer loop's payback period, not optimizing the harness becomes the expensive choice.

Three questions any self-improving system has to answer

Strip away the domain and every system in this space is answering the same three questions. Most of them answer one or two and quietly duck the third. Naming them now is worth it, because the rest of this lesson is AutoDesign's answers.

QuestionNaive answerWhy it breaksAutoDesign's answer (chapter)
What am I allowed to change?Anything — the whole agent is fair gameYou lose credit assignment. After twenty edits you have no idea which one mattered, so you cannot build on any of themExactly one of five named components per iteration (Ch 1, Ch 4)
How do I know it helped?Look at the score on the tasks I was staring atThat is the definition of overfitting. The best-looking change is often the one that memorised your examplesStrict improvement on train and no regression on an independent development split (Ch 5)
How do I know I am not fooling myself?Report the score I optimized againstA number a system was optimized toward is not evidence about the system. It is evidence about the optimizerThree separate evaluators at three levels — the in-loop critic, the frozen Rmeta, the frozen PosterBench — plus a system-blind human study (Ch 6, Ch 9)

Notice the escalation. The first question is about engineering discipline. The second is about statistics. The third is about epistemics. A system that answers only the first is a tidy codebase; one that answers the first two is a tuned system; one that answers all three has produced a result you can believe.

Why "long-horizon" is in the title

Long-horizon is doing precise work in the paper's title and deserves a definition rather than absorption. A task is long-horizon when the number of decisions between the input and the reward is large, and when most of those decisions are never individually scored.

Concretely, in one poster run: 253 tool calls, 11 editing turns, and exactly one final artifact that receives a number. Two hundred and fifty-two of those tool calls get no direct feedback at all. The single score at the end has to account for every one of them.

HorizonExampleDecisions before rewardWhat makes improvement hard
Single-stepClassify a sentence1Nothing structural — the gradient reaches the decision directly
ShortAnswer a question with one tool call2–5Mild attribution: which call went wrong is usually visible
LongPaper → poster; a multi-file code change; a research run102–103One scalar has to explain hundreds of unscored decisions. The trajectory, not the score, is where the information lives

This is the credit-assignment problem of reinforcement learning, and AutoDesign's answer is not a value function. It is a coding agent that reads the trace and forms a hypothesis. Where RL propagates a scalar backwards through time, the meta-harness reads the log and says "attempts 1 through 4 all failed the same overlap check on the same element." That is a qualitatively different mechanism, and it works precisely because the trace is written in a language a model can reason about.

A useful reframe. In RL you have a weak signal and a strong optimizer, so you need many episodes. Here you have a rich signal — a readable trace — and an expensive optimizer, so you need very few iterations but each must extract a lot. Roughly 123 iterations would be laughable as an RL budget. It is generous when each step is a coding agent reading ten complete traces and writing a diff.

The concrete instantiation: paper → poster

A framework that optimizes harnesses is untestable in the abstract, so the paper picks one task and drills. That task is academic paper-to-poster generation, and it is a well-chosen stress test rather than an arbitrary demo. It demands, simultaneously:

DemandWhy it is hardWhich failure it produces when the harness is weak
Condense a long multimodal sourceA 12-page paper with 8 figures must become one page a human reads standing up, in 60 secondsEither a wall of text or a poster with three sentences and a lot of white
Preserve traceable evidenceEvery number on the poster must be findable in the sourceInvented benchmark deltas, hallucinated venues, mismatched figure captions
Be legible when renderedThe output is judged as pixels, not as markupClipping, overlap, text at 6 pt, an export edge that eats a column
Stay editableA human has to be able to fix the last 5% themselvesA flattened PNG nobody can adjust

The paper's own summary of why this task earns its keep: it "must condense long, multimodal scientific sources into a single legible, visually coherent poster while preserving traceable evidence." Every one of those four clauses turns into a scoring dimension in Chapter 6.

The headline claims, stated now so you can audit them later. On a 100-paper benchmark called PosterBench, the harness AutoDesign evolves — called DesignHarness — scores 78.32, beating the closed-source commercial system Claude Design by 7.45 points under a matched coding agent and model. Attaching that harness to seven different model/code-agent configurations raises their average from 54.99 to 67.39. In one fully autonomous run it made a poster with 253 tool calls and 11 editing turns in 40 minutes for under $3. Eleven blind human reviewers rank it first with a Bradley–Terry estimate of 64.0% (95% interval 55.2–77.8%). We will verify the arithmetic behind four of those numbers by hand, and we will find at least two places where the honest read is narrower than the headline.

What the whole system cost to build

One set of numbers from the paper's contributions list is worth putting up front, because it calibrates what "meta-harness optimization" actually costs in wall-clock terms. Over 7 days of evolving traces, the framework invoked 224 subagents, recorded at least 123 recursive iterations, and accumulated 54 harness updates.

Do the division, because it is the first honest signal in the paper:

54 accepted ÷ 123 iterations ≈ 0.439  →  about 44% of proposals survived the gate

More than half of everything a strong coding agent proposed, after reading real rollouts and real scores, was thrown away. That is not a failure of the optimizer. It is the gate doing its job, and Chapter 5 is about why a system without that rejection rate would be worse, not better.

Read the "at least" carefully. The paper says "at least 123 recursive iterations," so 44% is an upper bound on the acceptance rate: if there were more iterations than 123, the same 54 accepted updates represent a smaller fraction. The honest statement is "at most about 44% accepted," and we will keep that framing.

The shape of the rest of this lesson

ChapterWhat gets built
1The formal harness: y ~ Hθ, x, c), and the five components that make credit assignment possible
2The objective J(H) and why it cannot be differentiated — so a coding agent replaces the gradient
3The inner loop: designer, critic, blocking checks, K = 12 attempts, fallback
4The outer loop: rollout → evaluate → propose → accept, and the one-component-per-iteration rule
5The acceptance gate, worked by hand, and the overfitting it prevents
6Two deliberately separate evaluators; the seven-dimension rubric; ceilings and gates worked by hand
7DesignHarness as it actually ended up: four stages, real tensor-free data flow, why editable HTML
8Every table read honestly, including two places the headline is generous
9Bradley–Terry from zero; what 933 human judgments do and do not establish
10What transfers to your own agent, and where it connects to the rest of this site
An agent generates a poster, its critic finds a clipped table, the agent fixes it, and the poster ships. On the next paper the same clipping happens again. What has and has not been learned?

Chapter 1: What Is a Harness, Exactly?

"Harness" is a word people use loosely to mean "the stuff around the model." The paper makes it precise, and the precision is what buys everything later. Here is the definition, Equation 1:

y ∼ H(πθ, x, c)

Read it left to right. πθ is an LLM or MLLM with frozen parameters θ. x is the multimodal input — here, an academic paper PDF plus whatever source assets came with it. c is the context: the target medium and the user's constraints ("an A0 conference poster, portrait, our lab's colours"). H is the harness: everything that decides how πθ gets called, with what, in what order, checked by what, and when to stop. y is the artifact.

The tilde matters. y is sampled, not computed. Two runs of the same harness on the same paper with the same model give two different posters, because the model is stochastic and because the loop's decisions depend on what the model said. Hold on to that: it is why Chapter 2's objective is an expectation and why Chapter 8's ten-paper ablations deserve suspicion.

The trajectory is a first-class object

Alongside y, the harness emits an execution trajectory τ, which the paper defines as the record of "the sequence of intermediate actions, states, and revisions leading to the final output."

This is not logging for the sake of logging. In ordinary supervised learning the training signal is (input, label). In meta-harness optimization the training signal is (trajectory, score) — and the trajectory is where the diagnosis lives. A score of 61 tells you the poster was mediocre. The trajectory tells you that attempts 1 through 4 all failed the same overlap check on the same lane, that the designer responded each time by shrinking the font, and that the font is now 7 pt. One of those is actionable.

The trajectory is to a harness what the gradient is to a network. A gradient tells you which direction each parameter should move. A trajectory tells you which part of the system produced the failure. Neither is the update itself — both are the evidence an update is computed from. This analogy is worth carrying: it will explain the structure of Chapter 2 almost by itself.

Equation 1 as a type signature

If the mathematical notation feels slippery, rewrite it as a function signature and it stops being slippery immediately:

the harness, as a typedef harness(
    model:   Model,           # π_θ — frozen weights, called many times
    source:  MultimodalInput, # x — the paper PDF plus its assets
    context: DesignContext,   # c — target medium, size, constraints
) -> tuple[Artifact, Trajectory]:
    # returns the deliverable AND the record of how it was made
    ...

Three observations fall straight out of the signature.

The model is an argument, not a global. That is why the Model Track in Chapter 8 is even possible: swap the argument, keep the function, measure the difference. A harness that hardcoded its model could not be tested that way, and the paper could not have reported six models under one identical harness.

The trajectory is a return value, not a log file. Logs are written for humans and thrown away. This return value is consumed by an optimizer, which changes what belongs in it: not INFO: rendering attempt 3 but a structured record of actions, states, and revisions that a subagent can reason over and, crucially, count across runs.

The return is a distribution, not a value. Two calls with identical arguments give different artifacts. Hold on to that, because every number in Chapter 8's tables is exactly one draw.

What is actually inside a trajectory

The paper defines τ as "the sequence of intermediate actions, states, and revisions leading to the final output" and leaves the schema open. The reported numbers tell us the scale, and the scale tells us what the schema has to support.

ElementRoughly how many per runWhy the optimizer needs it
Tool calls, with arguments and results253Reveals wasted work: the same read repeated, a tool called with bad arguments, a capability that simply does not exist
Editing turns (candidate artifacts)11Reveals whether edits were local or wholesale, and whether a fix broke something that was already right
Validator verdicts per attemptup to 12 × (blocking + non-blocking)The single richest signal — a check that fails attempt after attempt names the recurrent failure
Critic VLM feedbackonce per failing attemptNames perceptual failures the deterministic checks cannot express
Termination reason1Clean pass at attempt k, or budget exhausted into fallback. The difference is a pure Orchestration signal
Design your trajectory for the reader you actually have. The consumer of τ is a coding agent with a context limit, reading a batch of ten of these at once. That rules out raw stdout. It argues for structured per-attempt records with stable keys — check name, verdict, offending element, delta from the previous attempt — because those are what a subagent can count across ten runs to establish recurrence. If your traces are prose, your optimizer's first job is parsing, and it will do that job badly.

The five components — and why five, not one

The paper decomposes H into exactly five functional components. The stated reason is worth quoting because it is an engineering justification, not a taxonomy for its own sake: the decomposition exists "to enable systematic meta-harness optimization and facilitate credit assignment."

ComponentWhat lives in it (paper's wording)Concrete example in a poster agent
Context and Memory"source management, prompts, skills, reusable assets and persistent state"How the PDF is parsed into a content brief; the system prompt; a cached library of layout skills
Tools and Specifications"tools and editable artifact specifications for layout, typography, and provenance"The HTML/CSS schema the poster must conform to; the figure-extraction tool; the provenance annotation format
Execution Runtime"the workspace and runtime for authoring, rendering, validating, and exporting artifacts"The sandbox, the headless browser that renders HTML to PNG, the PPTX/MP4 exporters
Orchestration"task routing, attempt budgets, loop control, candidate selection, fallback, and finalization"K = 12 max attempts; which candidate to ship if none passes; when to stop revising
Evaluation and Feedback"rule-based validation, model-based critique, and localized feedback for revision"The deterministic overlap/clipping checker; the VLM critic that looks at the render; how their outputs are merged into one repair message

Notice how differently these five fail, and how differently you would fix each. A prompt problem is a Context and Memory problem. A "the renderer silently drops web fonts" problem is an Execution Runtime problem. A "the agent gave up after two tries" problem is Orchestration. If you lump all five into "the agent," every failure looks the same and every fix is a guess.

The decomposition is deliberately abstract. The paper is explicit: "This decomposition specifies only the high-level abstraction of the design harness. The concrete implementation of each component is instantiated and iteratively improved by the meta-harness." Five slots are declared; what goes in them is discovered. That is the difference between a framework and a system.

The rule that makes credit assignment work

Here is the constraint that turns the five-way split from documentation into machinery. From Section 3.2 of the paper:

"Each outer-loop iteration is restricted to exactly one of the five harness components… An update may span multiple files within the selected component, but it cannot modify another component in the same iteration."

And the reason, in the paper's own words: "This restriction keeps credit assignment interpretable, as each gain or regression is attributable to a single coherent intervention rather than to several simultaneous changes."

This is a controlled experiment discipline imported into an optimizer. If iteration 17 changes the validator and the retry budget and the prompt, and the score goes up 4 points, you have learned that some combination of three things helped — which is very nearly nothing. If iteration 17 changes only the validator, the same 4 points are attributable, recordable, and reusable as evidence in iteration 18.

Worked example: attributing a gain, with and without the rule

Suppose you are optimizing by hand and you have five training papers. The current harness Ht scores them:

st = [ 58 , 71 , 44 , 63 , 55 ]  →  mean = (58+71+44+63+55) / 5 = 291 / 5 = 58.2

You make a bundled change: a new overlap checker (Evaluation and Feedback), a raised attempt budget from 6 to 12 (Orchestration), and a stricter typography spec (Tools and Specifications). New scores:

s't+1 = [ 66 , 72 , 61 , 64 , 57 ]  →  mean = (66+72+61+64+57) / 5 = 320 / 5 = 64.0

A gain of 64.0 − 58.2 = +5.8. Excellent. Now answer the only question that matters for the next iteration: which of the three changes should you build on, and which should you revert?

You cannot say. The observation is one number and the hypothesis space has three dimensions. Worse, the three could be interfering: perhaps the checker is worth +9, the typography spec is worth −3, and the budget is worth −0.2, and you are about to spend the next ten iterations elaborating a typography spec that is actively hurting you.

Under the one-component rule the same total change takes three iterations, each with a clean read:

IterationComponent touchedTrain meanΔWhat you learn
t— (baseline)58.2Starting point
t+1Evaluation & Feedback (overlap checker)67.2+9.0Big, real, keep. Overlap was a dominant failure
t+2Orchestration (budget 6 → 12)67.0−0.2Inside the noise; costs 2× compute for nothing measurable. Reject
t+3Tools & Specs (typography spec)64.0−3.0Actively harmful. Reject — and record why, so the optimizer does not retry it

Same final harness content on the table, completely different knowledge. The bundled version ends with "+5.8, unclear why." The unbundled version ends with "the overlap checker is worth +9, and two plausible-sounding ideas were tested and refuted." The second is what you can build a hundred more iterations on.

This is also why the acceptance gate can be simple. Because each proposal is one coherent intervention, a single accept/reject decision per iteration is a meaningful decision. If proposals were bundles, accept/reject would throw away good changes bundled with bad ones, and the optimizer would have to do combinatorial search inside each proposal. One component per iteration turns a search problem into a sequence of yes/no questions.

Play with attribution

Failure mode → component → permitted edit

Pick a failure the optimizer might see in a batch of trajectories. The sim shows which of the five components owns it, what a bounded update to that component looks like, and — the important part — which four components are locked for that iteration. Watch the "attributable?" flag when you turn the one-component rule off.

With the rule on, every iteration produces one arrow you can trust. With it off, the optimizer moves faster and learns less — which, over 123 iterations, is the difference between accumulating design priors and accumulating changes.

Why θ stays frozen — three reasons, one of them proved by the paper

Freezing the model can look like a limitation the authors accepted. It is a choice, and it buys three specific things.

Reason one: cost. Fine-tuning a frontier MLLM on long-horizon design trajectories would need gradients through a model you probably cannot train, on data you would have to construct, at a price that dwarfs the paper's entire budget. The whole campaign — 7 days, ~123 iterations — costs less than one serious post-training run.

Reason two: attribution. If the weights moved and the harness changed, no measurement separates them. Freezing θ makes every reported delta unambiguously a harness delta. Same instinct as the one-component rule, applied one level up.

Reason three: portability — and this one is measured. A harness that never touches weights can be attached to a model that did not exist when the harness was built. That sounds like a pleasant property until you see it tested. Table 4 attaches the same DesignHarness to seven different model and code-agent configurations, and every single one improves, from +5.01 to +19.56 points. Nothing was tuned per model.

That result is the strongest evidence for the whole framing. If the harness had encoded model-specific tricks — prompt phrasings that happen to land on Claude 4.8, workarounds for one model's formatting quirks — it would help that model and do nothing, or harm, elsewhere. Instead it transfers to seven configurations spanning frontier and mid-tier models from six different labs. What it learned is a property of the task: posters need provenance, layouts need checking, loops need budgets and fallbacks. Task structure transfers. Model quirks do not.

A worked walk of the five components on one real run

Abstractions stay slippery until they are annotated onto something concrete. Here is the poster run from Chapter 0, moment by moment, with the owning component named.

What happensComponent that owns itWhat a bounded update here would look like
The PDF is parsed; section outline, key claims, and figures are extracted with their source locationsContext & MemoryAlso record table captions, so a numeric claim traces to a table cell and not merely to a page
The content brief and artifact plan are written once and reused across all twelve attemptsContext & MemoryCache the brief keyed by document hash so a re-run never re-ingests
The designer emits HTML conforming to a poster specification, with provenance attributes on every figureTools & SpecificationsPut a minimum font size in the spec so the validator can check legibility deterministically
A headless browser renders the HTML to PNG at poster scaleExecution RuntimeRender at two zoom levels so poster-scale legibility and fine detail can both be audited
The attempt counter is compared against K = 12; a candidate is selected; the run terminatesOrchestrationOn budget exhaustion, promote the best retained candidate rather than the last one
Deterministic checks run; the VLM critic runs only on failure; both are merged into one repair messageEvaluation & FeedbackInclude the pixel coordinates of the offending region so the next edit can stay local

Read the right-hand column and you can feel what an outer-loop iteration actually is. Every entry is small, specific, testable, and confined to one component. Not one of them is "make the posters better."

The failure mode this decomposition is designed to prevent

Here is what happens without it, and it is worth spelling out because it is the default outcome of letting an agent improve itself.

An agent notices its posters overflow. It appends to the system prompt: "Be careful about text overflow." Scores nudge up. Next iteration it notices figures are sometimes low quality, and appends: "Use high-resolution figures." Then: "Do not invent numbers." Then: "Balance the columns." Twenty iterations later the system prompt is 3,000 words of accumulated superstition, no line of which has ever been individually tested, several of which contradict each other, and none of which can be removed — because nobody knows which ones are load-bearing.

Two properties turn that spiral into an engineering process. First, the five-way decomposition forces the question "which component owns this?", and "be careful about overflow" has an embarrassing answer: it belongs in Evaluation and Feedback as a check, not in Context and Memory as a plea. A deterministic check is testable, removable, and cannot be ignored by a distracted model. Second, the acceptance gate makes every addition earn its place against held-out evidence, so the prompt cannot silently accumulate untested lines. The decomposition asks the right question; the gate enforces the right answer.

A harness is code, and that is the point

One last structural observation before the maths. Because the harness is an executable system — files, prompts, tools, a runtime — the thing that edits it can be a coding agent. Not a gradient, not an evolutionary operator over a hand-designed genome: a program-editing agent that reads traces and writes a diff.

The paper places this in a lineage. "A Self-Improving Coding Agent" (Robeyns et al., 2025) and MOSS (Cai et al., 2026) "update agent source from execution evidence"; Meta-Harness (Lee et al., 2026b), HarnessX (Chen et al., 2026), Self-Harness, and Agentic Harness Engineering (Lin et al., 2026) study "searchable harness programs, composable primitives, bounded updates, and outcome attribution." AutoDesign's contribution is not the idea that harnesses can be optimized; it is a specific, evaluated instantiation for design, with a gate and a benchmark attached.

Why does the paper forbid an outer-loop iteration from modifying more than one of the five harness components?

Chapter 2: The Meta Objective

We have a harness H. We want a better one. To say "better" without hand-waving we need a number attached to a harness, and that is what this chapter builds — from an expectation, through the reason it cannot be differentiated, to the strange substitute the paper uses instead of a gradient.

Scoring a harness, not an artifact

Start from the thing you can actually measure. Given one poster y made from one paper x under one context c, an evaluator returns a number. The paper calls it Rmeta(y, x, c) — note that it takes all three arguments, because "is this poster good?" is unanswerable without the source it came from and the brief it was made for. A gorgeous poster about the wrong paper scores zero.

Now lift from artifacts to harnesses. A harness is not one poster; it is a machine that makes posters. Its quality is the quality of the posters it makes on average, over the tasks you care about. That is Equation 2:

J(H) = E(x,c) ∼ ptask,   y ∼ H(πθ, x, c) [ Rmeta(y, x, c) ]

Two sources of randomness sit under that expectation, and separating them is the whole art of evaluating agents:

RandomnessWhere it comes fromHow you shrink its effect
Task sampling, (x,c) ∼ ptaskWhich papers you happened to evaluate on. A harness tuned on five ML papers may collapse on a climate paper with twelve tablesMore papers, and papers spanning disciplines — which is exactly why PosterBench spans five fields
Rollout sampling, y ∼ H(…)The model is stochastic; the loop's branching depends on model outputs. The same harness on the same paper twice gives two postersRepeat runs per task and average. This is the axis the paper reports least about — hold that thought for Chapter 8

And the objective, Equation 3, is exactly what you would write:

H = arg maxH   J(H)

with the standing constraint that θ is frozen. The paper states it plainly: "the parameters θ of the underlying model πθ in the harness remain fixed. The optimization therefore acts on the system surrounding the model rather than on the model itself."

Compare the shapes and the difference jumps out. In supervised learning you optimize θRd — a continuous vector, differentiable, billions of coordinates. In RLHF you still optimize θ, just with a different loss. Here you optimize Hthe space of programs — discrete, unbounded, non-differentiable, and with no metric on it. There is no "small step in the direction of H." There is only "a different program."

Why there is no gradient, and what stands in for one

Walk through the three things you would need for gradient descent and watch each one fail.

You would need J to be differentiable in H. It is not, and not in a fixable way. H is source code. The derivative of "poster quality" with respect to "the wording of a validator's error message" is not a small quantity — it is a category error. Changing one line of the harness can change the entire control flow of every subsequent rollout.

You would need a notion of a small step. Programs have no neighbourhood structure. The edit distance between two files is not a meaningful distance between two harnesses: a one-character change (> to >=) can flip the accept condition for every candidate, while a three-hundred-line refactor can be behaviourally identical.

You would need J to be cheap to evaluate. It is spectacularly not. One evaluation of J means running the whole harness on every training task — each of which is a long-horizon agentic run. The paper reports one such run costing 253 tool calls, 11 editing turns, 40 minutes, and under $3. Multiply by a training set, then by a development set, then by 123 iterations. A single "function evaluation" here is minutes-to-hours and dollars, where a neural-network gradient step is milliseconds and fractions of a cent.

So what replaces the gradient? The paper's answer is Equation 5, which we will meet properly in Chapter 4, but the shape is worth seeing now:

H′t+1 = P( Ht , τt , st , L )

P is a coding agent. It takes the current harness, the batch of trajectories, the batch of scores, and a persistent optimization record L, and it emits a candidate harness. It is a proposal operator, not a descent direction. The analogy is loose but useful:

Gradient descent on θMeta-harness optimization on H
Forward pass on a batchRollout: run Ht on all training tasks
Loss value per exampleScore sit = Rmeta(yit, xi, ci) per task
Backward pass → ∇θLCoding agent reads τt, dispatches subagents, writes a failure analysis
θ ← θ − η∇L, always appliedCandidate H′ proposed, then gated — may be rejected entirely
Optimizer state (momentum, Adam moments)Optimization record L: past harnesses, plans, diffs, and accept/reject decisions
Millions of steps, milliseconds each~123 iterations over 7 days, minutes-to-hours each
The step count is the real constraint. A network takes 105–106 gradient steps. AutoDesign took on the order of 102 iterations. When you have a hundred steps, every step must be informative — which is precisely why the one-component rule and the acceptance gate exist. They are not safety features bolted on; they are what makes a hundred-step budget usable at all.

Worked example: how noisy is one estimate of J?

This is the calculation nobody does and everybody should. J(H) is an expectation; what you measure is a sample mean over Ntrain tasks. So let us ask how precisely you can know it.

Take the paper's own dispersion as a guide. On PosterBench-mini, across the twelve systems in Table 2, scores run from 34.73 to 81.46 — but that is between systems. Within a single system across papers, per-paper scores also vary a lot, because papers differ wildly in figure count, table density, and length. Suppose a per-paper standard deviation of σ = 12 points, which is conservative for a benchmark whose system-level spread is 47 points.

The standard error of a mean over N tasks is σ/√N. With N = 10:

SE = 12 / √10 = 12 / 3.1623 = 3.79 points

Now suppose you propose a harness edit and the training mean moves from 62.0 to 64.5. That is +2.5 points. Is it real? The standard error of the difference of two independent means of the same size is √2 × 3.79 = 5.37 — more than twice the observed effect.

observed Δ = +2.5  vs  SE(Δ) ≈ 5.37  →  z ≈ 0.47  →  indistinguishable from noise

Two caveats make this less bleak than it looks, and both are real. First, the two means are paired — the same ten papers before and after — so the between-paper variance largely cancels and the relevant standard deviation is that of the per-paper differences, which is much smaller than 12. Second, a harness edit that fixes a systematic failure moves nearly every paper in the same direction, which is exactly the regime where paired comparison is powerful. If all ten papers improve, a sign test alone gives p = 2−10 ≈ 0.001, no variance estimate required.

This is exactly why the gate has the asymmetric form it has. Chapter 5's condition demands a strict improvement on train and merely no decline on dev. Under noise that asymmetry is doing statistical work: it refuses to spend an acceptance on a change that cannot even move the paired training mean upward, while tolerating dev-side ties that are within noise. The paper does not present it as a statistical test — but read as one, it is a conservative, low-power, low-false-accept filter. Given ~123 chances and no correction for multiple comparisons, conservative is the right choice.

None of the above is a number the paper reports; it is standard sampling statistics applied to the paper's stated setup, and we flag it as our own analysis. The paper reports no per-iteration confidence intervals, no repeated rollouts per task, and no variance estimates for the ablation tables. Chapter 8 returns to what that costs.

Why the paired sign test is the right instrument here

We estimated the standard error of a mean and found it uncomfortably large. But the gate never compares two independent means — it compares the same tasks before and after a change. That pairing deserves to be formalised, because it turns a hopeless measurement into a usable one.

Let di = s'i − si be the per-task change on task i. The between-task variance — the fact that paper 3 is intrinsically harder than paper 7 — cancels completely in di, because both terms are on the same paper. What survives is only the variance of the effect plus rollout noise.

Now the cheapest possible test. Under the null hypothesis that the edit does nothing, each di is positive with probability 1/2, independently. If all ten training tasks improve:

Pr( all 10 positive | no real effect ) = (1/2)10 = 1 / 1024 = 0.00098

If nine of ten improve, the one-sided probability of nine or more is:

[ C(10,9) + C(10,10) ] / 210 = (10 + 1) / 1024 = 11 / 1024 = 0.0107

And if only six of ten improve — which can easily coexist with a healthy-looking mean gain, if one task jumped a long way:

[ C(10,6) + C(10,7) + C(10,8) + C(10,9) + C(10,10) ] / 210
= (210 + 120 + 45 + 10 + 1) / 1024 = 386 / 1024 = 0.377

Thirty-eight percent — no evidence at all. And yet the mean might have moved several points. The lesson is direct and portable:

Count how many tasks improved, not only how far the mean moved. A systematic harness fix — a new blocking check, a provenance requirement — helps nearly every task a little, and shows up as 9 or 10 of 10 positive. A memorised template helps two tasks enormously and hurts the rest, and shows up as a big mean gain with a bad sign count. The paper's gate compares means and does not do this count. Adding a sign requirement is one of the cheapest strengthenings available to anyone reimplementing this, and it costs nothing extra to compute, because you already have the per-task scores in hand.

Three objectives that look reasonable and are not

J(H) is an expectation — a mean over tasks. That is a choice, and other choices produce recognisably broken optimizers. Since you will have to pick one for your own system, it is worth seeing what each one optimizes toward.

ObjectiveWhat the optimizer learns to doFailure signature
Mean (the paper's choice)Improve the typical task; tolerate varianceCan hide a catastrophe on one task behind gains on nine. Mitigated here by the ceilings, which punish catastrophes at the record level before averaging
MaxMake the single best artifact as good as possibleDegenerate immediately: the harness specialises on one paper and abandons the rest
Min (worst case)Lift the floorExtremely noisy — the objective is set by one task, so a single unlucky rollout reverses the ranking of two harnesses
Pass rate above a thresholdPush tasks across a lineAll effort goes to tasks near the threshold; tasks far below or far above become invisible. The "teaching to the grade boundary" pathology

Notice how the ceiling mechanism from Chapter 6 is doing quiet work in the first row. Averaging alone would let a poster with a broken render be offset by a beautiful one. Capping each record before averaging means a catastrophe cannot be averaged away — it imports a slice of worst-case thinking into a mean-based objective without inheriting min's variance. That is genuinely good metric design, and it is easy to miss because it is written as a min inside an equation.

What one evaluation of J costs, end to end

One more piece of arithmetic, because it silently explains every structural choice in Chapters 4 and 5.

One task ≈ 253 tool calls, 11 editing turns, ~40 minutes, under $3. So one evaluation of J over a ten-task set is:

10 × 253 = 2,530 tool calls  ·  10 × 40 = 400 minutes serial  ·  up to $30

Each outer-loop iteration needs the candidate measured on train and on dev — two such evaluations. At roughly 123 iterations:

123 × 2 × 10 = 2,460 complete agentic runs
2,460 × 40 min = 98,400 minutes = 68 days of serial wall clock

The paper reports the campaign taking 7 days. So the runs were roughly ten-way parallel — exactly what you would expect, since tasks within a batch are independent by construction. This is not a footnote: the task-independence of the rollout stage is what makes the method feasible at all. If evaluating J required tasks in sequence, the same campaign would take over two months.

And now the design choices explain themselves. Why one component per iteration? Because you only get about 123 of them and each has to teach you something. Why a single incumbent and no tree search? Because branching multiplies 2,460 runs by the branching factor. Why a hard accept/reject rather than a soft blend of two harnesses? Because a blended harness is a third harness, and you cannot afford to measure it. Every one of these reads as principle and is also, underneath, arithmetic.

What "human design priors" means in this objective

One phrase in the abstract deserves unpacking here rather than later: the framework "aligns with human design priors." Concretely that alignment enters through Rmeta, and it enters before optimization starts.

The paper's procedure: an evaluator coding agent is given "reference artifacts annotated by humans along seven quality dimensions" — Faithfulness, Coverage, Density, Visual Evidence, Layout, Readability, Aesthetics. From those examples the agent implements Rmeta, "combining rule-based checks for directly measurable properties with VLM-based judgments for perceptual properties such as aesthetics." And then, critically: "Once constructed, Rmeta remains fixed during autonomous optimization."

So human preference is compiled once into a program, and the program is then frozen while the harness is optimized against it. That freeze is the anti-reward-hacking measure at the objective level, in the same way the dev gate is the anti-overfitting measure at the update level.

An honest limitation the paper states itself. If the evaluator has a systematic blind spot, the optimizer cannot find it: "Rmeta remains fixed because the meta-harness receives no external signal with which to identify or correct evaluator bias." Fixing evaluator bias "requires explicit human input" — a human notices a visual pathology the score does not punish, and gives guidance to the coding agent that implements the evaluator. There is no autonomous route out of a bad objective. That is a property of the design, honestly declared, not a bug.

Human-in-the-loop: a second argument to P

The paper also allows directional guidance in natural language. When a human supplies gt, the proposal becomes:

H′t+1 = P( Ht , τt , st , L , gt )

The stated motivation is not "humans are better"; it is a search-dynamics problem: "the coding agent acting as P may converge prematurely to a locally satisfactory harness configuration, at which point outer-loop optimization stagnates. Guidance can inject task-specific heuristics or redirect the search toward alternative improvements."

Figure 1(a) of the paper shows exactly this shape on one representative paper: autonomous optimization improves the initial harness, then plateaus, and human guidance redirects the search and yields a further gain. If you have ever watched a local search flatten out and needed to kick it, that curve will be familiar. The paper is careful about what the human does and does not do: "the human provides observations or high-level directions rather than directly editing the harness or evaluator implementation."

Two channels, one asymmetry. Guidance to the optimizer (channel one) is optional — without it the loop runs autonomously per Equation 5. Guidance to the evaluator (channel two) is the only way evaluator bias ever gets corrected. Optional versus necessary is the difference between a speedup and a dependency.
Why can the meta-harness objective J(H) not be optimized by gradient descent, and what plays the role of the gradient instead?

Chapter 3: The Inner Loop

The inner loop is what makes one poster. It runs inside a fixed harness, it does not change the harness, and it is the thing whose trajectory the outer loop will later read like a doctor reads a chart. Get it exact and Chapter 4 becomes easy.

Two abstract modules, deliberately underspecified

AutoDesign starts from what the paper calls "a minimal inner-loop scaffold consisting of two abstract modules": a designer Mdesign and a critic Mcritic. That is the entire initial harness. Equation 4:

yk = Mdesign( yk−1 , fk−1 ; x , c )
fk = Mcritic( yk ; x , c )

with the initialisation that y0 and f0 are empty, "so that the first step produces an initial draft from (x, c) alone."

Read the arguments carefully, because they encode a real design decision. The designer sees the previous artifact and the previous feedback, plus the source and context. The critic sees only the current artifact, plus source and context — not the previous feedback, not its own history. The critic is memoryless with respect to the loop; it is a function from a candidate to a diagnosis. That keeps it from anchoring on complaints it made two attempts ago about a region that no longer exists.

The initial harness is almost nothing, and that is the experiment. The paper is explicit that this formulation "specifies only the roles of the two modules and the information flow between them. It defines the basic structure of the initial design harness while leaving its concrete realization open." Everything else — ingestion, provenance, validators, fallbacks, export — is discovered by the outer loop, not designed by the authors. That is the claim being tested: can a meta-optimizer grow a real system out of two boxes and an arrow?

Unrolling the recursion

Substituting Equation 4 into itself makes the dependency chain visible. Writing it out for four steps:

y1 = Mdesign( ∅ , ∅ ; x, c )  →  f1 = Mcritic( y1 ; x, c )
y2 = Mdesign( y1 , f1 ; x, c )  →  f2 = Mcritic( y2 ; x, c )
y3 = Mdesign( y2 , f2 ; x, c )  →  f3 = Mcritic( y3 ; x, c )
y4 = Mdesign( y3 , f3 ; x, c )  →  …

This is a Markov chain over artifacts: yk depends on the past only through (yk−1, fk−1). It has a well-known failure mode — oscillation. If fixing the overlap requires shrinking a lane, and shrinking the lane causes a density violation, and fixing the density violation requires growing the lane, the loop can ping-pong until the budget runs out. Hold that thought: the finalized harness's answer to it is the blocking/non-blocking split we are about to meet.

The critic is two things, not one

Here is where the optimized harness diverges sharply from the textbook self-refine picture. In the final DesignHarness, "rule-based validation and visual critique jointly instantiate Mcritic." Two feedback sources with completely different characters:

Rule-based validatorCritic VLM
InputThe candidate artifact (HTML + rendered geometry)The rendered medium-specific preview — PNG, PPTX, or MP4
NatureDeterministic. Same input, same verdict, every timeStochastic, perceptual, and expensive
What it catches"unsafe or missing assets, broken provenance links between incorporated materials and their sources, severe overflow or overlap, and violations of the required typographic and layout constraints""compliance with the design context, layout, readability, and aesthetics" — the rendered properties
AuthorityBlocking. Its checks decide whether refinement may terminateAdvisory. It shapes the repair but does not gate the exit
When it runsEvery attemptOnly when a candidate fails the blocking checks

That last row is a piece of engineering worth pausing on. The paper's control flow: "If the candidate passes all of them, the inner loop terminates and the candidate proceeds directly to finalization. Otherwise, the validator returns localized diagnostics… When a candidate fails the blocking checks, it is also rendered into a medium-specific preview and inspected by a critic VLM."

The cheap deterministic check runs first and can end the loop by itself. A passing candidate never pays for a VLM critique. Since the VLM call is the expensive, slow, stochastic part, this ordering is a straight cost reduction with no quality cost — and it also removes a failure mode, because a stochastic critic that can always find something to complain about would otherwise keep a perfectly good poster in the loop forever. Determinism owns the exit condition; perception owns the repair content.

Blocking versus non-blocking checks

The validator emits two kinds of signal, and the distinction is the loop's termination logic.

Blocking checks are, in the paper's phrasing, "deterministic blocking checks… these checks determine whether the candidate satisfies the requirements for terminating refinement." Unsafe or missing assets. Broken provenance links. Severe overflow or overlap. Typographic and layout constraint violations. All-or-nothing: pass everything, or keep going.

Non-blocking checks come back alongside the blocking diagnostics and cover "properties such as content coverage, information density, and numerical consistency with the source." These inform the repair without preventing exit.

Why split them this way? Because the two categories differ in whether "more is always better." Overlap is binary-ish: text either collides or it does not, and you can always satisfy it. Information density is a trade-off against readability — a poster can be too dense or too sparse, and any threshold you pick is a judgement call. Making a judgement call blocking would produce exactly the oscillation described above. Making a hard geometric fact non-blocking would let clipped posters ship.

The general rule, worth stealing. Gate on properties that are objectively satisfiable and objectively checkable. Advise on properties that are trade-offs. If you gate on a trade-off, your loop will thrash; if you merely advise on a hard defect, your loop will ship it.

The attempt budget and what happens when it runs out

"The final implementation permits at most K = 12 refinement attempts."

Twelve is not a magic number; it is a number the outer loop chose, by editing the Orchestration component. Somewhere in those 123 iterations, a proposal changed the budget and the gate admitted it. That is what it looks like when a hyperparameter stops being a hyperparameter and becomes an optimization variable.

Two exits from the loop:

Exit A — clean pass
"As soon as a candidate yk passes all blocking checks, the attempt loop terminates and the candidate is passed to the finalization stage."
↓ or, if k reaches 12 with nothing passing…
Exit B — fallback
"the harness uses the retained attempt history and applies a sequence of fallback mechanisms to identify a deliverable candidate while retaining essential safety and integrity constraints."
↓ both paths converge
Finalization
"final rendering adjustments, mathematical typesetting, and inlining of referenced assets, to produce a self-contained output."

Two details in Exit B carry real weight. "The retained attempt history" means every attempt is kept, not just the last one — so the fallback can promote attempt 7 over attempt 12 if 7 was better. A loop that only kept the current candidate would be forced to ship whatever the last edit produced, which after eleven failed repairs is often the worst artifact of the run. And "retaining essential safety and integrity constraints" means the fallback relaxes quality requirements, not safety ones: it will ship a slightly ugly poster, never one with a broken provenance link.

Worked example: the paper's own five-attempt trace

Section 5.4 traces one real poster run and names the events. These are the paper's numbers, on its own internal 0–1 scale for that figure:

AttemptScoreEvent (paper's wording)Δ from previous reported
A10.36"the critic first identifies a clipped analysis lane"
A30.42"the reallocation of the row removes the constraint"+0.06
A50.62"the refit of the header…"+0.20
A60.62"…and the scaling of evidence produce a more balanced hierarchy"0.00
A90.78"preserves the repaired composition and is accepted"+0.16

Total movement: 0.78 − 0.36 = +0.42 over nine attempts, inside a budget of twelve. Average gain per reported step, over the four reported deltas: (0.06 + 0.20 + 0.00 + 0.16) / 4 = 0.42 / 4 = +0.105.

Now read the shape rather than the total, because the shape is the lesson. The first repair — unclipping the analysis lane — buys almost nothing (+0.06). It removes a defect without improving the design. The big jump comes at A5, when the header is refitted and the composition rebalances. Fixing a violation and improving a poster are different activities, and the trace shows the loop doing the first three times before the second pays off.

The A5 → A6 step is the other instructive one: a full attempt, a real edit ("the scaling of evidence"), and zero score movement. Under an attempt budget of 12, an attempt that buys nothing is 8.3% of the budget spent. This is the cost the outer loop is trying to drive down — not "make posters better" so much as "stop wasting attempts."

And the paper names the intended behaviour explicitly: "edits stay localized to the failing region while valid layout and source-derived content are retained across revisions." That is the whole reason the artifact is editable HTML rather than a regenerated image, which is Chapter 7's subject.

Walk the loop

Inner-loop refinement trace

Step through attempts of a paper-to-poster run. Solid markers are the paper's four reported checkpoints (A1, A3, A5/A6, A9); hollow markers are attempts the paper does not report and are drawn only to show the budget. The right panel shows the blocking-check ledger and whether the VLM critic is invoked at all. Note when the loop is allowed to exit.

Attempt k 1

Switch to "no blocking checks" and watch the exit condition become the VLM's opinion — the loop keeps running past a perfectly deliverable candidate because a perceptual critic can always suggest one more thing. Switch to "no attempt history" and watch the fallback lose the ability to promote an earlier, better candidate.

One attempt, traced through every representation

Concept is cheap; realization is where understanding lives. So here is a single refinement step with the actual objects named — what exists, what type it has, who reads it, and what it costs.

StepObject and its formProduced by → consumed by
1Ingested context — content brief (claims + supporting evidence, each with a source reference) and a medium-specific artifact planIngestion → designer. Built once, reused on all twelve attempts
2fk−1 — the consolidated repair signal from the previous attempt: blocking violations with the offending elements, non-blocking observations, critic notesValidator + critic → designer
3yk−1 — the previous candidate, as editable HTML/CSS files on diskPrevious attempt → designer
4The edit — a localized change to the HTML/CSS, not a regenerationDesigner → workspace
5yk rendered — a PNG (or PPTX / MP4 for other media) at poster scaleRuntime renderer → validator and, on failure, the critic VLM
6Geometry and OCR extracted from that render — element boxes, overlaps, text extents, detected stringsRenderer → rule-based validator
7Verdicts — four blocking booleans plus non-blocking observationsValidator → loop control, and into fk
8fk — one merged repair signalValidator + critic → next attempt

Two things in that table are load-bearing and easy to miss.

Step 6 is where the discipline is. The validator does not reason about layout from HTML source. It reasons about a render. This distinction is the difference between "the CSS says max-height: 400px, so it should fit" and "the rendered box is 434 pixels tall and clips its last line." Only the second is a fact. Anyone who has debugged a webpage by reading its stylesheet knows exactly which of those two is worth having.

Step 1 happening once is a decision, not an optimization. It could plausibly re-run per attempt. It does not, and the consequence is semantic rather than economic: with one ingestion, the twelve attempts differ only in design, never in what the paper says. Re-ingesting would give you twelve slightly different readings of the same source, and a poster whose claims drift between revisions — a faithfulness failure produced by a caching decision.

The oscillation the blocking/non-blocking split prevents

Chapter 3 claimed that gating on a trade-off makes the loop thrash. Let us actually watch it thrash, because the mechanism is instructive.

Suppose Density were a blocking check requiring at least 70% information occupancy, and overlap were blocking too. Play the loop forward:

AttemptStateBlocking verdictRepair the designer makes
A1Analysis lane overflows its columnoverlap ✗Shrink the lane's font and trim two sentences
A2Overflow fixed; occupancy now 64%density ✗Add content back to fill the space
A3Occupancy 72%; the lane overflows againoverlap ✗Shrink the font and trim…
A4–A12alternatingBudget exhausted; fallback ships whichever candidate the history ranks best

Twelve attempts, roughly 276 tool calls, 40 minutes, and the loop never terminates cleanly — not because the model is weak, but because the exit condition is unsatisfiable. Two blocking constraints pull in opposite directions and the loop has no representation for "trade these off," only for "satisfy both."

Now the paper's actual arrangement. Overlap is blocking, because it is objectively satisfiable: some layout exists with no collisions. Density comes back as a non-blocking observation. So A2 exits cleanly at 64% occupancy, having shipped a slightly sparse but entirely legible poster, and the density observation flows into the trajectory where the outer loop can see it — and if 64% occupancy shows up across many runs, the outer loop can address it in the artifact specification, where a trade-off belongs.

The general principle, worth stealing verbatim. Gate on properties that are objectively satisfiable and objectively checkable. Advise on properties that are trade-offs. And note where the two kinds of signal are resolved: hard constraints inside the inner loop, soft trade-offs by the outer loop across many runs. Putting a trade-off in the inner loop makes it thrash; putting a hard defect in the outer loop lets broken artifacts ship for days.

Reading the reported trace as a diagnosis

Return to the paper's five reported checkpoints and ask what an outer-loop optimizer, handed ten traces of this shape, would conclude.

Observation in the traceWhat it suggestsComponent
A1 fails on a clipped analysis lane — and this is the first thing the critic reports on most runsThe first draft routinely overcommits content to a fixed-size region. A planning-stage problem, not a repair-stage oneContext & Memory (the artifact plan should budget space per claim)
A1 → A3 recovers only +0.06 for two whole attemptsRemoving a violation is not the same as improving a design. Two attempts of budget bought almost nothingOrchestration (is the budget being spent on the right kind of edit?)
A5 → A6 moves the score by exactly 0.00An entire attempt produced no measurable change. 8.3% of the budget, wastedEvaluation & Feedback (the repair signal did not localise the problem well enough to act on)
The run finishes at A9 of 12The budget was adequate here — but only just. Runs that hit 12 would say the oppositeOrchestration

None of these conclusions is available from the final score of 0.78. All of them are available from the trace. That is the entire argument for treating τ as a first-class return value rather than as logging, and it is why Chapter 4's optimizer reads trajectories before it reads scores.

The multimodal advantage, stated precisely

One sentence in the paper's ablation discussion explains a whole column of results, and it belongs here because it is about the inner loop's information flow:

"MLLMs have an additional repair signal unavailable to text-only LLMs: at each attempt, the rendered preview from the preceding attempt is supplied as visual context for the next repair. This lets the model inspect the artifact it is editing and localize layout, clipping, or visual-evidence failures that are not fully captured by textual diagnostics alone."

Unpack the data flow. Without vision, the designer's picture of its own output is: the HTML it wrote, plus a textual diagnostic like "element #analysis overflows its container by 34px." With vision, it additionally receives the actual pixels. The difference is not cosmetic. "Overflows by 34px" does not tell you whether the fix is a smaller font, a shorter sentence, a taller lane, or moving a figure — four repairs with very different consequences for the rest of the composition. A picture disambiguates in one glance what a diagnostic string cannot express at all.

Concept and realization. The artifact moves through the loop in three different representations, and each one exists for a different consumer. HTML/CSS — for the designer to edit locally. Rendered PNG — for the VLM critic and, on MLLM configurations, for the designer's next repair. Geometry and OCR extracted from the render — for the deterministic validator. One artifact, three views, three consumers. If you build such a loop and forget the third representation, your validator has to reason about layout from source code, which is the same mistake as reasoning about a webpage from its HTML instead of looking at it.
In the optimized DesignHarness, why is the critic VLM invoked only when a candidate fails the deterministic blocking checks?

Chapter 4: The Outer Loop

The inner loop makes a poster. The outer loop makes a better poster-maker. It runs four stages per iteration, and the paper names them: rollout, evaluation, update proposal, acceptance. This chapter walks the first three; the fourth is important enough to get its own chapter.

Stage 1 — Rollout

At outer iteration t, the current harness Ht runs on the whole training task set:

Dtrain = { (xi, ci) }i=1Ntrain

Each element is a source paper xi plus a context ci that "specifies the target medium and the corresponding design requirements." Each execution produces two things: an artifact yit and a trajectory τit. The collection is written τt = { τit }.

Both indices matter. The superscript i is the task; the subscript t is the outer iteration. τt is therefore an entire batch of complete agentic runs — not one trace, a table of them. That is the object the optimizer reads.

Cost check, since this is the expensive stage. If a single run is roughly the paper's reported long-horizon figure — 253 tool calls, 11 editing turns, 40 minutes — then one rollout batch over ten tasks is on the order of 2,530 tool calls and, if serialized, nearly seven hours. Run it for both train and dev, for both Ht and every candidate Ht+1, across 123 iterations, and the seven-day figure in the contributions list stops sounding leisurely and starts sounding tight. Parallelism across tasks is not an optimization here; it is a requirement.

Stage 2 — Evaluation

Every artifact is scored by the frozen optimization-time evaluator:

sit = Rmeta( yit , xi , ci )   →   batch st

The paper draws a hard line here that is easy to skim past and impossible to overstate: "This optimization-time evaluator is distinct from the frozen PosterBench protocol used for final system comparison." Two evaluators, two jobs. Rmeta is the training signal. PosterBench is the exam. Chapter 6 is entirely about why they must be different objects.

Stage 3 — Update proposal

Now Equation 5 in full:

H′t+1 = P( Ht , τt , st , L )

Four inputs. The current harness. The batch of trajectories. The batch of scores. And L, "an optimization record… serving as persistent context across outer-loop iterations." The prime on H′ is doing real work: it marks a proposal, not an update. Whether it becomes Ht+1 is the gate's decision.

P is instantiated as a coding agent that "sequentially assumes the roles of a planner and a code editor." The two roles are worth separating because they need different things.

RoleWhat it does (paper's description)Output
Planner"analyzes the current trajectories and scores together with the optimization history in L. It dispatches parallel subagents to inspect the trajectories and their scores, synthesizes their findings into structured evidence of recurrent failures, and formulates a harness update plan"A plan naming: the observed failure modes, the harness component to modify, and the intended changes
Code editor"implements these changes in the current design harness Ht"The candidate harness Ht+1 — actual edited files
Why parallel subagents, and not just a bigger context window. A batch of trajectories from long-horizon agentic runs is enormous — 253 tool calls per run, times ten runs, times full inputs and outputs. Nobody reads that in one prompt. The planner fans out: each subagent inspects one trajectory (or one slice) and reports a compressed finding; the planner synthesizes. This is map-reduce over evidence, and the reduce step is what turns "here are ten failures" into "here is one recurrent failure." The paper's contributions list gives the scale: 224 subagents invoked across the campaign.

The word "recurrent" is the whole filter

The planner synthesizes "structured evidence of recurrent failures." Not failures — recurrent failures. This single adjective is what keeps the optimizer from chasing noise, and it is worth making concrete.

Suppose your rollout batch of five papers produces these observations:

ObservationPapers affectedRecurrent?Optimizer action
Results table clipped at the bottom of its lane4 of 5YesStrong candidate: a systematic property of the harness
A figure caption references the wrong subfigure1 of 5NoIgnore. One paper had an unusual figure numbering; a fix would be an overfit to that paper
Aesthetics scored low5 of 5Yes, but unattributedRecurrent yet not actionable as stated — "make it prettier" names no component. Needs decomposition into something a validator or spec can express
Ran out of attempt budget3 of 5YesCandidate, in Orchestration — but is the budget too small, or are attempts being wasted? The trajectory, not the score, answers this

Row three is the interesting one. Recurrence is necessary but not sufficient: a finding also has to land in a component. "Aesthetics is low everywhere" is a symptom without an address. The planner's job is to turn it into one — for instance, "in 5 of 5 runs the palette is chosen ad hoc per section," which is a Tools and Specifications problem with an obvious bounded fix.

One iteration, end to end, with numbers

Abstract stages become concrete the moment you walk one. Here is outer-loop iteration t = 17, invented in its particulars but sized by the paper's reported figures.

Rollout. H17 runs on the ten training papers. Ten complete agentic runs, roughly 2,530 tool calls in total, about 40 minutes each in parallel. Out come ten posters and ten trajectories.

Evaluation. Rmeta scores each artifact:

s17 = [ 71, 64, 78, 59, 70, 66, 55, 73, 68, 61 ]
sum: 71+64=135; +78=213; +59=272; +70=342; +66=408; +55=463; +73=536; +68=604; +61=665
Jtrain(H17) = 665 / 10 = 66.5

Update proposal — the planner. The coding agent cannot read ten full traces in one context, so it fans out. Ten subagents, one per trajectory, each returning a compressed finding. Suppose they return:

FindingRuns affectedRecurrent?Names a component?
Figures rendered without their captions; the caption text sits in a separate element that got clipped7 / 10YesYes — the spec does not bind a figure to its caption as one unit
Attempt budget exhausted2 / 10MarginalOrchestration — but 2/10 is thin evidence
One paper's author list was mis-parsed1 / 10NoIngestion — but fixing it would overfit to that paper
Aesthetics scored below 610 / 10YesNo — a symptom without an address

The planner synthesizes: row one is the only finding that is both recurrent and addressable. It writes a plan naming the failure mode, the component (Tools and Specifications), and the intended change: make figure-plus-caption an atomic element in the artifact specification, so a layout engine cannot separate them and the validator can check the pairing.

Update proposal — the code editor. The same agent switches role and implements the change: edits to the specification files, plus whatever validator hook the spec implies. Multiple files, one component. Out comes H18.

Measurement. The candidate runs on train and on dev. Ten more runs each, ~5,060 more tool calls.

s18 = [ 76, 69, 79, 66, 72, 71, 63, 75, 70, 66 ]
sum: 76+69=145; +79=224; +66=290; +72=362; +71=433; +63=496; +75=571; +70=641; +66=707
Jtrain(H′18) = 707 / 10 = 70.7

Per-task differences: +5, +5, +1, +7, +2, +5, +8, +2, +2, +5. All ten positive — the sign-test signature of a systematic fix, exactly as Chapter 2 predicted, with a one-sided probability under the null of 1/1024.

Acceptance. Suppose Jdev moves 63.0 → 64.5. Then 70.7 > 66.5 and 64.5 ≥ 63.0: both conditions hold, and H18 is promoted to H18. The record gains a checkpoint, the plan, the diff, the scores, and the decision Accept. Iteration 18 begins with a harness that binds captions to figures — and with a written note that a two-of-ten budget-exhaustion signal is pending, awaiting more evidence.

Look at what the record now contains that the harness does not. The harness holds the fix. The record holds the fix plus the reasoning plus the two hypotheses that were seen and deliberately not acted on. Next iteration's planner reads both. That is why the paper calls L "persistent context" and not "a log" — it is the optimizer's working memory across a week.

The cost of an iteration, tabulated

StageRollout batchesRuns (10-task splits)Dominant cost
Baseline, once at the start2 (train, dev)20Agentic runs
Proposal (planner + code editor)00Reading traces; ~2 subagents per trajectory
Candidate on train110Agentic runs
Candidate on dev110Agentic runs
Acceptance decision00Two comparisons
Per iteration220

Two observations. First, the incumbent's numbers are never recomputed — lines 7–12 of Algorithm 1 carry forward whichever tuple survives, so a rejection costs exactly the same as an acceptance and no more. Second, the proposal stage is nearly free in rollout terms and expensive in reading terms, which is precisely why the 224 subagents exist: they parallelise the only stage that does not parallelise across tasks.

What the record buys you that a score history does not

The paper says L "supports comparison, reproducibility, and rollback across iterations." Take each one seriously.

Comparison. Because each iteration touched exactly one component, the record is effectively an experiment log: fifty-four accepted interventions, each with a component label and a measured delta. That is enough to answer "which component yielded the most?" — a question the paper does not report but which its own data structure makes answerable.

Reproducibility. A repository checkpoint per iteration means any intermediate harness can be rebuilt and re-run. Without that, "the harness improved over seven days" is an unfalsifiable claim about a system that no longer exists in any of its intermediate forms.

Rollback. This is the one that matters in practice. Suppose iteration 40 is accepted — it passed both gates — and only at iteration 55 does a human notice that posters have all started looking the same. Without checkpoints, unwinding means guessing which change did it and hand-reverting. With checkpoints, you bisect: check out iteration 40, 47, 51, and find the culprit in a handful of steps. The gate is a filter with a false-accept rate; checkpoints are what make its errors recoverable.

Rejections are the majority of the record, and the most under-appreciated part of it. Fifty-four accepted out of at least 123 iterations means at least 69 documented refutations. Each one says: this plausible-sounding change was implemented, measured on twenty runs, and did not survive. That is a expensive, hard-won corpus of negative results about one specific system — and it is exactly the corpus an optimizer with no memory would be doomed to regenerate, one wasted iteration at a time.

The optimization record L: what persists and what does not

For each completed iteration t, the paper says L stores: the harness Ht; the trajectories and scores; the selected harness component; the update plan and the corresponding code changes; and the acceptance decision — "with a repository checkpoint preserving the harness implementation at that iteration."

And one thing it pointedly does not store: "Trajectories and scores from the development set are not included in the record."

That omission is the entire integrity of Chapter 5. If dev trajectories entered L, then L is fed to P next iteration, and P would be optimizing against dev by proxy — slowly, indirectly, and undetectably. The barrier has to be enforced at the record, not just at the prompt, because L is persistent: a single leak contaminates every future iteration.

Rejected proposals stay in the record, and that is the point. The paper: "When a candidate is rejected, the record allows the next iteration to propose a different update while retaining the evidence of what has already been tried." A rejected update is a result. Without it, the optimizer re-proposes the same failed idea forever — the classic pathology of any search with amnesia. With it, the negative results accumulate into a map of what this harness does not respond to. Fifty-four accepted updates out of at least 123 iterations means the record holds at least 69 documented refutations.

No tree search

One sentence rules out a whole family of algorithms you might otherwise assume: "the outer loop maintains a single active harness at each iteration and does not perform tree search over harness variants."

So this is hill climbing with a strict acceptance test, not beam search, not a population, not MCTS over programs. One incumbent, one challenger, one comparison, repeat.

PropertySingle-incumbent hill climbing (AutoDesign)Tree/population search
State keptOne harness + the record LMany harness variants, each needing rollouts
Cost per iterationOne candidate × (train + dev) rolloutsMultiplied by branching factor
Escapes local optima?Not by itself — hence human guidance gt when it plateausYes, in principle, at proportionate cost
Reproducible / rollback-ableYes — repository checkpoints, a linear historyHarder; the lineage branches

Given that a single rollout batch costs hours and dollars, refusing to branch is not timidity, it is arithmetic. And the paper is honest about the consequence: it is exactly the premature-convergence risk that motivates the human-guidance channel from Chapter 2. Figure 1(a)'s plateau-then-jump is what a single-incumbent hill climber looks like when it runs out of moves.

Algorithm 1, line by line

The paper's Algorithm 1 fits in sixteen lines. Here it is with the reasoning attached to each one.

LineWhat happensWhy it is there
inFixed model πθ; initial harness H0; evaluator RmetaAll three are frozen inputs. The model never trains; the evaluator never adapts autonomously
inDtrain, Ddev, iteration count TTwo disjoint task sets. The split is the anti-overfitting apparatus
1Run H0 on Dtrain; collect τ0, s0Baseline evidence and baseline score in one pass
2Run H0 on Ddev; collect sdev0Scores only — no trajectories are collected from dev, so there is nothing to leak
4P inspects τt, st, L and proposes Ht+1Note the argument list: no dev anything
5Run Ht+1 on DtrainMeasure the candidate where the evidence came from
6Run Ht+1 on DdevMeasure the candidate where the evidence did not come from
7–9If the gate passes: dt ← Accept, and promote the candidate's harness, trajectories, and scoresThe tuple is promoted together, so the next iteration reasons about the harness it actually has
10–12Else: dt ← Reject, and carry the incumbent forward unchangedRejection is cheap and total — no partial merges
14Append the checkpoint and iteration record to LBoth outcomes are appended. Refutations are data
16Return (HT, L)The record is a deliverable, not a log — it "supports comparison, reproducibility, and rollback across iterations"
Count the rollout batches per iteration: four. Lines 5 and 6 run the candidate on train and dev. Lines 7–9 promote the candidate's already-collected results on accept, and lines 10–12 keep the incumbent's on reject — so the incumbent's numbers are never recomputed. That means each iteration costs two full batches (candidate on train, candidate on dev), and the baseline costs two more at the very start. If train and dev are ten papers each, that is twenty complete agentic runs per proposal, and 123 proposals is on the order of 2,500 runs. Seven days.
Algorithm 1 collects trajectories τ from the training set but only scores from the development set. Why does that asymmetry matter?

Chapter 5: The Acceptance Gate

If you take one thing from this paper into your own work, take this chapter. Everything else is a well-executed instantiation of ideas that are in the air. The gate is the discipline that stops the whole thing from being a very expensive way to overfit ten papers.

The condition

Equation 6:

Accept( H′t+1 )  ⇔  Jtrain(H′t+1) > Jtrain(Ht)   ∧   Jdev(H′t+1) ≥ Jdev(Ht)

Two conditions joined by AND. Both must hold or the candidate is discarded and Ht is retained. Look at the comparison operators, because they are different on purpose:

SetOperatorWhat it demandsWhy that operator
Train> strictThe candidate must be strictly better where the evidence came fromAn edit that does not even help where it was designed to help has no evidence for it at all. Ties are rejected — you do not spend an acceptance on a change that did nothing
Dev non-strictThe candidate must not be worse where the evidence did not come fromYou are not asking the edit to generalise positively — a fix for a real recurrent failure may simply not arise in the dev papers. You are asking it to not break anything. Demanding strict dev improvement would reject correct, narrow fixes
Say it as an English sentence. "Make it better on the papers you learned from, and don't make it worse on papers you weren't allowed to look at." That is the entire gate. It is one line of code and it is the difference between a system that improves and a system that memorises.

Where the operators come from — and what happens if you flip them

Play the two obvious alternatives forward and the asymmetry justifies itself.

If dev were also strict (>). Consider a genuine fix: the validator gains a check for a figure-caption provenance failure that occurred in four of the ten training papers. In the dev papers, all figures happen to already have clean captions. Dev score: unchanged. Under a strict dev condition you reject a correct, well-evidenced, harmless improvement. Repeat that policy for 123 iterations and you accept almost nothing — you have built a system that only admits changes that happen to help two disjoint samples simultaneously, which for narrow fixes is mostly luck.

If train were also non-strict (≥). Now a change that moves nothing on train and nothing on dev is admitted. Harmless? No. It is admitted into H, into the checkpoint, into L, and into every future iteration's context. Complexity accumulates with no evidence attached to it. Ten such acceptances and the harness has ten unexplained pieces, each of which the next optimizer will treat as intentional. Strictness on train is a complexity budget.

Worked example: three proposals, decided by hand

Let the training set be five papers and the development set three. The incumbent Ht scores:

train: [ 61 , 58 , 72 , 49 , 65 ]    dev: [ 55 , 68 , 60 ]

Compute the two baselines, by hand:

Jtrain(Ht) = (61 + 58 + 72 + 49 + 65) / 5
61 + 58 = 119; 119 + 72 = 191; 191 + 49 = 240; 240 + 65 = 305
305 / 5 = 61.0
Jdev(Ht) = (55 + 68 + 60) / 3 = 183 / 3 = 61.0

Now three candidates arrive, one per iteration.

Candidate A — a new deterministic overlap check in Evaluation and Feedback.

train: [ 69 , 66 , 74 , 60 , 66 ] → 69+66=135; +74=209; +60=269; +66=335; 335/5 = 67.0
dev: [ 58 , 68 , 63 ] → 58+68=126; +63=189; 189/3 = 63.0
67.0 > 61.0    ∧   63.0 ≥ 61.0    →  ACCEPT

Both conditions hold. Ht+1 = A. Train +6.0, dev +2.0 — the smaller dev gain is normal and expected; the fix was designed against training evidence.

Candidate B — a hand-tuned layout template lifted from the highest-scoring training paper.

train: [ 78 , 71 , 79 , 70 , 74 ] → 78+71=149; +79=228; +70=298; +74=372; 372/5 = 74.4
dev: [ 52 , 61 , 57 ] → 52+61=113; +57=170; 170/3 = 56.67
74.4 > 67.0    ∧   56.67 ≥ 63.0    →  REJECT

This is the case the gate exists for. Train jumps +7.4 — the largest gain of the three, and by far the most tempting. Dev falls −6.33. A template shaped around five specific papers is a memorised solution wearing an improvement's clothes. Without the dev condition this is accepted, becomes the incumbent, and every subsequent proposal is built on top of a harness that has quietly specialised to five documents.

Candidate C — a refactor of the ingestion prompt with no behavioural intent.

train: [ 68 , 67 , 74 , 59 , 67 ] → 68+67=135; +74=209; +59=268; +67=335; 335/5 = 67.0
dev: [ 59 , 69 , 64 ] → 59+69=128; +64=192; 192/3 = 64.0
67.0 > 67.0    →  REJECT (dev is irrelevant; the AND already failed)

Dev actually improved by +1.0. Doesn't matter. Train tied, and a tie on train means no evidence. Note also that the per-paper scores moved — 68 vs 69, 59 vs 60 — while the mean did not. The gate is deliberately blind to that churn: unattributable movement is not improvement.

CandidateJtrainΔtrainJdevΔdevTrain cond.Dev cond.Decision
Incumbent Ht61.0061.00
A — overlap check67.00+6.0063.00+2.00ACCEPT
B — memorised template74.40+7.4056.67−6.33REJECT
C — neutral refactor67.000.0064.00+1.00REJECT
Rank the three by train score and you get exactly the wrong ordering. B (74.4) > A = C (67.0). Train-only selection picks the one change that has learned nothing generalisable. That inversion is the whole argument for held-out gating, and it is the same argument that produced train/validation splits in ordinary machine learning — here applied to system code rather than to weights.

The leak that would silently break everything

The paper closes the loophole in one sentence: "Results on the development set are used exclusively by the acceptance gate and are never exposed to P when constructing an update proposal."

Think about why this needs saying. P is a coding agent with a long persistent context. If it could see dev scores, it would — entirely reasonably, and without any instruction to cheat — start proposing edits that help dev, because that is what optimizers do with the signals they are given. Nothing about that would look like misbehaviour in the trace. It would look like a very effective optimizer. And it would be, right up until you evaluated on anything else.

What P sees
Ht, training trajectories τt, training scores st, the record L (train-side only), optional human guidance gt
↓ a wall, enforced at the record and not only at the prompt
What only the gate sees
Jdev(Ht), Jdev(H′t+1). One comparison, consumed immediately, never written to L, never in a prompt

The paper cites Nguyen et al. (2026), "Recursive self-evolving agents via held-out selection," as the precedent for using an independent split to gate persistent updates, and positions AutoDesign alongside it: RHI (Lee et al., 2026a) "keeps its evaluation prompt on the evaluator side of the update loop, yet the resulting pairwise history remains a task-local learning signal," whereas AutoDesign "uses an independent development acceptance gate for harness updates."

Dev is a consumable resource, not an infinite one. Even used correctly, a dev set is queried once per iteration with a binary outcome. Over 123 iterations that is up to 123 bits of information extracted from the dev papers, and the selected harness is the one that survived all of them. This is the multiple-comparisons problem in its purest form: with enough accept/reject decisions, the final harness has been selected on dev even though it was never trained on dev. The paper's structural answer is a third, completely separate evaluation — PosterBench, frozen, never touched by the loop — which is Chapter 6.

The gate read as a hypothesis test

The paper presents Equation 6 as a rule, not as statistics. But it is a test, and reading it as one tells you exactly which errors it makes and how often.

Every gate makes two kinds of mistake, and they trade against each other:

ErrorWhat happensCostIs it recoverable?
False accept — a change that does not really help gets inThe harness gains an untested piece. It becomes the incumbent, and every later proposal is built on top of itCompounding. Complexity accrues; a later regression is hard to attributeOnly via rollback, and only if you notice
False reject — a genuine improvement is turned awayYou spend one iteration and keep the incumbentOne iteration of ~20 runs, and the idea is recorded in L so a variant can be retriedYes — trivially. Propose it again, differently

The asymmetry is stark, and it justifies the whole design. A false accept is permanent and compounding; a false reject costs one iteration out of about 123. So the correct operating point is heavily conservative, and that is exactly what an AND of two conditions gives you: the candidate has to clear both, and clearing both by luck is much less likely than clearing one.

Put rough numbers on it. Suppose a useless change has a 50% chance of appearing to improve train by luck, and independently a 50% chance of not appearing to hurt dev. Then:

Pr( a useless change passes a train-only gate ) = 0.50
Pr( a useless change passes the AND gate ) = 0.50 × 0.50 = 0.25

The false-accept rate halves. And the cost is that a genuine but narrow fix — one that helps train and leaves dev flat — still passes, because the dev condition is and not >. That is the asymmetry earning its keep: the strict condition sits where evidence exists, the permissive one where it may not.

The observed acceptance rate is the diagnostic. Fifty-four accepts out of at least 123 iterations is at most ~44%. If you build this and see 90% acceptance, your gate is not biting — usually because the dev set is too small or too similar to train to catch anything. If you see 5%, either your proposer is weak or your task sets are too noisy to resolve real effects. Somewhere near a third to a half is the sign of a gate that is doing work.

Gate variants, and what each one costs

You will be tempted to modify Equation 6. Here are the modifications people reach for and what each does.

VariantRationaleWhat it actually does
The paper's: Jtrain > and JdevConservative, cheap, one bit per iteration. The baseline
Require Jtrain > by a margin δ"Reject changes inside the noise"Reasonable, but δ is a free parameter you have no data to set. A paired sign requirement does the same job without a magic number
Require a majority of tasks to improveDistinguish systematic fixes from lucky spikesThe strongest cheap addition — see Chapter 2's sign test. Costs nothing; you already have per-task scores
Allow a small dev regression ε"Don't reject good changes over noise"Dangerous. Every memoriser produces a dev regression; making the dev condition soft is exactly how Candidate B gets in
Accept on dev improvement alone"Generalisation is what I care about"Turns dev into a second training set. You now have no held-out anything, and you will not find out until the frozen benchmark
Re-run the candidate n times and averageReduce rollout noiseCorrect, and expensive: multiplies the 20 runs per iteration by n. The paper does not do it, and the honest reading of Chapter 8 is that this is the main thing missing

How much information does the dev set actually give up?

Chapter 5 claimed dev is a consumable resource. Quantify it, because the quantity is small and surprising.

Each iteration extracts one bit from dev: pass or fail on the second condition. Over T iterations the loop has at most T bits of information about the dev papers. With T = 123:

at most 123 bits  ≈  enough to distinguish 2123 harnesses
— but the harness that survives is the one selected against all 123 decisions

This is the multiple-comparisons problem in its cleanest form. Nothing was ever trained on dev. Yet the final harness is precisely the one that happened to satisfy 123 consecutive dev conditions, so its dev score is optimistically biased, in exactly the way a hyperparameter chosen by a 123-point sweep on a validation set gives an optimistic validation number.

Which is why PosterBench cannot be optional. The dev set answers "does this change generalise beyond the training papers?" It cannot answer "how good is the final system?", because the final system was selected on it. Only a split that never influenced a single decision can answer that. In AutoDesign there are three tiers, and each answers a different question: train supplies evidence, dev filters proposals, PosterBench reports. Collapse any two and one of the three questions goes unanswered.

The two things that reach the proposer, and the one that does not

It is worth being very concrete about the information barrier, because in an implementation it is easy to breach by accident.

ObjectReaches P?Where it is stored
Training trajectories τtYesRecord L, persistent
Training scores stYesRecord L, persistent
Past plans, diffs, and accept/reject decisionsYesRecord L, persistent
Human guidance gt, when suppliedYesPassed into the proposal call
Dev scores JdevNoConsumed by the gate and discarded — explicitly excluded from L
Dev trajectoriesNoNever collected. Algorithm 1 line 6 gathers scores only

Look at the last row. The cleanest way to guarantee dev trajectories never leak is to never produce them. That is a real engineering lesson: an information barrier enforced by absence cannot be breached by a refactor, a logging change, or an over-helpful context builder. A barrier enforced by an instruction can be, and eventually will be.

Note also what the accept/reject decision itself carries. It is written to L, and it is a function of dev. So one bit per iteration does cross the barrier — by design, because the proposer needs to know whether its last idea survived. That single bit is the entirety of the leak, it is deliberate, and it is why the count of 123 bits above is the right accounting.

Watch the gate work, and watch it fail

Acceptance gate and the overfitting it prevents

A fixed sequence of twenty proposals arrives, each with its own true train and dev effect — some genuine fixes, some memorisation, some noise. Choose a gating policy and step through. Solid line: train score. Dashed line: dev score. The ledger shows the last decisions. Watch the two curves separate under a train-only gate.

Under the paper's policy the two curves stay coupled and both rise, slowly, with a lot of rejections. Under a train-only gate the train curve rises faster and further — and the dev curve rolls over and heads down. That divergence is not a bug in the optimizer. It is the optimizer working perfectly on the wrong objective.

What the gate cannot do

Three honest limits, so you deploy this idea with the right expectations.

It cannot detect evaluator bias. Both Jtrain and Jdev are computed by the same Rmeta. If the evaluator systematically rewards something undesirable, the gate happily certifies edits that exploit it on both splits. The paper says as much and routes the fix through a human.

It cannot create statistical power it does not have. With small task sets, both J values are noisy sample means. A candidate can pass the gate by luck. Over many iterations, luck-passing accumulates in one direction, because passing is what gets kept.

It cannot stop dev from being consumed. As above — selection on dev is still selection. The only real defence is a third split that the loop has never influenced, which is why the frozen benchmark is a structural necessity and not just good reporting hygiene.

A proposal raises the training mean from 67.0 to 74.4 — the biggest training gain yet — while the development mean falls from 63.0 to 56.67. What does the gate do, and what would accepting it have cost?

Chapter 6: Two Evaluators, On Purpose

A system that optimizes itself against a score needs two scores. One to learn from, one to be judged by. If they are the same object, the final number is a report of how well the system optimized its own exam, and it means nothing. This chapter builds both, and works the arithmetic of the second one by hand until the headline number's provenance is fully visible.

The separation, stated three times by the paper

The paper repeats this because it is load-bearing. From Section 3.2: "This optimization-time evaluator is distinct from the frozen PosterBench protocol used for final system comparison." From Section 5.1: "PosterBench is a frozen external evaluator, separate from the optimization-time evaluator Rmeta… PosterBench evaluates completed systems and is neither optimized nor modified by the outer loop." From Appendix A.4: the two "use the same quality vocabulary… but serve a different role."

Rmeta — the training signalPosterBench — the exam
Who built itAn evaluator coding agent, from human-annotated reference artifactsManually specified by the authors
When frozen"Once constructed… remains fixed during autonomous optimization""manually specified and frozen before comparative evaluation"
Consumed byThe outer loop, every iteration — scores st and the gateNothing inside the loop. Only the final comparison
Can it be revised?Yes, but only with explicit human input, when a human spots a bias it missesNo — it is a fixed protocol applied to completed systems
DimensionsThe same seven namesThe same seven names, with published weights and gates
The vocabularies match; the instances do not. Both score Faithfulness, Coverage, Density, Visual Evidence, Layout, Readability, and Aesthetics. That is deliberate — you want the training signal to be about the same qualities the exam measures, or optimization is aimed at the wrong target entirely. But they are separate implementations with separate thresholds and separate gates, so a harness that has learned to satisfy the letter of Rmeta has not automatically learned to satisfy PosterBench. The gap between them is exactly the generalisation you want to measure.

PosterBench, concretely

The corpus. A 100-paper Main Track spanning five disciplines — AI/ML, biomedicine and health, climate and earth environment, economics and policy, and physics and astronomy — plus PosterBench-mini, "a shared 10-paper subset" used for the controlled ablations. Every system receives "the same source paper and associated source assets, and its output is rendered to a common poster format before scoring."

The five disciplines are not decoration. A harness tuned on machine-learning papers has learned that evidence looks like a bar chart and a table of ablations. An economics paper's evidence is a regression table; a climate paper's is a map; a physics paper's may be a single instrument schematic. A benchmark that spans them is testing whether the harness learned design or learned the shape of NeurIPS submissions.

The seven dimensions, with the paper's weights and score modes:

DimensionWeight αjModeOperational definition (paper)
Faithfulness10Programmatic + VLM"Checks numeric and source grounding, then judges whether claims, entities, and visual evidence remain consistent with the paper"
Coverage10VLM"Assesses whether the poster preserves the paper's problem, method, evidence, and takeaway against a compact source brief"
Density15Programmatic"Measures information occupancy, OCR text coverage, blank interiors, and pasted paper-body screenshots"
Visual Evidence10Programmatic + VLM"Judges whether figures and tables are relevant, readable, and explained locally; guards reject raw paper-body crops"
Layout20Programmatic"Audits render size and aspect, OCR fallback, clipping, overlap, export-edge damage, and visible placeholders"
Readability25Programmatic + VLM"Combines poster-scale text and spatial checks with hierarchy, scan-path, balance, and crowding judgments"
Aesthetics10VLM"Rates academic visual craft, including typography, palette discipline, and compositional coherence"

Sum: 10 + 10 + 15 + 10 + 20 + 25 + 10. Add them: 10+10 = 20; +15 = 35; +10 = 45; +20 = 65; +25 = 90; +10 = 100. The weights sum to 100, so the rubric score is naturally on a 0–100 scale.

Read the weight vector as a statement of values. Readability (25) and Layout (20) together are 45% of the score — nearly half the rubric is "can a human standing three feet away actually use this?" Aesthetics is 10. Faithfulness is 10. That is a benchmark that has decided a beautiful, accurate, illegible poster is a failure. Whether you agree is a separate question; what matters is that it is stated, weighted, and frozen, so it can be argued with.

Equation 7: the weighted rubric

For paper pi and candidate artifact Ai, the evaluator returns seven scores qi ∈ [0,10]7 and forms:

Rrubric(pi, Ai) = ∑j=17 αj qi,j / 10 ,    α = (10, 10, 15, 10, 20, 25, 10)

The division by 10 rescales each dimension from 0–10 to 0–1 so the weights carry the units. A perfect poster scores q = (10,10,10,10,10,10,10) and gets ∑αj × 1 = 100.

Equation 8: ceilings, and why the metric is not a weighted average

This is where the score stops being linear, and it is the most misread part of the protocol.

Rposter(pi, Ai) = min( Rrubric(pi, Ai) , Cilayout , Civiability , Cifailure , Cigate )

Overall = (1 / N) ∑i=1N Rposter(pi, Ai)

Four ceiling families, bounding, in the paper's words: "severe layout damage, insufficient presentation viability, confirmed visible failures, and protected render-integrity violations, respectively; inactive ceilings are 100." And the magnitude: "A standard P0 gate caps a score at 40, and more severe gate types may set a lower cap."

Order of operations is everything: cap first, then average. The paper warns explicitly that "the metric columns are dimension means, while Overall is the mean of capped poster scores and cannot generally be recovered by reweighting those displayed means."

Why capping then averaging ≠ averaging then capping. min is concave, so by Jensen's inequality mean(min(R, C)) ≤ min(mean R, C). Concretely: two posters, one scoring 90 with a P0 failure, one scoring 50 clean. Cap first: min(90,40) = 40, and 50 stays 50 → mean = 45. Average first: mean(90,50) = 70, which is under no ceiling → 70. The same two posters score 45 or 70 depending purely on operation order. Capping first is the version that says "a poster with a critical failure is not rescued by another poster being fine," which is the correct semantics for a per-artifact defect.

Worked example: reconstructing the headline number — and failing informatively

Table 1 of the paper reports, for AutoDesign (DesignHarness + Claude Code + Claude 4.8) on the 100-paper Main Track: Overall 78.32, with dimension means

= ( 9.35 , 9.40 , 8.41 , 5.97 , 8.55 , 8.17 , 5.59 )

Apply Equation 7 to those means, one term at a time:

Dimensionαjjαj · q̄j / 10Running total
Faithfulness109.359.3509.350
Coverage109.409.40018.750
Density158.4112.61531.365
Visual Evidence105.975.97037.335
Layout208.5517.10054.435
Readability258.1720.42574.860
Aesthetics105.595.59080.450
(1/10) · αT = 80.45   but   Overall = 78.32   →   residual = 2.13 points

The reconstruction is off by 2.13, exactly as the paper says it must be. And the residual is not an error — it is a measurement. It is how much AutoDesign lost, on average, to record-level ceilings. Because min can only lower a score, the residual for any system must be ≥ 0. That gives us a free correctness check on our reading of Equation 7: compute it for every system in Table 1 and see whether all nine residuals come out non-negative.

System (Main Track)(1/10) αTReported OverallCeiling residual
Paper2Poster44.6544.610.04
AutoDesign (Claude Code, Claude 4.8)80.4578.322.13
Codex (GPT 5.5, no design harness)76.1873.372.81
OpenDesign (Claude Code, Claude 4.8)72.5769.453.12
Claude Design (Claude Code, Claude 4.8)74.8870.874.01
Claude Code (Claude 4.8, no design harness)76.8670.016.85
DeepSeek V4-Pro (Claude Code)53.1946.017.18
Any2Poster57.0849.097.99
PosterGen65.0856.718.37

All nine non-negative. That is not luck — it is what Equation 8 forces, and it is decent evidence that we are reading the protocol correctly.

Now read the column, because it says something the paper does not spell out. The residual measures how often a system produced a poster good enough to be worth capping. Compare Claude Code (rubric 76.86, residual 6.85) with AutoDesign (rubric 80.45, residual 2.13). Claude Code's posters are, dimension-by-dimension, nearly as good — but it loses more than three times as much to hard gates. And look at PosterGen: the largest residual in the table, 8.37, from a rubric of only 65.08. That is a system whose typical poster is mediocre and which trips protected gates often. Meanwhile Paper2Poster's residual is 0.04: it is bad on the rubric itself and essentially never trips a gate. Two completely different ways to score in the forties.

Worked example: estimating how often a gate fires

We can push one step further, with assumptions stated up front. Suppose the only active ceiling is the standard P0 cap of 40, and suppose a gated record had roughly the system's mean rubric score before capping. Then each gated record loses (rubric − 40) points, and if a fraction f of records are gated:

residual ≈ f · ( R̄rubric − 40 )   →   f ≈ residual / ( R̄rubric − 40 )

For AutoDesign: f ≈ 2.13 / (80.45 − 40) = 2.13 / 40.45 = 0.053, about 5 posters in 100.

For Claude Code: f ≈ 6.85 / (76.86 − 40) = 6.85 / 36.86 = 0.186, about 19 posters in 100.

For Claude Design: f ≈ 4.01 / (74.88 − 40) = 4.01 / 34.88 = 0.115, about 12 in 100.

Read as an order of magnitude, that is a real engineering story: bare Claude Code produces a critically broken poster roughly one time in five, and attaching DesignHarness cuts that to roughly one in twenty. Which is precisely what a harness full of blocking validators, render checks, and fallbacks is for.

Both assumptions are ours, not the paper's. More severe gate types can set caps below 40, and gated records need not have average rubric scores — a system might trip gates mostly on its worst posters, which would make f larger, or mostly on its best, which would make it smaller. The paper reports neither distribution. Treat these as order-of-magnitude inferences that are consistent with the published numbers, not as measurements.

How Rmeta gets built, and why that procedure is unusual

Most systems that need a learned reward train one. AutoDesign does something different, and the difference is worth dwelling on because it is cheap and reusable.

The procedure, from Section 3.2: humans annotate reference artifacts along the seven quality dimensions. An evaluator coding agent is given those annotated examples and implements the evaluator — writing code that "combin[es] rule-based checks for directly measurable properties with VLM-based judgments for perceptual properties such as aesthetics." Then it is frozen.

Train a reward modelCompile an evaluator program (AutoDesign)
InputThousands of preference pairsA handful of annotated reference artifacts
OutputA network with opaque weightsSource code you can read
DebuggabilityProbe it and guessRead the check that fired
FreezingCheckpoint the weightsFreeze the file — and diff it if it ever changes
Failure modeReward hacking against an inscrutable surfaceReward hacking against a surface you can inspect — and therefore notice
An evaluator you can read is an evaluator you can audit. When a harness starts scoring suspiciously well, the question "what exactly is it exploiting?" has an answer you can grep for. This is the same argument that makes the artifact editable HTML rather than pixels, applied to the objective instead of the output: prefer representations a human can inspect at the moment something goes wrong.

Reward hacking, dimension by dimension

Any fixed evaluator can be gamed given enough optimization pressure, and 123 iterations of a competent coding agent is real pressure. So ask, for each dimension, what the cheapest exploit would be — and what in the protocol blocks it. This is our analysis, not the paper's, but every defence named is something the paper actually specifies.

DimensionCheapest exploitWhat blocks it
Faithfulness (10)Say almost nothing — you cannot misstate a claim you never makeCoverage (10) is scored independently against a source brief, so silence is punished elsewhere
Coverage (10)Paste the whole paper onto the posterDensity's programmatic check explicitly looks for "pasted paper-body screenshots"; Readability (25) collapses at 6 pt type
Density (15)Fill every pixel with textReadability judges "hierarchy, scan-path, balance, and crowding" — and it carries the heaviest weight in the rubric
Visual Evidence (10)Crop screenshots out of the paper body and call them figuresStated directly: "guards reject raw paper-body crops"
Layout (20)One rigid template, applied to every paperThe blinded style-homogeneity check on batches of ≥ 20 posters, which "may only reduce the professional-aesthetics score"
Readability (25)Very few words, very largeCoverage and Density both fall; and Density is 15 points
Aesthetics (10)Optimize for whatever the VLM judge likesLowest weight in the rubric, so the return on gaming it is small — and homogeneity can only subtract from it

Read the third column as a whole and a design principle emerges: every dimension is checked by a dimension that pulls the other way. Faithfulness against Coverage. Coverage against Density and Readability. Density against Readability. Layout against the homogeneity check. The rubric is not seven independent measurements; it is a set of opposed pairs, and that opposition is what makes it hard to game with a single trick.

And the weights encode which side of each tension wins. Readability at 25 versus Density at 15 says: when in doubt, be legible rather than complete. Layout at 20 versus Aesthetics at 10 says: geometric correctness beats beauty. You can disagree with either call — but they are written down, weighted, and frozen, which means they can be argued with. A benchmark whose value judgments are implicit cannot be argued with at all.

Programmatic versus VLM, and why the split falls where it does

Three dimensions are programmatic-plus-VLM, two are pure VLM, two are pure programmatic. That is not arbitrary.

ModeDimensionsWhat they have in common
Programmatic onlyDensity (15), Layout (20)Fully determined by the rendered pixels and their geometry. Occupancy, overlap, clipping, aspect, placeholders — all measurable without judgment. Together: 35 points, deterministic and reproducible
VLM onlyCoverage (10), Aesthetics (10)Require reading meaning or exercising taste. "Does this preserve the paper's takeaway?" and "is this well crafted?" have no algorithm. Together: 20 points
BothFaithfulness (10), Visual Evidence (10), Readability (25)Have a hard, checkable floor and a soft ceiling. Faithfulness: numeric grounding is mechanical, claim consistency is not. Readability: text size is measurable, scan-path is not. Together: 45 points

Add the weights: 35 points fully deterministic, 20 points fully model-judged, 45 points a hybrid with a deterministic floor. So at most 20 of 100 points depend entirely on a model's opinion, and even those are conditioned on a rendered image and a source brief, with the system identity withheld.

That ratio is the protocol's real defence against evaluator drift. A benchmark that was 100% LLM-judge would be reproducible only as long as the judge model was, and would move under you at every model update. A benchmark that was 100% programmatic could not measure whether a poster communicates. Sixty-five percent anchored in deterministic checks, with a model consulted where no algorithm exists, is a defensible place to land — and it is worth copying.

One consequence for reading Chapter 8's tables. Because 35 points are purely geometric, a system with a rigid, well-tuned template can bank a large deterministic score without understanding anything. Any2Poster's Layout of 9.59 — the highest in the entire Main Track — is exactly that, and it still scores 49.09 overall because Coverage (5.44) and Aesthetics (3.10) are model-judged and cannot be templated. The mode column tells you which parts of a score are cheap and which are earned.

Two more protocol details that change how you read the tables

The blinded style-homogeneity check. "For batches of at least 20 readable posters, a blinded style-homogeneity check may only reduce the professional-aesthetics score; it is not applied to PosterBench-mini, whose 10-poster scale is below that threshold."

So a system that makes 100 posters that all look like the same template can lose aesthetics points on the Main Track for exactly that — and cannot lose them on mini, where the check does not run. This is a real anti-degeneracy measure: it penalises the obvious way to game a design benchmark, which is to find one good template and apply it to everything. It also means Main Track and mini scores are not measured under identical rules, which matters in Chapter 8.

What the VLM judge sees. "Each VLM judgment receives the rendered image, a compact paper brief, and selected grounding signals, but no system identity or generation prompt." The judge does not know which system made the poster. That removes the most obvious source of judge bias, and it is the automatic-evaluation counterpart of the system-blind human study in Chapter 9.

Compute a score yourself

PosterBench rubric calculator with ceilings

Pick a system to load its published Main Track dimension means. The stacked bar shows each dimension's contribution αj qj / 10 out of 100; the markers show the weighted total, the reported Overall, and the residual between them. Toggle the P0 gate to see what capping a fraction of records does to the average, and how quickly a hard failure outweighs polish.

P0-gated % 0%

Drag the gate slider on AutoDesign and watch how few gated records it takes to erase a lead built out of dimension scores. At 20% gated, a system with an 80.45 rubric averages 80.45 − 0.20×40.45 = 80.45 − 8.09 = 72.36 — below bare Codex. Hard failures are not a rounding error in this protocol; they are the dominant term.

Applying Equation 7 to AutoDesign's published dimension means gives 80.45, but its reported Overall is 78.32. What is the 2.13-point difference?

Chapter 7: What the Harness Became

Seven days, 224 subagents, at least 123 iterations, 54 accepted updates. What came out the other end? The paper answers by inspecting the final implementation rather than replaying the history, and identifies four stages. This chapter walks them with the data flow attached — what representation the artifact is in at each point, who consumes it, and why each engineering decision was made that way.

An important framing from the appendix. The architecture summary "is neither a second taxonomy nor a record of individual outer-loop iterations: its stages collectively instantiate the five functional components of H." Four stages, five components — they are two different cuts through the same system. The stages are the runtime pipeline; the components are the edit surface the optimizer is allowed to touch.

Stage 1 — Paper ingestion

The job: turn (x, c) into "a structured, provenance-aware context for subsequent generation and revision."

What it extracts, per the paper: document metadata and section outline; key passages supporting the main claims; figures and tables "together with their source locations."

What it produces: two objects, and the split matters.

ObjectContentsConsumed by
Content briefThe claims to be conveyed, and the visual evidence supporting each of themThe designer, on every attempt — it is what to say
Medium-specific artifact planThe target output format and its constraintsThe designer and the validator — it is what shape to say it in

And the property the whole thing is built around: "Every extracted element retains a reference to its location in x, so that source-derived statements and visual materials used in the artifact can be traced back to the source and checked during revision."

This is provenance as a data structure, not as a promise. A claim on the poster is not a string; it is a string with a pointer. That pointer is what makes a deterministic faithfulness check possible: the validator can ask "does every number on this poster resolve to a source location?" and get a yes/no without any model in the loop. Compare the alternative — asking a VLM "is this poster faithful?" — which is slower, stochastic, and unfalsifiable.

Built once, retained forever. "The resulting context is constructed once, retained across all inner-loop refinement steps, and provided to the designer as source-grounded input." Twelve attempts, one ingestion. This is Context and Memory doing its job: the expensive, deterministic understanding of the source is computed once and reused, so the twelve attempts differ only in design, never in what the paper says. If ingestion re-ran per attempt you would get twelve subtly different readings of the same paper and a poster whose claims drift between revisions.

Stage 2 — Generation and revision

"The designer module is implemented as a coding agent that generates or revises the artifact from the ingested source context using the tools and skills available in the harness." At step k it conditions on yk−1, fk−1, and the ingested context — instantiating Mdesign from Equation 4.

The representation decision is the one to dwell on: "the artifact remains as editable HTML files throughout refinement… allowing revisions to be implemented as localized code edits without requiring regeneration of the entire output." For critique it "can be rendered or exported as a medium-specific preview, such as PNG, PPTX, or MP4."

Compare the three representations a design agent could carry, and the consequences follow mechanically:

RepresentationLocal edit?Renderable for critique?Human-editable after delivery?Consequence
Pixels (image model output)No — regenerate everythingIt is the renderNoEvery repair risks destroying what already worked. Text is unreliable
Layout JSON / scene graphYesNeeds a bespoke rendererOnly in your toolEditable, but you now own a rendering stack and an editor
HTML/CSSYes — change one ruleYes — a browserYes — any browser or editorFree renderer, free editor, text stays native and selectable

The paper ties this to prior work on structured representations for editability (Qu et al., 2025; Liu et al., 2026b) and to the system prompt's own requirement: "Keep final text native and editable."

Localized edits are what make the inner loop converge. Recall Chapter 3's trace: A3 fixes a clipped lane, and A5 refits the header. If each repair regenerated the whole poster, A5 could silently undo A3, and the loop would wander instead of climbing. The paper names this directly in its qualitative analysis: "edits stay localized to the failing region while valid layout and source-derived content are retained across revisions." Monotone progress requires that a fix not be able to break an unrelated part — and that is a property of the representation, not of the model's diligence.

Stage 3 — Validation and critique

Chapter 3 covered the control flow; here is the data flow. The candidate yk fans out into three consumers, each seeing a different projection of the same artifact:

yk as HTML/CSS
The designer's working representation. Local edits land here
↓ render
yk as geometry + OCR
The rule-based validator's view. Overflow, overlap, clipping, typographic constraints, provenance links — all deterministic, all blocking
yk as a rendered preview (PNG / PPTX / MP4)
The critic VLM's view — and, on MLLM configurations, the designer's view of its own previous output. Design-context compliance, layout, readability, aesthetics
↓ consolidate
fk — one repair signal
"The two sources of feedback are consolidated into the repair signal fk and passed to the designer for the next attempt"

Note that the two feedback sources are merged before reaching the designer, not delivered as two separate messages. That is a real design choice: it puts the conflict resolution in the harness rather than in the model. If the validator says "the analysis lane overflows by 34px" and the critic says "the analysis lane feels cramped, give it room," a merged signal can say "widen the analysis lane" once. Two unmerged signals invite the designer to make two edits, one of which undoes the other.

The paper places this pattern in its lineage: "This feedback-to-revision pattern is related to recursive self-refinement and agent-as-a-judge approaches (Madaan et al., 2023; Zhuge et al., 2025)."

Stage 4 — Finalization

The last mile, and it is more than a save button. Finalization "applies the remaining post-processing, such as final rendering adjustments, mathematical typesetting, and inlining of referenced assets, to produce a self-contained output."

Three operations, three reasons:

OperationWhy it is post-processing and not part of the loop
Final rendering adjustmentsSub-pixel polish that would be undone by the next repair anyway. Doing it during refinement is wasted work
Mathematical typesettingTypeset math changes element geometry. Doing it early means every subsequent layout check runs against geometry that will change again; doing it last means the layout is already stable
Inlining referenced assetsTurns a directory of files into one deliverable. A poster with external image references breaks the moment it leaves the machine that made it

And recall the fallback path from Chapter 3: if the twelve-attempt budget runs out, the harness "uses the retained attempt history and applies a sequence of fallback mechanisms to identify a deliverable candidate while retaining essential safety and integrity constraints." Both exits — clean pass and fallback — converge on the same finalization stage. There is one delivery path, which means there is one place where "self-contained" is enforced.

Provenance, made mechanical

"Every extracted element retains a reference to its location in x" is one sentence, and it is the load-bearing sentence of the whole ingestion stage. Watch what it buys by comparing two systems that both claim to be faithful.

System A extracts strings. The brief says: "the method improves accuracy by 4.2 points." To check faithfulness you must ask a model whether that claim is supported by a twelve-page PDF. The check is slow, stochastic, and its failure mode is confident agreement.

System B extracts strings with pointers. The brief says: "the method improves accuracy by 4.2 points" — sourced from Table 3, row 4, column 5, page 7. Now three checks become deterministic:

CheckHow it runsFailure it catches
Does the pointer resolve?Look up the referenced location; does it exist?Fabricated citations — a claim attached to a table that is not there
Does the number at the pointer match the number on the poster?String or numeric comparisonTranscription drift: 4.2 becomes 4.7 during a revision three attempts later
Does every number on the poster have a pointer at all?Set difference between numerals in the render's OCR output and the provenance tableInvented numbers — the single worst failure mode a research poster can have

None of these needs a model. All three are blocking-checkable. This is what the paper means by "source-derived statements and visual materials used in the artifact can be traced back to the source and checked during revision" — provenance is not a promise made in a prompt, it is a data structure that makes a class of hallucination mechanically detectable.

And it explains a line in the system prompt. The excerpt reads: "Ground paper-derived claims in the supplied source; do not invent numbers, authors, venues, URLs, benchmark deltas, compute, or citations." That list is oddly specific — and it is specific because each item is a thing that can be pointed at. A prompt that says "be accurate" is a wish. A prompt enumerating the exact categories your validator can check is an interface contract between the model and the harness.

What ingestion must produce, field by field

The paper names the outputs at the level of "a content brief and a medium-specific artifact plan." Reading the downstream requirements backwards tells you what has to be in them, because every later check needs a field to check against.

FieldConsumed byWhat breaks without it
Document metadata — title, authors, venueDesigner, faithfulness checkInvented author lists and venues, the exact category the system prompt enumerates
Section outlineArtifact planNo basis for deciding which sections deserve poster real estate
Key passages supporting the main claimsDesigner, Coverage scoringA poster that omits the paper's takeaway — Coverage 2.35, which is what Paper2Poster scores
Figures and tables with source locationsDesigner, Visual Evidence checkRaw paper-body crops instead of real figures — the failure "guards reject raw paper-body crops" exists to catch
Claim → evidence mappingDesignerFigures placed decoratively rather than beside the claim they support — the "explained locally" half of Visual Evidence
Target format and constraints (from c)Validator, artifact planNo definition of "correct size" or "correct aspect," so the Layout audit has no reference

Read the third column and you are reading the PosterBench dimension list in disguise. That is not a coincidence: the evaluator defines what failure means, and the outer loop grows exactly the ingestion fields needed to make those failures preventable.

Why finalization inlines assets — a concrete failure

"Inlining of referenced assets, to produce a self-contained output" reads like housekeeping. It is not.

Consider what the artifact looks like mid-loop: an HTML file plus a directory of extracted figure images, referenced by relative path. That is exactly right during refinement — the designer edits the HTML, the renderer resolves the paths, everything works. Now ship it.

Without inlining
The recipient opens poster.html. Every figure is a broken-image icon, because ./figures/fig3.png resolved on the machine that made it and nowhere else. The evaluator, if it renders in a different working directory, records missing assets — a blocking violation, in the same family as the "unsafe or missing assets" the validator guards.
↓ inline every referenced asset as data
With inlining
One file. It renders identically anywhere, it can be emailed, and it stays editable — the text is still native text, the CSS is still CSS. Both the delivery requirement and the editability requirement are satisfied by the same operation.

The ordering matters too. Inlining during refinement would bloat every intermediate file with base64 payloads that the designer has to scroll past on every edit, and mathematical typesetting during refinement would keep changing element geometry underneath the layout checks. Both operations belong exactly where the optimized harness put them: after the layout is final, before delivery.

Notice what this stage is, structurally. Finalization is where the harness stops optimizing and starts committing. Everything before it is reversible; everything in it is one-way. Systems that lack a distinct commit stage tend to leak build artifacts into deliverables — a directory the user has to keep, a font that only exists on the build machine, a relative path that worked once. If you take one implementation detail from this chapter, take the existence of a single finalization path that both the clean-exit and fallback branches converge on.

Mapping the stages back onto the five components

The appendix gives the mapping explicitly, and it is worth tabulating because it tells you where the optimizer was allowed to work.

ComponentWhat in DesignHarness instantiates it (per the appendix)
Context and Memory"grounding supplies context and memory" — the ingestion stage, the content brief, provenance references
Tools and Specifications"specialist support and editable HTML define tools and specifications"
Execution Runtime"the workspace, browser, renderer, and export environment support the coding-agent authoring path"
Orchestration"direct control and operations implement orchestration" — K = 12, candidate promotion, fallback, finalization
Evaluation and Feedback"quality gates together with image-native evaluation provide feedback for revision"

The appendix also flags a distinction that is easy to lose: the image-native evaluator inside the design harness "is distinct from the outer-loop evaluator Rmeta and from the frozen PosterBench protocol used for final comparison." Three evaluators now, at three levels — the critic inside one poster's loop, the training signal across tasks, and the exam across systems. Keeping them straight is a real part of understanding this system.

And the honest summary the paper gives of its own result. "The figure shows why the optimized result is more than a static prompt or a single repair loop: it accumulates a coherent system around the fixed model." That is the claim — not that any single piece is novel, but that a meta-optimizer starting from two abstract boxes grew ingestion, provenance, specialist support, quality gates, image-native evaluation, candidate promotion, and recovery operations, and that each of those additions survived a held-out gate on the way in.

The four stages as answers to four questions

Architecture diagrams are decoration unless each box answers a question you could otherwise have gotten wrong. Here are the four questions DesignHarness ended up answering, and what a system that skips each one produces.

StageThe question it answersWhat you get if you skip it
Ingestion"What does this source actually say, and where does each thing live in it?"The designer reads the PDF ad hoc on every attempt. Claims drift between revisions, nothing is traceable, faithfulness cannot be checked mechanically
Generation & revision"How do I change one thing without breaking another?"Whole-artifact regeneration. Fix A undoes fix B, the loop wanders instead of climbing, and no attempt is reliably better than the one before it
Validation & critique"Is this actually deliverable, and if not, exactly where is it broken?"Either a stochastic critic that never lets you exit, or no check at all and clipped posters ship
Finalization"Is this one self-contained thing a human can use and edit?"A directory of files, a broken image path, math that never typeset, and an artifact that renders correctly only on the machine that built it

Every one of those four failures is something the paper's five-component decomposition can locate, and something the outer loop could plausibly have discovered from trajectories. Which is the claim being made: this architecture was not designed, it was found — one gated component edit at a time, starting from a designer and a critic.

What the paper actually shows, and what it only asserts

Be precise here, because this is the chapter most vulnerable to over-reading. The paper characterizes DesignHarness "by examining the final implementation obtained through meta-harness optimization." It reports the four stages, and it reports summary statistics for the campaign that produced them. It does not report a chronological trace of which iteration added which stage.

The appendix is explicit about this, and unusually careful: the architecture figure "is neither a second taxonomy nor a record of individual outer-loop iterations," and its diagonal path "highlights additions in this architectural view; it does not denote individual meta-harness iterations."

ClaimStatus
The final harness contains ingestion, provenance, editable HTML, dual critics, gates, promotion, and recoveryShown — it is the delivered implementation, and the code is public
54 updates were accepted across at least 123 iterations, using 224 subagents over 7 daysReported as campaign statistics
The harness improves seven model/code-agent configurations by 5.01–19.56 pointsMeasured — Table 4, on 10 papers, single runs
Each specific capability arose from a specific gated iterationNot shown. Plausible from the method, and consistent with the record's existence, but the per-iteration attribution is not published
A second campaign from the same H0 would converge on a similar architectureOpen. One campaign is reported. This is the reproducibility question for the whole method
Why the fourth row is the interesting gap. The one-component rule exists precisely to make per-iteration attribution possible, and the record L stores the component, the plan, the diff, and the decision for every iteration. So the data to fill that row exists by construction. Publishing it — "the validator work was worth +9 points across the campaign; the orchestration work was worth +2" — would turn a system paper into a much stronger empirical one, and the paper's own machinery is what would make it possible.

The other three media, and what it would take to make them count

DesignHarness already emits slides, webpages, and conference videos. The paper calls these pilots and refuses to score them. Its reason is a checklist, and the checklist is the most useful transfer advice in the paper:

Requirement (paper's wording)What it means for, say, paper → conference video
"source–output data"Paired examples: papers with good talks. Far scarcer than papers with posters
"an evaluator"Video has a time axis. Pacing, narration alignment, and whether a viewer can follow at 1× are all real and none are OCR-checkable
"a rendering and validation gate"What is the blocking check for a video? Audio present, no dropped frames, duration within bounds — a genuinely different check set from clipping and overlap
"an objective tailored to its communication setting"A poster is scanned in 60 seconds by someone standing up. A talk is watched linearly for 12 minutes. Readability at 25 points is a poster value, not a universal one — the weight vector does not transfer

The last row is the deepest point. It is tempting to think the seven dimensions are "quality" and would carry over. They are not; they are quality for a poster, weighted for a poster's viewing conditions. Move the medium and the weights have to be re-argued from the communication setting up. The paper's own future-work section says exactly this, and its restraint in not reporting slide or video numbers is the same restraint that makes its poster numbers worth reading.

What it can already make besides posters

"The resulting implementation supports multiple output media, including academic posters, presentation slides, videos, and web pages." The paper's pilot artifacts show paper-to-slide, paper-to-webpage, and paper-to-conference-video outputs.

But it is scrupulous about the status of those: "PosterBench formally evaluates academic posters only; the slide, webpage, and video artifacts therefore remain pilots." Which is the correct call, and the reason is stated in the same paragraph — each medium "needs source–output data, an evaluator, a rendering and validation gate, and an objective tailored to its communication setting." Without an evaluator there is no Rmeta, without Rmeta there is no outer loop, and without a benchmark there is no honest number. A demo is not a result.

Why does DesignHarness keep the artifact as editable HTML throughout refinement instead of regenerating an image each attempt?

Chapter 8: Reading the Tables Honestly

The numbers are good. Some of them are better than the paper claims and some are weaker, and the difference is always in what was held fixed and how many papers were involved. This chapter reads every table the way you would read one from a competitor.

The Main Track: 100 papers, every system

GroupSystemCoding agentModelScore
Design agentAutoDesignClaude CodeClaude 4.878.32
Design agentAutoDesignCodexGPT 5.577.97
Coding agentCodex (bare)CodexGPT 5.573.37
Design agentClaude DesignClaude CodeClaude 4.870.87
Coding agentClaude Code (bare)Claude CodeClaude 4.870.01
Design agentOpenDesignClaude CodeClaude 4.869.45
Design agentOpenDesignCodexGPT 5.562.17
Coding agentDoubaoClaude CodeSeed 2.161.14
Human workflowPosterGenClaude 4.856.71
Coding agentGLMClaude CodeGLM 5.252.22
Coding agentKimiClaude CodeKimi K2.751.46
Human workflowAny2PosterClaude 4.849.09
Coding agentDeepSeekClaude CodeDeepSeekV4-Pro46.01
Human workflowPaper2PosterClaude 4.844.61

The comparison the abstract leads with is the matched one, and it is a fair fight: AutoDesign and Claude Design both run on Claude Code with Claude 4.8. Only the design harness differs.

78.32 − 70.87 = 7.45 points   (vs OpenDesign: 78.32 − 69.45 = 8.87)

The second comparison is the one worth staring at, because it is the harness's true contribution over doing nothing:

AutoDesign 78.32 − bare Claude Code 70.01 = +8.31 points from attaching DesignHarness

And here is the first genuinely uncomfortable number in the paper, which the paper reports without flinching: bare Codex on GPT 5.5 scores 73.37 — higher than Claude Design (70.87), higher than OpenDesign (69.45), higher than bare Claude Code (70.01). A coding agent with no design harness at all beats two purpose-built design systems, one of them commercial.

The honest read of that row. Frontier coding agents are already decent at this task. A design harness must beat "just ask a very good coding agent," not merely "beat other design harnesses." AutoDesign clears that bar in both configurations (78.32 and 77.97 against 73.37), which is the result that actually matters — but the bar is much higher than the 7.45-point headline against Claude Design suggests, and the paper's own table makes that visible rather than hiding it.

The three human-crafted workflows

PosterGen (56.71), Any2Poster (49.09), and Paper2Poster (44.61) are hand-designed pipelines, all running on Claude 4.8. They lose to every agentic configuration except the weakest models. But look at where they lose, using the dimension columns:

SystemFaith.Cover.DensityVis.Ev.LayoutRead.Aesth.
AutoDesign9.359.408.415.978.558.175.59
PosterGen8.848.254.315.628.615.365.28
Any2Poster8.265.444.183.659.594.473.10
Paper2Poster6.352.358.362.163.694.871.69

Any2Poster has the best Layout score of any system in the table — 9.59, better than AutoDesign's 8.55. A hand-built pipeline with a fixed template produces geometrically flawless posters. It scores 49.09 anyway because Coverage is 5.44 and Aesthetics is 3.10: a perfectly laid-out poster that omits half the paper.

Paper2Poster is the mirror image: Density 8.36 (second-highest in the table) with Coverage 2.35 and Aesthetics 1.69. Dense and empty at the same time — which, given Density's operational definition ("information occupancy, OCR text coverage, blank interiors, and pasted paper-body screenshots"), is exactly what pasting screenshots of the paper body would produce.

This is why a multi-dimensional rubric earns its complexity. A single-number benchmark would rank these three systems and tell you nothing. The dimension columns tell you Any2Poster needs a content-selection fix and Paper2Poster needs to stop pasting screenshots — two completely different engineering programmes, invisible in the Overall column.

The ablation that carries the paper: attaching the harness

Table 4 holds the model and the coding agent fixed and toggles only the presence of DesignHarness, on PosterBench-mini.

ModelCode agentWithout harnessWith DesignHarnessGain
GPT-5.5Codex75.8781.46+5.59
Claude 4.8Claude Code69.5574.56+5.01
Seed 2.1 ProClaude Code54.0171.83+17.82
Kimi K2.7Claude Code57.2070.12+12.92
GLM 5.2Claude Code50.3264.33+14.01
LongCat 2.0Claude Code43.2655.13+11.87
DeepSeek V4 ProClaude Code34.7354.29+19.56

Verify the abstract's averages by hand. Before:

75.87 + 69.55 = 145.42
145.42 + 54.01 = 199.43
199.43 + 57.20 = 256.63
256.63 + 50.32 = 306.95
306.95 + 43.26 = 350.21
350.21 + 34.73 = 384.94
384.94 / 7 = 54.99

After:

81.46 + 74.56 = 156.02
156.02 + 71.83 = 227.85
227.85 + 70.12 = 297.97
297.97 + 64.33 = 362.30
362.30 + 55.13 = 417.43
417.43 + 54.29 = 471.72
471.72 / 7 = 67.39

Both match the abstract exactly. The improvement is 67.39 − 54.99 = 12.40 points, and every one of the seven configurations improves — no exceptions, no regressions.

One notation slip worth naming. The abstract writes "increasing the average PosterBench Score from 54.99 to 67.39 (+12.4%)." That is +12.40 points on a 0–100 scale, not +12.4 percent. As a relative change it is 12.40 / 54.99 = 22.5%. Both framings are defensible; the "%" sign attached to the point difference is not. Body text elsewhere in the paper says "+12.40 points," which is correct. Small thing — but if you are going to quote a benchmark number, quote the right unit.

The pattern inside the gains — a derivation the paper does not do

Look at the two columns together. The two strongest baselines gain the least (+5.59, +5.01); the weakest baseline gains the most (+19.56). Let us quantify that. Compute the correlation between baseline score and gain across the seven rows.

Baseline mean is 54.99 (above). Gain mean: (5.59 + 5.01 + 17.82 + 12.92 + 14.01 + 11.87 + 19.56) = 86.78, and 86.78 / 7 = 12.40 — which of course equals the difference of the means, a useful arithmetic check.

Running the product-moment correlation over the seven paired deviations gives

r ( baseline , gain ) ≈ −0.84

Strongly negative. And the consequence shows up in the spread: the standard deviation of scores across the seven configurations falls from 14.28 before the harness to 10.06 after — a 30% compression.

What that means in plain terms: the harness substitutes for model capability. A frontier model already knows most of what the harness encodes about provenance, layout discipline, and when to stop; a weaker model does not, and the harness supplies it. DeepSeek V4 Pro with DesignHarness (54.29) outscores bare Doubao Seed 2.1 (54.01) and gets within 10 points of bare Claude Code (69.55) — a jump that would otherwise require a much stronger model.

The commercial reading, and it is a big one. If a harness can move a cheap model up by 15–20 points, then harness engineering is a substitute for model spend, at least on structured long-horizon tasks with checkable outputs. The cost table below makes this concrete: LongCat 2.0 with DesignHarness reaches 55.13 at about $0.27 per poster, which the paper notes reflects that model's pricing policy at evaluation time, where "cached context incurs no charge on a cache hit."

Cost versus performance

Four points on the paper's Pareto frontier, on PosterBench-mini, using a normalized designer-only API cost proxy:

ModelScoreCost / posterScore per dollarMarginal cost of the step up
LongCat 2.055.13$0.27204.2
Doubao Seed 2.1 Pro71.83$2.7526.1$2.48 for 16.70 pts = $0.15/pt
Claude 4.874.56$7.639.8$4.88 for 2.73 pts = $1.79/pt
GPT-5.581.46$10.028.1$2.39 for 6.90 pts = $0.35/pt

The paper's summary: "Doubao reaches 88% of the GPT-5.5 score at 27% of its cost." Check it: 71.83 / 81.46 = 0.8818 → 88%. And 2.75 / 10.02 = 0.2745 → 27%. Both exact.

Now a step the paper does not take. The marginal column is non-monotone: the middle step costs $1.79 per point while the final step costs $0.35 per point. That means Claude 4.8, although Pareto-optimal (nothing cheaper scores higher), sits below the chord connecting Doubao and GPT-5.5. Compute the chord's height at Claude 4.8's price:

slope = (81.46 − 71.83) / (10.02 − 2.75) = 9.63 / 7.27 = 1.3246 points per dollar
chord at $7.63 = 71.83 + 1.3246 × (7.63 − 2.75) = 71.83 + 6.46 = 78.29
Claude 4.8 actual = 74.56  →  3.73 points below the chord

So if you had a budget of $7.63 per poster and could split it across posters, you would be better off running Doubao on some and GPT-5.5 on others than running Claude 4.8 on all of them. That is a portfolio argument, not a per-poster one — but it is exactly the kind of decision a cost table exists to inform, and it is invisible unless you check convexity.

The instability nobody should skip: mini versus Main

PosterBench-mini is "a shared 10-paper subset" of the 100-paper Main Track. Same frozen evaluator. Now put the same two systems side by side on both:

Systemmini (10 papers)Main (100 papers)Direction
AutoDesign + Codex + GPT 5.581.4677.97↓ 3.49
AutoDesign + Claude Code + Claude 4.874.5678.32↑ 3.76
Gap between themCodex +6.90Claude Code +0.35the ranking flips

Since mini is a subset of Main, we can back out the scores on the other 90 papers. For the Codex configuration:

100 × 77.97 = 7797   (total over all 100)
10 × 81.46 = 814.6   (the mini contribution)
7797 − 814.6 = 6982.4  →  6982.4 / 90 = 77.58 on the other 90

And for the Claude Code configuration:

100 × 78.32 = 7832
10 × 74.56 = 745.6
7832 − 745.6 = 7086.4  →  7086.4 / 90 = 78.74 on the other 90

On the ten mini papers, Codex leads by 6.90. On the other ninety, Claude Code leads by 1.16. The ten-paper subset is not a small-scale replica of the benchmark; it is a sample that happens to favour one configuration by seven points.

Why this matters more than it looks. Every controlled ablation in the paper runs on those ten papers. The Design Harness Track, the Coding Harness Track, the Model Track, and the harness-attachment ablation are all N = 10. We have just watched a 6.9-point gap on those ten papers become a 1.2-point gap in the opposite direction on the other ninety. Apply the same scepticism to every ablation margin under about 5 points.

Two caveats on our own derivation, in fairness. First, the blinded style-homogeneity check runs on batches of at least 20 readable posters and therefore applies to the Main Track but explicitly not to mini — so the two are not scored under literally identical rules, and part of the mini → Main shift for the Codex configuration could be that check reducing its professional-aesthetics score. Second, the 90-paper figures are exact only if mini is a strict subset of the Main Track scored identically, which the paper's "shared 10-paper subset" wording supports but does not spell out arithmetically.

The Coding Harness Track, and a result to hold at arm's length

Table 3(b) fixes the design harness to AutoDesign and the model to GLM 5.2, and varies only the coding agent:

Coding harnessScore (mini)Faith.Read.Aesth.
Kimi Code82.319.298.467.68
ZCode69.539.426.936.77
OpenCode67.879.327.216.47
Claude Code64.338.816.305.68

Read that top row carefully. With a mid-tier open model (GLM 5.2, whose bare score is 50.32), swapping the coding harness from Claude Code to Kimi Code moves the score from 64.33 to 82.31 — a 17.98-point swing, larger than the entire design-harness effect on strong models, and higher than any number in the Main Track table.

Take that seriously and take it sceptically at the same time. Seriously: it says the coding harness — the agent scaffold that runs the code edits — interacts strongly with the model, and that "which coding agent" is a first-class variable rather than an implementation detail. Sceptically: it is N = 10, single-run, on a subset we have just shown can move a ranking by seven points. The paper reports no repeats, no confidence intervals, and no per-paper breakdown for this track.

The Model Track

Table 3(c) fixes AutoDesign and Claude Code and varies the model: Claude 4.8 (74.56), Seed 2.1 Pro (71.83), Kimi K2.7 (70.12), GLM 5.2 (64.33), LongCat 2.0 (55.13), DeepSeek V4 Pro (54.29). A 20.27-point spread from model choice alone, under an identical harness. So the harness does not erase model quality — it compresses the spread (the −0.84 correlation above) without eliminating it.

The three-layer conclusion, and it is the paper's real contribution to practice. Score = f(model, coding harness, design harness), and all three terms are large. Model spread under a fixed harness: 20.27 points. Coding-harness spread under a fixed model: 17.98 points. Design-harness attachment: 5.01 to 19.56 points. Nobody optimizing only one of the three is doing the job. Two of the three cost nothing but engineering.

Explore the ablations

Harness attachment and the cost frontier

Left mode: the seven configurations before and after attaching DesignHarness, with the two group means marked. Notice that the arrows are longest where the starting bar is shortest. Right mode: the four cost–performance points, the paper's Pareto frontier, and the convex hull — the point that falls below the chord is the one to argue about.

Everything the tables do not tell you

MissingWhy it matters
Repeated rollouts per taskEquation 2 is an expectation over yH. Every reported number is a single draw from that distribution. Two runs of AutoDesign on the same paper would not score the same
Confidence intervals on any tableOnly the human study reports uncertainty. The automatic tables report point estimates with no dispersion, so a 2-point gap and a 20-point gap look equally solid
Per-paper breakdownsWould let a reader check whether a gain is uniform or driven by two catastrophic baseline failures — which matters enormously given ceilings that cap at 40
Which harness updates mattered54 accepted updates, and no attribution of the final 78.32 to any of them. The one-component rule makes this measurable in principle; the paper does not report it
Failed optimization runsOne 7-day campaign is reported. Whether a second campaign from the same H0 converges to a similar harness — the reproducibility question for the whole method — is open
AutoDesign+Codex scores 81.46 on PosterBench-mini but 77.97 on the 100-paper Main Track, while AutoDesign+Claude Code scores 74.56 on mini and 78.32 on Main. Since mini is a subset of Main, what does this establish?

Chapter 9: Asking Humans

An automatic benchmark that a system was optimized near is a suspicious witness, even when the optimization used a different evaluator. So the paper runs a system-blind human study and, more usefully, asks how well the benchmark and the humans agree. This chapter builds the statistics from zero.

The design

Eleven volunteer reviewers. Four systems — AutoDesign, Claude Code, OpenDesign, Claude Design — on the 100 Main Track papers. Each task shows two anonymous posters made from the same paper, with the paper's title, abstract, and PDF as shared context. No system, model, or harness identity is disclosed. The reviewer picks the left poster, the right poster, "approximately equal," or skip, and may flag a critical failure. Presentation order is balanced left–right.

The full roster size is derived in the paper:

| T | = Npapers · C( Nsystems , 2 ) = 100 · C(4, 2) = 100 · 6 = 600

where C(4,2) = 4! / (2! · 2!) = 24 / 4 = 6 is the number of unordered system pairs: {AD,CC}, {AD,OD}, {AD,CD}, {CC,OD}, {CC,CD}, {OD,CD}. Every pair on every paper. The paper explains why this matters for the estimator: it provides "equal paper coverage and a connected graph for Bradley–Terry estimation" — connectivity is required, because if some system were never compared against the rest, its strength would be unidentifiable.

Bradley–Terry, derived

Give each system a latent strength βiR. The Bradley–Terry model (1952) says the probability that i is preferred to j is that system's exponentiated strength as a share of the pair's total:

Pr( i ≻ j ) = exp(βi) / ( exp(βi) + exp(βj) )

Divide numerator and denominator by exp(βi):

Pr( i ≻ j ) = 1 / ( 1 + exp(βj − βi) ) = σ( βi − βj )

So Bradley–Terry is a logistic function of the strength difference — which means three things immediately. Only differences are identifiable (adding a constant to every β changes nothing, so you fix a reference). Equal strengths give exactly 0.5. And the model is inverted by the logit:

βi − βj = ln( p / (1 − p) )

Ties are handled by giving each side half a win; skips are dropped.

Worked example: recovering the strengths from the reported rates

The paper gives AutoDesign's tie-adjusted empirical preference against each baseline. Convert each into a strength gap with the logit.

Opponentpp / (1 − p)Δβ = ln(·)
Claude Code0.6130.613 / 0.387 = 1.58400.460
OpenDesign0.6310.631 / 0.369 = 1.71000.536
Claude Design0.6760.676 / 0.324 = 2.08640.735

Set βAutoDesign = 0 as the reference. Then βCC = −0.460, βOD = −0.536, βCD = −0.735. Now the model makes predictions about pairs the table never showed us. For Claude Code versus Claude Design:

Δβ = −0.460 − (−0.735) = 0.275
Pr = σ(0.275) = 1 / (1 + e−0.275) = 1 / (1 + 0.7596) = 0.568

So Bradley–Terry predicts Claude Code beats Claude Design about 57% of the time. Similarly σ(0.536 − 0.460) = σ(0.076) = 0.519 for Claude Code over OpenDesign, and σ(0.735 − 0.536) = σ(0.199) = 0.550 for OpenDesign over Claude Design. That is what a model buys you over a table of raw rates: predictions for comparisons, and a single ranking that is forced to be transitive.

Worked example: verifying the headline 64.0%

The paper reports AutoDesign's "probability of beating a uniformly sampled alternative" as 64.0%. With three opponents, that is the average of the three win probabilities implied by the fitted strengths. Compute each from σ:

σ(0.460) = 1 / (1 + e−0.460) = 1 / (1 + 0.6313) = 0.6130
σ(0.536) = 1 / (1 + e−0.536) = 1 / (1 + 0.5851) = 0.6309
σ(0.735) = 1 / (1 + e−0.735) = 1 / (1 + 0.4795) = 0.6759
mean = (0.6130 + 0.6309 + 0.6759) / 3 = 1.9198 / 3 = 0.6399  →  64.0%

Exactly the reported figure. And note what the round trip proves: we went from the empirical rates to strengths back to probabilities and landed on the paper's fitted estimate. That only happens when the pairwise data are close to Bradley–Terry-consistent — that is, when there are no large intransitivities of the form "A beats B, B beats C, C beats A." The consistency is itself a small quality signal about the judgments.

Now the uncertainty, which is where the story gets more careful. The 95% interval is 55.2% to 77.8% — from 2,000 crossed bootstrap resamples of both papers and reviewers. Two things about that interval. It is wide: 22.6 points. And its lower end, 55.2%, is only 5.2 points above the 50% that a system indistinguishable from its rivals would score. The claim "AutoDesign is preferred" survives; the claim "AutoDesign is preferred by a large margin" does not, on this evidence.

How much of the study actually got done

Reported: 936 submitted responses — 933 ranking judgments and 3 skips. The roster is 600 tasks per reviewer, and there are 11 reviewers.

possible = 600 × 11 = 6,600   →   933 / 6,600 = 14.1% completed

The paper is upfront about this: the "0/600" counter "denotes this complete roster, rather than a requirement to submit 600 judgments," and "submitted non-skip decisions are retained and uncompleted assignments are not imputed." Good practice — no imputation, no silent filling.

But the density is worth computing. If 933 judgments spread over 600 distinct tasks, that is 1.56 judgments per task on average, and volunteers rarely spread evenly. Many of the 600 paper–pair cells got one judgment or none. That thinness is the main reason the bootstrap interval is 22.6 points wide, and it is why the crossed resampling — over papers and reviewers — is the right choice: both are sources of variation with few draws.

The paper also reports a nominal Krippendorff coefficient of 0.101 as "an agreement diagnostic over paper–system-pair items, not the ranking estimator." Read plainly: reviewers agree with each other only slightly more than chance on which of two posters is better. That is expected for aesthetic and communicative judgment and is not an indictment of the study — but it is the reason you need many judgments to see a signal, and 933 across 600 cells is not many.

Does the benchmark predict the humans?

This is the most useful part of the section, because it validates the automatic protocol rather than the system.

Poster-level correlation. Comparing each poster's PosterBench Score with its tie-adjusted human preference gives r = 0.34, with a paper-cluster bootstrap 95% interval of [0.22, 0.44]. Square it: r2 = 0.1156, so the benchmark accounts for roughly 12% of the variance in poster-level human preference. Positive, significant, and modest.

The paper does not oversell it: "This is a useful property of the protocol rather than a requirement that it duplicate human preference: PosterBench also evaluates Faithfulness, Coverage, Density, Visual Evidence, Layout, Readability, and Aesthetics, whereas each blind judgment asks for an immediate pairwise choice." A rubric that checks numeric grounding against the source is measuring something a reviewer glancing at two posters simply cannot see.

Agreement as a function of margin. This is the sharper result. Using 919 of the 933 non-skip judgments (14 are excluded because the two posters had identical PosterBench Scores and so there is no benchmark-preferred direction), the probability that the benchmark-preferred poster matches the human choice rises with the score gap:

PosterBench Score gapHuman agreementInterpretation
0–3 points51.9%Indistinguishable from a coin flip. A 2-point benchmark difference carries essentially no information about which poster a person will prefer
≥ 20 points74.4%Substantially informative. Three times in four the benchmark and the human agree
This is the single most portable finding in the paper. It gives an automatic benchmark a resolution. PosterBench does not certify that a 2-point lead is a real lead — its own validation says that gap is a coin flip. It does certify that a 20-point lead is meaningful. Now re-read Chapter 8 with that ruler in hand: AutoDesign's 7.45-point margin over Claude Design sits between the two anchors, where agreement is better than chance but well short of 74%. Every benchmark you build should report this curve, and almost none do.

The paper draws the same conclusion: "the benchmark offers more than a global system ranking: a large score gap identifies comparisons in which human preference is substantially more consistent."

Feel the model

Bradley–Terry and benchmark resolution

Mode one: drag the strength gap and watch the logistic curve; the paper's three head-to-head points are marked, and the mean of the three is the reported 64.0%. Mode two: the reported 95% interval against a 50% reference. Mode three: human agreement as a function of the PosterBench Score margin, with the 7.45-point headline gap marked between the two anchors.

Δβ 0.46

Where the strengths come from — fitting Bradley–Terry

We inverted the reported rates into strengths, which is fine when you have one rate per pair. With many noisy comparisons you fit instead, and the fit is worth seeing because it explains what "ties contribute one half-win" is actually doing.

Let wij be the number of times system i was preferred over j. Each comparison is a Bernoulli trial with success probability σ(βi − βj), so the log-likelihood of the whole dataset is the sum over ordered pairs:

ℓ(β) = ∑i≠j wij · log σ( βi − βj )

Maximise that over β and you have the estimate. Three properties follow, and each one shows up in the paper's reporting.

Only differences are identifiable. Add a constant c to every βi and every difference βi − βj is unchanged, so ℓ is unchanged. The likelihood has a flat direction. That is why the paper does not report raw strengths at all — it reports "the probability of beating a uniformly sampled alternative," a quantity that depends only on differences and is therefore well defined.

Connectivity is required. If the comparison graph split into two components — some systems never compared against the others — the relative strength across the split would be unconstrained by the data and the likelihood would be flat in a second direction. The paper's full roster of all six unordered pairs on every paper guarantees a connected graph by construction, which is exactly why it says the roster "provid[es] equal paper coverage and a connected graph for Bradley–Terry estimation."

Ties as half-wins is the maximum-entropy choice. Bradley–Terry in its basic form has no tie outcome; a judgment is a win or a loss. Faced with "approximately equal," you can drop it (throwing away real information — a tie is genuine evidence that two systems are close), model it explicitly (the Davidson extension, which needs another parameter and more data than 933 judgments can support), or split it. Splitting adds 0.5 to wij and 0.5 to wji, which pulls the estimated difference toward zero — precisely the effect a tie should have. It is the cheapest correct-in-spirit option, and with a thin dataset the cheapest option that does not add parameters is usually right.

Why the bootstrap is crossed, and why it has to be

The paper reports "2,000 crossed bootstrap resamples of papers and reviewers." That word crossed is doing real statistical work.

A naive bootstrap would resample the 933 individual judgments. That treats every judgment as an independent draw — and they are emphatically not. Two judgments on the same paper share whatever makes that paper easy or hard to poster. Two judgments from the same reviewer share whatever that person happens to like. Ignoring both correlations shrinks your interval, and produces confident nonsense.

Resampling schemeWhat it assumesEffect on the interval
Resample judgmentsAll 933 judgments independentToo narrow. Overstates certainty
Resample papers onlyReviewer effects negligibleToo narrow if reviewers differ — and with α = 0.101 they clearly do
Resample reviewers onlyPapers are interchangeableToo narrow if some papers are much harder to poster than others
Crossed — resample bothBoth are populations you want to generalise overWider and honest. Hence 55.2–77.8%
The wide interval is a feature of the analysis, not a weakness of the result. An author trying to make 64.0% look decisive would have resampled judgments and reported something like [61, 67]. Resampling both papers and reviewers is the choice that asks "would this hold with different papers and different people?" — the question a reader actually has. The paper made the honest choice and then reported the uncomfortable number it produced.

What r = 0.34 does and does not license

A poster-level correlation of 0.34 between PosterBench Score and human preference is easy to over- or under-read. Both mistakes are common enough to be worth heading off.

The under-read: "0.34 is weak, so the benchmark is bad." The two quantities are not measuring the same thing on purpose. PosterBench audits numeric grounding against the source, OCR-level readability, render integrity, and coverage against a brief. A reviewer glancing at two posters for thirty seconds sees none of that. A benchmark that correlated 0.95 with a snap aesthetic judgment would be a worse benchmark for a scientific artifact, not a better one — it would have stopped measuring faithfulness.

The over-read: "positive and significant, so score gaps mean preference gaps." Square it: r2 = 0.342 = 0.1156. The benchmark explains about 12% of the variance in poster-level human preference. Eighty-eight percent is elsewhere — taste, the specific paper, the reviewer, the moment. Any argument of the form "our system scores 3 points higher, therefore people prefer it" is unsupported, and the paper's own margin analysis says so numerically: at 0–3-point gaps, agreement is 51.9%.

agreement at 0–3 points: 51.9%  →  1.9 percentage points above a coin flip

Now do the same reading at the other end. At gaps of 20 or more, agreement is 74.4% — 24.4 points above chance. Convert that into a Bradley–Terry strength gap to feel its size:

Δβ = ln( 0.744 / 0.256 ) = ln( 2.906 ) = 1.067

Compare that with the largest system-level gap the study found, AutoDesign over Claude Design, at Δβ = 0.735. A 20-point PosterBench margin corresponds to a larger perceived difference than the gap between the best and worst systems in the field. Which is a fair summary of the protocol's resolution: it cannot see small differences, and when it sees a large one, that difference is very real.

What the human study does and does not establish

ClaimSupported?Why
AutoDesign is preferred over the three baselines by blind reviewersYes, directionallyHighest BT estimate; all three head-to-head rates above 50%; the study is genuinely system-blind and order-balanced
The margin is largeNo95% interval reaches down to 55.2%, and inter-reviewer agreement is near chance (α = 0.101)
PosterBench is a good proxy for human preferencePartlyr = 0.34 (about 12% of variance). Agreement is 51.9% at small margins, 74.4% at large ones. It resolves big differences, not small ones
The result generalises beyond these 11 reviewersUnknownVolunteers, unstated expertise, 14% roster completion. The bootstrap resamples reviewers, which is the right correction, and it is what makes the interval wide
PosterBench and blind human preference agree 51.9% of the time when the score gap is 0–3 points and 74.4% of the time when it is at least 20 points. What is the right way to use that?

Chapter 10: What Generalises

Strip away the posters. What is left is a recipe for improving any long-horizon agent whose outputs can be scored, and a set of conditions under which the recipe applies. This chapter names both, reads the paper's own future-work section, and connects everything to the rest of this site.

The transferable pattern, in six lines

1. Decompose
Split the system around your frozen model into named components. Five worked here: context/memory, tools/specs, runtime, orchestration, evaluation/feedback. The names matter less than that there are names
2. Ground the objective in human preference, once
Build the evaluator from human-annotated references, then freeze it. Human judgment enters as a compiled artifact, not as a per-run vibe
3. Roll out and keep the trajectories
Scores tell you that something failed; trajectories tell you where. Budget for storing and reading them
4. Propose one bounded change per iteration
One component. Aimed at a recurrent failure, never a one-off. Attributable by construction
5. Gate on a held-out split
Strictly better on train AND not worse on dev. Dev evidence never reaches the proposer — not its scores, not its trajectories, not through the persistent record
6. Record everything, including refutations
Checkpoints, plans, diffs, and accept/reject decisions. Rejected proposals stop the optimizer re-proposing them, and make rollback possible

When this applies to your system — and when it does not

PreconditionWhy it is requiredWhat happens without it
Outputs can be scored automatically, in a way you believeRmeta is called on every task, every iteration, for both splits — thousands of timesYou cannot run the outer loop at all. Human scoring at that volume is not a budget problem, it is an impossibility
Enough tasks for two disjoint splitsThe gate needs an independent dev set, and a frozen exam is a third demand on your dataThe gate degenerates into train-only selection, and you overfit — Candidate B from Chapter 5, every iteration
Failures recur across tasksThe proposer only acts on recurrent evidence; one-off failures are noise to itEvery iteration chases a unique bug and the harness grows special cases
Rollouts are affordable in parallelRoughly two full batches per iteration, times ~123 iterationsSeven days becomes seven months
The harness is real codeThe proposer is a code editorIf your "harness" is a single prompt string, you have prompt optimization — a real but much narrower thing
The strongest signal that this fits your problem. Ask: does the same class of defect show up in your traces week after week, and could a deterministic checker detect it? If yes, you have exactly the setting AutoDesign is built for — a recurrent, attributable, checkable failure. If your failures are all one-offs, or none of them can be checked without a human looking, the outer loop has nothing to grip.

The paper's own future directions, read straight

Other media. DesignHarness already produces slides, webpages, and conference videos as pilots. The paper refuses to call them results, and gives the requirement: each medium "needs source–output data, an evaluator, a rendering and validation gate, and an objective tailored to its communication setting." It also flags what might transfer: "shared context construction, preference memories, and repair histories could nevertheless provide a substrate for reusing experience across media, provided that the transfer is evaluated against medium-specific objectives."

Better component selection. Right now the planner picks which of the five components to edit. The paper wants that to be principled: "A selector should choose next bounded update from failure attribution, uncertainty, expected improvement, and component interactions." That is a bandit problem in all but name — five arms, noisy rewards, and interactions between arms.

Evaluator evolution, with guardrails. The sharpest sentence in the future-work section: "Any adaptive evaluator must remain versioned and anchored by frozen reference tasks, adversarial probes, and periodic human audits so optimization doesn't reward-hack a moving target." If the evaluator can change and the optimizer can influence it, you have closed a loop that has no fixed point except whatever is easiest to score well on.

Co-evolution with training. "Harness optimization can complement model post-training: long-horizon trajectories and repair outcomes provide execution-time supervision, whereas the model supplies the reasoning and coding capabilities. Joint training should preserve this division while evaluating both layers against shared held-out objectives." Note that the held-out discipline is carried forward into the joint setting — the paper is consistent about that.

Where this sits among its neighbours

What it optimizesRepresentative work (as the paper cites it)How AutoDesign differs
The current answerSelf-Refine (Madaan et al., 2023)AutoDesign's inner loop is this. The outer loop is the addition
Reusable experienceReflexion, Voyager, ExpeLMemory grows; the production system does not. AutoDesign edits the system
Prompts and declarative pipelinesTextGrad, DSPy, GEPAComponent-level rather than whole-harness; AutoDesign edits runtime, tools, and orchestration too
Workflow graphs / codeSTOP, GPTSwarm, ADAS, AFlowSearch over workflow structure; AutoDesign edits an executable harness under a five-component decomposition
The whole harnessSelf-Improving Coding Agent, MOSS, Meta-Harness, HarnessX, Self-Harness, Agentic Harness EngineeringThe direct neighbours. AutoDesign's specific contributions are the design instantiation, the dev-split gate, and PosterBench
Self-rewriting, in the limitGödel machines; Darwin Gödel Machine; Huxley-Gödel MachineProof-based ideal versus empirical evolution. AutoDesign is firmly empirical, single-incumbent, and gated

How this fails in the wild — five ways, and what to watch

You will build a version of this. Here are the ways it goes wrong, each with the symptom you will actually observe first and the instrument that catches it.

FailureWhat you see firstInstrument that catches it
The gate never bites. Dev is too small, or too similar to train, to detect a regressionAcceptance rate near 90%; harness grows fast; the frozen benchmark is disappointingTrack the acceptance rate. The paper's is at most ~44%. Anything above two thirds should worry you
Reward hacking. The optimizer finds a cheap way to satisfy the evaluatorA dimension score saturates while a human looking at the output is unimpressedPeriodic human spot-checks against the frozen evaluator. The paper routes evaluator bias through explicit human input for exactly this reason
Premature convergence. The proposer runs out of ideasA long run of rejections; proposals start rephrasing earlier onesThe record L makes repetition visible. Figure 1(a) shows the plateau shape; human guidance gt is the paper's answer
Noise-driven drift. Changes pass by luck and accumulateTrain and dev both wander; no single edit is defensible; performance is unstable across re-runsPer-task sign counts, and repeated rollouts per task. This is the axis the paper reports least about
Component sprawl. The one-component rule is quietly relaxed to move fasterDiffs touching three components; deltas that cannot be explained; rollback stops being surgicalEnforce it in the tooling, not in the plan. A proposal that edits two component directories should be rejected before it is ever measured
The through-line of all five: every one is a measurement problem, not an intelligence problem. None of them is fixed by a better model. They are fixed by acceptance rates you actually track, splits you actually keep separate, sign counts you actually compute, and rules you actually enforce in code. Meta-harness optimization is an empirical discipline wearing an AI costume.

What to instrument on day one

If you only build six dashboards, build these. Each corresponds to a question this paper had to answer.

InstrumentQuestion it answersHealthy reading
Acceptance rate over iterationsIs the gate doing work?Roughly a third to a half, stable over time
Train and dev curves on one axisAm I overfitting?Coupled and both rising. Divergence is the alarm
Per-task sign counts per accepted changeWas that a systematic fix or a lucky spike?8–10 of 10 improving for real fixes
Component histogram of accepted editsWhere is the value actually coming from?Not concentrated in one component forever — that usually means the others are under-instrumented
Blocking-check failure frequency across runsWhat is the current recurrent failure?A clear top item. If everything is flat, your checks are too coarse to localise anything
Attempts used per run against the budgetIs the inner loop converging or grinding?Well under K, trending down as the harness improves

Notice how many of these the paper itself does not report. Acceptance rate can be inferred (54 of at least 123); the rest cannot. That is not a criticism so much as an observation about where this field's reporting norms currently sit — and an easy way for your write-up to be better than the state of the art.

Five sentences that survive if you forget everything else

1
Fixing the artifact is task-local; fixing the system that makes artifacts compounds across every task you will ever run.
2
One bounded change per named component per iteration, or you will never know which change mattered.
3
Admit a change only if it is strictly better where the evidence came from and no worse where it did not — and never let the proposer see the second set.
4
Gate on what is objectively satisfiable; advise on what is a trade-off. Confusing the two makes loops thrash or ship broken work.
5
Report against something the loop never touched, and publish how big a score gap has to be before it means anything.

Cheat sheet

NumberWhat it is
78.32AutoDesign, PosterBench Main Track, 100 papers
7.45Points over Claude Design under matched Claude Code + Claude 4.8
8.31Points over bare Claude Code — the harness's contribution over doing nothing
73.37Bare Codex on GPT 5.5, with no design harness — above two commercial design agents
54.99 → 67.39Mean over seven configurations, without and with DesignHarness (+12.40 points, +22.5% relative)
+5.01 to +19.56Range of per-configuration gains; correlation with baseline score ≈ −0.84
α = (10,10,15,10,20,25,10)Rubric weights: Faith, Cover, Density, Vis.Ev, Layout, Read, Aesth. Sum 100
40The standard P0 gate ceiling; more severe gates cap lower; inactive ceilings are 100
K = 12Maximum inner-loop refinement attempts before fallback
54 / ≥123Accepted harness updates over outer-loop iterations — at most ~44% acceptance
224Subagents invoked across 7 days of evolving traces
253 / 11 / 40 min / < $3Tool calls, editing turns, wall clock, cost for one autonomous poster run
64.0% [55.2, 77.8]Bradley–Terry preference estimate, 95% interval, 933 blind judgments from 11 reviewers
51.9% → 74.4%Benchmark–human agreement at 0–3-point gaps versus ≥20-point gaps — the benchmark's resolution
r = 0.34 [0.22, 0.44]Poster-level correlation between PosterBench Score and human preference (~12% of variance)
$0.27 → $10.02Cost per poster from LongCat 2.0 (55.13) to GPT-5.5 (81.46)

Where to go from here on this site

If you want…Go to
The harness as an engineering discipline, from first principlesHarness engineering and harness optimization
Systems that rewrite themselvesSelf-improving harnesses, the Darwin Gödel Machine, and code as agent harness
The inner loop — critique and revisionReflexion and loop engineering
Optimizing prompts and pipelines rather than whole harnessesGEPA and prompt engineering
Agent architecture, tools, memory, and skillsAgent architectures, tool use, skills, MCP
Evaluating agents, and why it is hardAgent evaluation and the agent-eval survey
Rubrics, weights, and metric designMetric design, the metrics ladder, GenAI eval
The statistics under Chapters 5, 8, and 9Eval statistics, eval plots, experiment design
Held-out selection and overfitting, in the classical settingModel selection and bias–variance
Preference models and learning from comparisonsReward learning, RLHF and DPO, bandits and preference learning
Keeping a system from regressing as it changesRegression testing for ML
The vision-language model doing the critiqueVLMs and multimodal RAG
Agents that run their own research loopsThe AI Scientist v2, AlphaEvolve, MLEvolve, Paper2Agent

Build a small version this week

StepWhat to doThe decision that matters
1. Pick a taskSomething your agent does repeatedly with a checkable output — a report, a migration, a dashboard, a slide deckCheckable is the whole precondition. If you cannot write a validator, stop here
2. Split the tasksThree disjoint sets: train, dev, and a frozen exam you will not look at until the endThree, not two. Dev gets consumed by ~123 accept/reject decisions
3. Name your componentsWrite down the five (or your own five) and put every file in exactly oneAmbiguous ownership makes the one-component rule unenforceable
4. Build the evaluator from referencesAnnotate a handful of gold outputs on named dimensions; implement rules where you can, a model judge where you cannot; weight the dimensions; freeze itWeight what you actually care about. AutoDesign put 45% on Readability and Layout, and that choice shows up in every later table
5. Instrument trajectoriesLog every tool call, every check result, every revision, with enough structure to be read by a subagentScores diagnose nothing. The trajectory is the evidence
6. Write the gate firstSix lines: strictly better on train, not worse on dev, else revertWrite it before the optimizer, or you will be tempted to skip it on the day a proposal looks great on train
7. Wall off devDev scores go to the gate and nowhere else. Never into the record, never into a promptEnforce it in the data layer, not in an instruction. Instructions to an optimizer are suggestions
8. Record refutationsPersist rejected plans and diffs with the reasonOtherwise you will watch the same idea proposed for the fifth time on iteration 40
9. Report resolutionMeasure how often your evaluator's preferred output matches a human's, as a function of the score gapThis tells you the smallest difference your benchmark can actually see. Almost nobody does this and everybody should
10. Expect ~44% acceptanceIf nearly everything is accepted, your gate is too loose or your dev set is too small to biteA high rejection rate is the system working, not the system stuck
Cross-domain bridge
The acceptance gate is a validation split for source code
You already know this algorithm. In classical machine learning you fit on train, choose hyperparameters on validation, and report on test — and the reason is that a model selected on the data it was fit to will look better than it is. AutoDesign applies the identical logic one level up: the harness is fit on training trajectories, selected on a development split, and reported on a frozen benchmark. Chapter 5's Candidate B — +7.40 on train, −6.33 on dev — is the classic overfitting picture with system code in place of weights. Even the multiple-comparisons caveat survives the translation: ~123 accept/reject decisions extract information from dev the same way a hyperparameter sweep does, which is exactly why the third, frozen split is not optional. See model selection and eval statistics for the same geometry with different nouns.

References

  1. Luo, Y., Jiang, H., Zou, J., Huang, X., Yan, W., Li, H., Yue, Z., Li, J., Chen, X., Zhao, X., Liu, J., Cui, J., Shen, Z., Li, X. "AutoDesign: Meta-Harness Optimization for Long-Horizon Agentic Design," 2026 — arXiv:2608.13560. The paper this lesson is built on. Code: github.com/Yaxin9Luo/AutoDesign.
  2. Lee, Y., Nair, R., Zhang, Q., Lee, K., Khattab, O., Finn, C. "Meta-Harness: End-to-End Optimization of Model Harnesses," 2026 — arXiv:2603.28052. The harness-as-optimization-target framing AutoDesign builds on.
  3. Nguyen, M., Nguyen, Q., Vuong, P. "Recursive Self-Evolving Agents via Held-Out Selection," 2026 — arXiv:2606.28374. The precedent for gating persistent updates on an independent split — the direct ancestor of Chapter 5.
  4. Ren, Z. et al. "Self-Improvements in Modern Agentic Systems: A Survey," 2026 — arXiv:2607.13104. Where the model-versus-scaffold distinction is laid out.
  5. Robeyns, M., Szummer, M., Aitchison, L. "A Self-Improving Coding Agent," 2025 — arXiv:2504.15228; Cai, Q. et al. "MOSS: Self-Evolution through Source-Level Rewriting," 2026 — arXiv:2605.22794. Agents that edit their own source from execution evidence.
  6. Chen, T. et al. "HarnessX: A Composable, Adaptive, and Evolvable Agent Harness Foundry," 2026 — arXiv:2606.14249; Lin, J. et al. "Agentic Harness Engineering," 2026 — arXiv:2604.25850; Lee, H. et al. "Recursive Harness Self-Improvement," 2026 — arXiv:2607.15524; Karten, S. et al. "Continual Harness," 2026 — arXiv:2605.09998; Liu, Z. et al. "Adaptive Auto-Harness," 2026 — arXiv:2606.01770. The immediate neighbourhood.
  7. Madaan, A. et al. "Self-Refine: Iterative Refinement with Self-Feedback," NeurIPS 2023. The artifact-level inner loop AutoDesign starts from.
  8. Shinn, N. et al. "Reflexion: Language Agents with Verbal Reinforcement Learning," NeurIPS 2023; Wang, G. et al. "Voyager," 2023 — arXiv:2305.16291; Zhao, A. et al. "ExpeL: LLM Agents Are Experiential Learners," AAAI 2024 — arXiv:2308.10144. Experience that persists across attempts but does not edit the harness.
  9. Yuksekgonul, M. et al. "TextGrad: Automatic Differentiation via Text," 2024 — arXiv:2406.07496; Khattab, O. et al. "DSPy," ICLR 2024; Agrawal, L. et al. "GEPA: Reflective Prompt Evolution," ICLR 2026. Component- and pipeline-level optimization.
  10. Zelikman, E. et al. "STOP: Self-Taught Optimizer," COLM 2024 — arXiv:2310.02304; Hu, S., Lu, C., Clune, J. "Automated Design of Agentic Systems," ICLR 2025; Zhang, J. et al. "AFlow," ICLR 2025; Zhuge, M. et al. "GPTSwarm," ICML 2024. Search over workflow structure.
  11. Zhang, J. et al. "Darwin Gödel Machine: Open-Ended Evolution of Self-Improving Agents," ICLR 2026 — arXiv:2505.22954; Wang, W. et al. "Huxley-Gödel Machine," 2025 — arXiv:2510.21614; Schmidhuber, J. "Gödel Machines," 2006 — arXiv:cs/0309048. The self-rewriting lineage, from proof-based ideal to empirical evolution.
  12. Zhuge, M. et al. "Agent-as-a-Judge: Evaluate Agents with Agents," ICML 2025. Process-level evidence alongside final-outcome assessment.
  13. Pang, W. et al. "Paper2Poster," NeurIPS 2025 D&B; Zhang, Z. et al. "PosterGen," 2025 — arXiv:2508.17188; Vinaykumar, A. et al. "Any2Poster," 2026 — arXiv:2606.02915; Sun, T. et al. "P2P," ICLR 2026; Choi, J. et al. "PosterForest," ACL 2026; Wang, H. et al. "SciPostLayout," CVPRW 2024. The paper-to-poster baselines in Table 1.
  14. Liu, Z. et al. "DesignAsCode," 2026 — arXiv:2602.17690; Qu, Y. et al. "IGD: Instructional Graphic Design," ICCV 2025; Si, C. et al. "Design2Code," NAACL 2025. Why the artifact stays as editable code.
  15. Bradley, R. A., Terry, M. E. "Rank Analysis of Incomplete Block Designs: I. The Method of Paired Comparisons," Biometrika 39(3/4):324–345, 1952. The 74-year-old model behind Chapter 9.
"What I cannot create, I do not understand."
Take an agent you already run, three task splits, a validator you trust, and a six-line gate. Let a coding agent read your traces and propose one bounded change. Reject most of them. In a week you will have something that is measurably better than what you started with — and, more valuable, a record of what does not work.
Exit gate — teach it back before you leave.

Without scrolling up: (1) write Equation 1 and name the five harness components; (2) write the acceptance condition and explain why train is strict and dev is not; (3) given α = (10,10,15,10,20,25,10) and = (9.35, 9.40, 8.41, 5.97, 8.55, 8.17, 5.59), compute the weighted rubric and say why it is not 78.32; (4) explain why the ablation gains correlate negatively with baseline score, and what that implies about harness engineering versus model spend; (5) convert a 61.3% head-to-head rate into a Bradley–Terry strength gap, and say why a 2-point PosterBench difference should not change your mind about anything. If any of the five stalls, its chapter is one tap away.

Which single sentence best captures what AutoDesign contributes?