MarkTechPost6h agoenergy 99

Infini-AI-Lab Releases Hermit, an Open-Source Harness Adapter Framework for AI Agents

Infini-AI-Lab has released Hermit , an open-source harness adapter framework for AI agents. Hermit is a framework from Infini-AI-Lab that trains an external ‘harness adapter’ while the agent’s model and harness stay frozen. The first release, v0.1.0 , shipped on October 25, 2026. CMU postdoc Haizhong Zheng announced it on X on October 27. For developers, the pitch is simple: adapt Codex or Claude Code agents to new tasks without fine-tuning or forking the harness. TL;DR Footprint: A Python framework. No parameters of its own. Apache-2.0, pip install hermit-harness . Runs on: The offline Quick Start needs no GPU, model account or dataset. Real runs use any API backend or a local vLLM, SGLang or Ollama server. Performance: Reported gains over no-adapter baselines on OfficeQA, CL-Bench and ServeLearnBench, all with GLM 5.3 Flash. Best: MWM adapter hits 0.795 accuracy on CL-Bench database exploration, vs 0.580 for the in-context baseline. Worst: The prompt-only adapter scores 0.470 on the same venue, below that 0.580 baseline. Bottom line: Best: one training loop for 5 harness evolution methods. Worst: most results are single runs, self-reported. What is a harness adapter? A harness adapter is a trainable external harness. It works like a plugin with training support built in. A model adapter, such as LoRA, adapts a model. A harness adapter adapts an existing agent instead. The adapter can hold instructions, skills, memory, tools, executable code and agent coordination logic. It can even be a whole repository. Its specification says which parts are learnable and how updates get checked. The base model and harness never change. The team gives 3 reasons for this design. Many harnesses are closed-source. Editing open ones can break carefully tuned component interactions. And a learned adapter can move between compatible models and harnesses. How does Hermit train an adapter? Hermit uses an RL-style training loop . A Trainer runs a batch of tasks through the acting agent with the current adapter. A judge scores the outputs. An Evolver reads the trajectories and feedback, then proposes a new adapter. The Trainer checks it against the template and commits it as the next version. Every adapter version lives in a git tree. You can inspect, roll back or ship any version. Learner programs can run sandboxed, which requires Linux with bubblewrap. Five evolution methods ship today: GEPA , SkillOpt , MetaWorld Model (MWM), Harness2 and Continual Harness . ACE and ReHarness are listed as coming soon. You can also write your own Evolver. Play</button> <button class="btn gh" id="mhx-next">Next step</button> <button class="btn gh" id="mhx-reset">Reset</button> <span class="ver">Adapter version <b id="mhx-v">V0</b></span> </div> <p class="note">Built-in Evolvers: GEPA, SkillOpt, MetaWorld Model (MWM), Harness2, Continual Harness. ACE and ReHarness are listed as coming soon.</p> </div> <div class="pn" data-i="2"> <p class="lead">Self-reported results, all with <b>GLM 5.3 Flash</b> as the acting model. Pick a benchmark.</p> <div class="seg"> <button class="tab on" data-b="0">OfficeQA</button> <button class="tab" data-b="1">CL-Bench database</button> <button class="tab" data-b="2">ServeLearnBench (H)</button> </div> <div class="bars" id="mhx-bars"></div> <p class="note" id="mhx-bnote"></p> </div> <div class="pn" data-i="3"> <p class="lead">Train once, then <b>deploy</b> the adapter into an agent workspace or export it as a native plugin.</p> <div class="term"><span class="p">$</span> pip install hermit-harness <span class="p">$</span> hermit train --config run.yaml <span class="p">$</span> hermit eval --config run.yaml --adapter final <span class="p">$</span> hermit deploy --adapter DIR --workspace WS --host codex <span class="p">$</span> hermit convert --adapter DIR --output OUT --target claude-code <span class="c"># other convert targets: codex, pi, hermes</span></div> <div class="hosts"> <span class="chip" data-d="Deploy target and plugin export target.">Codex</span> <span class="chip" data-d="Deploy target and plugin export target.">Claude Code</span> <span class="chip" data-d="Deploy target and plugin export target.">Pi</span> <span class="chip" data-d="Plugin export target.">Hermes</span> </div> <div class="info" id="mhx-dinfo">Backends by reference: Fireworks, OpenAI, Anthropic, DeepSeek, vLLM, SGLang, Ollama. The offline Quick Start needs no GPU, model account or dataset.</div> </div> <div class="ft"><span>Source: github.com/Infini-AI-Lab/hermit · self-reported</span><span class="mtp">© Marktechpost</span></div> </div> <script> (function(){ var R=document.getElementById('mtp-hermit-x');if(!R)return; function ping(){try{var h=R.offsetHeight+40;parent.postMessage({mtpEmbedHeight:h,height:h,frameHeight:h},'*');}catch(e){}} var tabs=R.querySelectorAll('.tabs .tab'),pns=R.querySelectorAll('.pn'); tabs.forEach(function(t){t.addEventListener('click',function(){var p=+t.getAttribute('data-p');tabs.forEach(function(x){x.classList.remove('on')});t.classList.add('on');pns.forEach(function(x){x.classList.toggle('on',+x.getAttribute('data-i')===p)});if(p===2)drawBars(cur);setTimeout(ping,60);});}); function wire(sel,out){R.querySelectorAll(sel).forEach(function(c){c.addEventListener('click',function(){R.querySelectorAll(sel).forEach(function(x){x.classList.remove('sel')});c.classList.add('sel');document.getElementById(out).textContent=c.textContent+': '+c.getAttribute('data-d');ping();});});} wire('.dg .chip','mhx-info');wire('.hosts .chip','mhx-dinfo'); var steps=R.querySelectorAll('.st'),si=-1,ver=0,timer=null; var msg=['The Trainer runs a batch of tasks through the acting agent with the current adapter.','Your judge scores each output and writes feedback.','An Evolver reads trajectories and feedback, then proposes a new adapter.','The Trainer checks the proposal against the adapter template.','The checked update is committed as the next adapter version.']; function go(i){si=i;steps.forEach(function(s,k){s.classList.toggle('on',k===i)});document.getElementById('mhx-step').textContent=msg[i];if(i===4){ver++;document.getElementById('mhx-v').textContent='V'+ver;}} function next(){go((si+1)%5)} document.getElementById('mhx-next').onclick=function(){stop();next()}; document.getElementById('mhx-play').onclick=function(){if(timer){stop();return}this.textContent='❚❚ Pause';next();timer=setInterval(next,1400)}; function stop(){clearInterval(timer);timer=null;document.getElementById('mhx-play').textContent=' Play'} document.getElementById('mhx-reset').onclick=function(){stop();si=-1;ver=0;steps.forEach(function(s){s.classList.remove('on')});document.getElementById('mhx-v').textContent='V0';document.getElementById('mhx-step').textContent='Press Play to step through one training iteration.'}; var B=[ {max:1,fmt:3,rows:[['No adapter',.541],['Initial skill',.576],['GEPA',.580],['SkillOpt',.600],['Continual Harness',.634,1],['Harness2',.651,1]],n:'Accuracy on 172 test questions. GEPA and SkillOpt are means of 4 trainings, tested frozen. Continual Harness and Harness2 learn while streaming the test set once. Standard error ab

read the original at MarkTechPost →