Deweloper odkrył, że ukryte wyszukiwanie npx dodawało około 10 sekund do każdej tury Claude Code, a zastąpienie tego wyszukiwania globalną instalacją skróciło czas każdej interakcji o sześć sekund.

Dlaczego opóźnienie miało znaczenie

Claude Code porusza się po monorepo z dziesiątkami komponentów, indeksuje symbole, zapisuje transkrypcje w Postgres i wysyła raporty błędów. Workflow wydaje się płynny, dopóki odpowiedzi modelu nie zaczynają się opóźniać. Sprawdzenie stanu (health check) ujawniło kilka nieefektywności oraz jedno kosztowne wywołanie sieciowe.

Co wykazało sprawdzenie stanu

  • Duplikaty instalacji – natywny launcher i przestarzała wersja npm-global współistniały ze sobą. Usunięcie nieaktualnej kopii wyeliminowało zbędne wyszukiwanie ścieżki.
  • Uszkodzony plik agenta – plik bez opisu powielał nazwę poprawnego pliku, co powodowało, że Claude Code go ignorował. Usunięcie błędnego wpisu rozwiązało problem.
  • Nieużywane rozszerzenia – wyłączono wtyczkę oraz serwer MCP, które nigdy nie były uruchamiane, co zmniejszyło obciążenie podczas działania (runtime footprint).
  • Przeładowane pliki „CLAUDE.md” – pliki te powtarzały informacje już obecne w kodzie (np. komendy budowania), co zwiększało rozmiar przesyłanych do modelu danych (payload). Po ich skróceniu pozostał jedynie niezbędny kontekst.

Te porządki pomogły, ale największy zysk przyniosło rozwiązanie problemu z Stop hook, który uruchamia się po każdej odpowiedzi modelu.

Ukryty podatek npx

Stop hook wykonuje sześć oddzielnych komend, z których każda ma prefiks npx -y. Flaga -y wymusza na npx sprawdzenie rejestru npm w poszukiwaniu nowszej wersji przed uruchomieniem komendy, co wywołuje żądanie sieciowe. Każde wyszukiwanie trwało średnio 1,6 sekundy, więc sześć wywołań dodawało około 10 sekund do każdej tury. W praktyce całkowite opóźnienie hooka wynosiło 12 sekund, z okazjonalnymi skokami do 113 sekund w przypadku problemów z siecią.

Prosta poprawka

Zastąpienie wywołań npx binarnym plikiem zainstalowanym globalnie wyeliminowało wyszukiwanie w rejestrze:

  • Przed: npx -y @invariance/gps → 1,6 s na wywołanie
  • Po: gps (zainstalowany globalnie) → 0,7 s na wywołanie

Zmiana skróciła czas działania Stop hooka o około 6 sekund na turę i wyeliminowała ogromne skoki opóźnień spowodowane zdalnym sprawdzaniem.

Na co zwrócić uwagę w przyszłości

  • Czas działania hooków – monitoruj (instrumentuj) wszelkie niestandardowe hooki, aby wykryć opóźnienia, zanim dotkną one użytkowników.
  • Higiena zależności – regularnie usuwaj duplikaty instalacji i nieużywane rozszerzenia.
  • Pliki konfiguracyjne – dbaj o to, by pliki „CLAUDE.md” były zwięzłe; podawaj tylko te informacje, których model nie może wywnioskować samodzielnie.

Lekcja jest prosta: automatyzacja może ukrywać kosztowne procesy techniczne. Szybkie sprawdzenie stanu może ujawnić ukryte wywołania sieciowe, które zmieniają płynnego asystenta AI w powolnego.

Wniosek: Gdy Claude Code wydaje się wolny, zmierz czas działania hooków i wyeliminuj wszelkie wyszukiwania npx; globalna instalacja może skrócić każdą turę o kilka sekund i zapewnić płynność procesu deweloperskiego.