OpenClaw is an open-source, MIT-licensed personal AI agent that you run on your own machines. Its Gateway connects models, tools, and chat channels such as Telegram, Slack, and Discord. The project has now shipped version 2026.9.5, announced on X. The release bundles 4,179 pull requests and 64 direct commits, with credits to 502 contributing accounts. The main change is Atomic Updates, which targets a long-running complaint: updates that break a working agent.
Is it deployable? Yes, Version 2026.9.5 is the current latest tag on npm. It is self-hostable and needs Node 24.16+ or 26.1+.
Why OpenClaw Updates Kept Breaking
The OpenClaw team explained the problem in a blog post with maintainer Jason Sy. Before the fix, an update had 2 outcomes: incremental improvement or catastrophic failure. In the failure case, the old version went down as well. That left no agent online to help with the repair.
Two factors made this hard. First, OpenClaw has thousands of config options, so testing every permutation is near impossible. Second, maintainers rarely felt the pain themselves. They are developers who ask Claude or Codex to update their claw. For many users, the claw is their only agent. The OpenClaw 2.0 launch in early September made the issue too large to ignore.
How Atomic Updates Work
According to the Claw team, the needed pieces already existed in the upgrade process. They were in the wrong order. The new flow works like this:
- The existing Gateway keeps running while the update is prepared.
- The next version is checked against a private copy of your setup.
- OpenClaw switches over, then verifies the updated installation.
- If the update fails, it rolls back to the last working configuration.
OpenClaw always preserves a working agent, so it can help diagnose a failed upgrade. The team also added an issue reporting button for updates.
The release notes list clear limits. Atomic Updates apply on supported update paths only. Rolling back the application cannot undo database migrations. The private validation copy is not a backup, so keep a verified backup before upgrading. If an interactive update fails, AI repair starts only after you choose Yes. It uses your account and tokens, and a 30-second timeout skips it.
Interactive Explainer: OpenClaw 2026.9.5
‘:”});$(‘#steps’).innerHTML=h;gw(‘ok’,’Gateway: running 2026.9.4′);ag(‘ok’,’Agent: available’);$(‘#log’).innerHTML=’
Pick a scenario and press Run update.
‘}
function gw(c,t){$(‘#gd’).className=”dot”+(c==’ok’?”:’ ‘+c);$(‘#gs’).textContent=t}
function ag(c,t){$(‘#ad’).className=”dot”+(c==’ok’?”:’ ‘+c);$(‘#as’).textContent=t}
function lg(t,c){var d=document.createElement(‘div’);if(c)d.className=c;d.textContent=”> “+t;$(‘#log’).appendChild(d);post()}
function step(i,st){var e=$$(‘#steps .sp’)[i];e.className=”sp “+st}
function seq(list){busy=true;$(‘#run’).disabled=true;var i=0;(function nx(){if(i>=list.length){busy=false;$(‘#run’).disabled=false;return}var f=list[i++];f[0]();setTimeout(nx,f[1])})()}
$(‘#run’).onclick=function(){if(busy)return;draw();$(‘#log’).innerHTML=”;var D=1150;
if(mode==’old’){seq([[function(){step(0,’act’);gw(‘bad’,’Gateway: stopped for handoff’);ag(‘bad’,’Agent: offline’);lg(‘Gateway shut down for the update handoff’,’o’)},D],[function(){step(0,’done’);step(1,’act’);lg(‘Installing new version…’)},D],[function(){step(1,’done’);step(2,’act’);lg(‘Restarting…’)},D],[function(){if(out==’ok’){step(2,’done’);gw(‘ok’,’Gateway: running 2026.9.5′);ag(‘ok’,’Agent: available’);lg(‘Update finished after a downtime window’,’g’)}else{step(2,’fail’);gw(‘bad’,’Gateway: down’);ag(‘bad’,’Agent: offline’);lg(‘Restart failed. Old version is down too’,’r’);lg(‘No agent left to help diagnose the failure’,’r’)}},300]])}
else{seq([[function(){step(0,’act’);lg(‘Current Gateway stays online’,’g’)},D],[function(){step(0,’done’);step(1,’act’);lg(‘Validating candidate against a private copy of your setup…’)},D],[function(){if(out==’bad’){step(1,’fail’);lg(‘The update failed its check’,’r’);lg(‘Recovery keeps the last working version. Agent stays available to diagnose’,’g’);gw(‘ok’,’Gateway: running 2026.9.4 (last working version)’)}else{step(1,’done’);step(2,’act’);gw(‘warn’,’Gateway: switching over’);lg(‘Candidate passed. Switching over…’,’o’)}},out==’bad’?300:D],[function(){if(out==’bad’)return;step(2,’done’);step(3,’act’);lg(‘Verifying the updated installation…’)},out==’bad’?0:D],[function(){if(out==’bad’)return;step(3,’done’);gw(‘ok’,’Gateway: running 2026.9.5′);lg(‘Verified. Update complete’,’g’)},300]])}};
seg(‘#mode’,function(v){if(busy)return;mode=v;draw();post()});seg(‘#out’,function(v){out=v});draw();
/* 2 plugins */
var pmode=”new”,pb=false;seg(‘#pm’,function(v){pmode=v;preset()});
function preset(){$(‘#pu’).style.transition=’none’;$(‘#pg’).style.transition=’none’;$(‘#pu’).style.width=”0″;$(‘#pg’).style.width=”0″;$(‘#pc’).textContent=”The coral line marks the moment a plugin is installed.”}
$(‘#pr’).onclick=function(){if(pb)return;pb=true;preset();setTimeout(function(){$(‘#pu’).style.transition=’width 2.4s linear’;$(‘#pu’).style.width=”100%”;if(pmode==’old’){setTimeout(function(){$(‘#pg’).style.transition=’width .9s linear’;$(‘#pg’).style.width=”18%”},1000)}setTimeout(function(){$(‘#pc’).textContent=pmode==’old’?’Restart-based install: the whole installation goes offline while the Gateway restarts.’:’Hot reload: the plugin loads and the Gateway never goes offline. Unchanged plugins keep running.’;pb=false;post()},2500)},40)};
/* 3 share */
var Y=[[‘Conversation text’,’Recipients read the conversation text of the groups you selected.’],[‘Eligible user-created forks’,’Forks created by users are included when eligible.’]];
var N=[[‘Tool activity’,’Tool calls and their output are not shared.’],[‘Reasoning’,’Model reasoning stays on the source installation.’],[‘Subagents’,’Subagent sessions are excluded from the shared view.’],[‘Continue the conversation’,’Access is read-only. Recipients cannot send new turns.’],[‘Archive it’,’Recipients cannot archive the shared conversation.’],[‘Use its terminal’,’The terminal stays with the owner.’]];
function mk(a,c,host){a.forEach(function(x){var d=document.createElement(‘div’);d.className=”chip “+c;d.innerHTML=’‘+x[0]+’‘+(c==’y’?’SHARED’:’BLOCKED’)+’‘;d.onclick=function(){$(‘#sw’).textContent=x[1]};$(host).appendChild(d)})}
mk(Y,’y’,’#sy’);mk(N,’n’,’#sn’);
function shareIn(){$$(‘.chip’).forEach(function(c,i){c.classList.remove(‘in’);setTimeout(function(){c.classList.add(‘in’)},90*i+80)})}
/* 4 live */
for(var i=0;i<28;i++){var b=document.createElement(‘i’);b.style.animationDelay=(i*0.07)+’s’;b.style.animationDuration=(0.7+((i*37)%10)/12)+’s’;$(‘#wave’).appendChild(b)}
var L=[[‘Talk: unpinned sessions now choose Live using your configured OpenAI access.’,’Existing model pins stay in place.’,’On Apple clients, Stop ends the Live session.’],
[‘Meetings: supported in Google Meet, Microsoft Teams and Zoom through meeting plugins.’,’Select Live explicitly, and update both the Gateway and the paired node.’,’Use supported isolated audio capture. Remove a custom audioInputCommand first.’],
[‘Phone calls: GPT Live can consult your OpenClaw agent during a call.’,’Select Live explicitly for this surface.’,’Live does not support Voice Call custom functions, host-controlled wake-name or forced-consult modes.’]];
function live(v){$(‘#lf’).innerHTML=L[v].map(function(t){return ‘
‘}).join(”);post()}seg(‘#lv’,live);live(0);
/* 5 browser */
var DATA={‘All feedback’:[‘#214 Export to CSV fails on Safari’,’#209 Add dark mode to reports’,’#203 Login loop after password reset’],’Bugs only’:[‘#214 Export to CSV fails on Safari’,’#203 Login loop after password reset’],’Feature requests’:[‘#209 Add dark mode to reports’],’Last 7 days’:[‘#214 Export to CSV fails on Safari’,’#209 Add dark mode to reports’]};
function items(){var v=$(‘#flt’).value;$(‘#items’).innerHTML=DATA[v].map(function(t){return ‘
‘+t+’
‘}).join(”);$(‘#an’).style.display=’none’;$(‘#cur’).style.opacity=0;post()}
$(‘#flt’).onchange=items;items();
$(‘#ask’).onclick=function(){var v=$(‘#flt’).value,c=$(‘#cur’);c.style.transition=’none’;c.style.right=”16px”;c.style.top=’50px’;c.style.opacity=0;setTimeout(function(){c.style.transition=”;c.style.opacity=1;c.style.right=”55%”;c.style.top=($(‘#items’).offsetTop+$(‘#items’).offsetHeight-14)+’px’},40);setTimeout(function(){c.style.opacity=0},1500);setTimeout(function(){var a=$(‘#an’);a.innerHTML=’Agent: I see the page is filtered to ‘+v+’ (‘+DATA[v].length+’ items). Continuing from your view, not from a fresh page load.’;a.style.display=’block’;post()},1100)};
/* 6 archive */
var ages=[3,12,26,41,58,84],cold=false,re={};
function conv(){var d=+$(‘#dr’).value;$(‘#dv’).textContent=d;var n=0;$(‘#conv’).innerHTML=”;ages.forEach(function(a,i){var e=document.createElement(‘div’);var arc=cold&&a>=d&&!re[i];if(arc)n++;e.className=”cv”+(arc?’ arc’:”)+(re[i]?’ back’:”);e.innerHTML=arc?’ARCHIVED’:’Chat ‘+(i+1)+’‘+(re[i]?’reopened, searchable’:’idle ‘+a+’ days’)+’‘;if(arc)e.onclick=function(){re[i]=1;conv()};$(‘#conv’).appendChild(e)});
$(‘#cc’).textContent=cold?n+’ of 6 conversations compressed. Reopening one restores its history and makes it searchable again.’:’Turn cold storage on to see eligible history compress.’;post()}
seg(‘#cs’,function(v){cold=v==’on’;re={};conv()});$(‘#dr’).oninput=function(){re={};conv()};conv();
/* 7 roles */
var R=[[‘C’,’Chief of staff’],[‘R’,’Researcher’],[‘W’,’Writer’],[‘V’,’Reviewer’]],tm=’team’;
function roles(st){$(‘#roles’).innerHTML=”;R.forEach(function(r,i){var off=tm==’one’&&i!=1;var e=document.createElement(‘div’);e.className=”rl”+(off?’ off’:”);e.innerHTML=’
‘+r[0]+’
‘+r[1];$(‘#roles’).appendChild(e)});$(‘#appr’).disabled=true;$(‘#rc’).textContent=”Step 1: ask setup for a proposal.”}
seg(‘#tm’,function(v){tm=v;roles()});roles();
$(‘#prop’).onclick=function(){roles();$$(‘.rl:not(.off)’).forEach(function(e,i){setTimeout(function(){e.classList.add(‘prop’)},i*160)});$(‘#appr’).disabled=false;$(‘#rc’).textContent=”Step 2: proposal ready. Nothing exists yet. Approve to create.”};
$(‘#appr’).onclick=function(){$$(‘.rl.prop’).forEach(function(e,i){setTimeout(function(){e.classList.add(‘made’)},i*220)});$(‘#appr’).disabled=true;$(‘#rc’).textContent=tm==’team’?’Created: a 4-agent team. Setup remembers your chosen coordinator if you need to resume.’:’Created: 1 specialist agent. Researcher is shown as an example role.’};
window.addEventListener(‘load’,post);window.addEventListener(‘resize’,post);if(window.ResizeObserver){new ResizeObserver(post).observe($(‘#w’))}setTimeout(post,300);
})();


