Volver al blog

SSH nativo para los agentes de Comma

EmpezarLeer la documentación

Tu servidor doméstico dejó de completar su copia de seguridad nocturna. Los registros están en el servidor, el servidor está detrás de tu router, y quieres que Comma averigüe qué pasó, no que te dé una lista de comandos para copiar y pegar de un lado a otro. Los agentes de Comma ya pueden trabajar en esa máquina por SSH, sin instalar en ella otro agente de IA.

El agente vive fuera del sandbox

La mayoría de los agentes en la nube se ejecutan dentro de su sandbox: un contenedor o una VM que contiene el bucle del modelo, las herramientas y los archivos, y que sigue encendido mientras exista el agente. Salix, el arnés distribuido que hay detrás de Comma, separa estas piezas. El bucle del agente se ejecuta en el arnés, fuera de cualquier sandbox, con más de 100 agentes por núcleo de CPU. Una VM en la nube o un dispositivo es solo un lugar donde se ejecutan comandos, y se usa únicamente cuando el trabajo necesita una computadora.

Así que, para trabajar en tu servidor, el agente no se traslada allí. Llama a herramientas SSH nativas desde el arnés:

  • ssh.open, ssh.write, ssh.read y ssh.screen para una terminal interactiva, incluidos los programas a pantalla completa;

  • ssh.exec para un solo comando, con stdout, stderr y el código de salida por separado;

  • ssh.list_files, ssh.download y ssh.upload para archivos, por SFTP;

  • ssh.close y ssh.list para el ciclo de vida de la conexión.

El agente se autentica con una clave SSH de Group: una clave por espacio de trabajo, compartida por sus agentes. ssh.public_key la devuelve, y tú la agregas a ~/.ssh/authorized_keys en la máquina, como harías con cualquier otro cliente SSH.

El arnés puede llegar a tu máquina de tres maneras.

1. Una dirección pública

Si la máquina ya tiene un servidor SSH accesible, el agente se conecta a su dirección IP o a su nombre DNS:

json
{ "tool": "ssh.open", "params": { "host": "203.0.113.10", "user": "deploy" } }

2. Tailcat, para una máquina sin dirección pública

Una laptop o un servidor doméstico detrás de NAT a menudo no tiene ninguna dirección a la que el arnés pueda conectarse. Tailcat lo conecta sin puerto de entrada, sin VPN y sin cuenta. Se ejecuta en la máquina, solo abre conexiones salientes y muestra una dirección que empieza con tc.

Tailcat también puede hacer de servidor SSH. Ejecútalo con la clave pública del Group:

sh
tailcat serve --ssh-authorized-keys='ssh-ed25519 AAAA...' ssh

Así obtienes un shell de inicio de sesión, ejecución de comandos y SFTP con la cuenta que ejecuta Tailcat. No necesita sshd ni cambia tu configuración de SSH. Si la máquina ya ejecuta OpenSSH, usa tailcat serve 22 en su lugar, y OpenSSH se encarga del inicio de sesión. Después, envía la dirección al agente:

json
{ "tool": "ssh.open", "params": { "tailcat": "tc...", "user": "deploy" } }

3. Tu propia red de Tailscale

Si tus máquinas ya están en una tailnet, el espacio de trabajo puede unirse a ella. Conéctalo en la configuración de la app de Comma o pídeselo al agente. Un administrador de la tailnet abre un enlace de inicio de sesión y aprueba el nodo. El nodo usa de forma predeterminada la etiqueta tag:comma-agent, así que la política de tu tailnet decide exactamente a qué dispositivos y puertos puede llegar; por ejemplo, solo al puerto 22 del servidor doméstico.

El agente lista los dispositivos con tailnet.peers y se conecta por nombre de MagicDNS o por dirección de Tailscale:

json
{
  "tool": "ssh.open",
  "params": { "host": "nas.tail1234.ts.net", "via_tailnet": true, "user": "deploy" }
}

Confianza y duración

En todas las vías, la primera conexión a un host registra su clave de host. Si una conexión posterior presenta una clave distinta, se rechaza con host_key_mismatch y las dos huellas, y el agente te pregunta antes de eliminar la clave antigua con ssh.known_hosts.remove.

Cada conexión SSH pertenece a una sola sesión del agente. Se cierra después de 30 minutos sin uso y no sobrevive a un reinicio del agente ni a un despliegue de la plataforma, así que el trabajo largo debe ir en tmux o screen en la máquina remota. Los comandos tienen límites: ssh.exec agota el tiempo a los 60 segundos de forma predeterminada y a los 600 como máximo, y cuando se agota se informa del error, nunca se reintenta automáticamente.

Para la copia de seguridad, podrías pedir: “Lee los registros y revisa el espacio en disco, pero no borres archivos ni cambies la configuración. Primero dime qué encuentras.”

Try Comma, Now.

Empezar