• bitcoinBitcoin(BTC)$77,446.000.21%
  • ethereumEthereum(ETH)$2,248.720.82%
  • tetherTether(USDT)$1.000.01%
  • binancecoinBNB(BNB)$705.200.73%
  • rippleXRP(XRP)$1.250.23%
  • usd-coinUSDC(USDC)$1.000.02%
  • solanaSolana(SOL)$95.96-0.76%
  • tronTRON(TRX)$0.319576-4.41%
  • Figure HelocFigure Heloc(FIGR_HELOC)$1.03-0.18%
  • zcashZcash(ZEC)$1,282.013.04%
  • HyperliquidHyperliquid(HYPE)$87.97-3.48%
  • dogecoinDogecoin(DOGE)$0.075303-0.66%
  • moneroMonero(XMR)$593.151.12%
  • USDSUSDS(USDS)$1.000.02%
  • chainlinkChainlink(LINK)$11.574.47%
  • whitebitWhiteBIT Coin(WBT)$74.330.37%
  • leo-tokenLEO Token(LEO)$9.37-0.46%
  • cardanoCardano(ADA)$0.192726-0.13%
  • stellarStellar(XLM)$0.1692280.92%
  • bitcoin-cashBitcoin Cash(BCH)$291.392.65%
  • nearNEAR Protocol(NEAR)$4.423.49%
  • daiDai(DAI)$1.000.03%
  • Ethena USDeEthena USDe(USDE)$1.000.00%
  • RainRain(RAIN)$0.006130-7.36%
  • uniswapUniswap(UNI)$6.980.67%
  • litecoinLitecoin(LTC)$54.98-0.87%
  • USD1USD1(USD1)$1.000.01%
  • CantonCanton(CC)$0.095968-0.49%
  • avalanche-2Avalanche(AVAX)$8.493.09%
  • suiSui(SUI)$0.901.43%
  • the-open-networkGram (prev. Toncoin)(GRAM)$1.191.94%
  • hedera-hashgraphHedera(HBAR)$0.0722720.61%
  • tether-goldTether Gold(XAUT)$3,874.51-1.69%
  • Global DollarGlobal Dollar(USDG)$1.000.00%
  • quant-networkQuant(QNT)$199.033.48%
  • paypal-usdPayPal USD(PYUSD)$1.000.02%
  • shiba-inuShiba Inu(SHIB)$0.000005-2.44%
  • BittensorBittensor(TAO)$235.250.92%
  • crypto-com-chainCronos(CRO)$0.051508-0.78%
  • EthenaEthena(ENA)$0.1922831.32%
  • Ripple USDRipple USD(RLUSD)$1.00-0.01%
  • Ondo US Dollar YieldOndo US Dollar Yield(USDY)$1.15-0.03%
  • Circle USYCCircle USYC(USYC)$1.140.00%
  • okbOKB(OKB)$110.820.09%
  • pepePepe(PEPE)$0.000005-5.10%
  • MemeCoreMemeCore(M)$0.92-5.65%
  • aaveAave(AAVE)$134.437.16%
  • BlackRock USD Institutional Digital Liquidity FundBlackRock USD Institutional Digital Liquidity Fund(BUIDL)$1.000.00%
  • OndoOndo(ONDO)$0.4119185.35%
  • Pump.funPump.fun(PUMP)$0.0041692.63%
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

Vercel Labs Open-Sources agent-desktop for Agent Computer Use

October 31, 2026
in AI & Technology
Reading Time: 17 mins read
A A
Vercel Labs Open-Sources agent-desktop for Agent Computer Use
ShareShareShareShareShare

Vercel Labs has released agent-desktop, an open-source CLI for AI agent computer use on macOS, Windows and Linux. agent-desktop reads each app through the operating system’s accessibility tree, not through screenshots. An agent gets a JSON snapshot with a ref for every element it can act on. Version 1.0.2 shipped on October 30, 2026, under Apache-2.0. For developers, any shell-capable coding agent can now drive native apps without a vision model.

TL;DR

  • Library: Rust CLI and a C library. 60 command names, 56 operational.
  • Runs on: macOS 13+, Windows 10 1809+ or Server 2019+, Ubuntu 24.04+, on x64 and ARM64. Plain CPU, no GPU.
  • Performance: Deterministic, retry-safe ref actions. No independent computer-use benchmark yet.
  • Best: 78% to 96% fewer tokens on dense Electron apps via skeleton traversal (self-reported).

