Lo que faltaba
Hasta ahora, Golem le daba a Claude ojos y brazos en otra máquina, pero los brazos no llegaban a la pantalla. Claude podía ejecutar PowerShell, mover ficheros, manejar servicios y hacer capturas, y aun así se quedaba parado delante de una ventana que pedía rellenar tres campos.
A finales de septiembre, un técnico de una empresa de software estaba instalando un producto en el servidor de un cliente con Golem. Uno de los pasos del instalador era una pantalla con unos campos que había que rellenar, y Claude dijo que no podía escribir en ella. Tenía razón. Veía la pantalla por la captura, pero no tenía ninguna herramienta para tocarla, y eso es lo que trae Golem 1.5.
Dos cosas distintas que se llaman «agente»
Hoy la palabra «agente» se entiende casi siempre como agente de IA, y en este artículo aparecen dos piezas con ese nombre. Conviene separarlas antes de seguir.
- El agente de IA es Claude, el modelo con el que hablo desde la app de Claude o desde Claude Code. Entiende lo que le pido, decide qué hacer y llama a las herramientas que tiene a mano.
- El agente de Golem es un programa,
golem.exe, que corre en la otra máquina y no tiene inteligencia propia. Recibe las llamadas de Claude, las ejecuta allí (un comando, una copia de ficheros, escribir en una caja de texto) y devuelve el resultado. Es la pieza que pone a disposición de Claude las herramientas de este artículo.
Entre los dos está el cliente de Golem, en mi ordenador, que conecta a Claude con el agente de Golem de la otra máquina. En adelante, «el agente de Golem» es siempre el programa, y a Claude lo llamo por su nombre.
Ocho herramientas nuevas
| Herramienta | Qué hace |
|---|---|
ui_windows | Lista las ventanas abiertas: título, proceso, tamaño |
ui_controls | Lee los controles de una ventana: botones, cajas de texto, casillas, listas |
ui_screenshot | La imagen de una sola ventana, aunque otra la tape |
ui_set_text | Escribe en una caja de texto |
ui_click | Pulsa un botón, marca una casilla o elige un elemento de una lista |
ui_keys | Trae la ventana al frente y teclea: {ENTER}, {TAB}, ^s |
ui_focus | Trae una ventana al frente, y la restaura si está minimizada |
ui_wait | Espera a que una ventana aparezca, o a que se cierre |
Con esto, el caso del instalador queda así: Claude arranca el instalador, espera a que salga su ventana, lee sus controles, pulsa «Siguiente» hasta la página de los campos, los rellena y sigue. Si el instalador termina con una ventana de «Finalizar», la cierra.
Si el instalador pide permisos de administrador, el agente de Golem también tiene que tenerlos: con golem serve, arráncalo como administrador; con Golem Assist, ábrelo como administrador. Si no, Golem lo detecta y contesta que esa ventana está fuera de su alcance, sin teclear nada. Bajo el Guardián esas ventanas quedan siempre fuera.
Por el nombre del control, no por coordenadas
Lo fácil habría sido mover el ratón a unas coordenadas sacadas de la captura y hacer clic. No lo quise así. Un clic por coordenadas cae donde caiga: si la ventana se movió, si otra se puso delante o si la pantalla tiene otra escala, pulsa otra cosa y nadie se entera.
Las herramientas hablan con las aplicaciones por UI Automation, la misma interfaz que usan los lectores de pantalla de Windows. Cada control se señala por su identificador, por su nombre o por su posición en el árbol de la ventana, y el texto se escribe en el control, sin pasar por el teclado. Solo cuando una aplicación no expone nada se recurre a las teclas o a un clic de ratón, y la respuesta dice cuál de los caminos se usó.
Antes de teclear o de hacer clic, Golem comprueba que la ventana llegó al frente. Si la persona que está en el ordenador está trabajando en otra ventana y Windows no deja cambiar el foco, no se manda nada y la respuesta lo dice. Una tecla en la ventana equivocada hace más daño que ninguna.
En el ordenador de un cliente, con Golem Assist
Golem Assist es la ventana que abre un cliente cuando necesita ayuda: le da un número de doce dígitos, me lo dicta y entro. Arranca el agente de Golem en la sesión del propio cliente, con su escritorio, así que las manos funcionan desde el primer momento. Ahora puedo pedirle a Claude que rellene el formulario que el cliente tiene delante, y el cliente lo ve escribirse en su pantalla.
Para eso el cliente necesita la 1.5 de Golem Assist. Las herramientas las pone el agente de Golem que corre en su ordenador, y ese programa va dentro de GolemAssist.exe.
En un servidor sin nadie delante, con el Guardián
El Guardián corre como servicio de Windows, y los servicios viven en una sesión sin escritorio. Para que las manos lleguen a la pantalla, el Guardián lanza un pequeño ayudante sin ventana en la sesión de quien esté conectado al servidor, y le pasa las herramientas de escritorio y las capturas. Si no hay nadie con la sesión iniciada, las herramientas lo dicen en vez de fallar de forma rara. El ayudante se cierra con la sesión de Golem.
El ayudante corre con los permisos normales del usuario de esa sesión. Una ventana abierta como administrador no acepta teclas de un proceso sin elevar, y Golem lo detecta y lo dice.
Las contraseñas no se quedan en el registro
Golem apunta cada llamada en golem-audit.log, junto al ejecutable, para que el dueño de la máquina sepa qué se hizo en ella. Cuando Claude escribe una contraseña, lo hace con secret=true, y entonces ni la respuesta ni el registro llevan el texto. La contraseña sí pasa por la conversación con Claude, que tiene que conocerla para escribirla; si no quieres que pase, tecléala tú.
Con un ERP en Visual FoxPro
Lo que UI Automation ve dentro de una aplicación de Visual FoxPro depende de la versión y de la pantalla. En la certificación de esta versión, la pantalla de acceso de un ERP hecho en VFP Advanced 10.2 enseñó 73 controles con su nombre y su valor, y los clics cayeron en su sitio. Con otras versiones y otras pantallas puede verse bastante menos.
Aun así, para trabajar con un ERP en VFP la vía que recomiendo es FoxAgent como servidor hijo de Golem. Maneja las pantallas desde dentro de la aplicación, con sus formularios y sus datos, y no depende de lo que la aplicación exponga hacia fuera.
En modo solo mirar
Con --read-only, el modo de solo mirar, se publican desde la 1.5.1 las tres que solo leen la pantalla (ui_windows, ui_controls y ui_screenshot), igual que screenshot. Las cinco que escriben, pulsan, enfocan o esperan se quedan fuera.
Probado
Antes de publicarla he pasado las pruebas de siempre y las nuevas: el agente de Golem escribiendo y pulsando en una ventana de prueba y en el Bloc de notas de Windows 11, el Guardián instalado con su ayudante, una ventana elevada que se niega a recibir teclas y ningún ayudante vivo al quitar el Guardián. La versión vigente, la 1.5.3, está firmada, y los hashes de cada fichero están en la guía de instalación.