Research → practice
01 / 24
HarnessDev · September 2026

Can LLMs build the systems that build capability?

A plain-English deep dive into a benchmark that evaluates the agent harness itself: the loop, tools, context, memory, recovery and verification around a model.

Based on “HarnessDev: Can LLMs Create and Evolve Their Own Agent Harness?” by Yuhao Wu et al. · arXiv:2609.01437v1

HARNESSthe execution layer
modelweights stay fixed
systemkeeps evolving
new unitrunnable infrastructure
01
TL;DR · start here

The model isn’t the whole agent.

HarnessDev asks whether an LLM can create and improve the software layer that turns its outputs into reliable actions.

The idea

Evaluate the scaffold

Instead of only scoring an answer, freeze the harness and reuse it across downstream tasks.

Why it matters

Capability can live outside weights

Tool policy, context handling, retries, state and verification can change outcomes even when the model stays identical.

The catch

Improvement is not the same as generalisation

Visible feedback gains often shrink on held-out tasks, and transfer across runtime models is fragile.

Practical takeaway: treat your harness like a product and an experimental artefact. Version it, test it, observe it, and measure cost as well as success.

Paper abstract; Sections 1, 3.1, 4.2–4.3. All evidence claims in this deck are marked with paper sections, tables or figures.
02
Section 01

Plain English

What a harness is, why ordinary agent benchmarks hide it, and where this becomes useful.

01
03
01 · The mental model

A harness is the operating system around the model.

It decides what the model sees, which tools it can call, when it should retry, how it carries state, and what counts as done.

01Receive task + environment
02Plan and call tools
03Verify, recover, finish
Paper Section 1 defines the harness as execution infrastructure managing the loop, tools, context, failure recovery and result verification.
04
01 · The evaluation gap

Most benchmarks start after the hard systems work is done.

They give every model the same task, reward and execution scaffold. That is useful for controlled comparisons, but it treats the harness as background configuration.

Common benchmark

Fixed harness

  • Tools already wired
  • Context policy selected
  • Retries and stopping rules chosen
  • Verifier supplied
versus
HarnessDev

System builder

  • Starts from a weak but runnable seed
  • Builds a complete execution system
  • Freezes the artifact
  • Runs it on unseen tasks

The shift is subtle but important: the evaluated artefact is persistent runnable infrastructure, not a one-off answer.

Paper Figure 1; Sections 1–3.1.
05
01 · The benchmark

Two stages: create it, then live with it.

HarnessDev separates the ability to build a harness from the ability to maintain one as real execution feedback arrives.

RQ1 · Creation

Weak seed → runnable H

A creator LLM receives a task specification and 1–3 development cases. It adds the missing control layer, then the harness is frozen.

Visible: dev cases · Hidden: official evaluation tasks and scores
RQ2 · Evolution

H₀ → H₁ → … → Hₙ

The creator revises its own harness from downstream feedback, with every official version frozen, tested and audited.

Visible: designated feedback set · Hidden: held-out generalisation
Hseedpolicy-free floor
H₀first complete harness
Hₙevolved, frozen candidate
Paper Figure 1; Table 1; Sections 3.2–3.4.
06
01 · Anatomy

Six control modules turn a model into an agent.

Select a module to see the job it performs. The paper’s interface makes these functions inspectable and testable.

Paper Figure 3; Appendix C. Each module’s interface is summarised in the paper’s Harness Interface Specification.
07
01 · Why use it?

When the harness becomes the product.

These are adapted use cases, not benchmark results. The pattern is useful wherever the same model must act repeatedly under changing tools, data and constraints.

Coding agent

Use verification gates, patch tracking and rollback to prevent “looks done” from becoming “is done”.

Focus: lifecycle · verification

Research analyst

Make source retrieval, deduplication, citation evidence and stopping rules explicit and auditable.

Focus: tools · context · verification

Lab notebook agent

Persist experiment state, record provenance and recover cleanly after a long-running tool failure.

Focus: state · lifecycle

ML experiment agent

Separate orchestration from the executor so you can compare cost, reproducibility and final artefacts.

Focus: execution · evaluation

Customer workflow

Keep a stable contract while adapting tools, permissions and compliance rules to each deployment.

Focus: tools · constraints

Agent platform

Turn traces and failures into targeted harness changes, then check whether they transfer beyond the feedback set.

Focus: evolution · generalisation
Use cases are implementation interpretations derived from the paper’s harness modules and deployment motivation in Sections 1–2; they are not claims that the benchmark evaluated these applications.
08
Section 02

Deep dive

The protocol, the evidence, the failure modes and the uncomfortable portability question.

02
09
02 · Protocol

Separate the builder from the runner.

The central experimental discipline is role separation. The creator edits the harness; the executor uses it only after it is frozen; the evaluator scores the resulting task artefact.

Creator LLM · LC
Builds H

Works in a mutable development workspace. Reads cases, edits code and responds to visible feedback.

