מפתח גילה שחיפוש npx נסתר הוסיף בערך 10 שניות לכל סבב ב-Claude Code, והחלפת החיפוש בהתקנה גלובלית חסכה שש שניות מכל אינטראקציה.
למה השיהוי היה משמעותי
Claude Code מנווט בתוך monorepo עם עשרות רכיבים, מאנדקס סמלים, שומר תמלולים ב-Postgres ושולח דיווחי שגיאות. זרימת העבודה מרגישה חלקה עד שהתגובות של המודל מתחילות להתעכב. בדיקת תקינות (health check) חשפה לאחר מכן מספר חוסר יעילות וקריאת רשת אחת יקרה.
מה בדיקת התקינות חשפה
- התקנות כפולות – מפעיל (launcher) מקומי וגרסה ישנה של npm-global התקיימו במקביל. הסרת העותק הישן ביטלה חיפוש נתיב מיותר.
- קובץ סוכן (agent) פגום – קובץ ללא תיאור חזר על השם של קובץ תקין, מה שגרם ל-Claude Code להתעלם ממנו. מחיקת הרשומה הפגומה פתרה את הבלבול.
- תוספים שלא בשימוש – תוסף (plugin) ושרת MCP שמעולם לא הופעלו בוטלו, מה שצמצם את טביעת הרגל (footprint) בזמן הריצה.
- קבצי “CLAUDE.md” נפוחים – קבצים אלו חזרו על מידע שכבר קיים בקוד (למשל, פקודות build), מה שהגדיל את ה-payload שנשלח למודל. צמצום הקבצים השאיר רק את ההקשר (context) החיוני.
הניקיונות הללו עזרו, אך ההישג הגדול ביותר הגיע מ-Stop hook שרץ לאחר כל תגובת מודל.
"מס ה-npx" הנסתר
ה-Stop hook מריץ שש פקודות נפרדות, שכל אחת מהן מתחילה ב-npx -y. הדגל -y מאלץ את npx לבדוק ב-npm registry אם קיימת גרסה חדשה יותר לפני הרצת הפקודה, מה שמפעיל בקשת רשת. כל חיפוש ארך בממוצע 1.6 שניות, כך שש הקריאות הוסיפו כ-10 שניות לכל סבב. בפועל, השיהוי הכולל של ה-hook נמדד ב-12 שניות, עם קפיצות מזדמנות של עד 113 שניות כאשר הייתה תקלה ברשת.
הפתרון הפשוט
החלפת קריאות ה-npx בבינארי (binary) המותקן גלובלית ביטלה את החיפוש ב-registry:
- לפני:
npx -y @invariance/gps← 1.6 שניות לכל קריאה - אחרי:
gps(מותקן גלובלית) ← 0.7 שניות לכל קריאה
השינוי צמצם את זמן הריצה של ה-Stop hook בכ-6 שניות לכל סבב וביטל את הקפיצות המשמעותיות שנגרמו מהבדיקה המרוחקת.
מה כדאי לעקוב אחריו בהמשך
- תזמון הוקים (Hook timing) – בצעו מדידה (instrumentation) של כל הוק מותאם אישית כדי לחשוף שיהוי לפני שהוא פוגע במשתמשים.
- היגיינת תלויות (Dependency hygiene) – נקו באופן קבוע התקנות כפולות ותוספים שאינם בשימוש.
- קבצי הגדרה – שמרו על קבצי “CLAUDE.md” רזים; הציגו רק מידע שהמודל אינו יכול להסיק בעצמו.
הלקח הוא פשוט: אוטומציה יכולה להסתיר "צנרת" (plumbing) יקרה. בדיקת תקינות מהירה יכולה לחשוף קריאות רשת נסתרות שהופכות עוזר AI חלק למגושם.
בשורה התחתונה: כש-Claude Code מרגיש איטי, מדדו את זמן הריצה של הוקים וביטלו חיפושי npx; התקנה גלובלית יכולה לחסוך שניות בכל סבב ולשמור על זרימת הפיתוח שלכם זורמת.
