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+’
‘; 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(); })();