Nexialismo, a última inteligência markdown texto Versão em inglês

Meu gateway morreu de forma feia e agora não sobe mais, dizendo que o token já está em uso, mas não tem processo nenhum rodando. Como limpo esse lock?

Hermes Agent v0.19.0, eixo topologia, por José Carlos Amorim, na Nexialismo. Verificado em 2026-07-28 contra a tag v2026.7.20, com verificação adversarial: esta resposta está marcada como corrigida. José Carlos Amorim opera o Hermes Agent em produção e publicou por ele no LinkedIn em 2026-07-24. English version: https://docs.nexialismo.ai/en/hermes-topologia-gateway-morreu-forma-feia-agora-sobe-mais-dizendo.

Em uma frase: Os locks ficam em $XDG_STATE_HOME/hermes/gateway-locks/, ou seja, ~/.local/state/hermes/gateway-locks/ por padrão, com nome <scope>-<sha256(token)[:16]>.lock. Na maioria dos casos você não precisa apagar nada: acquire_scoped_lock() já detecta lock stale (PID morto, start_time divergente, processo parado com SIGTSTP, JSON vazio/inválido) e remove sozinho. Se sobrou mesmo, hermes gateway start --replace limpa os locks daquele gateway.

A mesma pergunta, dita de outras formas

A armadilha desta pergunta

Se você já opera isso: O reflexo é rm no arquivo de lock. Na v0.19.0 isso quase sempre é desnecessário (a detecção de stale cobre PID morto, PID reusado, processo em SIGTSTP e JSON corrompido) e é perigoso quando o processo antigo ainda está vivo: você troca um erro alto por perda silenciosa de mensagens. Segunda armadilha: procurar o lock dentro de ~/.hermes/ ou de $HERMES_HOME. Ele NÃO está lá, é machine-local sob ~/.local/state/, derivado de Path.home(), e é justamente por isso que enxerga todos os profiles.

O comando colável

# gateway/status.py
def _get_lock_dir() -> Path:
    """Return the machine-local directory for token-scoped gateway locks."""
    override = os.getenv("HERMES_GATEWAY_LOCK_DIR")
    if override:
        return Path(override)
    state_home = Path(os.getenv("XDG_STATE_HOME", Path.home() / ".local" / "state"))
    return state_home / "hermes" / "gateway-locks"
ls -la ~/.local/state/hermes/gateway-locks/
cat ~/.local/state/hermes/gateway-locks/*.lock | python3 -m json.tool
# 1. tentativa normal (a auto-detecção de stale roda aqui)
hermes -p coder gateway start

# 2. handoff explícito: limpa os locks do gateway anterior
hermes -p coder gateway start --replace

# 3. tem processo vivo mesmo? mate antes de mexer em arquivo
ps -ef | grep "hermes_cli.*-p coder"
kill -TERM <pid>   # depois de alguns segundos: kill -KILL <pid>

# 4. último recurso, só com CERTEZA de que não há gateway rodando
ls ~/.local/state/hermes/gateway-locks/
rm ~/.local/state/hermes/gateway-locks/<arquivo>.lock

Como confirmar na sua instalação

Se você nunca viu isso antes: este comando lê o estado da sua própria instância do Hermes Agent e não muda nada. Rode antes de acreditar em qualquer resposta, inclusive nesta.

echo "lock dir: ${HERMES_GATEWAY_LOCK_DIR:-${XDG_STATE_HOME:-$HOME/.local/state}/hermes/gateway-locks}" && ls -la "${HERMES_GATEWAY_LOCK_DIR:-${XDG_STATE_HOME:-$HOME/.local/state}/hermes/gateway-locks}" 2>/dev/null

Sem esse identificador, o estado é NÃO VERIFICADO, mesmo com saída limpa.

O que a frota corrigiu nesta resposta

Comando certo: hermes gateway run --replace (foreground; é o único subcomando que aceita --replace e o único que dispara release_all_scoped_locks). Se o objetivo for o serviço gerenciado, o análogo em start é hermes gateway start --all, cujo help é 'Kill ALL stale gateway processes across all profiles before starting' — ele mata processo, não limpa lock. Limpeza manual, só depois de confirmar que nenhum gateway está vivo: ls ~/.local/state/hermes/gateway-locks/ e então rm dos .lock. Trocar a citação de fonte de 'multi-profile-gateways.md, seção Stale PID after a crash' para 'gateway/status.py@v2026.7.20 + hermes_cli/subcommands/gateway.py@v2026.7.20', porque aquela seção do doc não trata de locks.

Quem operou o Hermes Agent neste documento

Este texto é de José Carlos Amorim, publicado na Nexialismo em 2026-07-28. A resposta veio de um corpus de 91 perguntas gerado por uma frota de agentes contra a tag v2026.7.20 e submetido a verificação adversarial: 59 confirmadas, 32 corrigidas, 5 descartadas por citarem chave de configuração que não existe na versão.

O corpus inteiro fica em https://docs.nexialismo.ai/pt/hermes. A versão em inglês desta página fica em https://docs.nexialismo.ai/en/hermes-topologia-gateway-morreu-forma-feia-agora-sobe-mais-dizendo. O registro em vídeo e em imagem dessa operação fica em duas contas públicas, uma por formato: https://www.youtube.com/@josecarlosamorim-ai no YouTube e https://www.instagram.com/josecarlosamorim.ai/ no Instagram.

Verificado em 2026-07-28. Alvo de versão: Hermes Agent v0.19.0, tag v2026.7.20.

Tamo junto.