Claude Code hooks क्या हैं? shell कमांड डिटरमिनिस्टिक रूप से चलाएँ
Claude Code hooks यूज़र द्वारा परिभाषित shell कमांड हैं जो Claude Code के लाइफ़साइकल में निश्चित बिंदुओं पर अपने-आप चलते हैं, और "ऐसा हमेशा होना ही चाहिए" को LLM के फ़ैसले पर निर्भर हुए बिना सच और डिटरमिनिस्टिक बना देते हैं। क्लासिक इवेंट नौ हैं—SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, Notification, Stop, SubagentStop, SessionEnd, PreCompact—जिनमें से PreToolUse और अन्य ब्लॉक कर सकते हैं (सुरक्षित फ़ाइलों में एडिट या ख़तरनाक कमांड रोककर)। आप इन्हें settings.json में "hooks" की के तहत इवेंट नाम -> matcher -> type + command के रूप में कॉन्फ़िगर करते हैं। I/O कॉन्ट्रैक्ट: एक hook stdin पर JSON प्राप्त करता है (session_id, tool_input आदि) और exit code 0 (सफलता) / 2 (ब्लॉक, stderr Claude को वापस) या स्ट्रक्चर्ड JSON (continue, decision:block, permissionDecision: deny/allow/ask) के ज़रिए लौटाता है। मुख्य सिद्धांत है "hooks पाबंदियाँ सख़्त कर सकते हैं पर ढीली नहीं" (deny हमेशा जीतता है, bypassPermissions के तहत भी ब्लॉक)। क्लासिक उपयोग-केस: एडिट के बाद ऑटो-फ़ॉर्मैट (PostToolUse + Edit|Write), अहम फ़ाइलों की सुरक्षा, ख़तरनाक कमांड रोकना, कॉन्टेक्स्ट फिर से इंजेक्ट करना (SessionStart), नोटिफ़िकेशन/ऑडिट लॉगिंग, और रुकने से पहले टेस्ट (Stop)। सुरक्षा पर, hooks आपके अधिकारों के साथ मनमाने shell कमांड चलाते हैं, इसलिए केवल भरोसेमंद ही कॉन्फ़िगर करें और इनपुट वैलिडेट/कोट करें; hook कॉन्फ़िग सेशन स्टार्टअप पर कैप्चर होता है (एक सुरक्षा फ़ीचर) इसलिए सेशन के बीच के बदलाव लागू नहीं होते। आधिकारिक दस्तावेज़ पर आधारित, नौ क्लासिक इवेंट और I/O कॉन्ट्रैक्ट पर केंद्रित।