Um desenvolvedor descobriu que uma busca oculta do npx estava adicionando cerca de 10 segundos a cada turno do Claude Code, e substituir essa busca por uma instalação global reduziu seis segundos de cada interação.

Por que a latência importava

O Claude Code navega em um monorepo com dezenas de componentes, indexa símbolos, persiste transcrições no Postgres e envia relatórios de erro. O fluxo de trabalho parece fluido até que as respostas do modelo comecem a atrasar. Um health check expôs várias ineficiências e uma chamada de rede dispendiosa.

O que o health check revelou

  • Instalações duplicadas – um launcher nativo e uma versão desatualizada do npm-global coexistiam. Remover a cópia obsoleta eliminou uma busca de caminho desnecessária.
  • Arquivo de agente corrompido – um arquivo sem descrição duplicava o nome de um arquivo válido, fazendo com que o Claude Code o ignorasse. Excluir a entrada corrompida resolveu a confusão.
  • Extensões não utilizadas – um plugin e um servidor MCP que nunca eram executados foram desativados, reduzindo o footprint de runtime.
  • Arquivos “CLAUDE.md” inchados – esses arquivos repetiam informações já presentes no código (ex: comandos de build), inflando o payload enviado ao modelo. Reduzi-los deixou apenas o contexto essencial.

Essas limpezas ajudaram, mas a maior vitória veio do Stop hook que é executado após cada resposta do modelo.

O imposto oculto do npx

O Stop hook executa seis comandos separados, cada um prefixado com npx -y. A flag -y força o npx a verificar o registro do npm em busca de uma versão mais recente antes de executar o comando, disparando uma requisição de rede. Cada busca levava em média 1,6 segundos, então as seis chamadas adicionavam cerca de 10 segundos a cada turno. Na prática, a latência total do hook era de 12 segundos, com picos ocasionais de até 113 segundos quando ocorriam instabilidades na rede.

A solução simples

Substituir as chamadas npx por um binário instalado globalmente removeu a busca no registro:

  • Antes: npx -y @invariance/gps → 1,6 s por chamada
  • Depois: gps (instalado globalmente) → 0,7 s por chamada

A mudança reduziu o tempo de execução do Stop hook em aproximadamente 6 segundos por turno e eliminou os picos massivos causados pela verificação remota.

O que observar a seguir

  • Timing de hooks – instrumente quaisquer hooks personalizados para expor a latência antes que ela afete os usuários.
  • Higiene de dependências – remova regularmente instalações duplicadas e extensões não utilizadas.
  • Arquivos de configuração – mantenha o “CLAUDE.md” enxuto; exiba apenas informações que o modelo não consiga inferir.

A lição é simples: a automação pode esconder processos internos dispendiosos. Um rápido health check pode revelar chamadas de rede ocultas que transformam um assistente de IA fluido em um lento.

Conclusão: Quando o Claude Code parecer lento, cronometre os hooks e elimine quaisquer buscas de npx; uma instalação global pode economizar segundos em cada turno e manter seu fluxo de desenvolvimento ágil.