What is agent-desktop?

agent-desktop is a Rust CLI and C library from Vercel Labs for reading and operating desktop apps. It is a tool that agents call, not an agent. It embeds no LLM and has no GUI. Every command prints one JSON envelope and exits. The observe, act and verify loop stays in your agent.

How does agent-desktop work?

Each command flows through a fixed chain. The CLI or C library calls agent-desktop-core, which reaches the OS only through a PlatformAdapter trait. One platform crate then talks to the native accessibility API:

  • macOS: AX API
  • Windows: UI Automation
  • Linux: AT-SPI

Core never imports a platform crate. Each binary is compiled to drive exactly one OS.

Snapshots and refs

A snapshot assigns qualified refs such as @s8f3k2p9:e8. The snapshot ID inside the ref makes it self-describing. A bare @e8 is rejected with INVALID_ARGS. When the UI changes, an action returns STALE_REF or AMBIGUOUS_TARGET. The agent then takes a fresh snapshot.

Every error carries a disposition. Agents should retry only when it says safe. Ref resolution is strict and fails closed rather than guessing.

Skeleton and drill-down

Dense apps can expose thousands of accessibility nodes. A --skeleton snapshot reads only 3 levels deep. Cut containers report a children_count and get a drill ref. snapshot --root then reads one region into the same snapshot.

The builder reported a 78% to 96% token cut versus full-tree dumps in Slack, VS Code and Notion. In Apple Maps, he reported 3,811 tokens per look falling to 273. A simulated 52-step task dropped from 198k to 31k tokens. These are self-reported figures, not an independent benchmark.

Headless by default

Ref actions go through the accessibility API without moving the pointer or taking focus. That is what lets agents work while you keep using the machine. The global --headed flag allows physical input when needed. Every ref action also auto-waits up to 5,000 ms for a visible, enabled, stable target.

