Andrew Ng acaba de lanzar OpenWorker: un compañero de trabajo de IA de escritorio local y de código abierto que devuelve entregables terminados en lugar de chatear




Andrew Ng ha anunciado OpenWorker, un agente de escritorio de código abierto que produce trabajos terminados en lugar de conversaciones. OpenWorker le pide al usuario un resultado, no un mensaje: un documento pulido, una respuesta de Slack que contiene los números reales, un calendario actualizado, una bandeja de entrada clasificada. Luego divide ese resultado en pasos, trabaja en archivos locales y aplicaciones conectadas, y se registra antes de cualquier cosa importante.

La arquitectura tiene cuatro capas y todas se ejecutan en su máquina.

El repositorio contiene 119 archivos Python (~32,400 líneas) en coworker/, 149 archivos TypeScript/TSX en marks/gui/ y 78 módulos de prueba de backend.

La pila se descompone de la siguiente manera:

Shell de escritorio: una ventana nativa de Tauri 2 que envuelve una interfaz de usuario de React 18. El identificador del paquete es com.openworker.desktop y el shell supervisa el servidor Python. Servidor de agente local: Python 3.10+ en FastAPI y uvicorn, vinculado a 127.0.0.1:8765 de forma predeterminada. La configuración de ejemplo limita un turno a 12 iteraciones de modelo↔herramienta. Capacidad y capa de conector: herramientas locales examinadas (archivos, git, búsqueda respaldada por ripgrep, shell, tareas pendientes) además de integraciones alojadas más MCP. Enrutador modelo: una interfaz sobre proveedores nativos, compatibles con OpenAI, revendedores y locales.

El motor está construido sobre aisuite, la biblioteca LLM independiente del proveedor de Andrew Ng.

‘+l.d+’

‘+lumap(función(u){retorno ”+u+”}).join(”)+’

‘; d.addEventListener(‘click’,function(){var was=d.classList.contains(‘on’);lay.querySelectorAll(‘.layer’).forEach(function(x){x.classList.remove(‘on’)});if(!was)d.classList.add(‘on’);sz();}); lay.appendChild(d);}); función faceta(elementos,idx,chipEl,rowEl,render){ var gatos=[];items.forEach(función(es){si(gatos.indexOf(es[idx])<0)gatos.push(es[idx])}); var sel="Todos"; chips de función(){chipEl.innerHTML='';['All'].concat(cats).forEach(function(c){ var n=c==='Todos'?items.length:items.filter(function(i){return i[idx]===c}).longitud; var b=document.createElement('botón');b.className="chip"+(c===sel?' on':''); b.innerHTML=c+'‘+n+’‘; b.addEventListener(‘click’,function(){sel=c;chips();rows();sz();});chipEl.appendChild(b);});} function rows(){rowEl.innerHTML=”;items.filter(function(i){return sel===’Todos’||i[idx]===sel}).forEach(function(i){ var d=document.createElement(‘div’);d.className=”row”;d.innerHTML=render(i);rowEl.appendChild(d);});} chips();rows();} faceta(MODELOS,0,document.getElementById(‘mchips’),document.getElementById(‘mrows’),función(m){ return ‘‘+(m[3]?’Vision + PDF’:’Solo herramientas’)+’‘;}); faceta(CONN,0,document.getElementById(‘cchips’),document.getElementById(‘cuervos’),función(c){ return ‘

‘+c[1]+’

‘+c[0]+’‘;}); var mxb=document.getElementById(‘mxb’); MX.forEach(función(r){var tr=document.createElement(‘tr’); tr.innerHTML=”+r[0]+”+r.slice(1).map(función(c){retorno ‘‘+c[0]+’‘}).unirse(”); mxb.appendChild(tr);}); función sz(){try{parent.postMessage({owEmbed:’ow1′,height:R.offsetHeight+40},’*’)}catch(e){}} if(window.ResizeObserver)new ResizeObserver(sz).observe(R); window.addEventListener(‘load’,sz);setTimeout(sz,120);sz(); })();