Most search agents are trained as policies over a growing transcript. The model decides how to search. It must also remember what it saw, which evidence matters, and which claims it checked. A team of researchers from University of Illinois Urbana-Champaign, UC Berkeley, and Chroma argues this asks too much. Reinforcement learning ends up optimizing both search decisions and routine bookkeeping at once.
Their answer is Harness-1, a 20B retrieval subagent built on gpt-oss-20b. It was trained with reinforcement learning inside a stateful search harness. The harness holds the bookkeeping. The policy keeps the semantic decisions. The weights and harness code are publicly released.
What is Harness-1 Actually
Harness-1 produces a ranked set of documents for a downstream answering model. It does not answer questions itself. It runs inside a state-machine harness centered on a per-episode WORKINGMEMORY.
Each turn works as a loop. The harness renders compact search state along with recent actions. The model emits one structured action. The harness executes it, updates state, and renders the next observation.
The Stateful Harness: What Moves Out of the Policy
The research team calls its principle stateful cognitive offloading. The policy decides what to search, curate, and verify, and when to stop. The harness maintains the recoverable state around those decisions.
That state includes several pieces. A candidate pool holds compressed, deduplicated documents. An importance-tagged curated set is the final output, capped at 30 documents. Tags take four values: very_high, high, fair, or low. A full-text store keeps every retrieved chunk outside the prompt.
An evidence graph adds structure. A regex extractor scans each chunk for proper nouns, years, and dates. The harness then renders frequent entities, bridge documents, and singletons. Bridge documents contain two or more frequent entities. Singletons appear in one document and suggest follow-up leads.
The policy works through eight tools. These are fan_out_search, search_corpus, grep_corpus, read_document, review_docs, curate, verify, and end_search. Search outputs are compressed with sentence-BM25, keeping the top four sentences. Two-level deduplication removes repeats by chunk ID and content fingerprint.
One design choice addresses cold starts. The first successful search auto-seeds the curated set with eight reranked results at fair importance. The policy then promotes strong documents and removes weak ones. This turns the task from building from scratch into refinement.
The research team names three requirements for a trainable harness. These are warm-started curation, compact derived-state rendering, and diversity-preserving incentives. Harness-1 implements all three.
How It is Trained
Training splits along the same line as the harness. Supervised fine-tuning teaches the model to operate the interface. Reinforcement learning improves search decisions over the maintained state.
A single teacher, GPT-5.4, runs live inside the full harness. After filtering, 899 trajectories remain for SFT. The model uses LoRA at rank 32 for three epochs. The step-550 checkpoint initializes RL.
RL uses on-policy CISPO with a 40-turn cap and terminal-only reward. It trains only on SEC queries. Groups with identical rewards are dropped from the gradient. Training ran on Tinker.
The reward separates discovery from selection. It also adds a tool-diversity bonus. Without that bonus, the agent collapses to repeated search. Curated recall then plateaus near 0.53. With the bonus, diversity stabilizes and recall reaches about 0.60.
The Benchmark Case
Harness-1 was evaluated on eight benchmarks spanning web, finance, patents, and multi-hop QA. The main metric is curated recall: coverage of relevant documents in the final set. Trajectory recall counts evidence encountered anywhere in the episode.
Harness-1 reaches 0.730 average curated recall. That beats the next open subagent, Tongyi DeepResearch 30B, by 11.4 points. Among the frontier searchers tested, only Opus-4.6 scores higher on average.
The transfer pattern is the clearest signal of the mechanism. SFT used four benchmark families; RL used only SEC. On those source-family tasks, Harness-1 gained 7.9 points over the closest open baseline. On four held-out benchmarks, it gained 17.0 points. That is a 2.2x larger gain on tasks furthest from training data.
Ablations support the harness claim. Disabling all harness mechanisms drops Recall by 12.2 percent relative on BrowseComp+. The trained policy keeps searching but cannot rank what it sees.

