Sakhanda Wire
NVDA $204.64 -4.22% MSFT $521.91 -1.55% GOOGL $279.84 -1.40% META $614.99 -1.53% AMZN $240.35 -1.41%
← Към новините

Vercel Labs пусна с отворен код agent-desktop за използване на компютър от агенти

Vercel Labs пусна agent-desktop — CLI с отворен код за използване на компютри от AI агенти в macOS, Windows и Linux. agent-desktop прочита всяко приложение чрез дървото за достъпност на операционната система, а не чрез екранни снимки. Агентът получава JSON моментна снимка с ref за всеки елемент, върху който може да извършва действия. Версия 1.0.2 излезе на 30 октомври 2026 г. под лиценза Apache-2.0. За разработчиците това означава, че всеки програмен агент с достъп до shell вече може да управлява нативни приложения без модел за компютърно зрение.

Накратко

Какво представлява agent-desktop?

agent-desktop е Rust CLI и C библиотека от Vercel Labs за четене и управление на настолни приложения. Това е инструмент, който агентите извикват, а не агент. В него няма вграден LLM и няма графичен интерфейс. Всяка команда отпечатва един JSON контейнер и приключва. Цикълът за наблюдение, действие и проверка остава в самия ви агент.

Как работи agent-desktop?

Всяка команда преминава през фиксирана верига. CLI или C библиотеката извиква agent-desktop-core, който достига до операционната система единствено чрез trait-а PlatformAdapter. След това crate за конкретната платформа комуникира с нейния нативен API за достъпност:

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

Core никога не импортира crate за конкретна платформа. Всеки двоичен файл се компилира за работа точно с една операционна система.

Моментни снимки и refs

Моментната снимка присвоява квалифицирани refs като @s8f3k2p9:e8. Идентификаторът на моментната снимка в ref прави ref-а самоописателен. Самостоятелен @e8 се отхвърля с INVALID_ARGS. Когато потребителският интерфейс се промени, действието връща STALE_REF или AMBIGUOUS_TARGET. След това агентът прави нова моментна снимка.

Всяка грешка съдържа disposition. Агентите трябва да повторят действието само когато стойността е safe. Разрешаването на ref е строго и при неуспех прекратява операцията, вместо да прави догадки.

Скелет и детайлно обхождане

Плътните приложения могат да показват хиляди възли за достъпност. Моментна снимка с --skeleton прочита само 3 нива в дълбочина. Контейнерите, чието съдържание е съкратено, показват children_count и получават ref за детайлно обхождане. След това snapshot --root прочита един регион в рамките на същата моментна снимка.

Създателят отчита намаление на токените с 78% до 96% спрямо пълните извлечения на дървото в Slack, VS Code и Notion. В Apple Maps той отчита спад от 3 811 токена на преглед до 273. Симулирана задача от 52 стъпки е намаляла от 198k на 31k токена. Това са самоотчетени стойности, а не независимо сравнение.

По подразбиране без графичен интерфейс

Действията с ref преминават през API за достъпност без преместване на показалеца и без отнемане на фокуса. Именно това позволява на агентите да работят, докато продължавате да използвате машината. Глобалният флаг --headed разрешава физически вход, когато е необходим. Всяко действие с ref също така изчаква автоматично до 5000 ms за видима, активирана и стабилна цел.