<iframe id="mtp-ad-frame" title="agent-desktop explainer" srcdoc="<!doctype html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>agent-desktop Explainer</title><style>html,body{margin:0;background:transparent}</style></head><body><style>
#mtp-ad{–bg:#000;–card:#0a0a0a;–line:#262626;–fg:#ededed;–mut:#a1a1a1;–acc:#0070f3;–ok:#76B900;–warn:#f5a623;
max-width:880px;margin:0 auto;background:var(–bg)!important;color:var(–fg)!important;border:1px solid var(–line)!important;border-radius:14px;
font-family:Inter,"Geist",-apple-system,Segoe UI,Roboto,sans-serif;font-size:15px;line-height:1.5;overflow:hidden;box-sizing:border-box}
#mtp-ad *{box-sizing:border-box}
#mtp-ad p:empty,#mtp-ad hr,#mtp-ad del,#mtp-ad s{display:none!important}
#mtp-ad .hd{padding:20px 24px 14px;border-bottom:1px solid var(–line)!important;display:flex;align-items:center;gap:12px;flex-wrap:wrap}
#mtp-ad .hd h3{margin:0!important;font-size:19px;font-weight:700;color:#fff!important;letter-spacing:-.01em}
#mtp-ad .hd .tag{margin-left:auto;font-size:12px;color:var(–mut)!important;border:1px solid var(–line)!important;border-radius:99px;padding:3px 10px}
#mtp-ad .tabs{display:flex;gap:4px;padding:10px 16px 0;border-bottom:1px solid var(–line)!important;overflow-x:auto}
#mtp-ad .tab{background:none!important;border:0!important;color:var(–mut)!important;font:inherit;font-size:14px;padding:10px 12px;cursor:pointer;border-bottom:2px solid transparent!important;white-space:nowrap}
#mtp-ad .tab.on{color:#fff!important;border-bottom-color:#fff!important}
#mtp-ad .pane{display:none;padding:22px 24px;animation:mtpfade .35s ease}
#mtp-ad .pane.on{display:block}
@keyframes mtpfade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
#mtp-ad .lead{color:var(–mut)!important;margin:0 0 16px!important;font-size:14px}
#mtp-ad .chain{display:flex;flex-direction:column;gap:6px}
#mtp-ad .layer{display:flex;align-items:center;gap:12px;background:var(–card)!important;border:1px solid var(–line)!important;border-radius:10px;padding:10px 14px;transition:all .3s;opacity:.45}
#mtp-ad .layer.lit{opacity:1;border-color:var(–acc)!important;box-shadow:0 0 0 1px var(–acc),0 0 18px rgba(0,112,243,.25)}
#mtp-ad .layer .n{font-family:ui-monospace,Menlo,monospace;font-size:12px;color:var(–mut)!important;width:20px}
#mtp-ad .layer b{color:#fff!important;font-weight:600;min-width:180px}
#mtp-ad .layer span{color:var(–mut)!important;font-size:13px}
#mtp-ad .btns{display:flex;gap:8px;margin-top:16px;flex-wrap:wrap}
#mtp-ad .b{background:#fff!important;color:#000!important;border:0!important;border-radius:8px;padding:8px 14px;font:inherit;font-size:13px;font-weight:600;cursor:pointer}
#mtp-ad .b.g{background:transparent!important;color:#fff!important;border:1px solid var(–line)!important}
#mtp-ad .steps{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:14px}
#mtp-ad .st{background:var(–card)!important;border:1px solid var(–line)!important;border-radius:10px;padding:10px;text-align:center;cursor:pointer;transition:all .25s}
#mtp-ad .st.on{border-color:var(–acc)!important;background:#06162b!important}
#mtp-ad .st i{display:block;font-style:normal;font-size:11px;color:var(–mut)!important}
#mtp-ad .st b{color:#fff!important;font-size:14px}
#mtp-ad pre,#mtp-ad code{background:#0a0a0a!important;color:#ededed!important;border:0!important;font-family:ui-monospace,Menlo,Consolas,monospace!important}
#mtp-ad pre{border:1px solid var(–line)!important;border-radius:10px;padding:14px!important;margin:0 0 10px!important;font-size:12.5px;line-height:1.55;white-space:pre-wrap;word-break:break-word;min-height:150px}
#mtp-ad .k{color:#7cb7ff!important}#mtp-ad .s{color:#a3e635!important}#mtp-ad .c{color:#6b6b6b!important}
#mtp-ad .note{font-size:13px;color:var(–mut)!important;margin:0!important}
#mtp-ad .bars{display:flex;flex-direction:column;gap:14px}
#mtp-ad .bar .lb{display:flex;justify-content:space-between;font-size:13px;margin-bottom:5px;color:var(–fg)!important}
#mtp-ad .bar .lb em{font-style:normal;color:var(–mut)!important}
#mtp-ad .trk{height:26px;background:#111!important;border-radius:6px;overflow:hidden;border:1px solid var(–line)!important}
#mtp-ad .fill{height:100%;width:0;border-radius:5px;transition:width 1.1s cubic-bezier(.2,.8,.2,1);display:flex;align-items:center;justify-content:flex-end;padding-right:8px;font-size:12px;font-weight:700;color:#000!important}
#mtp-ad .grp{font-size:12px;text-transform:uppercase;letter-spacing:.08em;color:var(–mut)!important;margin:6px 0 -4px}
#mtp-ad .os{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
#mtp-ad .oc{background:var(–card)!important;border:1px solid var(–line)!important;border-radius:10px;padding:14px;cursor:pointer;transition:border-color .2s}
#mtp-ad .oc:hover,#mtp-ad .oc.on{border-color:#fff!important}
#mtp-ad .oc h4{margin:0 0 4px!important;color:#fff!important;font-size:16px}
#mtp-ad .oc .api{font-family:ui-monospace,Menlo,monospace;font-size:12px;color:#7cb7ff!important}
#mtp-ad .oc .more{max-height:0;overflow:hidden;transition:max-height .35s ease;font-size:13px;color:var(–mut)!important}
#mtp-ad .oc.on .more{max-height:220px;margin-top:8px}
#mtp-ad .lim{display:flex;flex-direction:column;gap:8px}
#mtp-ad .li{background:var(–card)!important;border:1px solid var(–line)!important;border-radius:10px;padding:12px 14px;cursor:pointer}
#mtp-ad .li b{color:#fff!important}#mtp-ad .li .x{color:var(–warn)!important;margin-right:6px}
#mtp-ad .li .more{max-height:0;overflow:hidden;transition:max-height .3s;font-size:13px;color:var(–mut)!important}
#mtp-ad .li.on .more{max-height:160px;margin-top:6px}
#mtp-ad .ft{border-top:1px solid var(–line)!important;padding:12px 24px;display:flex;justify-content:space-between;font-size:12px;color:var(–mut)!important;flex-wrap:wrap;gap:6px}
#mtp-ad .ft .mtp{color:#76B900!important;font-weight:700}
@media (max-width:640px){
#mtp-ad .steps{grid-template-columns:repeat(2,1fr)}
#mtp-ad .os{grid-template-columns:1fr}
#mtp-ad .layer b{min-width:0}
#mtp-ad .layer{flex-wrap:wrap}
#mtp-ad .pane{padding:18px 16px}
#mtp-ad .hd .tag{margin-left:0}
}
</style>
<div id="mtp-ad">
<div class="hd"><svg width="22" height="20" viewBox="0 0 22 20" aria-hidden="true"><line x1="11" y1="4" x2="4" y2="16" stroke="#555" stroke-width="1.5"/><line x1="11" y1="4" x2="18" y2="16" stroke="#555" stroke-width="1.5"/><circle cx="11" cy="4" r="3" fill="#fff"/><circle cx="4" cy="16" r="3" fill="#555"/><circle cx="18" cy="16" r="3" fill="#0070f3"/></svg><h3>agent-desktop, explained</h3><span class="tag">Vercel Labs · v1.0.2 · Apache-2.0</span></div>
<div class="tabs">
<button class="tab on" data-t="0">How it works</button>
<button class="tab" data-t="1">The agent loop</button>
<button class="tab" data-t="2">Token cost</button>
<button class="tab" data-t="3">Platforms</button>
<button class="tab" data-t="4">Limits</button>
</div>

