Hermes Desktop no Linux com Bubblewrap
Mantenha a interface oficial em uma janela própria, sem entregar a pasta pessoal, o X11 ou os serviços da sua sessão ao aplicativo.
Rota Nacional · Publicado · Revisado
Isole também o processo da interface
Compilar um aplicativo não torna suas dependências confiáveis. A interface Electron tem processos próprios e pode iniciar outros programas. Isolar só o terminal do agente deixa essa parte fora da proteção.
Bubblewrap cria o ambiente restrito. O conjunto de argumentos define o que o aplicativo enxerga. Nesta instalação, o Hermes Desktop light foi compilado em Docker. O pacote rodou no Bubblewrap e se conectou ao agente em outro container.
Monte um sistema de arquivos mínimo
- Comece com --unshare-all --die-with-parent --new-session --cap-drop ALL --clearenv. Confira antes se o Linux permite os namespaces de usuário necessários.
- Monte /usr e o pacote do aplicativo somente para leitura. Crie /proc e /dev privados. Use tmpfs com limite para /tmp e a memória compartilhada.
- Monte uma pasta vazia e exclusiva como HOME. Defina HOME, XDG_CONFIG_HOME, XDG_CACHE_HOME e XDG_DATA_HOME para caminhos internos. Não monte a pasta pessoal real.
- Entregue apenas o socket privado do agente e o token daquela sessão. Não entregue sockets de Docker, SSH, GPG ou D-Bus.
Entregue uma janela, sem compartilhar o X11
Em uma sessão X11, compartilhar /tmp/.X11-unix e a autorização do usuário enfraquece o objetivo. O aplicativo passa a falar com o servidor gráfico usado pelas outras janelas. No setup validado, um Weston confiável criou uma janela externa. Só o socket Wayland desse compositor entrou no Bubblewrap.
O Weston usou o backend x11, o renderizador pixman e kiosk-shell.so. O Electron usou --ozone-platform=wayland --disable-gpu --disable-audio-output. O aplicativo não recebeu DISPLAY, XAUTHORITY, dispositivos de GPU ou acesso a áudio. O lançador externo guardou os acessos necessários ao compositor.
O lançador associou a janela externa a um atalho próprio. No X11, WM_CLASS e StartupWMClass permitem que o desktop reconheça o aplicativo no dock. Essa identificação visual não concede acesso ao host.
Separe o canal do agente da rede do computador
Com --unshare-all, o localhost da interface pertence ao ambiente isolado. Um retransmissor interno ligou 127.0.0.1:9119 ao socket Unix privado do agente. HERMES_DESKTOP_REMOTE_URL apontou para esse endereço interno.
O token usou o contrato de sessão do próprio Hermes. A configuração sem token foi recusada. A mesma configuração com o token foi lida. Nenhuma porta do agente precisou ficar aberta no host. O lançador renovou o token e encerrou os processos ao fechar a janela.
Confira a proteção na versão que você vai usar
A prova local de 4 de novembro de 2026 usou cliente e agente 0.22.6. Os 14 testes da interface e os sete do agente passaram. A abertura, a navegação e as configurações foram conferidas. A prova não incluiu resposta de modelo, pois não havia chave cadastrada.
Microfone, captura de tela, notificações e integração com arquivos ficaram reduzidos. Não recupere um recurso compartilhando toda a sessão. Avalie uma permissão específica e repita a prova. Bubblewrap continua compartilhando o kernel; ele não substitui uma máquina virtual.
Perguntas frequentes
O sandbox do Electron já não basta?
O sandbox interno protege partes do Electron. O perfil externo limita também o processo principal e os programas que ele inicia. Confira ambos na versão usada.
Preciso trocar minha sessão X11 por Wayland?
O setup validado manteve a sessão X11. O Weston funcionou como compositor aninhado e entregou um socket Wayland separado ao aplicativo.
Continue a leitura
Como limitar um agente de IA com Docker
Separe os arquivos do agente, limite recursos e feche a rede. Veja o perfil aplicado ao Hermes e o papel da Rota Nacional.
Como compilar agentes sem entregar o desktop às dependências
Fixe a fonte, analise o grafo de pacotes e compile sem rede em Docker. O isolamento continua necessário depois que o aplicativo estiver pronto.
Como ligar um agente à RN com a rede restrita
Use um canal com destino fixo, uma chave própria e o contrato correto. Entenda a diferença entre controle de acesso e barreira de privacidade.