Trace a command</button><button class="b g" id="ad-step">Стъпка</button></div> </div> <div class="pane" data-p="1"> <p class="lead">Картиране, детайлно обхождане, действие, проверка. Кликнете върху стъпка. Примерният изход е съкратен от официалната документация (GNOME Calculator).</p> <div class="steps" id="ad-steps"> <div class="st on" data-s="0"><i>1</i><b>Скелет</b></div> <div class="st" data-s="1"><i>2</i><b>Детайлно обхождане</b></div> <div class="st" data-s="2"><i>3</i><b>Действие</b></div> <div class="st" data-s="3"><i>4</i><b>Проверка</b></div> </div> <pre id="ad-code"></pre> <p class="note" id="ad-note"></p> <div class="btns"><button class="b" id="ad-next">Следваща стъпка →</button></div> </div> <div class="pane" data-p="2"> <p class="lead">Данни, отчетени от създателя, за детайлното обхождане на скелета, сравнени с документираната от Anthropic цена на екранна снимка.</p> <div class="bars" id="ad-bars"> <div class="grp">Apple Maps, токени на преглед (самоотчетени)</div> <div class="bar"><div class="lb"><span>Моментна снимка на целия прозорец</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>Скелет, след това детайлно обхождане</span><em>273</em></div><div class="trk"><div class="fill" data-w="7.2" style="background:#0070f3"></div></div></div> <div class="grp">Симулирана задача от 52 стъпки, общо токени (самоотчетени)</div> <div class="bar"><div class="lb"><span>Пълен прозорец на всяка стъпка</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>Скелет, след това детайлно обхождане</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">Сравнение: компютърно използване на базата на пиксели</div> <div class="bar"><div class="lb"><span>Една екранна снимка за използване на компютър от Claude (документация на Anthropic)</span><em>~1000 до 1800</em></div><div class="trk"><div class="fill" data-w="47" style="background:#f5a623">~1,8k макс.</div></div></div> </div> <div class="btns"><button class="b g" id="ad-replay">↻ Повтори</button></div> <p class="note" style="margin-top:10px!important">Създателят също отчита спестяване от 78% до 96% в Slack, VS Code и Notion. Все още няма независимо сравнение.</p> </div> <div class="pane" data-p="3"> <p class="lead">Едни и същи 60 имена на команди навсякъде. Кликнете върху платформа за изискванията.</p> <div class="os"> <div class="oc"><h4>macOS</h4><div class="api">AX API</div><div class="more">macOS 13+, Intel или Apple Silicon. Дайте разрешение за достъпност чрез <code>permissions --guide</code>. Поддръжката на shell повърхности все още е планирана.</div></div> <div class="oc"><h4>Windows</h4><div class="api">UI Automation</div><div class="more">Windows 10 1809+ или Server 2019+, x64 или ARM64. Не е необходимо разрешение за приложения на нивото на цялостност на вашия терминал. Приложенията с по-висока цялостност отказват вход.</div></div> <div class="oc"><h4>Linux</h4><div class="api">AT-SPI</div><div class="more">Ubuntu 24.04+, glibc 2.35 или по-нова, x86_64 или aarch64. Необходим е <code>at-spi2-core</code>. Входът с мишка и наслагването на курсора изискват X11.</div></div> </div> <pre style="min-height:0;margin-top:14px!important"><span class="c"># една инсталация и за трите</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">Къде са ограниченията. Кликнете за разгъване.</p> <div class="lim"> <div class="li"><b><span class="x">!</span>Без дърво, без зрение</b><div class="more">Инструментът прочита дървета за достъпност и никога не сравнява пиксели. Потребителски интерфейс, който не публикува дърво, е невидим за него.</div></div> <div class="li"><b><span class="x">!</span>Паралелна работа с лизинг</b><div class="more">Курсорите на множество агенти са само презентационни. Лизингът за взаимодействие на ниво машина все още сериализира физическия вход. Семантичните действия без графичен интерфейс изцяло избягват показалеца.</div></div> <div class="li"><b><span class="x">!</span>Бавни студени Electron приложения</b><div class="more">Студено Chromium или Electron приложение може да се нуждае от 10 до 25 секунди, за да покаже своето уеб дърво.</div></div> <div class="li"><b><span class="x">!</span>Лични данни в изходите</b><div class="more">Моментните снимки, четенето на клипборда и екранните снимки могат да съдържат лично съдържание от работния плот. Не ги включвайте в публични логове.</div></div> </div> </div> <div class="ft"><span>Източници: github.com/vercel-labs/agent-desktop · agent-browser.dev/desktop · документация на Anthropic</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);}}); /* верига */ 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)}; /* цикъл */ var S=[ ['<span class="c"># 1. картографирайте плътен прозорец: дълбочината е ограничена до 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 } ] }','Прочитани са само най-горните нива. Съкратените контейнери съдържат children_count и ref за детайлно обхождане.'], ['<span class="c"># 2. детайлно обхождане на един регион чрез 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"] } ] }','Новите refs се добавят към същата моментна снимка. Цената зависи от региона, а не от целия прозорец.'], ['<span class="c"># 3. действайте с квалифициран ref: без графичен интерфейс, показалецът остава на място</span>\n<span class="k">agent-desktop</span> click @s2txcl95uvubmn:e11\n\n<span class="c"># самостоятелен ref се отхвърля</span>\n<span class="k">agent-desktop</span> click @e11\n{ "ok": false, "error": { "code": <span class="s">"INVALID_ARGS"</span> } }','Автоматичното изчакване задържа действието до 5000 ms, докато целта стане видима, активирана и стабилна.'], ['<span class="c"># 4. проверка: успехът не доказва, че интерфейсът се е променил</span>\n<span class="k">agent-desktop</span> wait --element @s2txcl95uvubmn:e6 --predicate value --value 7\n\n<span class="c"># остарял ref след повторно детайлно обхождане?</span>\n{ "code": <span class="s">"STALE_REF"</span>,\n "disposition": { "delivery": "not_delivered", "retry": <span class="s">"safe"</span> } }','Грешките показват дали повторният опит е безопасен. При STALE_REF направете нова моментна снимка и повторете.']]; 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); /* ленти */ 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; /* разгъващи се елементи */ 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">

