एक डेवलपर ने पाया कि एक छिपे हुए npx लुकअप के कारण Claude Code के हर टर्न (turn) में लगभग 10 सेकंड का समय लग रहा था, और लुकअप को ग्लोबल इंस्टॉल (global install) से बदलने पर हर इंटरैक्शन में छह सेकंड की बचत हुई।
लेटेंसी (latency) क्यों मायने रखती थी
Claude Code दर्जनों कंपोनेंट्स वाले एक मोनोरेपो (monorepo) को नेविगेट करता है, सिम्बल्स (symbols) को इंडेक्स करता है, Postgres में ट्रांसक्रिप्ट्स को सुरक्षित रखता है, और एरर रिपोर्ट भेजता है। वर्कफ़्लो तब तक स्मूथ लगता है जब तक मॉडल के रिस्पॉन्स लैग (lag) करने न लगें। इसके बाद एक हेल्थ चेक ने कई अक्षमताओं और एक महंगी नेटवर्क कॉल का खुलासा किया।
हेल्थ चेक में क्या सामने आया
- डुप्लिकेट इंस्टॉलेशन (Duplicate installations) – एक नेटिव लॉन्चर और एक पुराना npm-global वर्ज़न एक साथ मौजूद थे। पुरानी कॉपी को हटाने से एक अनावश्यक पाथ लुकअप (path lookup) खत्म हो गया।
- खराब एजेंट फ़ाइल (Broken agent file) – बिना डिस्क्रिप्शन वाली एक फ़ाइल ने एक वैध फ़ाइल के नाम को डुप्लिकेट कर दिया था, जिससे Claude Code उसे अनदेखा कर रहा था। खराब एंट्री को डिलीट करने से यह भ्रम दूर हो गया।
- अप्रयुक्त एक्सटेंशन (Unused extensions) – एक प्लगइन और एक MCP सर्वर जो कभी इस्तेमाल नहीं होते थे, उन्हें डिसेबल कर दिया गया, जिससे रनटाइम फुटप्रिंट (runtime footprint) कम हो गया।
- भारी “CLAUDE.md” फ़ाइलें – ये फ़ाइलें कोड में पहले से मौजूद जानकारी (जैसे, बिल्ड कमांड) को दोहरा रही थीं, जिससे मॉडल को भेजे जाने वाले पेलोड (payload) का आकार बढ़ रहा था। उन्हें छोटा करने से केवल आवश्यक कॉन्टेक्स्ट ही बचा।
इन सफाई कार्यों से मदद मिली, लेकिन सबसे बड़ी जीत Stop hook से मिली जो मॉडल के हर रिस्पॉन्स के बाद चलता है।
छिपा हुआ npx टैक्स
Stop hook छह अलग-अलग कमांड चलाता है, जिनमें से प्रत्येक के आगे npx -y लगा होता है। -y फ्लैग npx को कमांड चलाने से पहले npm रजिस्ट्री में नए वर्ज़न की जांच करने के लिए मजबूर करता है, जिससे एक नेटवर्क रिक्वेस्ट ट्रिगर होती है। प्रत्येक लुकअप में औसतन 1.6 सेकंड लगते थे, इसलिए छह कॉल्स ने हर टर्न में लगभग 10 सेकंड जोड़ दिए। व्यवहार में, हुक की कुल लेटेंसी 12 सेकंड मापी गई, और नेटवर्क में समस्या आने पर यह कभी-कभी 113 सेकंड तक बढ़ जाती थी।
सरल समाधान
npx कॉल्स को ग्लोबली इंस्टॉल किए गए बाइनरी (binary) से बदलने पर रजिस्ट्री लुकअप खत्म हो गया:
- पहले:
npx -y @invariance/gps→ प्रति कॉल 1.6 सेकंड - बाद में:
gps(ग्लोबली इंस्टॉल किया गया) → प्रति कॉल 0.7 सेकंड
इस बदलाव ने Stop hook के रनटाइम को प्रति टर्न लगभग 6 सेकंड कम कर दिया और रिमोट चेक के कारण होने वाले भारी स्पाइक्स (spikes) को खत्म कर दिया।
आगे क्या ध्यान रखें
- हुक टाइमिंग (Hook timing) – किसी भी कस्टम हुक को इंस्ट्रूमेंट (instrument) करें ताकि उपयोगकर्ताओं को प्रभावित करने से पहले लेटेंसी का पता चल सके।
- डिपेंडेंसी हाइजीन (Dependency hygiene) – डुप्लिकेट इंस्टॉलेशन और अप्रयुक्त एक्सटेंशन को नियमित रूप से हटाते रहें।
- कॉन्फ़िगरेशन फ़ाइलें – “CLAUDE.md” को हल्का रखें; केवल वही जानकारी दें जिसे मॉडल खुद से नहीं समझ सकता।
सबक सरल है: ऑटोमेशन महंगी जटिलताओं (plumbing) को छिपा सकता है। एक त्वरित हेल्थ चेक उन छिपे हुए नेटवर्क कॉल्स का खुलासा कर सकता है जो एक स्मूथ AI असिस्टेंट को सुस्त बना देते हैं।
निष्कर्ष (Takeaway): जब Claude Code धीमा महसूस हो, तो हुक्स का समय मापें और किसी भी npx लुकअप को खत्म करें; एक ग्लोबल इंस्टॉल हर टर्न से सेकंड्स बचा सकता है और आपके डेवलपमेंट फ्लो को सुचारू रख सकता है।
