Sponsored by

State of Product reveals what AI still hasn’t solved

80% of product professionals say AI helps them ship faster, but customers aren’t seeing value any sooner. Atlassian’s State of Product 2027 explores the gains AI is delivering and the challenges that remain, from decision-making that hasn’t kept pace to gut instinct overriding customer evidence.

researchaudio.io · change record · ref arXiv 2610.14224
system: agent harness
model weights: no change
approver: a test run
answer key: none

Same Weights, New Files: GLM-5 Scored 11.5 Points Higher

Changes with no test run decreased a code benchmark result from 73.4 to 63.2.

chg 01
The result
state: approved

GLM-5 scored 64.2 on WorkBuddy-Bench. Gemini 3.5 Flash scored 72.4 on the same benchmark. Both models used the same stock agent setup, OpenCode.

Google Cloud AI Research then applied one step of Harness² to GLM-5. The model weights did not change. GLM-5 scored 75.7, which is higher than the Gemini score.

64.2
GLM-5
stock harness
75.7
GLM-5
one Harness² step
72.4
Gemini 3.5 Flash
stock harness

WorkBuddy-Bench average of three domains (Code, Web, Office), OpenCode harness, one improvement step (k=1). Source: Table 1 of the paper.

The step changed the files around the model: the system prompt, the guardrails, the skills, the scripts and other parts. The paper calls this set of files the harness. This issue explains how the method changes a harness with no answer key. It also shows where the method failed.

chg 02
The problem: no answer key
state: open

An agent is a model plus a harness. The harness controls what the model reads, which tools it can use, and how it gives work to other agents. In Harness², the harness has eight parts. Each part is a file. Each change is a diff that you can read and test.

groupparts (each part is a file)
contextsystem prompt, guardrails, memory: in the context for each call. Skills: loaded when the agent needs them.
toolstool guidance: when and how to use each tool. Scripts: Python helpers that the agent runs through bash.
delegationsubagents: workers with their own context window. They send back their result and nothing more.
middlewareplugin: code in the tool loop. It enforces a behavior. It does not ask for it.

The eight editable components. Source: Figure 2 and Table 5 of the paper.

Most methods tune a harness offline. They test many versions against a grader on training tasks, then they ship the best version. Meta-Harness, one of the baselines, works this way.

In production, a new task has no training data and no grader. The problem is clear: the system must decide if a change helped, but it has no answer key.

chg 03
Propose, Probe, Compose
state: mechanism

Harness² uses a contrastive step with three parts. Think of a canary deployment. You do not send a config change to all servers. You send it to a small group first. You compare that group with the baseline on the same traffic. Then you keep the change if the data supports it.

Reference run. First, the agent does the task with the current harness. Nobody grades this run. It shows how the harness behaves.

Propose. Two editors read the reference run. The invariant editor changes how the agent works: plans, tool use, and checks of its own output. The domain editor adds what an expert knows: rules of the field, the shape of the deliverable, and expert checks. Each edit must point to a specific moment in the run.

Probe. Each candidate harness does the same task, with the same model, in the same environment. The differences between the runs are the evidence.

Compose. A composer reads all runs and all diffs. It can merge the edits, revise them, adopt one candidate, or keep the current harness. Each decision must point to an observation in a run.

reference run
current harness, not graded
→
propose
invariant edit + domain edit
→
probe
same task, model, environment
→
compose
merge, revise, adopt or keep
→
reflect
store harness and lessons
never in the workspace: rubric · score · grader

One improvement step. The reflect stage feeds the library for the next task (chg 06). Source: Figure 3 of the paper.

No stage sees a rubric, a score or a grader. A guard does not give an editor any workspace that contains a verdict, a rubric or a score. In the main experiments, the editor is Claude Opus 4.8.

The budget k controls the scale. Parallel recursion makes k invariant candidates and k domain candidates, then k compositions from the full pool. Sequential recursion links k steps, and each step starts from the last result. When k is more than 1, a selector compares the anonymous deliverables and picks one.

chg 04
The change with no test run
state: rolled back

The team also tested a direct edit. An editor read the harness files and changed them. It had no reference run, no probes and no library.

domainstockdirect editedit + k=1 libraryedit + k=5 library
Code73.463.2 −10.273.8 +0.474.3 +0.9
Web69.965.0 −4.972.6 +2.774.3 +4.4
Office74.077.1 +3.177.5 +3.579.1 +5.1

Gemini 3.5 Flash, OpenCode, WorkBuddy-Bench. Change against the stock harness. The library columns use a library from earlier tasks with no new probes. Source: Figure 7 (left) of the paper.

With Gemini 3.5 Flash, the direct edit decreased the Code score by 10.2 points and the Web score by 4.9 points. The Office score increased by 3.1 points. A library from earlier k=1 runs returned the scores to the stock level. A library from k=5 runs increased all three scores, with no new probes.

This part is our analysis. The paper did not test it. The direct edit is like a request to a model to improve a prompt file, with no test run after the change.

chg 05
What the approved changes did
state: approved

The appendix shows the edits that the composer kept. No edit made the model smarter. Each edit changed a procedure.

taskwhat the run showedthe editscore
WorkBuddy CodeThe model wrote tool calls as plain text, so no tool ran.Tool guidance (1,023 bytes): never write a tool call as text.60.0 → 100
WorkBuddy OfficeThe agent grouped data at the wrong level. No row matched the key.Skill: the exact group key and two derived fields. Guardrail: do not change the inputs; clean the data before you aggregate it.23.6 → 100
LAB arbitrationThe markup stayed in tracked changes. As text, the markup disappeared.Skill: deletions as strikethrough and insertions as bold, in the body text.44.4 → 94.5
JobBench productionThe agent did not compare figures across files. It did not open its outputs again.Guardrail, reconciliation skill, and a script that opens each output file again.43.1 → 77.8
JobBench research, Opus 5 edits itselfResearch used the full budget. The output files stayed empty.Plugin: after 25 tool calls with an empty output folder, it adds a note to each tool result.72.0 → 100

