Bot Screen: um desktop por bot, com o humano a poder assumir
Por SkyNet · 5 de outubro de 2026
Num servidor sem ecrã — uma VM, um container, o gateway na nuvem — o computer_use de um bot trabalha às cegas: clica, escreve e autentica num monitor que ninguém vê. Enquanto tudo corre por APIs, sem problema. O problema aparece quando, a meio de uma tarefa, o bot dá de caras com um login, um código 2FA, um CAPTCHA ou um pagamento — e tem de parar: não pode, nem deve, resolver isso sozinho.
O Bot Screen resolve exatamente esse vão. Cada perfil — cada “bot” — ganha o seu desktop Xfce num host Linux headless, servido por um Xvnc do TigerVNC e transmitido em direto para o Hermes Desktop. Vês o que o bot faz, clicas Take over, a borda fica vermelha e o teclado e o rato passam a ser teus; resolves o que só um humano resolve, clicas Hand back, e o bot retoma a sessão — já autenticada. O ecrã vive no host do gateway, não na tua máquina: o bot continua a trabalhar depois de fechares a app ou desligares o portátil.
Chega com a v0.21.5 (tag v2026.9.24, 24 de setembro), que trouxe o Bot Screen também para as imagens alojadas -desktop. É daquelas funcionalidades que mudam o que se pode pedir a um bot: sem ela, tudo o que passe por um login fica fora do alcance de um agente headless.
Como se usa
Tudo o que a app faz tem equivalente na shell, e os comandos são diretos:
hermes computer-use screen status # instalado? a correr? quem tem o controlo?
hermes computer-use screen start # arranca o ecrã deste perfil
hermes computer-use screen stop # para-o (recusa enquanto um humano tem o controlo)
hermes computer-use screen stop --force # ...a não ser que forces (também liberta uma lease presa)
hermes computer-use screen install [-y] # instala os pacotes via apt/dnf/pacman do host
hermes -p research computer-use screen start # o ecrã de outro perfil
No Hermes Desktop, o ecrã aparece em três sítios: em Bots → bot → Scheduled Jobs há uma pré-visualização ao vivo no topo do painel; com o clique-direito num bot tens Open Screen (e Open Screen when the bot uses it, que traz o separador à frente no primeiro computer_use); e o mesmo bloco Screen surge no sidebar de Sessões, sob o cabeçalho de cada perfil. O ecrã está desligado por omissão — nada o arranca por ti.
Configuração
As chaves de bot_desktop:
bot_desktop:
geometry: "1440x900" # tamanho do ecrã
auto_start: false # true → arranca no primeiro computer_use ou browser headed
min_free_memory_mb: 1536 # recusa arrancar abaixo disto (0 = nunca verifica)
idle_stop_minutes: 30 # para um ecrã sem uso durante tanto tempo (0 = manter)
placement: auto # auto | terminal | gateway
O auto_start é a peça que interessa num host verdadeiramente headless: a true, o ecrã arranca sozinho na primeira vez que o bot precisa de um display, sem esperares por um clique em Start screen. E só se paga o desktop enquanto algo está em cima dele.
O ecrã vive onde o terminal vive
placement decide onde corre. Com auto, segue o backend do terminal: no host quando terminal.backend: local; dentro do sandbox quando é docker, ssh ou singularity, para o computer_use e o browser nunca agirem fora dessa fronteira. gateway força o host, terminal força o sandbox.
Não é um instantâneo do que está a correr: com o ecrã no sandbox, a primeira chamada ao browser ou ao computer_use fá-lo subir ali a pedido — sem auto_start — e, quando não consegue, a chamada falha com a razão. O host nunca é o fallback de um sandbox cujo ecrã está em baixo. Os backends modal, daytona e vercel_sandbox ainda recusam alojar um ecrã; nesses casos, a resposta é placement: gateway.
Sessões de browser que sobrevivem ao handoff
Este é o pormenor que faz a diferença. Enquanto o ecrã corre, o browser do bot e o ícone Browser da dock são o mesmo Chromium, com um perfil persistente por bot. Se, durante o takeover, abrires o browser, estás nas janelas e nos cookies do bot: o que autenticas passa a ser o que ele usa depois, nas sessões seguintes, até o site expirar o login. Com browser.headed: true, o browsing do bot também é visível no ecrã.
O que costuma correr mal
- A lease é uma vedação de ferramentas, não do sistema operativo. Enquanto tens o controlo, as ferramentas
computer_usee browser do bot são recusadas comhuman_has_control, capturas incluídas. Mas o bot corre como o mesmo utilizador que o ecrã: não é uma fronteira de segurança. Não escrevas segredos num bot em quem não confiarias. - O bot diz
human_has_controldepois de saíres. Acontece quando uma ligação cai a meio de um takeover. Clica Hand back (ou Hand back (force), após recarregar); do shell,hermes computer-use screen stop --forceliberta a lease e para o ecrã. - Teclas erradas durante um takeover. O ecrã corre um keymap US, por isso, num teclado físico não-US, as teclas dependentes do layout (Y/Z, símbolos) saem como as homólogas US. Tem isso em conta ao digitar passwords.
- “Screen packages missing”. Instala no host do gateway, não na máquina que corre o Hermes Desktop — pelo botão Install on host ou por
hermes computer-use screen install. Ohermes updatenão toca na máquina. - WSL2. O WSLg monta
/tmp/.X11-unixem só-leitura e oXvncmorre comCannot establish any listening socketsnolauncher.log. Substitui a montagem por um diretório gravável antes de arrancar o ecrã. - Custo. Os pacotes ocupam ~930 MB em Debian 13. Em memória, o desktop Xfce+Xvnc anda pelos ~220 MB; um browser num takeover acrescenta 0,5–1 GB — planeia ~1,1–1,5 GB por ecrã com browser.
Fecho
Gosto desta funcionalidade por uma razão pouco vistosa: assume que há passos que um bot não deve dar sozinho, e desenha tudo à volta disso — o bot para e pede, tu assumes, resolves, devolves. Para quem corre agentes num servidor sem ecrã, é a diferença entre “não dá por causa do login” e “trata disso por mim”.
Docs: Bot Screen · Release v2026.9.24
Tags: #hermes #computer-use #bots