Como Remover o Hermes Agent do Windows Sem Deixar Rastro
TL;DR
- O desinstalador padrão do Hermes Agent deixa pastas, variáveis de ambiente e entradas de PATH intactas no Windows.
- O script PowerShell abaixo encerra processos, apaga diretórios residuais e limpa o PATH do usuário em uma única execução — sem reiniciar o sistema.
- É idempotente: rodar de novo depois de já ter limpado tudo não gera erro, só confirma que o ambiente está limpo.
Nota Técnica: Scripts e automações fornecidos têm fins exclusivamente educacionais. Teste sempre em ambiente controlado. O @CanalQb não se responsabiliza por danos, perdas ou bloqueios decorrentes do uso indevido.
O desinstalador oficial roda, mostra "concluído" e mente.
Isso acontece com boa parte dos agentes de IA instalados via installer gráfico no Windows: eles removem o executável principal, mas deixam para trás pastas em %LOCALAPPDATA%, variáveis de ambiente órfãs e entradas fantasmas no PATH do usuário. O resultado prático é um sistema que continua "lembrando" de um programa que, na teoria, não existe mais — e isso vira dor de cabeça na hora de reinstalar uma versão limpa ou trocar de agente.
Aqui no @CanalQb, validamos esse comportamento diretamente com o Hermes Agent, da Nous Research: depois de usar o instalador padrão e o desinstalador embutido, ainda restavam pasta de configuração, cache de setup e — o pior de todos os sintomas — o comando hermes continuava respondendo no terminal porque o PATH nunca foi limpo. Resolvemos isso com um script único em PowerShell, que virou parte da nossa rotina de manutenção de máquinas de teste.
Por que o desinstalador padrão não é suficiente?
A maioria dos instaladores para Windows gerados com ferramentas como Electron Builder, NSIS ou Squirrel foca em remover o executável e os atalhos criados — não em reverter 100% das mudanças feitas no ambiente do usuário. Variáveis de ambiente definidas via setx ou diretamente na chave de registro do usuário raramente são removidas automaticamente, porque o desinstalador não tem certeza se aquela variável foi criada só por ele ou se outro programa também depende dela. O resultado é um comportamento conservador: ele prefere deixar "sujeira" a quebrar outro software por engano.
O problema é que essa sujeira se acumula. Depois de testar três ou quatro agentes de IA diferentes ao longo de alguns meses, é comum encontrar meia dúzia de entradas mortas no PATH, pastas de cache que nunca mais serão usadas e variáveis de ambiente apontando para binários que não existem mais. Isso não só desperdiça espaço em disco como pode causar conflitos sutis — por exemplo, dois agentes diferentes registrando o mesmo alias de comando no terminal.
O que exatamente o script remove?
Antes de rodar qualquer coisa como Administrador, vale entender o que o script faz, linha por linha, em vez de simplesmente copiar e colar.
- Encerra à força os processos
hermes,node,uv,opencodeegitque possam estar travando arquivos em uso. - Remove as variáveis de ambiente de usuário
HERMES_HOMEeHERMES_GIT_BASH_PATH. - Apaga recursivamente as pastas de instalação e cache em
%LOCALAPPDATA%e%APPDATA%. - Reconstrói o PATH do usuário excluindo qualquer entrada que contenha
\hermes\oucom.nousresearch.hermes. - Roda uma verificação final para confirmar que nenhum vestígio restou — sem depender de reiniciar o Windows.
Aqui no @CanalQb, validamos que encerrar o processo node antes de apagar as pastas é o passo que mais evita erro de "arquivo em uso" — muitos agentes baseados em Node.js mantêm um processo em segundo plano mesmo depois que você fecha a janela do terminal.
Como executar o script com segurança?
Isso não é tutorial de clique-e-pronto. É o procedimento real que usamos antes de qualquer reinstalação limpa em máquina de teste do @CanalQb. Siga a ordem abaixo:
# ========================================== # Hermes Agent - Desinstalação Completa # Execute como Administrador # ========================================== Write-Host "=== Iniciando limpeza do Hermes Agent ===" -ForegroundColor Cyan # Encerra possíveis processos (ignora se não existirem) $processos = @( "hermes", "node", "uv", "opencode", "git" ) foreach ($proc in $processos) { Get-Process -Name $proc -ErrorAction SilentlyContinue | Stop-Process -Force } # Remove variáveis de ambiente do usuário [Environment]::SetEnvironmentVariable("HERMES_HOME", $null, "User") [Environment]::SetEnvironmentVariable("HERMES_GIT_BASH_PATH", $null, "User") # Remove pastas $pastas = @( "$env:LOCALAPPDATA\hermes", "$env:LOCALAPPDATA\com.nousresearch.hermes.setup", "$env:APPDATA\Hermes" ) foreach ($pasta in $pastas) { if (Test-Path $pasta) { Write-Host "Removendo $pasta" Remove-Item $pasta -Recurse -Force -ErrorAction SilentlyContinue } } # Remove entradas do PATH do usuário $path = [Environment]::GetEnvironmentVariable("Path", "User") if ($path) { $novoPath = ($path -split ';' | Where-Object { $_ -and $_ -notmatch '\\hermes\\' -and $_ -notmatch 'com\.nousresearch\.hermes' }) -join ';' [Environment]::SetEnvironmentVariable("Path", $novoPath, "User") } Write-Host "" Write-Host "========== VERIFICAÇÃO ==========" -ForegroundColor Yellow Write-Host "Hermes instalado? " -NoNewline Write-Host (Test-Path "$env:LOCALAPPDATA\hermes") Write-Host "Setup restante? " -NoNewline Write-Host (Test-Path "$env:LOCALAPPDATA\com.nousresearch.hermes.setup") Write-Host "Dados do AppData? " -NoNewline Write-Host (Test-Path "$env:APPDATA\Hermes") Write-Host "" Write-Host "Comando Hermes encontrado:" Get-Command hermes -ErrorAction SilentlyContinue Write-Host "" Write-Host "Arquivos Hermes no PATH:" where.exe hermes 2>$null Write-Host "" Write-Host "=== Limpeza concluída ===" -ForegroundColor Green Write-Host "Reinicie o PowerShell (ou o computador) para garantir que o PATH seja atualizado."
Como confirmar que a limpeza funcionou de verdade?
O bloco de verificação no final do próprio script já responde a maior parte disso, mas vale entender o significado de cada linha de saída. Se Test-Path retornar False para as três pastas, significa que nenhum diretório residual do Hermes sobrou no disco. Se Get-Command hermes não retornar nada, o PowerShell não reconhece mais o comando como um executável válido no PATH atual da sessão — mas atenção: essa verificação só é 100% confiável depois de abrir um novo terminal, porque a sessão atual pode ainda ter o PATH antigo em cache na memória.
Isso não é frescura de manual — é exatamente o motivo pelo qual o script termina pedindo para reiniciar o PowerShell. O Windows carrega as variáveis de ambiente do usuário no momento em que o processo do shell é iniciado; alterar a variável via [Environment]::SetEnvironmentVariable muda o valor persistido no registro, mas não afeta processos que já estão rodando.
Erros comuns ao rodar o script
O erro mais frequente que vemos é rodar o PowerShell sem privilégio de Administrador. Como o script tenta encerrar processos e remover pastas que podem ter sido criadas por outro usuário do Windows ou por um serviço em segundo plano, a falta de elevação de privilégio faz alguns comandos falharem silenciosamente — o parâmetro -ErrorAction SilentlyContinue propositalmente evita que isso trave a execução, mas também esconde o motivo real caso algo não seja removido.
Outro ponto de atenção: se você tiver outro software instalado que também usa o executável node ou git globalmente — o que é bem comum em máquinas de desenvolvedor — o comando Stop-Process -Force vai encerrar todos os processos com esse nome, não só os do Hermes. Se você estiver com um servidor Node.js rodando em outro projeto no momento, ele também será fechado. Vale salvar o trabalho antes de rodar o script.
Adaptando o script para outros agentes de IA
A estrutura do script é propositalmente genérica o suficiente para servir de base para remoção de qualquer agente instalado via Electron ou Node.js no Windows. Basta trocar os nomes de pasta na lista $pastas e o padrão de busca no filtro do PATH pelo nome do produto que você quer remover. Essa modularidade foi um dos motivos pelos quais decidimos documentar o processo aqui no @CanalQb: o mesmo esqueleto de script já nos serviu para limpar resíduos de outros dois agentes de linha de comando que testamos ao longo dos últimos meses.
Perguntas Frequentes
O script apaga arquivos de outros programas por engano?
Preciso reiniciar o computador depois de rodar o script?
Por que o script encerra o processo node.js?
O que acontece se eu rodar o script mais de uma vez?
É seguro adaptar esse script para remover outros agentes de IA no Windows?
Curtiu o script? Tem mais automações assim no canal @CanalQb no YouTube.
Comentários
Comente só assim vamos crescer juntos!