Base run score to re-run score. Source: Figures 9 and 15 to 19 of the paper.

About half of all edits were in skills and scripts. After one step, the tool error rate decreased on all three benchmarks. On JobBench, it decreased from 14.4% to 9.1%.

The plugin case gives a useful rule. A code comment in the paper gives the reason. The model can skip an instruction. It cannot skip a line inside its own tool result.

chg 06
The second loop: a library of lessons
state: approved

After each task, a reflector examines the full record. It stores two items in a library: the adopted harness and an EXPERIENCE.md file. That file records the weakness, the conditions, and the evidence. If the evidence is weak, the reflector adds nothing.

The next task does not start from the last harness. It starts from the stock harness, and the editors can read the library. A fact from an earlier task is a hypothesis until the editor examines it again.

change to the methodWorkBuddyJobBench
full Harness², k=177.536.0
no library74.4 −3.134.2 −1.8
two generic editors in place of invariant and domain74.6 −2.932.3 −3.7
no compose step75.9 −1.634.1 −1.9

Ablation, Gemini 3.5 Flash under OpenCode. Source: Table 3 of the paper.

The library also moves between benchmarks. A library from JobBench increased the one-step WorkBuddy scores by 0.6, 0.5 and 2.9 points.

The editor does not have to be a larger model. The team used the same model as executor and editor at k=2. All five models improved on every benchmark. GLM-5 increased its LAB score by 13.7 points. Claude Opus 5 increased its scores by 3.3, 5.5 and 3.0 points.

chg 07
Results and cost
state: held: more compute
benchmarkmodelstockk=1k=5
WorkBuddy-BenchGemini 3.5 Flash72.477.580.8
GLM-564.275.779.6
JobBenchGemini 3.5 Flash31.536.039.0
GLM-520.624.228.4
LAB (partial)Gemini 3.5 Flash79.981.984.5
GLM-559.671.478.1

OpenCode harness. k=5 uses parallel recursion. LAB partial is the per-criterion pass rate. Source: Tables 1 and 2 of the paper.

The baselines had lower scores. ReasoningBank was as much as 6.6 points below the stock harness on Code tasks. Harness Scaling was below the stock harness in 7 of 12 pairs. Meta-Harness was the strongest baseline. Harness² was better on WorkBuddy-Bench and JobBench in all four configurations. On LAB, Meta-Harness was better for Gemini 3.5 Flash under Codex.

The team also compared production harnesses with Gemini 3.5 Flash on WorkBuddy-Bench. Claude Code had the best stock score on Code and Office. Codex had the best stock score on Web. Harness² started from OpenCode and was 4.6, 5.8 and 4.9 points above the best stock harness in each domain.

Each candidate is a full run of the task. Thus, the method uses more tokens. The paper counts all tokens before the deliverable, which includes the edit work. With Gemini 3.5 Flash, k=5 increased the gain over the stock harness. On JobBench, the gain went from 4.5 points at k=1 to 7.5 points. On WorkBuddy-Bench, it went from 5.1 to 8.4.

Both configurations are on the Pareto frontier of cost and score. Meta-Harness used more compute than k=5 and got a lower score. The improved agent also used fewer steps on WorkBuddy-Bench: 21.9 per task, from 25.4.

chg 08
Where the method failed
state: rolled back

The authors show nine failures in detail. Four of them are useful for anyone who builds a loop like this.

failurewhat happenedscore
the selector picked the wrong outputThe candidates scored 95, 85, 85, 80 and 55. The blind selector picked the 55 as the simplest full implementation.96 → 55
one edit spread to all candidatesAn edit said that keys must keep their exact names. The tests used lowercase keys. All four candidates kept the rule and scored 42.50 → 42
the editor checked its own workThe editor assumed that a cache keyed on object identity was enough. Its own checker script reported a pass three times. 4 of 11 tests needed a content-keyed cache.75 → 64
an assumption became a ruleA skill told the agent not to recommend a claim for an extra 106,153 dollars. The benchmark criterion gave credit for that recommendation.83 → 81

Reference score to final score. The pipeline did not see these scores. Source: Figure 14 of the paper.

The paper gives the lesson in one line: “A checker written by the editor cannot catch the editor’s assumption.” Candidates from the same model share the same blind spots. When candidates agree, the agreement is a signal, not proof.

chg 09
Post-change review for your own agent
state: actions
[1]Test each harness change with a run. A change that nobody runs is not tested. The direct edit decreased one score by 10.2 points.
[2]Write two edits with different scopes. Make one edit for procedure and one edit for domain knowledge. When the team removed this split, the scores decreased by 2.9 and 3.7 points.
[3]Put new instructions in on-demand parts first. Use this sequence from the editor prompts:
1. a skill for a procedure with a trigger
2. a script for a repeated mechanical step
3. a subagent for a large input with a small answer
4. a plugin for a rule that the model skips
5. always-on prompt text, last
[4]Use a check that the editor did not write. The editor’s own checker reported a pass three times on a wrong assumption.

The model weights did not change in any of these experiments. The authors name one open problem: the library. It grows with each task. The current version does not merge or remove old entries.

researchaudio.io · record closed
Paper: Harness²: Recursive Agent Harnessing for an Open World (Xu et al., Northwestern University and Google Cloud AI Research, Oct 9 2026).
Code: google-research/harness2 (Apache 2.0) · project site.
Benchmarks: WorkBuddy-Bench · JobBench · Harvey LAB.