Documentação oficial desta página · v0.20.6
Windows (Nativo)
O Hermes roda nativamente no Windows 10 e no Windows 11 — sem WSL, sem Cygwin, sem Docker. Esta página é o mergulho profundo: o que funciona nativamente, o que só existe no WSL, o que o instalador realmente faz e os ajustes específicos do Windows que você talvez precise mexer.
Se você só quer instalar, o comando de uma linha da página inicial ou da página de Instalação já basta. Volte aqui quando algo te surpreender.
Se você prefere um ambiente POSIX de verdade (para o terminal embutido do dashboard, a semântica de fork, observadores de arquivo no estilo Linux etc.), veja o Guia do Windows (WSL2). Os dois convivem sem conflito: os dados nativos ficam em %LOCALAPPDATA%\hermes, os dados do WSL ficam em ~/.hermes.
Instalação rápida
Abra o PowerShell (ou o Windows Terminal) e rode:
iex (irm https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.ps1)
Não precisa de direitos de administrador. O instalador vai para %LOCALAPPDATA%\hermes\ e adiciona o hermes ao PATH do seu usuário — abra um terminal novo depois que ele terminar.
Opções do instalador (exigem a forma com scriptblock para passar parâmetros):
& ([scriptblock]::Create((irm https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.ps1))) -NoVenv -SkipSetup -Branch main
| Parâmetro | Padrão | Para que serve |
|---|---|---|
-Branch | main | Clona um branch específico (útil para testar PRs) |
-Commit | não definido | Fixa a instalação em um SHA de commit específico (sobrepõe o -Branch) |
-Tag | não definido | Fixa a instalação em uma tag git específica (ex.: v0.14.0) |
-NoVenv | desligado | Pula a criação do venv (avançado — você mesmo cuida do Python) |
-SkipSetup | desligado | Pula o assistente hermes setup pós-instalação |
-HermesHome | %LOCALAPPDATA%\hermes | Muda o diretório de dados |
-InstallDir | %LOCALAPPDATA%\hermes\hermes-agent | Muda o local do código |
O instalador tenta de novo automaticamente quando um fetch do git falha e remove o BOM de qualquer payload de install.ps1 baixado, então um BOM UTF-8 pego durante o trânsito HTTP não quebra mais a forma [scriptblock]::Create((irm ...)).
Instalador desktop (alternativa)
Também existe um instalador gráfico enxuto — útil se você preferir dar dois cliques em um .exe a abrir o PowerShell. Baixe o Hermes Desktop, rode o instalador e, na primeira execução, a interface chama o install.ps1 por baixo dos panos para provisionar Python (via uv), Node, PortableGit e o resto do bootstrap de dependências descrito abaixo. Depois da primeira execução, o aplicativo desktop e a CLI hermes instalada pelo PowerShell compartilham a mesma instalação em %LOCALAPPDATA%\hermes\hermes-agent e o mesmo diretório de dados %LOCALAPPDATA%\hermes — alterne entre a interface gráfica e a CLI à vontade.
Use o instalador desktop quando quiser uma experiência de instalação familiar do Windows ou quando estiver entregando o Hermes para alguém que não é desenvolvedor; use o comando de uma linha do PowerShell quando você já estiver no terminal.
Bootstrap de dependências (dep_ensure)
Na primeira execução (e sob demanda, quando uma ferramenta ausente é detectada), o Hermes roda um pequeno bootstrapper em Python — hermes_cli/dep_ensure.py — que verifica e instala preguiçosamente as dependências não-Python de que precisa. No Windows, as relevantes são:
| Dependência | Por que o Hermes precisa dela |
|---|---|
| PortableGit | Fornece o bash.exe para a ferramenta de terminal e o git para clones dentro da sessão. Provisionado na hora da instalação, não pelo dep_ensure. |
| Node.js 26 | Necessário para a ferramenta de navegador (agent-browser), a ponte web da TUI e a ponte do WhatsApp. |
| ffmpeg | Conversão de formato de áudio para TTS / mensagens de voz. |
| ripgrep | Busca rápida em arquivos — cai para o grep se não estiver disponível. |
| pacotes npm | O agent-browser, o Chromium do Playwright e quaisquer dependências Node por toolset são instalados uma vez, no primeiro uso da ferramenta de navegador. |
Cada dependência tem uma checagem no estilo shutil.which(...); se um binário estiver faltando e a execução for interativa, o dep_ensure oferece instalá-lo (delegando a instalação de fato para scripts\install.ps1 -ensure <dep>). Execuções não interativas (gateway, cron, aberturas headless do desktop) pulam a pergunta e mostram um erro claro do tipo this feature needs <dep>.
O que o instalador realmente faz
De cima a baixo, em ordem:
- Faz o bootstrap do
uv— o gerenciador rápido de Python da Astral. Instalado em%USERPROFILE%\.local\bin. - Instala o Python 3.11 via
uv. Não precisa de nenhum Python existente. - Instala o Node.js 26 (winget se disponível, senão um tarball portátil do Node descompactado em
%LOCALAPPDATA%\hermes\node). Usado pela ferramenta de navegador e pela ponte do WhatsApp. - Instala o Git portátil — se o
gitjá estiver no PATH, o instalador usa ele; caso contrário, baixa um PortableGit enxuto e autocontido (~45 MB, da release oficial dogit-for-windows) em%LOCALAPPDATA%\hermes\git. Sem admin, sem registro de instalador do Windows, sem interferir em mais nada da máquina. - Clona o repositório em
%LOCALAPPDATA%\hermes\hermes-agente cria um virtualenv dentro dele. uv pip installem camadas — tenta o.[all]primeiro e vai caindo para conjuntos progressivamente menores ([messaging,dashboard,ext]→[messaging]→.) se alguma dependênciagit+httpsfalhar por limite de taxa do GitHub. Evita o modo de falha "um tropeço te deixa com uma instalação pelada".- Instala automaticamente os SDKs de mensagens com base no
.env— seTELEGRAM_BOT_TOKEN/DISCORD_BOT_TOKEN/SLACK_BOT_TOKEN/SLACK_APP_TOKEN/WHATSAPP_ENABLEDestiverem presentes, rodapython -m ensurepip --upgradee chamadaspip installdirecionadas para que o SDK de cada plataforma seja de fato importável. - Define
HERMES_GIT_BASH_PATHpara obash.exeresolvido, para que o Hermes o encontre de forma determinística em shells novos. - Adiciona
%LOCALAPPDATA%\hermes\binao PATH do usuário e defineHERMES_HOME=%LOCALAPPDATA%\hermes— expõe o comandohermes(e o aponta para o seu diretório de dados) depois que você abrir um terminal novo. Só os lançadoreshermes.exe/hermes-acp.exesão copiados para esse diretóriobin; ovenv\Scriptscompleto não é colocado no PATH de propósito, para que o Hermes nunca sombreie o seu próprio comandopython. - Roda o
hermes setup— o assistente normal de primeira execução (modelo, provedor, toolsets). Pule com-SkipSetup.
No Windows, configurar chave de API por ferramenta (Firecrawl, FAL, Browser Use, OpenAI TTS) é a parte mais chata de conseguir um agente útil. Uma assinatura do Nous Portal cobre o modelo e todas essas ferramentas com um único login OAuth. Depois que o instalador terminar, rode hermes setup --portal para ligar tudo.
Matriz de recursos
Tudo, exceto o painel de terminal embutido do dashboard, roda nativamente no Windows.
| Recurso | Windows nativo | WSL2 |
|---|---|---|
CLI (hermes chat, hermes setup, hermes gateway, …) | ✓ | ✓ |
TUI interativa (hermes --tui) | ✓ | ✓ |
| Gateway de mensagens (Telegram, Discord, Slack, WhatsApp, mais de 15 plataformas) | ✓ | ✓ |
| Agendador cron | ✓ | ✓ |
| Ferramenta de navegador (Chromium via Node) | ✓ | ✓ |
| Servidores MCP (stdio e HTTP) | ✓ | ✓ |
| Ollama / LM Studio / llama-server locais | ✓ | ✓ (via rede do WSL) |
| Dashboard web (sessões, jobs, métricas, configuração) | ✓ | ✓ |
Painel de terminal embutido em /chat no dashboard | ✗ (precisa de PTY POSIX) | ✓ |
| Início automático no login | ✓ (schtasks) | ✓ (systemd) |
A aba /chat do dashboard embute um terminal de verdade via um PTY POSIX (ptyprocess). O Windows nativo não tem primitiva equivalente; o pywinpty do Python / o ConPTY do Windows funcionariam, mas são uma implementação separada — trate como trabalho futuro. O resto do dashboard funciona nativamente — só essa aba mostra um aviso de "use o WSL2 para isso".
Como o Hermes roda comandos de shell no Windows
A ferramenta de terminal do Hermes roda comandos pelo Git Bash, a mesma estratégia que o Claude Code usa. Isso contorna a diferença entre POSIX e Windows sem reescrever cada ferramenta.
Ordem de resolução do bash.exe:
- A variável de ambiente
HERMES_GIT_BASH_PATH, se estiver definida. %LOCALAPPDATA%\hermes\git\usr\bin\bash.exe(PortableGit gerenciado pelo instalador).%LOCALAPPDATA%\hermes\git\bin\bash.exe(layout antigo do Git-for-Windows).- Instalação do Git-for-Windows do sistema (
%ProgramFiles%\Git\bin\bash.exeetc.). - MSYS2, Cygwin ou qualquer
bash.exeno PATH, como último recurso.
O instalador define o HERMES_GIT_BASH_PATH explicitamente para que sessões novas do PowerShell não tenham que redescobrir. Sobrescreva se quiser que o Hermes use um bash específico — por exemplo, o Git Bash do seu sistema ou um bash hospedado no WSL via symlink.
Pegadinha: o layout do MinGit é diferente do instalador completo do Git-for-Windows — o bash fica em usr\bin\bash.exe, não em bin\bash.exe. O Hermes verifica os dois. Se você estiver descompactando um zip do MinGit na mão, escolha a variante não-busybox (MinGit-*-64-bit.zip, não MinGit-*-busybox*.zip) — builds busybox trazem o ash no lugar do bash e faltam quase todos os coreutils.
Console UTF-8 no Windows
O stdio padrão do Python no Windows usa a página de código ativa do console (normalmente cp1252 ou cp437). O banner do Hermes, a lista de comandos com barra, o feed de ferramentas, os painéis do Rich e as descrições de skills contêm Unicode. Sem intervenção, qualquer um deles quebra com UnicodeEncodeError: 'charmap' codec can't encode character….
A correção está em hermes_cli/stdio.py::configure_windows_stdio(), chamada cedo em todo ponto de entrada (cli.py::main, hermes_cli/main.py::main, gateway/run.py::main). Ela:
- Vira a página de código do console para CP_UTF8 (65001) via
kernel32.SetConsoleCP/SetConsoleOutputCP. - Reconfigura
sys.stdout/sys.stderr/sys.stdinpara UTF-8 comerrors='replace'. - Define
PYTHONIOENCODING=utf-8ePYTHONUTF8=1(viasetdefault, então valores explícitos do usuário ganham) para que subprocessos Python filhos herdem o UTF-8. - Define
EDITOR=notepadse nemEDITORnemVISUALestiverem definidos (veja a seção do editor abaixo).
É idempotente. Não faz nada fora do Windows.
Como recusar: HERMES_DISABLE_WINDOWS_UTF8=1 no ambiente volta ao caminho antigo de stdio em cp1252. Útil para bissecar um bug de codificação; dificilmente é a configuração certa no uso normal.
O editor (Ctrl-X Ctrl-E, /edit)
Antes do #21561, apertar Ctrl-X Ctrl-E ou digitar /edit não fazia nada no Windows, em silêncio. O prompt_toolkit tem uma lista de fallback com caminhos POSIX absolutos fixos no código (/usr/bin/nano, /usr/bin/pico, /usr/bin/vi, …) que nunca resolve no Windows — nem com o Git for Windows completo instalado.
O shim de stdio do Hermes para Windows agora define EDITOR=notepad como padrão. O Bloco de Notas vem em toda instalação do Windows e funciona como editor bloqueante — subprocess.call(["notepad", file]) bloqueia até a janela fechar.
As suas sobrescritas continuam ganhando (elas são checadas antes do setdefault):
| Editor | Comando no PowerShell |
|---|---|
| VS Code | $env:EDITOR = "code --wait" |
| Notepad++ | $env:EDITOR = "'C:\Program Files\Notepad++\notepad++.exe' -multiInst -nosession" |
| Neovim | $env:EDITOR = "nvim" |
| Helix | $env:EDITOR = "hx" |
A opção --wait no VS Code é essencial — sem ela o editor retorna na hora e o Hermes recebe um buffer vazio de volta.
Defina permanentemente no seu perfil do PowerShell:
# No $PROFILE
$env:EDITOR = "code --wait"
Ou como variável de ambiente de usuário nas Configurações do Sistema, para que todo shell novo pegue.
Ctrl+Enter para nova linha na CLI
O Windows Terminal repassa o Ctrl+Enter como uma sequência de teclas dedicada. O Hermes associa isso a "inserir nova linha", para que você componha prompts de várias linhas na CLI sem recorrer a Esc-depois-Enter. Funciona no Windows Terminal, no terminal integrado do VS Code e em qualquer host de console moderno do Windows que respeite sequências de escape VT.
Em consoles cmd.exe antigos, o Ctrl+Enter vira um Enter simples — use Esc Enter no lugar, ou migre para o Windows Terminal (é grátis e já vem instalado no Windows 11).
Rodando o gateway no login do Windows
O hermes gateway install no Windows usa Tarefas Agendadas com fallback para a pasta de Inicialização — sem precisar de admin.
Instalar
hermes gateway install
O que acontece por baixo dos panos:
schtasks /Create /SC ONLOGON /RL LIMITED /TN HermesGateway— registra uma tarefa que roda no seu login com permissões padrão (não elevadas). Sem prompt do UAC.- Se o schtasks estiver bloqueado por política de grupo, cai para escrever um atalho
start /min cmd.exe /d /c <wrapper>em%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup. Mesmo efeito, um pouco mais rústico. - Cria o gateway destacado, via
pythonw.exe— nãopython.exe. Opythonw.exenão tem console anexado, o que o imuniza contra transmissões deCTRL_C_EVENTde processos irmãos (um problema real que costumava matar o gateway quando você dava Ctrl+C em qualquer coisa do mesmo grupo de processos).
Flags usadas na criação: DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP | CREATE_NO_WINDOW | CREATE_BREAKAWAY_FROM_JOB.
Gerenciar
hermes gateway status # Visão combinada: schtasks + pasta Startup + PID em execução
hermes gateway start # Inicia a tarefa agendada agora
hermes gateway stop # Equivalente a um SIGTERM gracioso (TerminateProcess via psutil)
hermes gateway restart
hermes gateway uninstall # Remove a entrada do schtasks, o atalho do Startup e o arquivo de pid
O hermes gateway status é idempotente — chame mil vezes seguidas e ele nunca vai matar o gateway sem querer. (Antes do PR #21561 ele matava, em silêncio, porque os.kill(pid, 0) colidia com o CTRL_C_EVENT no nível do C — veja "detalhes internos do gerenciamento de processos" abaixo se você quiser a história.)
Por que não um Serviço do Windows?
Serviços exigem direitos de administrador para instalar e amarram o ciclo de vida do gateway ao boot da máquina, e não ao login do usuário. O usuário típico do Hermes quer: fez login → gateway disponível, saiu → gateway sumiu. As Tarefas Agendadas fazem exatamente isso sem elevação. Se você realmente quiser um serviço, use nssm ou sc create na mão — mas provavelmente não quer.
Organização dos dados
| Caminho | Conteúdo |
|---|---|
%LOCALAPPDATA%\hermes\hermes-agent\ | Checkout do git + venv. Pode dar Remove-Item -Recurse e reinstalar sem medo. |
%LOCALAPPDATA%\hermes\git\ | PortableGit (só se o instalador provisionou). |
%LOCALAPPDATA%\hermes\node\ | Node.js portátil (só se o instalador provisionou). |
%LOCALAPPDATA%\hermes\bin\ | Os lançadores hermes / hermes-acp e o uv.exe gerenciado pelo Hermes (o gerenciador de Python que ele usa nas atualizações). |
%LOCALAPPDATA%\hermes\ (raiz) | Sua configuração, autenticação, skills, sessões e logs (config.yaml, .env, skills\, sessions\, logs\, …). Sobrevive a reinstalações. |
No Windows nativo o instalador define HERMES_HOME=%LOCALAPPDATA%\hermes, então seus dados e a instalação descartável ficam sob a mesma raiz %LOCALAPPDATA%\hermes: a instalação/runtime são os subdiretórios hermes-agent\, git\, node\ e bin\, enquanto seus arquivos de dados ficam direto em %LOCALAPPDATA%\hermes. Reinstalar só substitui o checkout em hermes-agent\, então seus dados sobrevivem — mas, como os dois compartilham a raiz, não rode Remove-Item -Recurse %LOCALAPPDATA%\hermes se você quiser manter seus dados; apague o subdiretório hermes-agent\ no lugar. Seu diretório de dados tem exatamente o mesmo formato de um ~/.hermes do Linux, então dá para espelhá-lo entre máquinas.
Sobrescrever o HERMES_HOME: defina a variável de ambiente apontando para outro diretório de dados (ex.: %USERPROFILE%\.hermes para combinar com o layout do Linux/WSL). Funciona igual ao Linux.
Ferramenta de navegador
A ferramenta de navegador usa o agent-browser (um auxiliar em Node) para controlar o Chromium. No Windows:
- O instalador coloca o
agent-browserno PATH via npm. - O
shutil.which("agent-browser", path=...)pega o shim.cmdautomaticamente — oCreateProcessWnão consegue executar um shebang sem extensão, então o Hermes sempre resolve para o wrapper.CMD. Não invoque o script com shebang na mão; passe sempre pelo.cmd. - O Chromium do Playwright é instalado automaticamente na primeira execução (
npx playwright install chromium). Se a instalação falhar, ohermes doctormostra o problema com uma dica de correção.
Rodando o Hermes no Windows — notas práticas
PATH depois da instalação
O instalador adiciona %LOCALAPPDATA%\hermes\bin ao PATH do seu usuário via [Environment]::SetEnvironmentVariable. Terminais já abertos não pegam isso — abra uma janela nova do PowerShell (ou uma aba nova do Windows Terminal) depois da instalação. Feche e reabra; não faça $env:PATH += … na mão, a não ser que você saiba o que está fazendo.
Confira:
Get-Command hermes # deve imprimir C:\Users\<voce>\AppData\Local\hermes\bin\hermes.exe
hermes --version
Variáveis de ambiente
O Hermes respeita tanto $env:X (escopo de processo) quanto variáveis de ambiente de usuário (permanentes, definidas em Propriedades do Sistema → Variáveis de Ambiente). Colocar as chaves de API em %LOCALAPPDATA%\hermes\.env (o seu HERMES_HOME) é o caminho normal — igual ao Linux:
OPENROUTER_API_KEY=sk-or-...
TELEGRAM_BOT_TOKEN=...
Não coloque segredos em variáveis de ambiente de usuário, a menos que você queira mesmo que todo processo do Windows os enxergue (não é o que você quer).
Variáveis de ambiente específicas do Windows
Estas só afetam instalações nativas no Windows:
| Variável | Efeito |
|---|---|
HERMES_GIT_BASH_PATH | Sobrescreve a descoberta do bash.exe. Aponte para qualquer bash — Git-for-Windows completo, bash do WSL via symlink, MSYS2, Cygwin. O instalador define isso automaticamente. |
HERMES_DISABLE_WINDOWS_UTF8 | Defina como 1 para desligar o shim de stdio UTF-8 e voltar à página de código do locale. Útil para bissecar um bug de codificação. |
EDITOR / VISUAL | Seu editor para /edit e Ctrl-X Ctrl-E. O Hermes usa notepad por padrão se os dois estiverem vazios. |
Desinstalar
Pelo PowerShell:
hermes uninstall
Esse é o caminho limpo — remove a entrada do schtasks, o atalho da pasta de Inicialização e o shim hermes.cmd, apaga %LOCALAPPDATA%\hermes\hermes-agent\ e limpa o PATH do usuário. Ele não mexe no resto de %LOCALAPPDATA%\hermes\ (sua configuração, autenticação, skills, sessões e logs), caso você vá reinstalar.
Para apagar tudo:
hermes uninstall
Remove-Item -Recurse -Force "$env:LOCALAPPDATA\hermes"
# Remova também um diretório de dados antigo da CLI/WSL, se você já usou um:
Remove-Item -Recurse -Force "$env:USERPROFILE\.hermes"
O subcomando hermes uninstall da CLI também dá conta do caso em que a entrada do schtasks foi registrada com outro nome de tarefa (instalações antigas) — ele busca pelo caminho de instalação, não por um nome de tarefa fixo no código.
Detalhes internos do gerenciamento de processos
Isto é material de fundo — pule, a menos que você esteja depurando alguma esquisitice do tipo "ele está se matando".
No Linux e no macOS, o idioma POSIX os.kill(pid, 0) é uma checagem de permissão que não faz nada: "esse PID está vivo e eu posso sinalizar para ele?". No Windows, o os.kill do Python mapeia sig=0 para CTRL_C_EVENT — eles colidem no valor inteiro 0 — e roteia pelo GenerateConsoleCtrlEvent(0, pid), que transmite o Ctrl+C para o grupo inteiro de processos do console que contém o PID alvo. Esse é o bpo-14484, aberto desde 2012. Não vai ser corrigido porque mudar isso quebraria scripts que dependem do comportamento atual.
Consequência: qualquer trecho de código que dizia "veja se esse PID está vivo" via os.kill(pid, 0) no Windows estava matando o alvo em silêncio. O Hermes migrou todos esses pontos (14 em 11 arquivos) para o gateway.status._pid_exists(), que usa o psutil.pid_exists() (que, por sua vez, usa OpenProcess + GetExitCodeProcess no Windows — sem sinais). Se você estiver escrevendo um plugin ou um patch, use o psutil.pid_exists() direto ou o gateway.status._pid_exists() — nunca o os.kill(pid, 0).
O scripts/check-windows-footguns.py impõe isso na CI: qualquer chamada nova a os.kill(pid, 0) reprova a verificação Windows footguns (blocking), a não ser que a linha traga um marcador # windows-footgun: ok — <motivo>.
Pegadinhas comuns
hermes: command not found logo depois da instalação.
Abra uma janela nova do PowerShell. O instalador adicionou %LOCALAPPDATA%\hermes\bin ao PATH do usuário, mas shells já abertos precisam ser reiniciados para pegar. Enquanto isso, você pode rodar & "$env:LOCALAPPDATA\hermes\bin\hermes.exe".
WinError 193: %1 is not a valid Win32 application ao rodar uma ferramenta.
Você caiu em uma invocação de script com shebang que passou por cima do shim .cmd. O Hermes resolve comandos com shutil.which(cmd, path=local_bin) para que o PATHEXT pegue o .CMD — se você está chamando a ferramenta por um caminho fixo, troque pela variante .cmd (ex.: npx.cmd, não npx).
[scriptblock]::Create(...) falha com The assignment expression is not valid.
Seu download do install.ps1 pegou um BOM UTF-8. A forma irm | iex remove BOMs automaticamente; a [scriptblock]::Create((irm ...)) não. Rode de novo com a forma simples irm | iex, ou baixe o script na mão e salve sem BOM com [IO.File]::WriteAllText($path, $text, (New-Object Text.UTF8Encoding $false)).
O gateway não continua rodando depois de reiniciar.
Veja o hermes gateway status — ele combina a entrada do schtasks, o atalho da pasta de Inicialização (se usado) e o PID vivo. Se o schtasks está registrado mas não está rodando, pode ser que a política de grupo esteja bloqueando gatilhos ONLOGON. Rode schtasks /Query /TN HermesGateway /V /FO LIST para ver o motivo da falha da tarefa, ou volte para o caminho da pasta de Inicialização desinstalando e reinstalando com HERMES_GATEWAY_FORCE_STARTUP=1.
O /edit continua não fazendo nada depois de eu definir $env:EDITOR.
Você definiu só no processo atual; feche e reabra o shell, ou defina no escopo de usuário em Propriedades do Sistema → Variáveis de Ambiente. Confira com echo $env:EDITOR em uma janela nova do PowerShell.
A ferramenta de navegador abre, mas as ferramentas dão timeout.
O Chromium é instalado automaticamente na primeira execução. Se a instalação falhou (limite de taxa do GitHub, soluço na CDN do Playwright), rode o hermes doctor — ele mostra o Chromium ausente e imprime o comando npx playwright install chromium exato para corrigir.
O agent-browser falha com um erro estranho de versão do Node.
O instalador provisiona o Node 26 em %LOCALAPPDATA%\hermes\node, mas o seu PATH pode ter um Node 18 do sistema antes dele. Ou mova o diretório node do Hermes para antes no PATH, ou apague a instalação do sistema se você não usa Node em mais nada.
Caracteres chineses / japoneses / árabes aparecem como ? na CLI.
O shim de stdio UTF-8 não ativou. Verifique se o HERMES_DISABLE_WINDOWS_UTF8 NÃO está definido (Get-ChildItem env:HERMES_DISABLE_WINDOWS_UTF8). Se estiver vazio e você ainda ver ?, o host de console (um cmd.exe bem antigo) pode simplesmente não suportar UTF-8 — mude para o Windows Terminal.
O gateway não consegue enviar fotos no Telegram — "BadRequest: payload contains invalid characters".
Isso não tem a ver com o Windows, mas às vezes aparece primeiro nele. Normalmente significa que o caminho do seu arquivo tem barras invertidas sem escape dentro de um corpo JSON. O Telegram deveria estar recebendo caminhos normalizados pelo Hermes, não caminhos crus do Windows — se você está vendo isso dentro de um plugin próprio, garanta que está passando o caminho fornecido pelo Hermes, e não um str(Path(...)) vindo de entrada do usuário.
Esquisitice de codificação do tipo "funciona na minha outra máquina" depois de um git pull.
Se você editou a configuração do Hermes ou uma skill no Windows usando um editor que não é UTF-8 (o Bloco de Notas de versões antigas do Windows, alguns IMEs chineses), o arquivo pode ter sido salvo com BOM. O Hermes tolera utf-8-sig na maioria das leituras de configuração, mas um BOM dentro de um escalar YAML dobrado (description: >) quebra silenciosamente o parsing do YAML. Salve o arquivo de novo como UTF-8 puro, sem BOM.
Para onde ir depois
- Instalação — a página completa de instalação, incluindo Linux/macOS/WSL2/Termux.
- Guia do Windows (WSL2) — se você quer semântica POSIX ou o painel de terminal do dashboard.
- Referência da CLI — todos os subcomandos do
hermes. - FAQ — dúvidas comuns não específicas do Windows.
- Gateway de mensagens — rodando Telegram/Discord/Slack no Windows.