Как се сравнява с използването на компютър на базата на пиксели?

Инструментите за използване на компютър от страна на модела работят с екранни снимки и пикселни координати. Документацията на Anthropic посочва, че всяка екранна снимка струва приблизително 1000 до 1800 входни токена. Дефиницията на набора от инструменти добавя около 4500 входни токена на заявка. Инструментът на OpenAI по подобен начин връща действия за кликване, въвеждане и превъртане, които вашият код изпълнява.

agent-desktop не зависи от конкретен модел и връща структура, а не изображения. UFO² на Microsoft също използва UI Automation, но се доставя като пълноценен Windows агент.

Функцияagent-desktop (Vercel Labs)Claude computer useOpenAI computer useMicrosoft UFO²
ТипCLI + инструмент с C библиотекаНабор инструменти за API клиентAPI инструментПълна агентска рамка
Как вижда интерфейсаДърво за достъпност на операционната системаЕкранни снимкиЕкранни снимки или код (PyAutoGUI, Playwright)Хибрид UIA + визуален анализ
Вграден моделНяма, всеки агентМодели ClaudeМодели на OpenAIКонфигурируем LLM
ПлатформиmacOS, Windows, LinuxВсяка среда, която хоствате (пример: Linux Docker)Браузър или настолен компютър, който хостватеWindows (UFO²)
Премества курсораНе, по подразбиране е без графичен интерфейсДа, кликвания по пикселиДа, кликвания по пикселиДействия чрез GUI + API
Цена в токени на преглед273 (скелет на Apple Maps, самоотчетено)~1000 до 1800 на екранна снимкаНе е оповестенаНе е оповестена
ЛицензApache-2.0Собственически APIСобственически APIMIT
ЦенаБезплатноСтандартно таксуване за токениСтандартно таксуване за токениБезплатно (плюс разходи за LLM)

Как да инсталирате и използвате agent-desktop?

Инсталирайте чрез npm install -g agent-desktop. Bun, Yarn и pnpm също работят. Пакетът включва нативни двоични файлове за x64 и ARM64.

  • macOS: дайте разрешение за достъпност чрез agent-desktop permissions --guide.
  • Windows: не е необходимо разрешение за приложения на нивото на цялостност на вашия терминал.
  • Linux: необходима е графична сесия с at-spi2-core.

Агентите научават как да използват инструмента от включената документация чрез agent-desktop skills get desktop. Умение също е публикувано в skills.sh. C библиотеката позволява на хостове на Python, Swift, Go, Ruby и Node да го извикват в процеса. За уеб съдържание в Electron launch --cdp отваря DevTools порт за agent-browser.

Основни изводи

  • agent-desktop предоставя на всеки агент възможност за използване на компютър чрез дърветата за достъпност на операционната система.
  • Работи на macOS, Windows и Linux, x64 и ARM64, под лиценза Apache-2.0.
  • Действията с ref без графичен интерфейс никога не преместват показалеца и не отнемат фокуса.
  • Моментните снимки на скелета намаляват токените със 78% до 96% (самоотчетено).
  • Приложенията без дърво за достъпност остават недостъпни.

Разгледайте GitHub хранилището, документацията и npm пакета. Също така можете да ни последвате в Twitter и не забравяйте да се присъедините към нашия ML SubReddit с над 150 хил. членове и да се абонирате за нашия бюлетин. Чакайте! В Telegram ли сте? Вече можете да се присъедините към нас и в Telegram.

Имате нужда от партньор за популяризиране на вашето GitHub хранилище, страница в Hugging Face, продуктова премиера, уебинар и др.? Свържете се с нас

Преведено автоматично от английски. Оригиналната статия е на връзката по-долу.

Първоначално публикувано от MarkTechPost на

Прочетете оригинала в MarkTechPost ↗

Текстът и изображенията са собственост на MarkTechPost и са възпроизведени тук с посочване на авторството и връзка към оригиналната публикация.

← Към новините

Още новини

Всички последни новини