• bitcoinBitcoin(BTC)$82,008.000.67%
  • ethereumEthereum(ETH)$2,417.67-0.50%
  • tetherTether(USDT)$1.000.01%
  • binancecoinBNB(BNB)$722.980.42%
  • rippleXRP(XRP)$1.30-0.38%
  • usd-coinUSDC(USDC)$1.000.01%
  • solanaSolana(SOL)$104.11-0.17%
  • tronTRON(TRX)$0.332936-1.10%
  • Figure HelocFigure Heloc(FIGR_HELOC)$1.073.20%
  • zcashZcash(ZEC)$1,133.19-2.88%
  • HyperliquidHyperliquid(HYPE)$79.220.56%
  • dogecoinDogecoin(DOGE)$0.079471-0.82%
  • moneroMonero(XMR)$584.724.76%
  • USDSUSDS(USDS)$1.000.02%
  • whitebitWhiteBIT Coin(WBT)$80.200.33%
  • chainlinkChainlink(LINK)$12.03-0.80%
  • leo-tokenLEO Token(LEO)$9.04-0.44%
  • cardanoCardano(ADA)$0.220585-0.85%
  • RainRain(RAIN)$0.0092084.24%
  • nearNEAR Protocol(NEAR)$4.94-3.14%
  • stellarStellar(XLM)$0.178027-0.57%
  • bitcoin-cashBitcoin Cash(BCH)$273.91-0.21%
  • Ethena USDeEthena USDe(USDE)$1.000.02%
  • litecoinLitecoin(LTC)$59.43-0.26%
  • uniswapUniswap(UNI)$7.250.04%
  • daiDai(DAI)$1.000.02%
  • avalanche-2Avalanche(AVAX)$9.78-1.58%
  • suiSui(SUI)$0.98-1.53%
  • CantonCanton(CC)$0.101060-2.71%
  • USD1USD1(USD1)$1.000.02%
  • hedera-hashgraphHedera(HBAR)$0.0890477.21%
  • the-open-networkGram (prev. Toncoin)(GRAM)$1.350.42%
  • BitwayBitway(BTW)$2.4311.85%
  • tether-goldTether Gold(XAUT)$4,151.72-0.13%
  • Global DollarGlobal Dollar(USDG)$1.000.01%
  • BittensorBittensor(TAO)$269.23-1.18%
  • shiba-inuShiba Inu(SHIB)$0.000005-1.28%
  • quant-networkQuant(QNT)$198.51-2.79%
  • crypto-com-chainCronos(CRO)$0.056655-1.80%
  • paypal-usdPayPal USD(PYUSD)$1.000.01%
  • EthenaEthena(ENA)$0.189634-3.13%
  • Ripple USDRipple USD(RLUSD)$1.000.02%
  • okbOKB(OKB)$114.98-1.44%
  • Circle USYCCircle USYC(USYC)$1.140.00%
  • aaveAave(AAVE)$153.99-0.69%
  • Ondo US Dollar YieldOndo US Dollar Yield(USDY)$1.15-0.06%
  • BlackRock USD Institutional Digital Liquidity FundBlackRock USD Institutional Digital Liquidity Fund(BUIDL)$1.000.00%
  • OndoOndo(ONDO)$0.438969-2.43%
  • Pump.funPump.fun(PUMP)$0.004291-5.72%
  • AsterAster(ASTER)$0.710.46%
TradePoint.io
  • Main
  • AI & Technology
  • Stock Charts
  • Market & News
  • Business
  • Finance Tips
  • Trade Tube
  • Blog
  • Shop
No Result
View All Result
TradePoint.io
No Result
View All Result

Google Open-Sources Harness2, a Recursive Agent Harnessing Framework

October 18, 2026
in AI & Technology
Reading Time: 17 mins read
A A
Google Open-Sources Harness2, a Recursive Agent Harnessing Framework
ShareShareShareShareShare

Google Cloud AI Research has open-sourced Harness². It is a recursive agent harnessing framework that improves the code and files around a frozen model. For developers, the pitch is simple. Your agent may get better without a better model.