<div class="pane on" data-p="0">
<p class="lead">A command travels down 7 layers. No pixels, no model inside: just the OS accessibility API.</p>
<div class="chain" id="ad-chain">
<div class="layer"><span class="n">1</span><b>Your agent</b><span>Claude Code, Codex or any script reads one JSON envelope</span></div>
<div class="layer"><span class="n">2</span><b>CLI or C library</b><span>agent-desktop binary, or libagent_desktop_ffi in process</span></div>
<div class="layer"><span class="n">3</span><b>agent-desktop-core</b><span>Commands, RefStore, snapshot building</span></div>
<div class="layer"><span class="n">4</span><b>PlatformAdapter</b><span>The only door from core to an OS</span></div>
<div class="layer"><span class="n">5</span><b>Platform crate</b><span>macos, windows or linux, picked at compile time</span></div>
<div class="layer"><span class="n">6</span><b>OS accessibility API</b><span>AX · UI Automation · AT-SPI</span></div>
<div class="layer"><span class="n">7</span><b>The app</b><span>Exposes its UI as a tree of roles, names and actions</span></div>
</div>
<div class="btns"><button class="b" id="ad-play"> Trace a command</button><button class="b g" id="ad-step">Step</button></div>
</div>

<div class="pane" data-p="1">
<p class="lead">Map, drill, act, verify. Click a step. Example output is trimmed from the official docs (GNOME Calculator).</p>
<div class="steps" id="ad-steps">
<div class="st on" data-s="0"><i>1</i><b>Skeleton</b></div>
<div class="st" data-s="1"><i>2</i><b>Drill</b></div>
<div class="st" data-s="2"><i>3</i><b>Act</b></div>
<div class="st" data-s="3"><i>4</i><b>Verify</b></div>
</div>
<pre id="ad-code"></pre>
<p class="note" id="ad-note"></p>
<div class="btns"><button class="b" id="ad-next">Next step →</button></div>
</div>