Executor LLM · LE
Runs inside H

Solves downstream tasks using the frozen harness. In Self-Eval, LE = LC; in Unified-Eval, it is fixed.

Evaluator · J
Scores y

Reads the authoritative domain artefact: repository diff, submission, prose, or cited answer.

Why this matters: if the same model builds and runs the harness, a score reflects model capability, harness design and their compatibility together.

Paper Equation 1; Sections 3.1 and 3.4; Appendix D.
10
02 · RQ1 · Creation

Start with enough floor to measure design.

The shared seed is runnable and auditable, but deliberately not intelligent. It parses inputs, exposes passive primitives and writes audit files. It does not solve the task.

Seed provides
Stable CLI + configCommon invocation and provider-neutral model settings.
Passive primitivesPaths, files, search, process execution and artefact I/O.
Audit envelopeResult, trajectory, response and runtime logs.
Creator must add
1
Control layerLoop, policy, context, state, lifecycle and verification.
2
Domain finaliserProduce the scorer-readable artefact, not just logs.
3
General-purpose behaviourUse public cases to improve the system without hidden-task shortcuts.
Paper Sections 3.2–3.3; Figure 2; Appendix C.1.
11
02 · RQ2 · Evolution

Improve the harness without mistaking noise for progress.

Evolution exposes downstream execution feedback, but holds out a disjoint set for post-freeze generalisation. The creator gets up to ten official evaluation pairs after H₀.

H₀freeze creation harness
run100 SWE-Pro + 89 Terminal
editread feedback, patch H
Hᵢfreeze + repeat
10post-H₀ full-evaluation pairs allowed
630SWE-Pro tasks held out from the creator
64adjacent official version switches across nine lineages

Evolution is a software search process under partial observability: the agent must diagnose which structural change caused a real failure, then verify the fix end to end.

Paper Sections 3.2, 4.3; Table 6; Table 7.
12
02 · Measurement

Capability and efficiency are separate axes.

A harness can improve task success by spending far more tokens, or consume less while silently failing. HarnessDev reports both.

Capability

Native downstream task performance on held-out benchmarks: success, accuracy, medal rate or rubric score depending on the domain.

Efficiency

Executor-model tokens consumed during deployment, reported as total and mean per task. Creator tokens are excluded.

4domains
5downstream benchmarks
2,207unique creation instances
independent creation runs per creator–benchmark pair
Paper Table 2; Sections 3.3 and 3.5; Section 4.1.
13
02 · Results · Creation

Models can build runnable harnesses, but quality depends on the domain.

Use the toggle to compare Self-Eval with a fixed Gemini executor. The average is the unweighted mean of SWE-Pro, Terminal-Bench, EQ-Bench3 and BrowseComp.

Average downstream score
Human-engineered reference: 86.2 average in Self-Eval comparison. It is an external system-level reference, not a paired control.
What the table says

Opus 4.8 leads Self-Eval at 67.8, but remains below the selected human reference at 86.2.

Writing can approach mature references84.6
Search has the largest gap52.4
Data failures often look like harness defects77.8%
Paper Table 3; Table 4; Section 4.2. Scores are paper-reported avg@3 values.
14
02 · Results · Anatomy

More code did not mean a better harness.

The Code artifacts added 17,111 net lines in total, yet focused changes and verification sometimes beat larger rewrites.

17k

net lines added across 18 Code harnesses.

Gemini added the fewest lines: 1,006. It still achieved the best Terminal-Bench score among creators: 68.8.

Evidence observed in Code harnesses
Explicit execution loop18 / 18
Tools, lifecycle, verification complete13 / 18 · 13 / 18 · 15 / 18
State class defined11 / 18
Checkpoint events observed0 / 26,679 trajectories
Paper Section 4.2; Table 5; Figure 5.
15
02 · Results · Transfer

A runnable harness isn’t automatically portable.

Changing only the executor model can change the ranking. The harness may have co-adapted to the model that created or originally ran it.

Creator co-adaptation

Opus Code: 69.3 → 33.0

SWE-Pro score under Self-Eval versus fixed Gemini. The paper links the collapse to a hard-coded 120-step limit around the original executor.

Executor was the bottleneck

Qwen BrowseComp: +17.6

Qwen’s harness improved under fixed Gemini on BrowseComp, suggesting its original executor was constraining performance.

Compatibility is a first-class property: prompts, tool protocol, budgets, stopping rules and message formats all matter.

Paper Section 4.2; Figure 6. Reported changes are Unified-Eval minus Self-Eval for the same creator harness.
16
02 · Results · Evolution

Visible gains were real. Held-out gains were smaller.

Self-runtime creators all improved on the visible feedback pair. The held-out improvement was more modest, and fixed-Gemini transfer was weaker.

Feedback pair · visible during evolution
Held-out-630 · hidden until after freeze

Best self-runtime held-out improvement: Opus 4.8 at +4.44 points. Mean gain across the five self-runtime declarations: +3.11.

