Bienvenidos a un nuevo episodio de CNSoluciones Podcast. Soy Federico Pereira.
Y hoy no vengo a comentar una noticia ajena. Hoy vengo a contarles algo nuestro. Algo que construimos con las manos… línea por línea… decisión por decisión. Y que acabamos de liberar como código abierto.
Su nombre es SentinelDesk.
La descripción corta es simple: un escritorio Linux colaborativo para personas y agentes de inteligencia artificial, transmitido mediante WebRTC y desplegado con Docker. Humanos y agentes. Un solo escritorio. Una misma pantalla. Y los dos pueden tomar el control.
Antes de seguir, miralo en acción:
Pero esa es solamente la descripción corta. Y la descripción corta… no cuenta la historia. Porque SentinelDesk no nació de una solicitud de funcionalidad. No nació de una reunión comercial. Ni de una lista de tareas pendientes. SentinelDesk nació de un miedo. O, mejor dicho… nació de la decisión de hacer algo con ese miedo.
”Viene Skynet… y nos va a controlar a todos”
Seguro escuchaste esta frase más de una vez: “Viene Skynet… y nos va a controlar a todos”. Si trabajás en tecnología, probablemente también escuchaste otras versiones: “La inteligencia artificial es el fin de los programadores”. “La inteligencia artificial nos va a sacar el trabajo”. Y después está la versión de sobremesa familiar: “La inteligencia artificial es el fin de la humanidad”.
Yo escucho todo eso… y siempre respondo con la misma pregunta: ¿Y vos qué hiciste para cambiarlo?
Porque quejarse es gratis. Tener miedo es gratis. Entrar en pánico también es gratis. Lo que cuesta es meterse dentro del problema. Entenderlo. Desarmarlo. Y empezar a construir alternativas para que ese futuro que tanto nos preocupa… no termine convirtiéndose en realidad.
Eso es lo que intentamos hacer con SentinelDesk. En lugar de quedarnos mirando cómo los agentes de inteligencia artificial se vuelven cada vez más capaces de operar solos… en segundo plano… dentro de servidores que nadie ve… ejecutando procesos que nadie supervisa… decidimos construir un lugar donde la inteligencia artificial trabaje a la vista de todos.
Esa es la tesis completa de SentinelDesk. Y se puede resumir en una sola idea:
La inteligencia artificial es extraordinariamente buena ejecutando procesos en segundo plano. Pero saber exactamente qué está haciendo… es otra historia. Y ese derecho a saber qué está haciendo… es precisamente lo que decidimos no negociar.
Un agente que trabaja dentro de una terminal invisible… en un servidor que no estás mirando… ejecutando comandos que nadie puede auditar en tiempo real… es una caja negra. En cambio, un agente que trabaja dentro de un escritorio que vos estás viendo… donde podés observar las ventanas que abre… los comandos que escribe… los archivos que descarga… y el movimiento de su puntero… es algo completamente diferente.
Es un compañero de trabajo supervisado. Y la diferencia entre esas dos cosas no es solamente técnica. Es ética.
Control total… pero visible
La idea central de SentinelDesk es simple: control total… pero visible. Te cuento cómo se usa, porque es más fácil entenderlo desde la experiencia. Abrís el navegador. Entrás a una dirección web. Ingresás tu contraseña. Y, unos segundos después, aparece frente a vos un escritorio Linux completo.
No una simulación. No una interfaz limitada. Un escritorio real. Con Chromium. Con terminales. Con VLC. Con un gestor de archivos. Con clientes de escritorio remoto. Con herramientas de administración. Todo ese escritorio funciona dentro de un contenedor Docker y se transmite a tu navegador, en tiempo real, mediante WebRTC.
Pero vos no sos el único participante dentro de ese escritorio. También puede estar conectado un agente de inteligencia artificial. Vos le pedís una tarea. Por ejemplo: “Investigá este problema”. “Conectate por SSH a ese servidor y revisá la configuración”. “Descargá este reporte y preparame un resumen”. “Buscá estos archivos y organizalos”. Entonces… el agente empieza a trabajar.
Y acá aparece la parte verdaderamente importante: vos ves todo lo que hace… mientras lo está haciendo. Ves la terminal donde ejecuta cada comando. Ves el navegador cuando abre una página. Ves las aplicaciones que utiliza. Ves los archivos que mueve. Ves el puntero del agente desplazándose por la pantalla. Cada participante tiene su propio cursor identificado. Sabés quién está moviendo qué. Y sabés quién tiene el control en cada momento.
Ahora imaginemos que algo no te gusta. El agente se conectó al servidor equivocado. Está por eliminar un archivo que no debería tocar. Está interpretando mal una instrucción. O, simplemente, está haciendo algo de una manera diferente a como lo harías vos. En ese momento… tomás el control.
Agarrás tu mouse. Usás tu teclado. Y continuás trabajando sobre el mismo escritorio. Sin cerrar la sesión. Sin reiniciar el proceso. Sin copiar archivos de un lugar a otro. Sin perder el contexto. El agente puede detenerse, observar y continuar más tarde, cuando vuelva a recibir el control.
Y, por supuesto, existe un botón de pánico. Se llama Room.Abort. Un solo botón. Una sola acción. Cuando lo presionás, se detienen los trabajos que se están ejecutando y se le quita el control de entrada a cualquier participante. El agente continúa conectado. Puede seguir observando. Pero ya no puede actuar. Queda castigado en el rincón, por decirlo de alguna manera… aunque sin necesidad de desenchufarlo.
Eso es supervisión de verdad. No es un archivo de registros que alguien revisa al día siguiente. No es un resumen escrito por el propio agente, explicando lo que asegura haber hecho. Es la pantalla. En vivo. Es el trabajo ocurriendo frente a tus ojos. Y es tu mano sobre el volante… cuando la necesitás.
La analogía de Stephen Hawking: un solo canal
Ahora quiero entrar en la arquitectura. Y para explicarla voy a utilizar una de las analogías que más me gustan de todo el proyecto.
Stephen Hawking, durante los últimos años de su vida, controlaba prácticamente todo su sistema utilizando un único movimiento: el movimiento de un músculo de su mejilla. Con ese pequeño gesto seleccionaba letras. Con las letras formaba palabras. Con las palabras construía frases. Y con esas frases… escribía libros, daba conferencias, respondía preguntas y explicaba algunas de las ideas más complejas del universo.
Un solo sensor. Un solo canal de entrada. Un canal extremadamente angosto. Y, sin embargo, detrás de ese canal se encontraba una de las mentes más brillantes de nuestra historia.
SentinelDesk intenta hacer algo conceptualmente parecido con el agente de inteligencia artificial. Le da un solo camino.
El agente no tiene puertos publicados. No recibe acceso libre a la red. No puede explorar directamente el sistema de archivos del host. No dispone de rutas escondidas para ejecutar acciones. Su único canal de comunicación es un socket Unix, protegido con permisos 0600, a través del cual utiliza MCP: el Model Context Protocol.
Ese socket es su músculo de la mejilla. Todo lo que el agente puede hacer dentro del entorno… debe hacerlo a través de ese canal. Y todo lo que pasa por ese canal puede observarse, clasificarse, limitarse y auditarse.
¿Y cómo trabaja el agente utilizando un canal tan limitado? Mediante un ciclo. Un loop. Primero pregunta qué herramientas tiene disponibles. Después elige una. La invoca. Recibe una respuesta. Observa los eventos producidos por el sistema. Analiza lo que ocurrió. Y decide cuál será el siguiente paso.
Herramienta. Respuesta. Evento. Decisión. Después vuelve a empezar. Herramienta. Respuesta. Evento. Decisión.
Ese ciclo, repetido una y otra vez, es lo que permite que el sistema funcione. Es similar al mecanismo de Hawking: pulso. Letra. Palabra. Frase. Un canal angosto no necesariamente limita la inteligencia. Lo que limita es la superficie de acción. Reduce el daño posible. Y garantiza que todo pase por un punto conocido, controlable y auditable.
137 herramientas, clasificadas por riesgo
A través de ese canal, SentinelDesk ofrece 137 herramientas MCP. Y acá aparece otro detalle de diseño que, para nosotros, es fundamental. Cada una de esas 137 herramientas está clasificada de acuerdo con su nivel de riesgo. Hay herramientas de lectura. Herramientas de escritura. Y herramientas consideradas peligrosas.
Además, cada herramienta declara explícitamente si necesita tener el control de entrada para poder ejecutarse. Eso significa que el agente pasa por la misma compuerta de control que una persona. Nunca toma el mouse o el teclado de manera implícita. Nunca obtiene el control simplemente porque lo necesita.
Si una herramienta requiere control… y el agente no lo tiene… la herramienta no se ejecuta. Sin excepciones. Sin permisos silenciosos. Sin configuraciones permisivas por defecto.
¿Y qué puede hacer un agente con esas herramientas? Puede mover el puntero. Puede escribir utilizando el teclado. Puede gestionar ventanas. Puede abrir terminales. Puede ejecutar comandos. Pero esos comandos se ejecutan mediante tmux, sobre la pantalla compartida, para que vos puedas observarlos.
También puede abrir sesiones SSH persistentes. Generar claves. Crear túneles. Conectarse a escritorios remotos mediante RDP, VNC y otros protocolos de escritorio remoto. Puede administrar archivos. Instalar paquetes. Tomar capturas. Grabar la pantalla. Abrir aplicaciones. Navegar. Investigar. En otras palabras… puede comportarse como un operador completo.
Pero es un operador que trabaja dentro de una pecera. Puede moverse. Puede utilizar las herramientas. Puede completar tareas complejas. Pero vos estás mirando desde el otro lado del vidrio.
¿Por qué Docker? La caja y la pecera
Y entonces aparece una pregunta inevitable: ¿por qué Docker? Me hicieron esa pregunta varias veces. Y la respuesta tiene dos partes.
La primera es la parte práctica: la instalación. SentinelDesk está dividido en dos contenedores. El primero se llama sentineldesk. Ese contenedor contiene el escritorio, el servidor gráfico, el gestor de ventanas, las aplicaciones, el sistema de transmisión mediante WebRTC y el servidor MCP.
El segundo contenedor se llama sentineldesk-agent. Ahí funciona el entorno de ejecución del agente. Ese segundo contenedor es opcional. También podés ejecutar el agente directamente desde el host, según el modelo de implementación que prefieras.
No necesitás instalar una base de datos. No necesitás un plano de control externo. No necesitás desplegar una colección interminable de servicios auxiliares. Necesitás Docker. Levantás los contenedores. Abrís la dirección segura del servidor en el puerto 8080. Y el escritorio aparece.
Puede funcionar en un servidor virtual privado. En una red local. En una laptop. En un servidor con unidad gráfica. O incluso en una Raspberry Pi con arquitectura ARM de 64 bits (arm64). Esa es la parte práctica.
Pero la segunda parte es mucho más interesante. Docker es la caja. Es el límite operativo dentro del cual vive el agente.
Los dos contenedores están conectados por una sola pieza compartida: un volumen llamado sentineldesk-run. Dentro de ese volumen se encuentran los sockets Unix. Ese volumen representa el principal límite de comunicación que debemos entender y proteger. Y eso facilita enormemente el razonamiento sobre la seguridad.
El contenedor del agente no publica puertos. No recibe acceso libre a la red. No tiene acceso directo al sistema de archivos del host. Su única apertura controlada hacia el resto del sistema es el socket MCP. Y del otro lado de ese socket están las 137 herramientas clasificadas, la compuerta de control y el registro de auditoría.
Es como una pecera. El pez puede nadar con libertad dentro del agua. Podemos observarlo desde diferentes ángulos. Podemos ver cada uno de sus movimientos. Pero no existe una manguera abierta que conecte directamente la pecera con el océano.
Y hay otro detalle que forma parte de nuestra filosofía: toda la configuración se realiza mediante variables de entorno. No existe un archivo de configuración oculto. No existe un documento perdido que alguien modificó manualmente hace seis meses… y que ahora nadie recuerda. Todo lo que el sistema puede hacer queda declarado en el ambiente con el que inicia. Visible. Reproducible. Y fácil de comparar.
Probalo vos mismo: dos comandos y un login
¿Suena complicado? Acá está la prueba de que no lo es. Esto es todo lo que se necesita para tener tu propio SentinelDesk corriendo:
curl -fsSLO https://raw.githubusercontent.com/sentineldesk/desktop/main/docker-compose.yml
AUTH_PASS=change-me HOST_IP=<tu-ip> docker compose up -d
# → abrí https://localhost:8080 e iniciá sesión
Dos comandos. Abrís el navegador. Ponés tu contraseña. Y ya tenés el escritorio colaborativo funcionando.
¿Y el cerebro? Para configurar el agente con el LLM que tengas —Claude, GPT, el que uses— entrás a su terminal y lo conectás:
docker exec -it sentineldesk-agent sentineldesk-agent
Desde ahí elegís el modelo, cargás tu clave de API, y el agente queda listo para trabajar. En la pecera. A la vista.
Todo el código y las instrucciones completas están acá: github.com/sentineldesk/desktop. Y para más información, la guía de usuario completa está disponible en inglés, español y portugués. Entrá, probalo, rompelo, y si te gusta… dejanos una estrella. ⭐
La sala de máquinas: una captura, un codificador, todos mirando
Ahora abramos el capó. Entremos en la sala de máquinas. Porque hay una pregunta técnica que fue fundamental durante el desarrollo: ¿cómo hacemos para que varias personas y varios agentes puedan observar el mismo escritorio en tiempo real… sin destruir el procesador?
La respuesta es: una sola captura. Un solo codificador. Y distribución para todos.
El escritorio funciona sobre Xvfb, un servidor gráfico X que trabaja en memoria. Utilizamos Openbox como gestor de ventanas y el panel de XFCE para completar la experiencia de escritorio. La captura se realiza con ximagesrc, dentro de GStreamer. Y utilizamos el seguimiento de cambios de X Damage.
El concepto es hermoso por su simplicidad. En lugar de capturar la pantalla completa 30 veces por segundo, el servidor gráfico informa qué regiones de la pantalla cambiaron. Si el escritorio está completamente quieto… el sistema tiene muy poco trabajo que hacer. Si solamente parpadea el cursor dentro de una terminal… no es necesario procesar toda la pantalla. Se procesa únicamente ese pequeño rectángulo.
Esa captura alimenta una única tubería compartida. No existe una tubería completa por cada espectador. Existe una sola tubería. Un solo flujo codificado. Y después ese flujo se distribuye entre todos los participantes conectados.
El costo adicional de sumar nuevos espectadores es muy bajo. Diez personas pueden estar observando el mismo escritorio… sin que el sistema tenga que capturar y codificar diez veces exactamente la misma imagen.
¿Y qué codificador se utiliza? El mejor que esté disponible en esa máquina. Pero la decisión no se toma utilizando una tabla rígida de suposiciones. Se realiza una prueba real cuando el sistema inicia.
Primero se intenta utilizar NVENC, el codificador por hardware de NVIDIA. Si no está disponible, se intenta utilizar VA-API, para aprovechar la aceleración de hardware de Intel o AMD. Si tampoco está disponible… se utiliza x264 por software. Y, como alternativa universal, siempre está disponible VP8.
Esto permite que la misma imagen de Docker aproveche la unidad gráfica cuando existe… y que también pueda funcionar utilizando solamente el procesador en equipos más pequeños. Una sola imagen. Diferentes capacidades. El mismo sistema.
Somos la resistencia
Pero SentinelDesk no es solamente un escritorio remoto. Tampoco es solamente una colección de herramientas MCP. Y no es solamente un contenedor donde un agente puede mover un mouse.
SentinelDesk representa una postura. La idea de que no tenemos que elegir entre utilizar inteligencia artificial… o conservar el control. Podemos hacer las dos cosas.
Podemos construir agentes poderosos sin volverlos invisibles. Podemos permitir que automaticen tareas sin entregarles un acceso ilimitado. Podemos trabajar junto a ellos sin convertirlos en cajas negras. Y podemos crear sistemas donde la supervisión no sea una promesa. Donde sea parte de la arquitectura. Parte del protocolo. Parte del escritorio. Parte de cada acción.
Por eso decidimos liberar SentinelDesk como código abierto. Porque no queremos que simplemente confíen en lo que decimos. Queremos que puedan mirar el código. Auditarlo. Romperlo. Discutirlo. Modificarlo. Y mejorarlo.
El futuro de la inteligencia artificial no lo van a decidir solamente quienes construyan los modelos más grandes. También lo vamos a decidir quienes construyamos mejores límites. Mejores interfaces. Mejores registros. Mejores mecanismos de control. Y mejores formas de colaboración entre personas y máquinas.
No queremos apagar la inteligencia artificial. No queremos detenerla. No queremos fingir que no existe. Queremos trabajar con ella… pero con la pantalla encendida. Con el registro abierto. Con cada acción visible. Y con la mano en el volante.
SentinelDesk es nuestra manera de decir que todavía podemos elegir cómo se construye ese futuro. Que todavía podemos negarnos a aceptar sistemas completamente invisibles. Que todavía podemos construir alternativas. Y que todavía podemos hacer algo con nuestros miedos… en lugar de limitarnos a hablar sobre ellos.
Porque el futuro no se espera. El futuro se construye. Línea por línea. Decisión por decisión. Herramienta por herramienta.
Y mientras sigamos construyendo… mientras sigamos observando… mientras sigamos auditando… y mientras sigamos negándonos a entregar el control… nos van a encontrar acá. Con la pantalla encendida. Con las manos sobre el teclado. Y con la vista puesta en cada movimiento.
Porque nosotros…
¡SOMOS LA RESISTENCIA!
SentinelDesk es open source, licencia Apache 2.0: github.com/sentineldesk/desktop · Documentación completa en inglés, español y portugués.
Estás invitado a participar del proyecto. Issues, pull requests, ideas, pruebas, traducciones — todo suma. Y si querés hablar directamente conmigo, me encontrás en Telegram y WhatsApp como lordbasex.