A team of researchers from UC Berkeley have released CUA-Lite, an open platform for computer-use agents (CUAs). The argument behind it is infrastructural rather than model-centric: training and benchmarking a CUA requires four pieces: agents, environments, traces, and a framework to evaluate and train them and all four are currently fragmented across separate repositories with incompatible interfaces. CUA-Lite puts them behind one action space, one data schema, and one command, across desktop, browser and mobile.
Is it deployable? Yes. The stack installs with uv sync --all-extras on Python 3.12, and its lightweight sandboxes run on any Docker host without /dev/kvm, so cloud instances, CI runners and nested containers all work.
The VM tax, and how Lite.OSWorld removes it
The most concrete contribution is Lite.OSWorld. OSWorld provides a faithful Ubuntu desktop, but it ships as a full QEMU/KVM virtual machine per task, requiring nested virtualization that most managed infrastructure does not expose. CUA-Lite reproduces the same task suite and the same evaluators on a GNOME desktop inside a plain Docker container.
| Task | OSWorld | Lite.OSWorld |
|---|---|---|
| Runtime | QEMU/KVM VM | Docker container |
| Host requirement | /dev/kvm, nested virt |
Any Docker host |
| Memory | 4.1 GB | 0.9 GB |
| Cold start | 29.9 s | 23.8 s |
| Parallelism | baseline | ~4.6× more instances |
| Task suite | OSWorld | Identical |
Fidelity is the obvious concern when you swap a VM for a container, and the team addresses it directly: across 13 models, Lite.OSWorld scores match the OSWorld VM’s, so a score or a training signal earned in the container transfers back to the real benchmark. The same base now carries a family of sandboxes: Lite.ScaleCUA, Lite.CUAGym and Lite.CUAWorld, the last expanding into roughly 40 applications including Blender, QGIS and VS Code. In total the platform claims 30k+ verifiable tasks.
One schema for data, one adapter per model
CUA-Lite’s second layer is LiteSample, a single supervised-learning schema shared across every environment, agent and task type, shipped as plain parquet plus images. Ten-plus existing CUA datasets have been preprocessed into it and published free on Hugging Face, including Aguvis, OpenCUA, ScaleCUA, GUI-360, GUIOdyssey and Multimodal-Mind2Web. Alongside those corpora sit fresh rollout datasets generated by rolling a frontier teacher model through the sandboxes, for distillation into smaller students.
Because model families expect different scaffolding, the framework ships a per-model adapter that packs a unified LiteSample into each model’s own training format, including history collapsing so several steps share one forward pass.
Eval, SFT and RL behind one command
Agents and environments meet in lite.gym: screenshots up, actions down, with one action space per platform. 10+ agents are built in GPT, Claude, Gemini, Qwen3-VL, UI-TARS, Fara-7B, MAI-UI and others, and 15+ benchmarks are integrated, spanning grounding (ScreenSpot-Pro, OSWorld-G), desktop (OSWorld, OSWorld-2, WindowsAgentArena, CUABench), browser (WebArena, VisualWebArena, MiniWoB, WebVoyager, Online-Mind2Web, WebGym) and mobile (AndroidWorld, AndroidLab, MobileWorld, MobileGym). Swapping --model-id and --env-id in scripts/rollout.py is the whole interface.
The same loop serves training. For SFT, the README documents fine-tuning Qwen3-VL-2B-Instruct on Lite.ScaleCUA desktop trajectories, lifting mean episode return from 0.138 to 0.237 on the 332-task lite.osworld eval split, a single reported configuration on two GPUs, not an independently reproduced result. For RL, rollouts scored in the environment drive GRPO updates on top of Slime, with a worked MobileGym example covering 416 mobile tasks across 28 apps.
Interactive explainer
<div class="pane" data-pane="2">
<div class="ptitle">How many desktops fit on one host</div>
<div class="pnote">OSWorld boots a QEMU/KVM virtual machine per task and needs <code>/dev/kvm</code>. Lite.OSWorld runs the same tasks and the same evaluators on a GNOME desktop inside a plain Docker container. Drag to change host memory.</div>
<div class="slab">
<label for="cl-ram">Host memory</label>
<input type="range" id="cl-ram" min="8" max="512" step="8" value="64">
<div class="val" id="cl-ramv">64 GB</div>
</div>
<div class="row">
<div class="rlab"><span><b>OSWorld</b> <i>4.1 GB per desktop, needs /dev/kvm</i></span><em id="cl-c1">0</em></div>
<div class="track"><div class="fill f-vm" id="cl-b1"></div></div>
</div>
<div class="row">
<div class="rlab"><span><b>Lite.OSWorld</b> <i>0.9 GB per desktop, any Docker host</i></span><em id="cl-c2">0</em></div>
<div class="track"><div class="fill f-lite" id="cl-b2"></div></div>
</div>
<div class="grid2">
<div class="stat"><b>23.8 s</b><span>Cold start, versus 29.9 s for the VM</span></div>
<div class="stat"><b>~4.6×</b><span>More parallel instances, as reported by the team</span></div>
<div class="stat"><b>13 models</b><span>Scores in the container match the VM’s</span></div>
</div>
<div class="foot">Memory-bound estimate. Counts divide host memory by the published per-desktop footprint and ignore CPU, disk and host overhead. Figures from the CUA-Lite blog post "VM-free OS(World), at scale", 23 July 2026.</div>
</div>
<div class="pane" data-pane="3">
<div class="ptitle">What one rollout actually does</div>
<div class="pnote">Every task ships a verifiable reward. The same loop serves evaluation and reinforcement learning: score the rollout to rank an agent, or train on it to improve one.</div>
<div class="loopwrap">
<svg viewBox="0 0 640 190" role="img" aria-label="Rollout loop diagram: environment, screenshot, agent, action, verifier">
<path id="cl-path" d="M 122 100 L 600 100 L 600 150 L 8 150 L 8 100 L 122 100" fill="none" stroke="#322e22" stroke-width="2" stroke-dasharray="5 5"/>
<g font-family="ui-monospace,Menlo,monospace" font-size="11" fill="#ece6d4" text-anchor="middle">
<rect x="18" y="76" width="104" height="48" rx="8" fill="#1b1912" stroke="#322e22"/>
<text x="70" y="97">Environment</text><text x="70" y="112" fill="#a49c88">sandbox</text>
<rect x="168" y="76" width="104" height="48" rx="8" fill="#1b1912" stroke="#322e22"/>
<text x="220" y="97">Screenshot</text><text x="220" y="112" fill="#a49c88">observation</text>
<rect x="318" y="76" width="104" height="48" rx="8" fill="#1b1912" stroke="#322e22"/>
<text x="370" y="97">Agent</text><text x="370" y="112" fill="#a49c88">any model</text>
<rect x="468" y="76" width="104" height="48" rx="8" fill="#1b1912" stroke="#322e22"/>
<text x="520" y="97">Action</text><text x="520" y="112" fill="#a49c88">click, type, key</text>
<text x="304" y="172" fill="#ef9d62">verifier returns a reward, then SFT or GRPO uses it</text>
</g>
<circle id="cl-dot" cx="122" cy="100" r="7" fill="#ef9d62"/>
</svg>
</div>
<div class="lbar">
<button class="btn" id="cl-play">Pause loop</button>
<div class="read">step <u id="cl-step">1</u> · reward <u id="cl-rew">pending</u></div>
</div>
<div class="foot">Illustrative animation of the documented loop, not a live agent run. Step and reward values are for demonstration.</div>
</div>
<div class="pane" data-pane="4">
<div class="ptitle">A small open model, fine-tuned on distilled traces</div>
<div class="pnote">The repository reports fine-tuning Qwen3-VL-2B-Instruct on Lite.ScaleCUA desktop trajectories rolled out by a frontier teacher model, then evaluating on the Lite.OSWorld split.</div>
<div class="row">
<div class="rlab"><span><b>Qwen3-VL-2B-Instruct, base</b></span><em>0.138</em></div>
<div class="track"><div class="fill f-vm" id="cl-t1"></div></div>
</div>
<div class="row">
<div class="rlab"><span><b>After SFT on Lite.ScaleCUA</b></span><em>0.237</em></div>
<div class="track"><div class="fill f-lite" id="cl-t2"></div></div>
</div>
<div class="grid2">
<div class="stat"><b>332</b><span>Valid tasks in the Lite.OSWorld eval split used</span></div>
<div class="stat"><b>2 GPUs</b><span>The documented SFT example configuration</span></div>
<div class="stat"><b>GRPO</b><span>RL path, run on top of the Slime trainer</span></div>
</div>
<div class="lbar"><button class="btn" id="cl-anim4">Replay comparison</button></div>
<div class="foot">Single reported configuration from the CUA-Lite README, not an independently reproduced benchmark. Bars are scaled to a 0.30 maximum.</div>
</div>
</div>
<div class="brand">
<span>CUA-Lite is an open platform for computer-use agents from a UC Berkeley led team.</span>
<span>Built by <b>Marktechpost</b></span>
</div>
</div>
<script>
(function(){
var root=document.getElementById(‘cl-embed’);
var tabs=root.querySelectorAll(‘.tab’);
var panes=root.querySelectorAll(‘.pane’);
var reduce=window.matchMedia&&window.matchMedia(‘(prefers-reduced-motion: reduce)’).matches;
function ping(){
try{parent.postMessage({cl:’cua-lite-embed’,height:document.body.offsetHeight+40},’*’);}catch(e){}
}
function pane1(){
var p=root.querySelector(‘.pane1’);
p.classList.remove(‘go’);
void p.offsetWidth;
p.classList.add(‘go’);
}
function pane2(){
var ram=parseInt(document.getElementById(‘cl-ram’).value,10);
var vm=Math.floor(ram/4.1), lt=Math.floor(ram/0.9);
var max=Math.max(lt,1);
document.getElementById(‘cl-ramv’).textContent=ram+’ GB’;
var b1=document.getElementById(‘cl-b1’), b2=document.getElementById(‘cl-b2′);
b1.style.width=(vm/max*100)+’%’;
b2.style.width=’100%’;
document.getElementById(‘cl-c1′).textContent=vm+’ desktops’;
document.getElementById(‘cl-c2′).textContent=lt+’ desktops’;
}
function pane4(){
var t1=document.getElementById(‘cl-t1’), t2=document.getElementById(‘cl-t2′);
t1.style.width=’0′; t2.style.width=’0′;
setTimeout(function(){
t1.style.width=(0.138/0.30*100)+’%’;
t2.style.width=(0.237/0.30*100)+’%’;
ping();
},60);
}
tabs.forEach(function(t){
t.addEventListener(‘click’,function(){
var n=t.getAttribute(‘data-p’);
tabs.forEach(function(x){x.setAttribute(‘aria-selected’,x===t?’true’:’false’);});
panes.forEach(function(p){p.classList.toggle(‘on’,p.getAttribute(‘data-pane’)===n);});
if(n===’1′)pane1();
if(n===’2′)pane2();
if(n===’4′)pane4();
ping();
});
});
document.getElementById(‘cl-replay’).addEventListener(‘click’,pane1);
document.getElementById(‘cl-anim4’).addEventListener(‘click’,pane4);
document.getElementById(‘cl-ram’).addEventListener(‘input’,pane2);
/* rollout loop */
var path=document.getElementById(‘cl-path’);
var dot=document.getElementById(‘cl-dot’);
var stepEl=document.getElementById(‘cl-step’);
var rewEl=document.getElementById(‘cl-rew’);
var btn=document.getElementById(‘cl-play’);
var len=path.getTotalLength(), pos=0, on=!reduce, step=1, raf;
if(reduce)btn.textContent=’Run loop’;
function tick(){
if(on){
pos=(pos+1.9)%len;
var pt=path.getPointAtLength(pos);
dot.setAttribute(‘cx’,pt.x); dot.setAttribute(‘cy’,pt.y);
if(pos<2){
step=step>=8?1:step+1;
stepEl.textContent=step;
rewEl.textContent=step>=8?’1.0 success’:’pending’;
}
}
raf=requestAnimationFrame(tick);
}
raf=requestAnimationFrame(tick);
btn.addEventListener(‘click’,function(){
on=!on; btn.textContent=on?’Pause loop’:’Run loop’;
});
pane1(); pane2(); pane4();
window.addEventListener(‘load’,ping);
window.addEventListener(‘resize’,ping);
setTimeout(ping,300); setTimeout(ping,1200);
})();
</script>
“>
Key Takeaways
- CUA-Lite unifies agents, environments, traces and training under one action space and one
LiteSampleschema. - Lite.OSWorld runs OSWorld tasks VM-free in Docker at 0.9 GB versus 4.1 GB, roughly 4.6× more parallel desktops.
- Scores in the container match the OSWorld VM across 13 models, so training signal transfers to the real benchmark.
- 30k+ verifiable tasks, 15+ benchmarks, 10+ agents, and 20+ datasets published free on Hugging Face.
- Deployable on any Docker host, but the repository ships no explicit license yet — verify terms before commercial use.
Check out the Project Page, GitHub Repo and Datasets on Hugging Face. 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 UC Berkeley Researchers Release CUA-Lite, an Open Platform Unifying Sandboxes, Data, Evaluation and RL for Computer-Use Agents appeared first on MarkTechPost.