Paper Table 6; Section 4.3. Bars show H₀ → declared version; held-out scores were never shown to the creator.
17
02 · Failure modes

The hard part is diagnosis, not just editing.

The benchmark’s most useful lessons are about what a self-improving harness must notice before it changes itself.

Overfitting

Optimise the visible score, lose the future

Across 64 comparable switches, feedback and held-out scores moved in the same direction only 34 times: 53.1%.

Dead mechanisms

Declared code may never run

Of 169 new functions or classes in Evolution, 113 were reachable from the entry point, 31 only through dead code and 25 had no caller.

Weak self-tests

Counting tests is not enough

Self-test count correlated weakly with downstream score: Spearman ρ only 0.13–0.26. Revision calls reached 0.57.

Noisy selection

The best visible version may be lucky

Only 2 of 9 declared versions were held-out optimal. Repeated runs could vary by about ±4.75 pair-score points.

Paper Section 4.3; Figures 7–8; Section 6.1. Correlation is descriptive evidence reported by the authors, not a causal claim.
18
Section 03

How to implement

A practical, model-agnostic recipe adapted from the benchmark contract.

03
19
03 · Step by step

Build the smallest harness you can actually measure.

Use this as an implementation template. It is adapted from HarnessDev’s interface and evaluation protocol, not a copy-paste production framework.

1
Write a stable invocation contractDefine task input, model config, workspace, output directory and the authoritative final artefact.
2
Start with a weak but runnable seedProvide passive primitives and audit writers. Do not smuggle in the agent policy you want to measure.
3
Implement the six modulesExecution, tools, context, state, lifecycle and verification. Keep each interface inspectable.
4
Separate creator, executor and evaluatorFreeze the harness before downstream evaluation. Keep creator tokens separate from executor cost.
5
Hold out tasks before you beginUse a visible feedback set for iteration and a disjoint hidden set for generalisation.
Adapted from Paper Sections 3.1–3.5 and Appendix C. The five steps above are an implementation synthesis.
20
03 · Step by step

Make the control plane explicit.

The code shape below keeps the harness modules separable. That makes failures easier to trace and changes easier to audit.

Runtime path
taskinput + workspace
loopplan → act → observe
gateverify → recover → finalise
# adapted interface sketch
class Harness:
  run(task) -> Result
  step(state, observation) -> Action

  tools.call(name, **params)
  context.build(task, history, state)
  state.save(checkpoint)
  lifecycle.onFailure(error)
  evaluation.evaluate(result, criteria)

# always emit auditable artefacts
result.json
trajectory.jsonl
response.md
runtime logs
Interface names and artefact contract adapted from Paper Appendix C; code shown here is an explanatory sketch, not a quoted implementation.
21
03 · Step by step

A one-week pilot for a real workflow.

Pick one narrow task family. The goal is not to build a general agent; it is to learn whether a versioned harness creates durable gains.

Day 1Choose 20–30 representative tasks. Define the authoritative output, evaluator, failure taxonomy and held-out split before implementation.
Day 2Build the weak seed: CLI, model gateway, passive tools, audit files and a no-op run that honestly reports partial status.
Day 3Add the execution loop, tool policy and context builder. Log every action, observation, token count and termination reason.
Day 4Add verification, recovery and checkpointing. Force failures: timeout, malformed tool result, empty answer, stale state and partial artefact.
Day 5Freeze H₀. Run feedback tasks and held-out tasks with a fixed executor. Compare capability, cost, regressions and transfer to one second model.
Pilot schedule is an original practical recommendation derived from the paper’s benchmark contract and reported failure modes.
22
03 · Step by step

Don’t ship an improvement you can’t explain.

Before accepting a harness revision, require evidence across behaviour, cost, reachability and transfer.

Before editing

Name the failure

  • Which trace shows it?
  • Which module owns it?
  • What should change?
After editing

Prove the path

  • Does the new code trigger?
  • Does the old case still pass?
  • Does the verifier catch false success?
Before selecting

Check transfer

  • Does cost move with score?
  • Does it work on held-out tasks?
  • Does another executor survive?

Rule of thumb: an edit is evidence-backed only when you can connect failure → mechanism → end-to-end re-test → generalisation result.

Synthesis from Paper Sections 3.4–3.5, 4.2–4.3 and 6.1.
23
Conclusion

The harness is another place capability accumulates.

Explicit. Inspectable. Testable. Reusable. But only if it can survive unseen tasks, new executors and the boring reality of failure.
BuildMake the control plane a first-class artefact.
MeasureScore capability and efficiency separately.
EvolveUse feedback, but trust held-out evidence.

Source paper: arXiv:2609.01437v1 · Project page: self-developing-agents.github.io

Deck prepared from the attached paper, “HarnessDev: Can LLMs Create and Evolve Their Own Agent Harness?”, dated September 2, 2026.

24