Use Cases
The method targets evidence-seeking retrieval where documents support an answer. Several workflows fit this shape.
One is literature and patent review. The evidence graph and curated set help organize many sources. Another is financial-filing analysis. The SEC case study recovers an exact executive-transition date across multiple 8-Ks.
A third is multi-hop fact-checking. The fan_out_search and verify tools resolve ambiguous entities before committing. A fourth is modular RAG. The curated set feeds a frozen generator, and better sets yield higher answer accuracy.
Strengths and Weaknesses
Strengths
- Highest average curated recall among the open models tested, and behind only Opus-4.6 overall.
- Gains hold on held-out benchmarks, suggesting domain-general search operations.
- Trained on 4,352 unique items, far fewer than several baselines.
- Open checkpoint and harness code, servable with common runtimes.
Weaknesses
- The evidence graph uses regex extraction, not full entity linking.
- The verify tool is an LLM proxy that can err on ambiguous claims.
- Sentence-BM25 compression may drop context tied to discourse structure.
- The research team reports point estimates without full confidence intervals.
Key Takeaways
- Harness-1 is a 20B search agent that moves search bookkeeping into the environment, leaving semantic decisions to the policy.
- It hits 0.730 average curated recall across eight benchmarks, beating the next open subagent by 11.4 points.
- Among the searchers tested, only Opus-4.6 scores higher on average curated recall.
- Gains are largest on held-out benchmarks (+17.0 vs +7.9 points), suggesting the learned search operations transfer.
- Weights and harness code are public, servable via vLLM, SGLang, or Transformers.
Marktechpost’s Visual Explainer
#mtp-harness1-slider *{box-sizing:border-box!important;margin:0;padding:0}
#mtp-harness1-slider hr,#mtp-harness1-slider p:empty,#mtp-harness1-slider del,#mtp-harness1-slider s{display:none!important}
#mtp-harness1-slider{
–mtp-bg:#f4f6f8!important;
–mtp-card:#ffffff!important;
–mtp-ink:#10243a!important;
–mtp-muted:#5a6b7b!important;
–mtp-line:#e2e8ef!important;
–mtp-accent:#0e9f6e!important;
–mtp-accent-dk:#0a7d56!important;
–mtp-soft:#e8f6f0!important;
–mtp-chip:#eef2f6!important;
background:var(–mtp-bg)!important;
color:var(–mtp-ink)!important;
border:1px solid var(–mtp-line)!important;
border-radius:18px!important;
padding:0!important;
max-width:860px!important;
margin:24px auto!important;
font-family:-apple-system,BlinkMacSystemFont,”Segoe UI”,Helvetica,sans-serif!important;
line-height:1.55!important;
overflow:hidden!important;
box-shadow:0 10px 40px rgba(16,36,58,.08)!important;
}
#mtp-harness1-slider .mtp-h1-head{
display:flex!important;align-items:center;justify-content:space-between;
padding:16px 24px!important;border-bottom:1px solid var(–mtp-line)!important;
background:var(–mtp-card)!important;
}
#mtp-harness1-slider .mtp-h1-kicker{
font-size:11px!important;letter-spacing:.16em;text-transform:uppercase;
font-weight:700;color:var(–mtp-accent-dk)!important;
}
#mtp-harness1-slider .mtp-h1-count{
font-size:13px!important;color:var(–mtp-muted)!important;font-variant-numeric:tabular-nums;font-weight:600
}
#mtp-harness1-slider .mtp-h1-viewport{overflow:hidden!important;background:var(–mtp-bg)!important}
#mtp-harness1-slider .mtp-h1-track{display:flex!important;transition:transform .45s cubic-bezier(.22,.61,.36,1)}
#mtp-harness1-slider .mtp-h1-slide{
min-width:100%!important;padding:32px 36px 30px!important;
}
#mtp-harness1-slider .mtp-h1-eyebrow{
font-size:12px!important;letter-spacing:.08em;text-transform:uppercase;color:var(–mtp-accent-dk)!important;font-weight:700;margin-bottom:10px
}
#mtp-harness1-slider .mtp-h1-slide h2{
font-family:Georgia,”Times New Roman”,serif!important;
font-size:clamp(24px,4.4vw,34px)!important;line-height:1.18;color:var(–mtp-ink)!important;
font-weight:700;margin-bottom:14px!important
}
#mtp-harness1-slider .mtp-h1-slide h3{
font-family:Georgia,serif!important;font-size:clamp(20px,3.4vw,26px)!important;
color:var(–mtp-ink)!important;font-weight:700;margin-bottom:14px!important
}
#mtp-harness1-slider .mtp-h1-slide p{font-size:15.5px!important;color:var(–mtp-muted)!important;margin-bottom:12px}
#mtp-harness1-slider .mtp-h1-lead{font-size:17px!important;color:var(–mtp-ink)!important}
#mtp-harness1-slider .mtp-h1-chips{display:flex!important;flex-wrap:wrap;gap:8px;margin-top:18px}
#mtp-harness1-slider .mtp-h1-chip{
font-size:12.5px!important;background:var(–mtp-chip)!important;color:var(–mtp-ink)!important;
border:1px solid var(–mtp-line)!important;border-radius:999px!important;padding:5px 12px!important;font-weight:600
}
#mtp-harness1-slider .mtp-h1-two{display:grid!important;grid-template-columns:1fr 1fr;gap:16px;margin-top:6px}
#mtp-harness1-slider .mtp-h1-box{
background:var(–mtp-card)!important;border:1px solid var(–mtp-line)!important;border-radius:12px!important;padding:16px 18px!important
}
#mtp-harness1-slider .mtp-h1-box .mtp-h1-lab{
font-size:11px!important;letter-spacing:.1em;text-transform:uppercase;color:var(–mtp-accent-dk)!important;font-weight:700;margin-bottom:8px
}
#mtp-harness1-slider .mtp-h1-box ul{list-style:none!important}
#mtp-harness1-slider .mtp-h1-box li{font-size:14px!important;color:var(–mtp-muted)!important;padding:3px 0!important}
#mtp-harness1-slider ul.mtp-h1-list{list-style:none!important;margin-top:4px}
#mtp-harness1-slider ul.mtp-h1-list li{
font-size:15px!important;color:var(–mtp-ink)!important;padding:8px 0 8px 22px!important;
border-bottom:1px solid var(–mtp-line)!important;position:relative
}
#mtp-harness1-slider ul.mtp-h1-list li:last-child{border-bottom:none!important}
#mtp-harness1-slider ul.mtp-h1-list li:before{
content:””;position:absolute;left:2px;top:15px;width:7px!important;height:7px!important;
border-radius:50%;background:var(–mtp-accent)!important
}
#mtp-harness1-slider ul.mtp-h1-list li b{color:var(–mtp-ink)!important}
#mtp-harness1-slider ul.mtp-h1-list li span{color:var(–mtp-muted)!important}
#mtp-harness1-slider .mtp-h1-tools{display:grid!important;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:6px}
#mtp-harness1-slider .mtp-h1-tool{
background:var(–mtp-soft)!important;border:1px solid #cdeadd!important;border-radius:10px!important;
padding:12px 10px!important;text-align:center;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace!important;
font-size:12.5px!important;color:var(–mtp-accent-dk)!important;font-weight:600
}
#mtp-harness1-slider .mtp-h1-note{
margin-top:16px!important;font-size:13.5px!important;color:var(–mtp-muted)!important;
background:var(–mtp-card)!important;border-left:3px solid var(–mtp-accent)!important;
border-radius:0 8px 8px 0!important;padding:10px 14px!important
}
#mtp-harness1-slider .mtp-h1-stat{display:flex!important;align-items:baseline;gap:12px;margin-bottom:10px}
#mtp-harness1-slider .mtp-h1-bignum{
font-family:Georgia,serif!important;font-size:clamp(40px,8vw,58px)!important;color:var(–mtp-accent-dk)!important;font-weight:700;line-height:1
}
#mtp-harness1-slider .mtp-h1-statlab{font-size:14px!important;color:var(–mtp-muted)!important}
#mtp-harness1-slider .mtp-h1-kv{display:grid!important;grid-template-columns:1fr;gap:8px;margin-top:8px}
#mtp-harness1-slider .mtp-h1-kv div{
font-size:14.5px!important;color:var(–mtp-ink)!important;background:var(–mtp-card)!important;
border:1px solid var(–mtp-line)!important;border-radius:9px!important;padding:9px 13px!important
}
#mtp-harness1-slider .mtp-h1-kv b{color:var(–mtp-accent-dk)!important}
#mtp-harness1-slider .mtp-h1-nav{
display:flex!important;align-items:center;justify-content:space-between;
padding:14px 24px!important;border-top:1px solid var(–mtp-line)!important;background:var(–mtp-card)!important
}
#mtp-harness1-slider .mtp-h1-btn{
background:var(–mtp-accent)!important;color:#fff!important;border:none!important;cursor:pointer;
border-radius:9px!important;padding:9px 16px!important;font-size:14px!important;font-weight:700;
transition:background .2s
}
#mtp-harness1-slider .mtp-h1-btn:hover{background:var(–mtp-accent-dk)!important}
#mtp-harness1-slider .mtp-h1-btn:disabled{background:#c3cdd6!important;cursor:not-allowed}
#mtp-harness1-slider .mtp-h1-dots{display:flex!important;gap:8px}
#mtp-harness1-slider .mtp-h1-dot{
width:9px!important;height:9px!important;border-radius:50%;background:#c9d3dc!important;border:none!important;
cursor:pointer;padding:0!important;transition:all .2s
}
#mtp-harness1-slider .mtp-h1-dot.is-on{background:var(–mtp-accent)!important;width:24px!important;border-radius:5px!important}
#mtp-harness1-slider .mtp-h1-foot{
text-align:center!important;padding:13px 20px!important;background:var(–mtp-ink)!important;
}
#mtp-harness1-slider .mtp-h1-foot span{font-size:12.5px!important;color:#cfe6db!important;letter-spacing:.02em}
#mtp-harness1-slider .mtp-h1-foot b{color:var(–mtp-accent)!important;font-weight:700}
@media (max-width:640px){
#mtp-harness1-slider .mtp-h1-slide{padding:24px 20px 22px!important}
#mtp-harness1-slider .mtp-h1-two{grid-template-columns:1fr!important}
#mtp-harness1-slider .mtp-h1-tools{grid-template-columns:repeat(2,1fr)!important}
#mtp-harness1-slider .mtp-h1-head,#mtp-harness1-slider .mtp-h1-nav{padding-left:16px!important;padding-right:16px!important}
#mtp-harness1-slider .mtp-h1-btn{padding:8px 12px!important;font-size:13px!important}
}
1 / 7
Next →
(function(){
var root=document.getElementById(‘mtp-harness1-slider’);
if(!root||root.dataset.mtpInit)return; root.dataset.mtpInit=”1″;
var track=root.querySelector(‘.mtp-h1-track’);
var slides=root.querySelectorAll(‘.mtp-h1-slide’);
var dotsWrap=root.querySelector(‘.mtp-h1-dots’);
var prev=root.querySelector(‘.mtp-h1-prev’);
var next=root.querySelector(‘.mtp-h1-next’);
var cur=root.querySelector(‘.mtp-h1-cur’);
var i=0,n=slides.length;
for(var d=0;d<n;d++){
var b=document.createElement('button');
b.className='mtp-h1-dot'+(d===0?' is-on':'');
b.setAttribute('aria-label','Go to slide '+(d+1));
(function(idx){b.addEventListener('click',function(){go(idx)});})(d);
dotsWrap.appendChild(b);
}
var dots=dotsWrap.querySelectorAll('.mtp-h1-dot');
function go(x){
i=Math.max(0,Math.min(n-1,x));
track.style.transform='translateX(-'+(i*100)+'%)';
for(var k=0;k45){go(dx<0?i+1:i-1)} sx=null;
},{passive:true});
go(0);
})();
Check out the Paper, Model weights and GitHub Repo. 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.
Need to partner with us for promoting your GitHub Repo OR Hugging Face Page OR Product Release OR Webinar etc.? Connect with us
The post Meet Harness-1: A 20B Retrieval Subagent Trained With Reinforcement Learning Inside a Stateful Search Harness on gpt-oss-20b appeared first on MarkTechPost.