<div class="pane" data-p="2">
<p class="lead">Builder-reported numbers for skeleton drilling, next to Anthropic’s documented screenshot cost.</p>
<div class="bars" id="ad-bars">
<div class="grp">Apple Maps, tokens per look (self-reported)</div>
<div class="bar"><div class="lb"><span>Full window snapshot</span><em>3,811</em></div><div class="trk"><div class="fill" data-w="100" style="background:#ededed">3,811</div></div></div>
<div class="bar"><div class="lb"><span>Skeleton, then drill</span><em>273</em></div><div class="trk"><div class="fill" data-w="7.2" style="background:#0070f3"></div></div></div>
<div class="grp">Simulated 52-step task, total tokens (self-reported)</div>
<div class="bar"><div class="lb"><span>Full window every step</span><em>198k</em></div><div class="trk"><div class="fill" data-w="100" style="background:#ededed">198k</div></div></div>
<div class="bar"><div class="lb"><span>Skeleton, then drill</span><em>31k</em></div><div class="trk"><div class="fill" data-w="15.7" style="background:#0070f3">31k</div></div></div>
<div class="grp">Reference: pixel-based computer use</div>
<div class="bar"><div class="lb"><span>One Claude computer-use screenshot (Anthropic docs)</span><em>~1,000 to 1,800</em></div><div class="trk"><div class="fill" data-w="47" style="background:#f5a623">~1.8k max</div></div></div>
</div>
<div class="btns"><button class="b g" id="ad-replay">↻ Replay</button></div>
<p class="note" style="margin-top:10px!important">Builder also reports 78% to 96% savings on Slack, VS Code and Notion. No independent benchmark yet.</p>
</div>

<div class="pane" data-p="3">
<p class="lead">Same 60 command names everywhere. Click a platform for requirements.</p>
<div class="os">
<div class="oc"><h4>macOS</h4><div class="api">AX API</div><div class="more">macOS 13+, Intel or Apple Silicon. Grant Accessibility permission with <code>permissions –guide</code>. Shell surfaces still planned.</div></div>
<div class="oc"><h4>Windows</h4><div class="api">UI Automation</div><div class="more">Windows 10 1809+ or Server 2019+, x64 or ARM64. No grant for apps at your terminal’s integrity level. Higher-integrity apps refuse input.</div></div>
<div class="oc"><h4>Linux</h4><div class="api">AT-SPI</div><div class="more">Ubuntu 24.04+, glibc 2.35 floor, x86_64 or aarch64. Needs <code>at-spi2-core</code>. Mouse input and cursor overlay need X11.</div></div>
</div>
<pre style="min-height:0;margin-top:14px!important"><span class="c"># one install for all 3</span>
<span class="k">npm</span> install -g agent-desktop
<span class="k">agent-desktop</span> skills get desktop</pre>
</div>

<div class="pane" data-p="4">
<p class="lead">Where it falls short. Click to expand.</p>
<div class="lim">
<div class="li"><b><span class="x">!</span>No tree, no vision</b><div class="more">It reads accessibility trees and never matches pixels. A UI that publishes no tree is invisible to it.</div></div>
<div class="li"><b><span class="x">!</span>Parallel, with a lease</b><div class="more">Multi-agent cursors are presentation-only. A machine-wide interaction lease still serializes physical input. Headless semantic actions avoid the pointer entirely.</div></div>
<div class="li"><b><span class="x">!</span>Slow cold Electron apps</b><div class="more">A cold Chromium or Electron app can take 10 to 25 seconds to expose its web tree.</div></div>
<div class="li"><b><span class="x">!</span>Private data in outputs</b><div class="more">Snapshots, clipboard reads and screenshots can contain private desktop content. Keep them out of public logs.</div></div>
</div>
</div>

