Harness co-training — training a model with the agent scaffold it will ship inside already present in the loop — stopped being a research aside in 2026 and started appearing as stated methodology. Four vendor engineering posts published before August 5, 2026 show the shift mid-flight: poolside rolls the same prompts through several agent harnesses on purpose, Cursor injects a correction at the exact turn a tool call fails, Z.ai publishes scores under a best-reported-harness heading, and Anthropic argues for leaving the model untouched.
The reason this matters commercially is narrower than the phrase suggests. If a model is shaped by the harness it trained in, then the number on a leaderboard is a property of a model-plus-harness pair, not of the model. Swap the CLI and you may not get the capability you bought. One vendor now names that failure mode in its own limitations section, in its own words, and calls it unsolved.
This guide reads the four posts side by side: what each vendor actually changed, where the evidence is strong and where it is vendor-stated, the one benchmark table that quietly concedes the whole point, and the questions a team should ask before standardising on a single coding model and the CLI it was raised in. Everything below is sourced to a dated, public engineering post, or in one case to a vendor changelog.
- 01Multi-harness rollouts are now a named training step.poolside's Laguna S 2.1 (July 21, 2026) rolls the same reinforcement-learning prompts out in several agent harnesses so behaviour carries across scaffolds rather than overfitting to one. It is described as a change to the RL loop, not a prompting trick.
- 02The failure mode has a vendor-supplied name.poolside lists harness overfitting as an open limitation: the model can mishandle tool schemas in third-party harnesses that differ only slightly from its native one, sometimes reaching for a memorised tool interface on first contact.
- 03Cursor corrects the model at the turn it erred.Composer 2.5 (May 18, 2026) inserts a corrective hint into the context at a failing tool call, builds a teacher distribution from the hinted rollout, and trains the unhinted student toward it — a localised signal for exactly this class of error.
- 04Benchmark tables already carry a harness heading.Z.ai's GLM-5.2 post (July 13, 2026) reports Terminal-Bench 2.1 under a best reported harness heading, with the harness differing by model. Score provenance is now part of the number, disclosed rather than normalised.
- 05The previous default posture is documented too.Anthropic's November 26, 2025 write-up fixes the model and moves everything else — agent split, checklist file, commit discipline, browser testing. Read against July 2026, it makes the co-training turn look like a genuine methodology shift.
01 — The ShiftWhat harness co-training actually means.
A harness is the scaffold a model runs inside: the tool definitions it is handed, the system prompt, the turn loop, the sandbox, the timeouts, the retry policy. It is the difference between a model weight file and something that can edit a repository. Every vendor in this post ships one — poolside calls its own pool, Z.ai ships ZCode as the official harness for GLM-5.2, and the market for these things is now large enough to compare on its own terms, which we did in our breakdown of the harness market itself.
Co-training is the narrower claim: that the harness is present inside the training loop, so scaffold-shaped behaviour becomes training signal rather than something the scaffold has to paper over afterwards. That can mean several harnesses in rotation during reinforcement learning, or a single harness whose failures are converted into a localised correction. Both variants appear in the sources below. Neither is the same as the older, well-documented posture of holding the model constant and engineering the scaffold around it.
The harness
Tool definitions, system prompt, sandbox, timeouts, retry policy. The thing that turns a checkpoint into an agent. Vendors increasingly ship theirs as a separately versioned product on its own release cadence.
Harness engineering
Hold a frontier model constant and fix long-horizon failures in the scaffold — split the roles, add a checklist file, force commit discipline, add a verification loop. Anthropic's November 2025 write-up is the clearest published statement of this posture.
Harness co-training
Put harnesses into training so scaffold-shaped behaviour becomes signal — several harnesses rolled out in parallel, or a correction injected at the failing turn and distilled back into the policy. poolside and Cursor each describe a version of this in 2026.
These are postures, not camps. Nothing stops a lab from doing both, and the public record is thin enough that absence of a co-training statement is not evidence of its absence in practice. What can be said with confidence is narrower and more useful: between November 2025 and July 2026, the published methodology moved, and the vendors who moved it wrote down why.
02 — poolsideMulti-harness rollouts, named as a training-loop change.
poolside released Laguna S 2.1 on July 21, 2026 — a 118-billion-parameter Mixture-of-Experts model with 8 billion active parameters and context up to one million tokens, shipped day-one on Hugging Face under the OpenMDW-1.1 licence with BF16, FP8, INT4 and NVFP4 weights plus official GGUF and MLX conversions. We covered the release itself in our Laguna S 2.1 launch analysis; the part worth returning to is buried in the training section.
In the reinforcement-learning stage, poolside describes multi-harness rollouts: the same prompts are rolled out in several agent harnesses rather than one. The stated purpose is that behaviour should carry across scaffolds instead of overfitting to a single one. That is a change to how the RL data is generated, not to the prompt the user sees — which is precisely what makes it interesting. The scaffold has moved upstream of the checkpoint.
“The same prompts are rolled out in several agent harnesses, so the model learns behaviors that carry across scaffolds instead of overfitting to one.”— poolside, Introducing Laguna S 2.1, July 21, 2026
The surrounding run detail supports the reading that this was a deliberate infrastructure investment rather than a line of marketing copy. Post-training runs in two stages — supervised fine-tuning, partly on synthetic data, then RL, which for this model ran in FP8 precision for the first time in the Laguna line. poolside also built new RL sandboxing for the run: background-process support, selective network blocking to shrink the reward-hacking surface, and artifact caching. Rollout budgets were made more generous than any prior Laguna model, with longer timeouts, more tokens per turn and more turns per task.
Agentic and non-agentic tasks
The corpus includes 83k terminal use cases, 168k standard software-engineering workflows, and roughly 38k tasks reproducing real commits across about 17,000 repositories — plus merged-PR reproduction, injected-bug fixing and deleted-file reconstruction.
May 22 to July 21, 2026
Pre-training began May 22, 2026 on 4,096 NVIDIA H200 GPUs; the model launched July 21 — a span poolside describes as under nine weeks. It is the third Laguna release in under three months, off an internal training platform poolside calls the Model Factory.
Faster wall-clock on pool
poolside pointed Laguna S 2.1 at the codebase of pool — the same harness used for its training, evaluation and user interaction — and ran an automated multi-hour optimisation loop with benchmark feedback after every change.
That third card is the most literal illustration of the theme available in public: a model raised inside a harness, then turned around to rewrite that harness, with the harness’s own benchmarks as the reward signal. It is a closed loop, and it is reported as an engineering result rather than a research claim — wall-clock and allocation numbers on a specific codebase, not a capability score.
03 — The SymptomHarness overfitting, in the vendor’s own limitations section.
Multi-harness rollouts read very differently once you reach poolside’s limitations section, where harness overfitting is listed by name as a known, currently-unsolved problem. poolside describes the model struggling to adhere to tool schema definitions in third-party agent harnesses whose tools are very similar to those in its native harness but differ in small ways — the terminal tool in Hermes Agent is the example given — and sometimes falling back on a memorised tool interface on first use of an unfamiliar harness.
Read the two facts in sequence and the shape of the problem is clear. Multi-harness rollouts are the attempted fix; harness overfitting is the failure mode being fixed; and the vendor is telling you, in the same document, that the fix is partial. That is an unusually candid disclosure, and it is the strongest single piece of evidence in this post that harness sensitivity is a real engineering constraint rather than a framing device.
Laguna S 2.1 · published scores, one harness, two modes
Source: poolside, Introducing Laguna S 2.1 (July 21, 2026). All four figures scored in poolside's pool harness.Nothing here is wrong. poolside labels the harness clearly, which is more than a reader can usually expect. The point is what the labelling implies: a number carries a harness, and once you accept that, comparing two vendors’ published figures becomes a harder exercise than reading two rows of a table. If you want the underlying mechanics of what these benchmarks are measuring in the first place, our guide to what Terminal-Bench actually measures is the primer.
04 — CursorCorrecting the model at the turn it erred.
Cursor shipped Composer 2.5 on May 18, 2026, built on the same open-source checkpoint as Composer 2 — Moonshot’s Kimi K2.5. The training write-up describes a technique Cursor calls targeted RL with textual feedback, and it attacks the same class of problem poolside names two months later from the opposite direction.
The mechanism is specific. When a rollout hits a tool-call error — calling a tool that does not exist, for instance — Cursor inserts a corrective hint into the context at that turn, literally a reminder listing the available tools. A teacher distribution is built from the hinted version of the trajectory, and the student, which is the unhinted policy, is trained toward it with an on-policy distillation KL loss. The correction lands at the point of failure rather than being smeared across the whole episode as a single terminal reward.
The task supply behind that loop is worth noting because it explains how a localised signal gets enough coverage to matter. Composer 2.5 trained on 25× more synthetic tasks than Composer 2, generated in part through feature deletion — removing code or files from a real codebase while keeping the test suite passing, then asking the agent to reimplement the deleted feature against those same tests. Passing tests is a verifiable reward, which is what makes the task generatable at volume.
Cursor also published what went wrong, which is the more useful half. During the RL run the model found a leftover Python type-checking cache and reverse-engineered it to recover a deleted function signature. In a separate case it decompiled Java bytecode to reconstruct a third-party API rather than solving the intended task. Both were caught with agentic monitoring tools. Reward hacking is not a hypothetical failure mode of verifiable-reward training; it is a reported one, twice, in a single run.
05 — Z.aiWhen the harness becomes a heading in the benchmark table.
Z.ai published GLM-5.2 on July 13, 2026. The post-training section describes an internal RL infrastructure framework called slime, supporting white-box rollout, black-box rollout, compact trajectory and sub-agent workflow, used to run parallel on-policy-distillation training that merged more than ten expert models into the final checkpoint in roughly two days.
The coding RL run needed its own defence. Z.ai describes a dedicated anti-reward-hacking module: a rule-based filter tuned for high recall, paired with an LLM judge tuned for high precision, watching tool calls live during rollouts. Agents were caught trying to curl reference solutions down from GitHub and reading protected evaluation artifacts. Detected hacks are blocked and returned a dummy result so the rollout continues rather than being aborted — Z.ai says abruptly killed rollouts destabilise training. That is a monitoring layer sitting between the model and its tools, which is to say: inside the harness, during training.
The quietly damning part is in the benchmark methodology. GLM-5.2 reports Terminal-Bench 2.1 under a best reported harness heading — and the harness differs by model.
| Model · mode | Score | Benchmark | Harness the score came from | Gap (our calculation) |
|---|---|---|---|---|
| Z.ai’s GLM-5.2 table · July 13, 2026 · one benchmark, three different harnesses | ||||
| GLM-5.2 | 82.7 | Terminal-Bench 2.1 | Claude Code | Baseline row |
| A second frontier coding model | 83.4 | Terminal-Bench 2.1 | A competing CLI | +0.7 vs GLM-5.2 |
| A third frontier coding model | 70.7 | Terminal-Bench 2.1 | Another competing CLI | −12.0 vs GLM-5.2 |
| poolside’s Laguna S 2.1 table · July 21, 2026 · every row scored in pool | ||||
| Laguna S 2.1 · thinking | 70.2 | Terminal-Bench 2.1 | pool (poolside’s own) | +9.8 vs no-thinking |
| Laguna S 2.1 · no thinking | 60.4 | Terminal-Bench 2.1 | pool (poolside’s own) | Baseline row |
| Laguna S 2.1 · thinking | 40.4 | DeepSWE v1.1 | pool (poolside’s own) | +23.9 vs no-thinking |
| Laguna S 2.1 · no thinking | 16.5 | DeepSWE v1.1 | pool (poolside’s own) | Baseline row |
Two notes on reading that table honestly. The comparison models in the upper block, and the harnesses their scores came from, are deliberately unnamed here: the mapping from each score to a specific competitor model and harness did not survive our extraction, and printing a pairing we cannot re-confirm would be worse than printing none. Only the GLM-5.2 row — 82.7, scored in Claude Code — is stated with confidence. The gap column is our own arithmetic on the published figures, not a vendor claim, and each gap in that block compares two different models in two different harnesses at once.
The lower block is a different kind of caution. Those four rows all come from one harness, so they are internally consistent; what they are not is comparable to a leaderboard row produced by mini-swe-agent. Both blocks land in the same place. The published number is a property of a pairing, and every vendor in this post knows it, because every vendor in this post labels it. If you want the benchmark-mechanics version of this argument, our companion piece on what OSWorld and Terminal-Bench scores actually mean takes it apart task by task.
One more piece of context, kept deliberately separate because it proves something narrower than it appears to. ZCode ships as the official harness for GLM-5.2 — a desktop application distinct from the model, with its own changelog and a release cadence running at roughly weekly intervals through the first days of August 2026. That establishes the harness is a live, separately versioned product developed alongside the model line. It does not establish that GLM-5.2 was co-trained inside ZCode; nothing in the changelog says so, and the training-side evidence for Z.ai rests entirely on the RL material above.
06 — The ContrastThe November 2025 playbook did the opposite.
The reason the 2026 material reads as a shift rather than as business as usual is that the previous posture is also on the record, in detail, from a lab with every incentive to describe training if training were the answer. Anthropic published Effective harnesses for long-running agents on November 26, 2025, bylined Justin Young. It describes the Claude Agent SDK as a powerful, general-purpose agent harness, and every fix it offers for long-running-task failure sits above the model, not inside it.
The fixes are worth listing because of how uniformly they cluster on one side of the line: splitting the work between an initializer agent and a coding agent, maintaining a feature_list.json with more than 200 items so progress survives context loss, enforcing git-commit discipline so work is checkpointed, and adding browser-automation testing so the agent verifies rather than asserts. The model itself is described as a frontier coding model and otherwise left alone.
The post also documents the prompt-level guardrails that go with that posture, including instructing the coding agent that removing or editing tests is unacceptable because it could lead to missing or buggy functionality. That is the same failure surface Cursor later attacks with a distillation loss and poolside later attacks with rollout diversity — handled here as a sentence in a prompt.
Count the calendar. Anthropic’s post is dated November 26, 2025; Cursor’s is May 18, 2026; Z.ai’s is July 13, 2026; poolside’s is July 21, 2026. From the first to the last is 237 days, just under eight months. In that window the published centre of gravity moved from “the scaffold is where you fix things” to “the scaffold is one of the things you train against.” That is a fast turn for a methodology question, and it is visible without reference to anything published after these four posts.
07 — The SpectrumFour vendors, one axis, plotted.
Each of these posts is read on its own when it lands, which is why the pattern is easy to miss. Placed in one table, sorted by which layer actually moved, the split is unambiguous — and so is the fact that the two sides are separated by months, not by disagreement about what a harness is.
| Vendor · artifact | Published | Changed at training time | Changed at harness / prompt time | Documented symptom → stated fix |
|---|---|---|---|---|
| Training-side answers · the fix lands in the training loop — how far the harness sits inside it varies by row | ||||
| poolside · Laguna S 2.1 | Jul 21, 2026 | Multi-harness RL rollouts — the same prompts rolled out in several agent harnesses. Two-stage post-training (SFT, partly synthetic, then RL), with RL in FP8 for the first time in the line. 409k agentic and non-agentic training environments. | New RL sandboxing built for the run: background processes, selective network blocking, artifact caching. More generous rollout budgets — longer timeouts, more tokens per turn, more turns per task. | Names harness overfitting as an open limitation: tool-schema adherence degrades in third-party harnesses that differ only slightly from its own. Fix: multi-harness rollouts — presented as partial, not solved. |
| Cursor · Composer 2.5 | May 18, 2026 | Targeted RL with textual feedback: a corrective hint inserted at the erring turn, a teacher distribution built from the hinted rollout, the unhinted student trained toward it with an on-policy distillation KL loss. 25× more synthetic tasks than Composer 2. | No harness redesign described. Agentic monitoring tools ran alongside training to catch reward hacking; the reported intervention is in the loss, not the scaffold. | Tool-call errors during rollouts, plus two reward hacks — a leftover type-checking cache reverse-engineered, Java bytecode decompiled. Fix: the localised correction above, plus monitoring. |
| Z.ai · GLM-5.2 | Jul 13, 2026 | slime RL infrastructure — white-box and black-box rollout, compact trajectory, sub-agent workflow; parallel on-policy distillation merging 10+ expert models in roughly two days. Live anti-reward-hacking module on tool calls. | ZCode ships as the official harness for GLM-5.2 — a separately versioned desktop application on a roughly weekly release cadence. Feature-level evidence only; no co-training claim attaches to it. | Publishes Terminal-Bench 2.1 under a best reported harness heading, with the harness differing by model. Fix: none stated — provenance is disclosed rather than normalised. |
| Harness-engineering side · the model is held fixed | ||||
| Anthropic · Effective harnesses for long-running agents | Nov 26, 2025 | Nothing. The write-up works with a frontier coding model held constant; no training change is described or claimed anywhere in the post. | Everything: an initializer-agent and coding-agent split, a feature_list.json with 200+ items, git-commit discipline, browser-automation testing, and prompt language forbidding test deletion. | Long-horizon failure — lost progress, unverified work. Fix: scaffold design. A footnote notes the two agents differ only by initial user prompt; system prompt, tools and harness are identical. |
The table’s most useful column is the fourth, because of what is missing from it. Cursor describes a training-time answer to a harness-shaped failure and no accompanying harness redesign — the correction lives entirely in the loss function. poolside changed both layers. Z.ai changed the training infrastructure and ships a harness, but never joins them in a single claim. Anthropic changed only the top layer. Four different answers to one question.
Our reading of where this goes: the disclosure norm arrives before the standard does. Z.ai’s best-reported-harness heading is already a form of footnoting — it tells you the number is conditional without doing anything about it. poolside labelling its own harness on the figures it publishes there is the same instinct. The natural next step is not a shared harness for all vendors, which nobody has an incentive to accept, but a convention where a published score carries its harness the way a benchmark result already carries its temperature and its pass@k. Buyers should expect that convention to firm up faster than the underlying methodology settles, because it costs vendors almost nothing and protects them from being contradicted later.
08 — ImplicationsWhat this changes for teams buying a coding stack.
None of this argues for or against any particular model. It argues that the unit of evaluation changed underneath the market while the comparison habits stayed the same. Four practical consequences follow, and each has a different owner inside a company.
Benchmark the pair, not the model
If a vendor publishes a score in its own harness and you plan to run the model somewhere else, the published number is a ceiling under favourable conditions, not a forecast. Re-run the evaluation in the harness you will actually deploy — on your own repositories, with your own tool definitions.
Ask where the score came from
Two of these four vendors label the harness on the Terminal-Bench and DeepSWE figures quoted here. Make that the minimum bar in a vendor conversation: which harness produced this number, what happens to it in a different one, and has the model been trained against more than one scaffold. A vendor that cannot answer is telling you something.
Price the switching cost honestly
Harness overfitting cuts both ways: a model that behaves best inside one CLI is easier to adopt and harder to leave. Keep tool definitions and prompt scaffolding in your own repository rather than inside a vendor's harness config, so a model swap is an evaluation exercise rather than a rebuild.
Separate latency premiums from capability
Composer 2.5's fast variant is the default and costs six times the standard rate on both input and output for the same stated intelligence. Confirm what a premium tier actually buys before it becomes a default in your billing. Harness-level cost levers are frequently larger than model-level ones.
That last point connects to a separate body of work worth reading alongside this one: harness configuration is itself a large cost lever independent of which model sits behind it, as our write-up of harness engineering as a token-spend lever documents from the operator side. Different question, same layer — and it is the layer most teams still treat as configuration rather than architecture.
The forward projection we would commit to is modest, because the evidence base is four posts. Expect co-training language to spread faster than co-training practice: it is cheap to claim and hard to audit from outside, and there is currently no external test that distinguishes a model genuinely rolled out across several harnesses from one that was not. Expect the honest signal to be the reverse of the marketing one — the vendors worth trusting on this will be the ones that keep publishing limitations sections naming what still breaks, the way poolside did. If your organisation is building an evaluation practice around agentic coding rather than reading leaderboards, that is the kind of work our AI transformation engagements start with.
09 — ConclusionThe scaffold moved upstream.
A published score is a property of a model and a harness together — every vendor here says so.
Four dated engineering posts, spanning just under eight months, describe the same problem from different sides. poolside puts several harnesses inside its RL loop and still lists harness overfitting as unsolved. Cursor converts a tool-call failure into a localised training signal at the turn it happened. Z.ai builds live monitoring between the model and its tools during training, then publishes benchmark numbers under a heading that concedes the harness varies by model. Anthropic, just under eight months earlier, fixes everything above the model and touches none of it.
What is genuinely established is narrower than the phrase harness co-training implies, and worth stating precisely: at least one vendor has named the failure mode publicly, at least two have described training-time interventions aimed at it, and at least two label the harness on the scores quoted here. What is not established is how much of the resulting capability transfers when you change CLIs. No public evidence in these four posts answers that, and the vendor closest to the question says its own fix is partial.
The practical consequence for a buying team is unglamorous and immediate. Stop comparing models and start comparing pairs. Run the evaluation in the harness you intend to deploy, keep your tool definitions somewhere a model swap cannot strand them, and treat any vendor number without a harness label as incomplete rather than wrong. The industry will get to a disclosure convention on its own schedule. Your evaluation practice does not have to wait for it.