TL;DR

  • Size: A framework, not a model. 0 parameters trained; 8 editable harness components. Version 0.1.0.
  • Runs on: Linux with Python 3.12 or 3.13 and uv. Model runs call models through Vertex AI. GPU requirement: Not disclosed.
  • Performance: 1 refinement step improved all 4 model and harness setups on all 3 benchmarks.
  • Best: GLM-5 under OpenCode rose from 64.2 to 75.7 on WorkBuddy-Bench (+11.5 points).
  • Worst: GLM-5 under Codex gained only 1.2 points on JobBench (23.6 to 24.8).

What is Harness²?

Harness² is a plug-and-play framework from Google Research that refines an agent’s harness during deployment. A harness is everything around the model: prompts, tools, memory, skills and orchestration. Harnessing is the process of optimizing that system. Model weights never change.

The target setting is the open world. Tasks arrive unseen, and no verifier says whether an answer is right. The research team argues that most self-improvement methods assume labels or test cases. Harness² is built to work without them.

What are the 8 harness components?

Harness² exposes 8 editable components, each mounted as a file:

  1. System prompt
  2. Guardrails
  3. Memory
  4. Tool guidance
  5. Subagents
  6. Skills
  7. Scripts
  8. Plugins (middleware)

They cover context construction, the tool interface, delegation and behavior inside the tool loop. The layout extends the 7-file split from earlier Agentic Harness Engineering work by 1 component.

How does recursive agent harnessing work?

The framework runs two linked levels of recursion:

  • Task-level recursion uses a contrastive Propose, Probe, Compose step. First, the agent runs the task once with the base harness. An editor then proposes 2 candidates. The invariant candidate targets general agent failures such as planning or tool use. The domain candidate targets knowledge and procedures for the current domain. Both candidates run on the same task. The composer compares their trajectories against the reference and keeps only edits backed by observed behavior.
  • Harnessing-level recursion happens after each task. A reflector stores the adopted harness plus an EXPERIENCE.md file of lessons. This library guides future proposals. Each new task still starts from the base harness.

The budget k scales the search. Parallel mode probes k invariant and k domain candidates, then makes k compositions. Sequential mode chains k refinement steps.

