Voltar ao blog

SSH nativo para os agentes do Comma

ComeçarLer a documentação

Seu servidor doméstico parou de concluir o backup noturno. Os logs estão no servidor, o servidor está atrás do seu roteador, e você quer que o Comma descubra o que aconteceu, não que entregue uma lista de comandos para você ficar copiando de um lado para o outro. Agora os agentes do Comma podem trabalhar nessa máquina por SSH, sem instalar outro agente de IA nela.

O agente vive fora do sandbox

A maioria dos agentes na nuvem roda dentro do próprio sandbox: um contêiner ou uma VM que guarda o loop do modelo, as ferramentas e os arquivos, e fica ligado enquanto o agente existir. O Salix, harness distribuído por trás do Comma, separa essas partes. O loop do agente roda no harness, fora de qualquer sandbox, com mais de 100 agentes por núcleo de CPU. Uma VM na nuvem ou um dispositivo é só um lugar onde comandos rodam, usado apenas quando o trabalho precisa de um computador.

Por isso, para trabalhar no seu servidor, o agente não se muda para lá. Ele chama ferramentas SSH nativas a partir do harness:

  • ssh.open, ssh.write, ssh.read e ssh.screen para um terminal interativo, inclusive programas em tela cheia;

  • ssh.exec para um único comando, com stdout, stderr e o código de saída separados;

  • ssh.list_files, ssh.download e ssh.upload para arquivos, via SFTP;

  • ssh.close e ssh.list para o ciclo de vida da conexão.

O agente se autentica com uma chave SSH do Group: uma chave por espaço de trabalho, compartilhada pelos seus agentes. ssh.public_key retorna essa chave, e você a adiciona a ~/.ssh/authorized_keys na máquina, como faria com qualquer outro cliente SSH.

O harness pode chegar à sua máquina de três jeitos.

1. Um endereço público

Se a máquina já tem um servidor SSH acessível, o agente se conecta ao endereço IP ou ao nome DNS dela:

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

2. Tailcat, para uma máquina sem endereço público

Um notebook ou um servidor doméstico atrás de NAT muitas vezes não tem um endereço que o harness consiga alcançar. O Tailcat faz a conexão sem porta de entrada, sem VPN e sem conta. Ele roda na máquina, só abre conexões de saída e mostra um endereço que começa com tc.

O Tailcat também pode ser o servidor SSH. Rode-o com a chave pública do Group:

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

Isso oferece um shell de login, execução de comandos e SFTP com a conta que roda o Tailcat. Não precisa de sshd e não altera sua configuração de SSH. Se a máquina já roda OpenSSH, use tailcat serve 22, e o OpenSSH cuida do login. Depois, envie o endereço ao agente:

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

3. Sua própria rede Tailscale

Se suas máquinas já estão em uma tailnet, o espaço de trabalho pode entrar nela. Conecte-o nas configurações do app do Comma ou peça ao agente. Um admin da tailnet abre um link de login e aprova o nó. Por padrão, o nó usa a tag tag:comma-agent, então a política da sua tailnet decide exatamente quais dispositivos e portas ele alcança, por exemplo, só a porta 22 do servidor doméstico.

O agente lista os dispositivos com tailnet.peers e se conecta pelo nome MagicDNS ou pelo endereço Tailscale:

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

Confiança e tempo de vida

Em qualquer caminho, a primeira conexão a um host registra a chave de host dele. Uma conexão posterior que apresente uma chave diferente é recusada com host_key_mismatch e as duas impressões digitais, e o agente pergunta a você antes de remover a chave antiga com ssh.known_hosts.remove.

Uma conexão SSH pertence a uma única sessão do agente. Ela fecha após 30 minutos sem uso e não sobrevive a um reinício do agente nem a um deploy da plataforma, então trabalhos longos devem ficar em tmux ou screen na máquina remota. Os comandos têm limite: ssh.exec expira após 60 segundos por padrão e 600 no máximo, e um timeout é informado, nunca repetido automaticamente.

Para o backup, você poderia pedir: “Leia os logs e verifique o espaço em disco, mas não apague arquivos nem altere a configuração. Primeiro me diga o que encontrou.”

Try Comma, Now.

Começar