<div class="ft"><span>Sources: github.com/vercel-labs/agent-desktop · agent-browser.dev/desktop · Anthropic docs</span><span class="mtp">© Marktechpost</span></div>
</div>
<script>
(function(){
var R=document.getElementById(‘mtp-ad’);
function rs(){try{parent.postMessage({mtpH:R.offsetHeight+40},’*’)}catch(e){}}
var tabs=R.querySelectorAll(‘.tab’),panes=R.querySelectorAll(‘.pane’);
tabs.forEach(function(t){t.onclick=function(){tabs.forEach(function(x){x.classList.remove(‘on’)});panes.forEach(function(x){x.classList.remove(‘on’)});t.classList.add(‘on’);var p=R.querySelector(‘[data-p="’+t.dataset.t+’"]’);p.classList.add(‘on’);if(t.dataset.t===’2′)bars();setTimeout(rs,60);}});
/* chain */
var L=R.querySelectorAll(‘#ad-chain .layer’),ci=-1,tm=null;
function lite(i){L.forEach(function(x,j){x.classList.toggle(‘lit’,j===i)})}
R.querySelector(‘#ad-step’).onclick=function(){clearInterval(tm);ci=(ci+1)%L.length;lite(ci)};
R.querySelector(‘#ad-play’).onclick=function(){clearInterval(tm);ci=-1;tm=setInterval(function(){ci++;if(ci>=L.length){clearInterval(tm);L.forEach(function(x){x.classList.add(‘lit’)});return}lite(ci)},450)};
/* loop */
var S=[
[‘<span class="c"># 1. map a dense window: depth clamped to 3</span>\n<span class="k">agent-desktop</span> snapshot –app gnome-calculator –skeleton -i –compact\n\n{ "snapshot_id": <span class="s">"s2txcl95uvubmn"</span>, "ref_count": 2,\n "children": [\n { "role": "group", "ref_id": <span class="s">"@s2txcl95uvubmn:e1"</span>, "children_count": 2 },\n { "role": "group", "ref_id": <span class="s">"@s2txcl95uvubmn:e2"</span>, "children_count": 1 } ] }’,’Only top levels are read. Cut containers carry children_count and a drill ref.’],
[‘<span class="c"># 2. drill into one region by ref</span>\n<span class="k">agent-desktop</span> snapshot –root @s2txcl95uvubmn:e1 -i –compact\n\n{ "snapshot_id": <span class="s">"s2txcl95uvubmn"</span>, "ref_count": 33,\n "children": [\n { "role": "button", "name": "C", "ref_id": <span class="s">"@s2txcl95uvubmn:e8"</span> },\n { "role": "button", "name": "7", "ref_id": <span class="s">"@s2txcl95uvubmn:e11"</span>,\n "available_actions": ["Click","SetFocus"] } ] }’,’New refs join the same snapshot. Cost follows the region, not the whole window.’],
[‘<span class="c"># 3. act on a qualified ref: headless, pointer stays put</span>\n<span class="k">agent-desktop</span> click @s2txcl95uvubmn:e11\n\n<span class="c"># a bare ref is refused</span>\n<span class="k">agent-desktop</span> click @e11\n{ "ok": false, "error": { "code": <span class="s">"INVALID_ARGS"</span> } }’,’Auto-wait holds the action up to 5,000 ms until the target is visible, enabled and stable.’],
[‘<span class="c"># 4. verify: success does not prove the UI changed</span>\n<span class="k">agent-desktop</span> wait –element @s2txcl95uvubmn:e6 –predicate value –value 7\n\n<span class="c"># stale after a re-drill?</span>\n{ "code": <span class="s">"STALE_REF"</span>,\n "disposition": { "delivery": "not_delivered", "retry": <span class="s">"safe"</span> } }’,’Errors say whether a retry is safe. On STALE_REF, snapshot again and retry.’]];
var si=0,code=R.querySelector(‘#ad-code’),note=R.querySelector(‘#ad-note’),st=R.querySelectorAll(‘.st’);
function show(i){si=i;st.forEach(function(x,j){x.classList.toggle(‘on’,j===i)});code.style.opacity=0;setTimeout(function(){code.innerHTML=S[i][0];note.textContent=S[i][1];code.style.opacity=1;rs()},150)}
code.style.transition=’opacity .15s’;
st.forEach(function(x){x.onclick=function(){show(+x.dataset.s)}});
R.querySelector(‘#ad-next’).onclick=function(){show((si+1)%4)};
show(0);
/* bars */
function bars(){var f=R.querySelectorAll(‘#ad-bars .fill’);f.forEach(function(x){x.style.transition=’none’;x.style.width=”0″});void R.offsetWidth;setTimeout(function(){f.forEach(function(x,i){x.style.transition=’width 1.1s cubic-bezier(.2,.8,.2,1) ‘+(i*0.12)+’s’;x.style.width=x.dataset.w+’%’})},30)}
R.querySelector(‘#ad-replay’).onclick=bars;
/* expanders */
R.querySelectorAll(‘.oc,.li’).forEach(function(x){x.onclick=function(){x.classList.toggle(‘on’);setTimeout(rs,380)}});
window.addEventListener(‘load’,rs);setTimeout(function(){R.querySelector(‘#ad-play’).click()},700);window.addEventListener(‘resize’,rs);setTimeout(rs,300);
})();
</script>
</body></html>” style=”width:100%;max-width:880px;height:600px;border:0;display:block;margin:0 auto;background:transparent;” loading=”lazy”>
window.addEventListener(“message”,function(e){if(e.data&&e.data.mtpH){var f=document.getElementById(“mtp-ad-frame”);if(f&&e.source===f.contentWindow){f.style.height=e.data.mtpH+”px”;}}});

How does it compare with pixel-based computer use?

Model-side computer use tools work from screenshots and pixel coordinates. Anthropic’s docs say each screenshot costs roughly 1,000 to 1,800 input tokens. Its toolset definition adds about 4,500 input tokens per request. OpenAI’s tool similarly returns click, type and scroll actions your code executes.

agent-desktop is model-agnostic and returns structure, not images. Microsoft’s UFO² also uses UI Automation, but ships as a full Windows agent.

Feature agent-desktop (Vercel Labs) Claude computer use OpenAI computer use Microsoft UFO²
Type CLI + C library tool API client toolset API tool Full agent framework
How it sees the UI OS accessibility tree Screenshots Screenshots or code (PyAutoGUI, Playwright) UIA + visual hybrid
Model bundled None, any agent Claude models OpenAI models Configurable LLM
Platforms macOS, Windows, Linux Any env you host (reference: Linux Docker) Browser or desktop you host Windows (UFO²)
Moves your cursor No, headless by default Yes, pixel clicks Yes, pixel clicks GUI + API actions
Token cost per look 273 (Apple Maps skeleton, self-reported) ~1,000 to 1,800 per screenshot Not disclosed Not disclosed
License Apache-2.0 Proprietary API Proprietary API MIT
Price Free Standard token pricing Standard token pricing Free (plus LLM costs)

How do you install and use agent-desktop?

Install with npm install -g agent-desktop. Bun, Yarn and pnpm work too. The package bundles native binaries for x64 and ARM64.

  • macOS: grant Accessibility permission with agent-desktop permissions --guide.
  • Windows: no grant needed for apps at your terminal’s integrity level.
  • Linux: needs a graphical session with at-spi2-core.

Agents learn the tool from bundled docs via agent-desktop skills get desktop. A skill is also listed on skills.sh. The C library lets Python, Swift, Go, Ruby and Node hosts call it in process. For Electron web contents, launch --cdp opens a DevTools port for agent-browser.

Key Takeaways

  • agent-desktop gives any agent computer use through OS accessibility trees.
  • It runs on macOS, Windows and Linux, x64 and ARM64, under Apache-2.0.
  • Headless ref actions never move your pointer or steal focus.
  • Skeleton snapshots cut tokens 78% to 96% (self-reported).
  • Apps without an accessibility tree remain out of reach.


Check out the GitHub repo, docs and npm package. 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

YOU MAY ALSO LIKE

Google Joins OpenAI And Anthropic In Promising New Scraping Controls

Apple Brings First Apple Intelligence Features to China in iOS 27.3 – Unite.AI

The post Vercel Labs Open-Sources agent-desktop for Agent Computer Use appeared first on MarkTechPost.

Credit: Source link

ShareTweetSendSharePin

Related Posts

Google Joins OpenAI And Anthropic In Promising New Scraping Controls
AI & Technology

Google Joins OpenAI And Anthropic In Promising New Scraping Controls

October 31, 2026
Apple Brings First Apple Intelligence Features to China in iOS 27.3 – Unite.AI
AI & Technology

Apple Brings First Apple Intelligence Features to China in iOS 27.3 – Unite.AI

October 30, 2026
Powerlattice Raises M in Equity Offering, SEC Filing Shows – Unite.AI
AI & Technology

Powerlattice Raises $86M in Equity Offering, SEC Filing Shows – Unite.AI

October 30, 2026
Databricks Expands SAP Partnership with Genie, Lakeflow, and Lakebase – Unite.AI
AI & Technology

Databricks Expands SAP Partnership with Genie, Lakeflow, and Lakebase – Unite.AI

October 30, 2026
Next Post
Trump draws backlash for saying Iran could ‘take out’ L.A.

Trump draws backlash for saying Iran could 'take out' L.A.

Leave a Reply Cancel reply

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

Search

No Result
View All Result
TRX Gold: Buckreef Continues Well, As Both Engine And Growth Path (NYSE:TRX)

TRX Gold: Buckreef Continues Well, As Both Engine And Growth Path (NYSE:TRX)

October 25, 2026
Common Mistakes You Should Avoid When Setting Up Your Home Network

Common Mistakes You Should Avoid When Setting Up Your Home Network

October 24, 2026
What Michigan voters are weighing in the Senate race

What Michigan voters are weighing in the Senate race

October 30, 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!