<iframe id="mtp-h2x-frame" title="Harness2 interactive explainer" loading="lazy" style="width:100%;height:600px;border:0;display:block;background:#0f1115;border-radius:16px;" scrolling="no" srcdoc="<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Harness2 Explainer</title><style>html,body{margin:0;background:#0f1115}body{padding:0}</style></head><body><div id="mtp-h2x">
<style>
#mtp-h2x{–bg:#0f1115;–card:#171a21;–line:#2a2f3a;–tx:#e8eaed;–mut:#9aa0a6;–b:#4285F4;–r:#EA4335;–y:#FBBC04;–g:#34A853;–mtp:#76B900;
max-width:880px;margin:0 auto;background:var(–bg)!important;color:var(–tx)!important;border:1px solid var(–line)!important;border-radius:16px;padding:22px 22px 16px;font-family:Inter,"Google Sans",Roboto,system-ui,-apple-system,sans-serif;box-sizing:border-box;line-height:1.5}
#mtp-h2x *{box-sizing:border-box}
#mtp-h2x hr,#mtp-h2x p:empty,#mtp-h2x del,#mtp-h2x s{display:none!important}
#mtp-h2x .hd{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:4px}
#mtp-h2x .dots{display:flex;gap:5px}
#mtp-h2x .dots i{width:10px;height:10px;border-radius:50%;display:block;animation:h2pulse 2.4s infinite}
#mtp-h2x .dots i:nth-child(2){animation-delay:.3s}#mtp-h2x .dots i:nth-child(3){animation-delay:.6s}#mtp-h2x .dots i:nth-child(4){animation-delay:.9s}
@keyframes h2pulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(.6);opacity:.5}}
#mtp-h2x h3{margin:0!important;font-size:21px;font-weight:700;color:var(–tx)!important;letter-spacing:-.01em}
#mtp-h2x h3 sup{color:var(–b)}
#mtp-h2x .sub{color:var(–mut)!important;font-size:13.5px;margin:2px 0 14px}
#mtp-h2x .tabs{display:flex;gap:6px;flex-wrap:wrap;border-bottom:1px solid var(–line);margin-bottom:16px}
#mtp-h2x .tab{background:transparent!important;border:0!important;color:var(–mut)!important;font:600 13.5px/1 inherit;font-family:inherit;padding:10px 12px;cursor:pointer;border-bottom:2px solid transparent!important;margin-bottom:-1px}
#mtp-h2x .tab.on{color:var(–tx)!important;border-bottom-color:var(–b)!important}
#mtp-h2x .pn{display:none;animation:h2in .35s ease}
#mtp-h2x .pn.on{display:block}
@keyframes h2in{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
/* pipeline */
#mtp-h2x .flow{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;position:relative}
#mtp-h2x .nd{background:var(–card)!important;border:1px solid var(–line)!important;border-radius:12px;padding:11px 12px;transition:all .35s;opacity:.38;min-height:92px}
#mtp-h2x .nd b{display:block;font-size:13.5px;color:var(–tx)!important}
#mtp-h2x .nd small{display:block;color:var(–mut)!important;font-size:12px;margin-top:3px}
#mtp-h2x .nd .tg{display:inline-block;font-size:10.5px;font-weight:700;letter-spacing:.06em;padding:2px 7px;border-radius:99px;margin-bottom:6px;color:#0f1115!important}
#mtp-h2x .nd.lit{opacity:1;transform:translateY(-2px);box-shadow:0 0 0 1px var(–c),0 8px 22px -10px var(–c)}
#mtp-h2x .lvl{font-size:11px;font-weight:700;letter-spacing:.08em;color:var(–mut)!important;margin:12px 0 6px;text-transform:uppercase}
#mtp-h2x .ctl{display:flex;gap:8px;align-items:center;margin-top:14px;flex-wrap:wrap}
#mtp-h2x .btn{background:var(–card)!important;color:var(–tx)!important;border:1px solid var(–line)!important;border-radius:99px;padding:8px 14px;font:600 13px inherit;font-family:inherit;cursor:pointer}
#mtp-h2x .btn.pri{background:var(–b)!important;border-color:var(–b)!important;color:#fff!important}
#mtp-h2x .note{background:var(–card)!important;border:1px solid var(–line)!important;border-left:3px solid var(–b)!important;border-radius:10px;padding:11px 13px;margin-top:12px;font-size:13.5px;color:var(–tx)!important;min-height:64px}
#mtp-h2x .prog{flex:1;min-width:120px;height:4px;background:var(–line);border-radius:4px;overflow:hidden}
#mtp-h2x .prog i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(–b),var(–r),var(–y),var(–g));transition:width .4s}
/* components */
#mtp-h2x .cg{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
#mtp-h2x .cp{background:var(–card)!important;border:1px solid var(–line)!important;border-radius:11px;padding:11px;cursor:pointer;transition:all .25s;text-align:left;color:var(–tx)!important;font-family:inherit}
#mtp-h2x .cp:hover,#mtp-h2x .cp.on{border-color:var(–c)!important;transform:translateY(-2px)}
#mtp-h2x .cp em{font-style:normal;font-size:11px;font-weight:700;color:var(–c)!important}
#mtp-h2x .cp b{display:block;font-size:13.5px;margin-top:2px}
#mtp-h2x .lg{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(–mut)!important;margin:10px 0 0}
#mtp-h2x .lg span:before{content:"";display:inline-block;width:9px;height:9px;border-radius:3px;margin-right:5px;background:var(–c)}
/* bars */
#mtp-h2x .sel{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}
#mtp-h2x .chip{background:var(–card)!important;border:1px solid var(–line)!important;color:var(–mut)!important;border-radius:99px;padding:6px 11px;font:600 12.5px inherit;font-family:inherit;cursor:pointer}
#mtp-h2x .chip.on{color:#fff!important;background:var(–b)!important;border-color:var(–b)!important}
#mtp-h2x .bm{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
#mtp-h2x .bx{background:var(–card)!important;border:1px solid var(–line)!important;border-radius:12px;padding:12px}
#mtp-h2x .bx h4{margin:0 0 10px!important;font-size:13px;color:var(–tx)!important}
#mtp-h2x .row{display:grid;grid-template-columns:62px 1fr 42px;align-items:center;gap:8px;margin:7px 0;font-size:12px;color:var(–mut)!important}
#mtp-h2x .tr{height:12px;background:#222733;border-radius:6px;overflow:hidden}
#mtp-h2x .tr i{display:block;height:100%;width:0;border-radius:6px;transition:width .9s cubic-bezier(.2,.8,.2,1)}
#mtp-h2x .row b{color:var(–tx)!important;text-align:right;font-size:12.5px}
#mtp-h2x .dl{font-size:12px;font-weight:700;color:var(–g)!important;margin-top:4px}
#mtp-h2x .rk .row{grid-template-columns:120px 1fr 46px}
#mtp-h2x .fn{font-size:11.5px;color:var(–mut)!important;margin-top:10px}
#mtp-h2x .ft{display:flex;justify-content:space-between;gap:8px;flex-wrap:wrap;border-top:1px solid var(–line);margin-top:16px;padding-top:10px;font-size:11.5px;color:var(–mut)!important}
#mtp-h2x .ft a{color:var(–mtp)!important;text-decoration:none;font-weight:700}
#mtp-h2x code{background:#222733!important;color:var(–y)!important;border:0!important;padding:1px 5px;border-radius:4px;font-size:12px}
@media(max-width:640px){
#mtp-h2x{padding:16px 14px 12px}
#mtp-h2x .flow,#mtp-h2x .cg{grid-template-columns:repeat(2,1fr)}
#mtp-h2x .bm{grid-template-columns:1fr}
#mtp-h2x h3{font-size:18px}
#mtp-h2x .rk .row{grid-template-columns:96px 1fr 42px}
}
@media(prefers-reduced-motion:reduce){#mtp-h2x *{animation:none!important;transition:none!important}}
</style>

<div class="hd"><div class="dots"><i style="background:#4285F4"></i><i style="background:#EA4335"></i><i style="background:#FBBC04"></i><i style="background:#34A853"></i></div><h3>Harness<sup>2</sup> explained</h3></div>
<div class="sub">Google's recursive agent harnessing: the harness changes, the model weights stay frozen.</div>

<div class="tabs">
<button class="tab on" data-t="p1">How it works</button>
<button class="tab" data-t="p2">8 components</button>
<button class="tab" data-t="p3">Benchmarks</button>
<button class="tab" data-t="p4">vs baselines</button>
</div>

<div class="pn on" id="h2-p1">
<div class="lvl">01 · Task-level recursion (within 1 task)</div>
<div class="flow">
<div class="nd" style="–c:#9aa0a6"><span class="tg" style="background:#9aa0a6">REFERENCE</span><b>Run base harness</b><small>H0 executes the task once</small></div>
<div class="nd" style="–c:#4285F4"><span class="tg" style="background:#4285F4">PROPOSE</span><b>2 candidates</b><small>Invariant + domain-specific edits</small></div>
<div class="nd" style="–c:#EA4335"><span class="tg" style="background:#EA4335">PROBE</span><b>Run both</b><small>Same task, same model, compare behavior</small></div>
<div class="nd" style="–c:#FBBC04"><span class="tg" style="background:#FBBC04">COMPOSE</span><b>Merge what worked</b><small>Keep edits backed by evidence</small></div>
</div>
<div class="lvl">02 · Harnessing-level recursion (across tasks)</div>
<div class="flow">
<div class="nd" style="–c:#4285F4"><span class="tg" style="background:#4285F4">EXECUTE</span><b>Final harness</b><small>Deliverable returned</small></div>
<div class="nd" style="–c:#34A853"><span class="tg" style="background:#34A853">REFLECT</span><b>Review the record</b><small>Which edits helped, and why</small></div>
<div class="nd" style="–c:#34A853"><span class="tg" style="background:#34A853">UPDATE</span><b>Improvement library</b><small>Harness + EXPERIENCE.md</small></div>
<div class="nd" style="–c:#9aa0a6"><span class="tg" style="background:#9aa0a6">NEXT TASK</span><b>Restart at H0</b><small>Library guides new proposals</small></div>
</div>
<div class="note" id="h2-note">Press <b>Play</b> or <b>Step</b> to walk through 1 Harness<sup>2</sup> improvement step.</div>
<div class="ctl"><button class="btn pri" id="h2-play"> Play</button><button class="btn" id="h2-step">Step →</button><button class="btn" id="h2-reset">↺ Reset</button><div class="prog"><i id="h2-prog"></i></div></div>
<div class="fn">At k=1: 1 reference + 2 probes + 1 final run per task. Parallel mode probes k invariant and k domain candidates; sequential mode chains k steps.</div>
</div>

<div class="pn" id="h2-p2">
<div class="cg" id="h2-cg"></div>
<div class="note" id="h2-cnote" style="border-left-color:#4285F4">Click a component to see its runtime role.</div>
<div class="lg"><span style="–c:#4285F4">Context construction</span><span style="–c:#EA4335">Tool interface</span><span style="–c:#FBBC04">Orchestration</span><span style="–c:#34A853">Middleware</span></div>
</div>

<div class="pn" id="h2-p3">
<div class="sel" id="h2-sel"></div>
<div class="bm" id="h2-bm"></div>
<div class="fn">Single improvement step (k=1). Means over 3 runs. LAB = Partial pass rate (%). Source: Harness<sup>2</sup> paper, Tables 1 and 2.</div>
</div>

<div class="pn" id="h2-p4">
<div class="sel" id="h2-sel2"></div>
<div class="bx rk" id="h2-rk"></div>
<div class="fn">Gemini 3.5 Flash executor. Bar axis starts at 50. Meta-Harness is optimized offline on separate training tasks. Scores as measured in the Harness<sup>2</sup> paper.</div>
</div>

<div class="ft"><span>Sources: arXiv 2610.14224 · github.com/google-research/harness2</span><a href="https://www.marktechpost.com" target="_blank" rel="noopener">© Marktechpost</a></div>

<script>
(function(){
var R=document.getElementById(‘mtp-h2x’);
function $(s){return R.querySelector(s)}function $$(s){return R.querySelectorAll(s)}
function sz(){try{parent.postMessage({mtpH2xHeight:R.offsetHeight+40},’*’)}catch(e){}}
$$(‘.tab’).forEach(function(t){t.onclick=function(){$$(‘.tab’).forEach(function(x){x.classList.remove(‘on’)});$$(‘.pn’).forEach(function(x){x.classList.remove(‘on’)});t.classList.add(‘on’);$(‘#h2-‘+t.dataset.t).classList.add(‘on’);if(t.dataset.t===’p3′)drawB();if(t.dataset.t===’p4′)drawR();setTimeout(sz,50)}});
/* pipeline */
var nd=$$(‘.nd’),i=-1,tm=null;
var notes=["<b>Reference.</b> The frozen model runs the task with the base harness H0. This shows how the harness behaves, not whether the answer is correct.",
"<b>Propose.</b> An editor drafts 2 candidates: an <b>invariant</b> one for general agent failures (planning, tool use) and a <b>domain</b> one for task knowledge and procedures.",
"<b>Probe.</b> Each candidate runs on the same task. Comparing trajectories against the reference gives a behavioral contrast. No ground-truth labels needed.",
"<b>Compose.</b> The composer reads all evidence and diffs. It may merge, revise, adopt 1 candidate, or keep the current harness.",
"<b>Execute.</b> The composed harness runs and returns the final deliverable.",
"<b>Reflect.</b> The full improvement record is reviewed. Lessons are kept only if execution contrasts support them.",
"<b>Update.</b> The adopted harness and an <code>EXPERIENCE.md</code> of lessons join the improvement library.",
"<b>Next task.</b> The executor resets to H0, but the library now guides proposals and composition. Removing it cut WorkBuddy from 77.5 to 74.4."];
function show(k){nd.forEach(function(n,j){n.classList.toggle(‘lit’,j<=k)});$(‘#h2-note’).innerHTML=k<0?"Press <b>Play</b> or <b>Step</b> to walk through 1 Harness<sup>2</sup> improvement step.":notes[k];$(‘#h2-prog’).style.width=((k+1)/nd.length*100)+’%’;sz()}
function step(){i=(i+1)%nd.length;show(i)}
$(‘#h2-step’).onclick=function(){stop();step()};
$(‘#h2-reset’).onclick=function(){stop();i=-1;show(-1)};
function stop(){if(tm){clearInterval(tm);tm=null;$(‘#h2-play’).textContent=”Google Open-Sources Harness2, a Recursive Agent Harnessing Framework Play”}}
$(‘#h2-play’).onclick=function(){if(tm){stop();return}if(i>=nd.length-1)i=-1;step();tm=setInterval(function(){if(i>=nd.length-1){stop();return}step()},1900);this.textContent=”❚❚ Pause”};
/* components */
var C=[["System prompt","Context construction","#4285F4","Persona and top-level procedure followed on every call."],
["Guardrails","Context construction","#4285F4","Process rules, e.g. verify outputs before finishing."],
["Memory","Context construction","#4285F4","Persistent context made available to the agent."],
["Tool guidance","Tool interface","#EA4335","How to use specific tools and handle formats precisely."],
["Subagents","Orchestration","#FBBC04","Delegated roles with their own instructions."],
["Skills","Context construction","#4285F4","Reusable domain procedures, e.g. a reconciliation skill."],
["Scripts","Tool interface","#EA4335","Executable helpers, e.g. a script that reopens and checks files."],
["Plugins","Middleware control","#34A853","Middleware that shapes behavior inside the tool loop."]];
var cg=$(‘#h2-cg’);C.forEach(function(c,k){var b=document.createElement(‘button’);b.className=”cp”;b.style.setProperty(‘–c’,c[2]);b.innerHTML='<em>C’+(k+1)+’ · ‘+c[1]+'</em><b>’+c[0]+'</b>’;b.onclick=function(){$$(‘.cp’).forEach(function(x){x.classList.remove(‘on’)});b.classList.add(‘on’);var n=$(‘#h2-cnote’);n.style.borderLeftColor=c[2];n.innerHTML='<b>’+c[0]+'</b> (‘+c[1].toLowerCase()+’): ‘+c[3]+’ Each component is a file the editor can rewrite.’;sz()};cg.appendChild(b)});
/* benchmarks */
var D={"Gemini 3.5 Flash · OpenCode":[[72.4,77.5],[31.5,36.0],[79.9,81.9]],"Gemini 3.5 Flash · Codex":[[74.5,77.5],[33.9,35.3],[71.6,75.6]],"GLM-5 · OpenCode":[[64.2,75.7],[20.6,24.2],[59.6,71.4]],"GLM-5 · Codex":[[64.4,75.3],[23.6,24.8],[58.1,65.9]]};
var BN=["WorkBuddy-Bench (avg)","JobBench","LAB Partial (%)"],cur="GLM-5 · OpenCode";
var sel=$(‘#h2-sel’);Object.keys(D).forEach(function(k){var b=document.createElement(‘button’);b.className=”chip”+(k===cur?’ on’:”);b.textContent=k;b.onclick=function(){cur=k;$$(‘#h2-sel .chip’).forEach(function(x){x.classList.remove(‘on’)});b.classList.add(‘on’);drawB()};sel.appendChild(b)});
function drawB(){var bm=$(‘#h2-bm’);bm.innerHTML=”;D[cur].forEach(function(v,k){var d=(v[1]-v[0]).toFixed(1);var x=document.createElement(‘div’);x.className=”bx”;x.innerHTML='<h4>’+BN[k]+'</h4><div class="row"><span>Base</span><div class="tr"><i style="background:#5f6368" data-w="’+v[0]+’"></i></div><b>’+v[0].toFixed(1)+'</b></div><div class="row"><span>Harness²</span><div class="tr"><i style="background:linear-gradient(90deg,#4285F4,#34A853)" data-w="’+v[1]+’"></i></div><b>’+v[1].toFixed(1)+'</b></div><div class="dl">+’+d+(k===2?’ pp’:’ pts’)+'</div>’;bm.appendChild(x)});
requestAnimationFrame(function(){setTimeout(function(){$$(‘#h2-bm .tr i’).forEach(function(e){e.style.width=e.dataset.w+’%’})},30)});sz()}
/* baselines */
var RK={"WorkBuddy avg · OpenCode":[["Base harness",72.4],["ReasoningBank",73.4],["Harness Scaling",75.3],["Meta-Harness",76.4],["Harness² k=1",77.5],["Harness² k=5",80.8]],
"JobBench · OpenCode":[["Base harness",31.5],["ReasoningBank",30.8],["Harness Scaling",32.9],["Meta-Harness",35.8],["Harness² k=1",36.0]],
"LAB Partial · Codex":[["Base harness",71.6],["ReasoningBank",74.8],["Harness Scaling",67.9],["Meta-Harness",76.5],["Harness² k=1",75.6]]};
var rc="WorkBuddy avg · OpenCode",s2=$(‘#h2-sel2’);
Object.keys(RK).forEach(function(k){var b=document.createElement(‘button’);b.className=”chip”+(k===rc?’ on’:”);b.textContent=k;b.onclick=function(){rc=k;$$(‘#h2-sel2 .chip’).forEach(function(x){x.classList.remove(‘on’)});b.classList.add(‘on’);drawR()};s2.appendChild(b)});
function drawR(){var rk=$(‘#h2-rk’);rk.innerHTML=”;var mx=Math.max.apply(null,RK[rc].map(function(r){return r[1]}));
RK[rc].forEach(function(r){var h=r[0].indexOf(‘Harness²’)===0;var c=h?’linear-gradient(90deg,#4285F4,#34A853)’:(r[1]===mx?’#FBBC04′:’#5f6368′);var x=document.createElement(‘div’);x.className=”row”;x.innerHTML='<span’+(h?’ style="color:#e8eaed;font-weight:700"’:”)+’>’+r[0]+'</span><div class="tr"><i style="background:’+c+’" data-w="’+((r[1]-50)/40*100)+’"></i></div><b>’+r[1].toFixed(1)+'</b>’;rk.appendChild(x)});
requestAnimationFrame(function(){setTimeout(function(){$$(‘#h2-rk .tr i’).forEach(function(e){e.style.width=e.dataset.w+’%’})},30)});sz()}
show(-1);window.addEventListener(‘load’,sz);window.addEventListener(‘resize’,sz);setTimeout(sz,300);
})();
</script>
</div>
</body></html>”>

(function(){var f=document.getElementById(‘mtp-h2x-frame’);window.addEventListener(‘message’,function(e){if(e.source===f.contentWindow&&e.data&&e.data.mtpH2xHeight){f.style.height=e.data.mtpH2xHeight+’px’;}});})();

How does Harness² perform on benchmarks?

The research team tested 3 professional benchmarks: WorkBuddy-Bench, JobBench and Harvey’s LAB. Executors were Gemini 3.5 Flash and GLM-5 under OpenCode and Codex. The default editor was Claude Opus 4.8. Results are means over 3 runs.

Setup (single step, k=1) WorkBuddy Avg JobBench LAB Partial
Gemini 3.5 Flash, OpenCode 72.4 → 77.5 31.5 → 36.0 79.9 → 81.9
Gemini 3.5 Flash, Codex 74.5 → 77.5 33.9 → 35.3 71.6 → 75.6
GLM-5, OpenCode 64.2 → 75.7 20.6 → 24.2 59.6 → 71.4
GLM-5, Codex 64.4 → 75.3 23.6 → 24.8 58.1 → 65.9

Source: Harness² paper, Tables 1 and 2.

Weaker executors gained more. After 1 step, GLM-5 beat base Gemini 3.5 Flash on WorkBuddy-Bench. Parallel recursion at k=5 lifted Gemini under OpenCode to 80.8 on WorkBuddy. On WorkBuddy-Bench, 3 of 4 setups also used fewer steps per task. Gemini under OpenCode fell from 25.4 to 21.9.

How does it compare with other harness methods?

Feature Harness² Meta-Harness ReasoningBank Harness Scaling
Developers Google Cloud AI Research, Northwestern Stanford IRIS Lab and co-authors Google Research and co-authors Wang et al.
What changes Full 8-component harness, per task Harness code, searched offline Retrieved memory; harness fixed Harness, revised per instance
Needs training split No Yes No No
Learns across tasks Yes (library + lessons) Deploys 1 best harness Yes (memory) No
Code license Apache-2.0 MIT Not disclosed Not disclosed
WorkBuddy Avg, Gemini/OpenCode* 77.5 (80.8 at k=5) 76.4 73.4 75.3
JobBench, Gemini/OpenCode* 36.0 35.8 30.8 32.9
LAB Partial, Gemini/Codex* 75.6 76.5 74.8 67.9

*Scores as measured in the Harness² paper; the other methods did not report these benchmarks themselves.

How do you install and run Harness²?

The README targets Linux, Python 3.12 and uv. A local demo runs both recursion modes without model credentials:

Copy CodeCopiedUse a different Browser
uv venv --python 3.12 .venv
source .venv/bin/activate
uv pip install -e '.[render]'
harness2-demo --output runs/demo --k 2

Model-backed runs need Node.js 20+, the Google Cloud CLI and a Vertex AI project. LAB needs Pandoc and Poppler. WorkBuddy-Bench needs Docker. Executors are OpenCode by default, or Codex with --substrate cx.

Key Takeaways

  • Harness² rewrites an agent’s harness at test time; weights stay frozen.
  • 1 step lifted GLM-5 by 11.5 points on WorkBuddy-Bench.
  • Propose, Probe, Compose replaces ground-truth labels with behavioral contrasts.
  • A lessons library carries improvements to future tasks.
  • Expect extra runs per task, and sandbox it yourself.


Check out the Paper, GitHub Repo, Paper and Project Page. All credit goes to the researcher of this project. Also, feel free to follow us on Twitter and don’t forget to join our 150k+ML SubReddit and Subscribe to our Newsletter. Wait! are you on telegram? now you can join us on telegram as well.

The post Google Open-Sources Harness2, a Recursive Agent Harnessing Framework appeared first on MarkTechPost.

YOU MAY ALSO LIKE

You Don’t Have To Turn Off Your Phone To Switch SIM Cards (But You Probably Should)

What To Check If Your Nintendo Switch 2 Isn’t Connecting To The TV

Credit: Source link

ShareTweetSendSharePin

Related Posts

You Don’t Have To Turn Off Your Phone To Switch SIM Cards (But You Probably Should)
AI & Technology

You Don’t Have To Turn Off Your Phone To Switch SIM Cards (But You Probably Should)

October 18, 2026
What To Check If Your Nintendo Switch 2 Isn’t Connecting To The TV
AI & Technology

What To Check If Your Nintendo Switch 2 Isn’t Connecting To The TV

October 18, 2026
OpenAI Is Building A Humanoid Robot, But The Body Isn’t The Real Challenge
AI & Technology

OpenAI Is Building A Humanoid Robot, But The Body Isn’t The Real Challenge

October 17, 2026
These Samsung Galaxy Tablets Are In Their Last Year Of Software Support
AI & Technology

These Samsung Galaxy Tablets Are In Their Last Year Of Software Support

October 17, 2026

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Search

No Result
View All Result
Femasys: If The Sales Force Delivers, Then FEMY Is In Tall Cotton

Femasys: If The Sales Force Delivers, Then FEMY Is In Tall Cotton

October 14, 2026
Trump awards Irish Open trophy at his golf course

Trump awards Irish Open trophy at his golf course

October 16, 2026
NYSE’s opening bell honors Italian Americans who beat stereotypes to reach pinnacle of finance

NYSE’s opening bell honors Italian Americans who beat stereotypes to reach pinnacle of finance

October 12, 2026

About

Learn more

Our Services

Legal

Privacy Policy

Terms of Use

Bloggers

Learn more

Article Links

Contact

Advertise

Ask us anything

©2020- TradePoint.io - All rights reserved!

Tradepoint.io, being just a publishing and technology platform, is not a registered broker-dealer or investment adviser. So we do not provide investment advice. Rather, brokerage services are provided to clients of Tradepoint.io by independent SEC-registered broker-dealers and members of FINRA/SIPC. Every form of investing carries some risk and past performance is not a guarantee of future results. “Tradepoint.io“, “Instant Investing” and “My Trading Tools” are registered trademarks of Apperbuild, LLC.

This website is operated by Apperbuild, LLC. We have no link to any brokerage firm and we do not provide investment advice. Every information and resource we provide is solely for the education of our readers. © 2020 Apperbuild, LLC. All rights reserved.

No Result
View All Result
  • Main
  • AI & Technology
  • Stock Charts
  • Market & News
  • Business
  • Finance Tips
  • Trade Tube
  • Blog
  • Shop

© 2023 - TradePoint.io - All Rights Reserved!