
होस्ट-अज्ञेय प्री-राइट सुरक्षा हुक कोडिंग एजेंट के लिए: सेमग्रेप के माध्यम से उपयोगकर्ता-इनपुट पैटर्न का पता लगाता है और नियतात्मक, एलएलएम-रहित सुरक्षा मार्गदर्शन उत्पन्न करता है।
AI कोडिंग टूल के लिए एक सुरक्षा जाँच-बिंदु। यह AI असिस्टेंट द्वारा लिखी गई प्रत्येक फ़ाइल की जाँच करता है, और खतरनाक फ़ाइलों को डिस्क पर पहुँचने से पहले रोक देता है।
AI कोडिंग असिस्टेंट (Claude Code, Codex, …) तेज़ी से कोड लिखते हैं — जिसमें ऐसा कोड भी शामिल है जो पासवर्ड, ईमेल, API कुंजियाँ, या कच्चे उपयोगकर्ता इनपुट जैसी चीज़ों को संभालता है। असिस्टेंट के लिए उस डेटा को बिना सुरक्षा के सीधे डेटाबेस क्वेरी, शेल कमांड, या HTTP प्रतिक्रिया में डालना आसान है।
VibeGate असिस्टेंट और आपकी फ़ाइल प्रणाली के बीच बैठता है। हर बार जब असिस्टेंट किसी फ़ाइल को लिखने या संपादित करने का प्रयास करता है, VibeGate पहले नए कोड को स्कैन करता है:
विश्लेषण में कोई LLM शामिल नहीं है — यह तेज़, नियतात्मक स्थैतिक विश्लेषण है, इसलिए यह कभी कुछ मनघड़ंत नहीं बनाता और न ही आपको टोकन खर्च करने पड़ते हैं।
यहाँ वह सब कुछ है जिसकी VibeGate वर्तमान में जाँच करता है:
पूरी, वर्तमान सूची guidance.TECHNICAL_RISKS और formatter.BLOCKING_CATEGORIES में रहती है,
यदि यह तालिका कभी बदलती है।
┌───────────────────────────────┐
│ आप Claude Code से कहते हैं │
│ कोई फ़ाइल लिखने या │
│ संपादित करने के लिए │
└───────────────┬───────────────┘
│
▼
┌───────────────────────────────┐
│ Claude Code फ़ाइल सहेजने का│
│ प्रयास करता है (Write/Edit) │
└───────────────┬───────────────┘
│
▼
┌───────────────────────────────┐
│ VibeGate हुक │
│ (स्वचालित रूप से चलता है, │
│ फ़ाइल सहेजे जाने से पहले) │
└───────────────┬───────────────┘
│
Semgrep से नए कोड को स्कैन करता है
│
┌─────────────────────┼─────────────────────┐
│ │ │
▼ ▼ ▼
┌────────────────────┐ ┌────────────────────┐ ┌──────────────────────┐
│ कोई जोखिमपूर्ण │ │ जोखिमपूर्ण इनपुट,│ │ जोखिमपूर्ण इनपुट │
│ इनपुट नहीं मिला │ │ लेकिन कम जोखिम │ │ एक गंभीर सिंक │
│ │ │ (जैसे HTTP में │ │ तक पहुँचता है │
│ │ │ दिखाया गया) │ │ (SQL/कमांड/RCE, │
│ │ │ │ │ टेम्पलेट इंजेक्शन)│
└─────────┬──────────┘ └─────────┬──────────┘ └───────────┬──────────┘
│ │ │
▼ ▼ ▼
फ़ाइल सहेजी जाती है, फ़ाइल सहेजी जाती है, फ़ाइल सहेजी नहीं जाती।
कुछ नहीं दिखता। टर्मिनल में चेतावनी Claude Code को रुकावट
दिखती है जिसमें जोखिम का कारण दिखता है और
और उसे ठीक करने का तरीका बताया जाता है क्या ठीक
होता है। करना है।
संक्षेप में: सुरक्षित कोड बिना किसी बदलाव के गुज़र जाता है, जोखिमपूर्ण लेकिन बचा जा सकने वाला कोड चेतावनी के साथ सहेजा जाता है, और SQL इंजेक्शन, कमांड इंजेक्शन, या रिमोट कोड निष्पादन जैसी चीज़ों से एक कदम दूर कोड डिस्क तक पहुँचने से पहले रोक दिया जाता है।
यदि VibeGate स्वयं किसी अप्रत्याशित त्रुटि का सामना करता है, तो यह हमेशा लिखने की अनुमति देता है — हुक में बग कभी भी आपके काम को अवरुद्ध करने का कारण नहीं होना चाहिए।
हर चेतावनी और रुकावट के साथ एक स्पष्ट निर्देश भी होता है जो Claude Code को बताता है कि वह निष्कर्ष को अपने उत्तर में आपको बताए, न कि चुपचाप ठीक करे। यही VibeGate की गतिविधि को बातचीत में दृश्यमान बनाता है, न कि केवल टर्मिनल लॉग में जिसे आपको ढूँढना पड़े।
| VibeGate क्या देखता है | क्या होता है |
|---|---|
| कोई उपयोगकर्ता इनपुट नहीं, या ऐसी भाषा जिसका समर्थन अभी नहीं है | फ़ाइल सामान्य रूप से सहेजी जाती है, कुछ नहीं दिखता |
| उपयोगकर्ता इनपुट मिला, लेकिन जोखिम मध्यम है (जैसे ओपन रिडायरेक्ट, मास असाइनमेंट) | फ़ाइल सहेजी जाती है, टर्मिनल में चेतावनी + मार्गदर्शन दिखता है |
| उपयोगकर्ता इनपुट बिना स्वच्छता के एक गंभीर सिंक में प्रवाहित होता है (SQL/NoSQL क्वेरी, शेल कमांड, टेम्पलेट इंजन, विसीरीकरण, XML पार्सर, फ़ाइल पथ, अपलोड किया गया फ़ाइल नाम, या कच्चा HTML आउटपुट) |
प्रति-जाँच का विवरण क्या रोकता है बनाम क्या केवल चेतावनी देता है, इसके लिए ऊपर "यह किस समस्या का समाधान करता है?" में तालिका देखें।
आज VibeGate Python, JavaScript/TypeScript, Go, Java, PHP और Ruby को समझता है, और Claude Code और Codex से जुड़ता है। कोर लॉजिक को छुए बिना अधिक भाषाएँ और उपकरण जोड़े जा सकते हैं।
यह GitHub Actions वर्कफ़्लो फ़ाइलों की भी जाँच करता है दो सामान्य CI/CD आपूर्ति-श्रृंखला
गलतियों के लिए: कमिट SHA के बजाय परिवर्तनीय टैग (@v4) पर पिन की गई क्रियाएँ, और
असुरक्षित pull_request_target ट्रिगर। दोनों रोकने के बजाय चेतावनी देते हैं, क्योंकि ये
सक्रिय शोषण के प्रमाण के बजाय सख्तीकरण जाँच हैं।
यहाँ Claude Code द्वारा एक RSS फ़ीड रीडर ऐप को शुरू से बनाने की वास्तविक रिकॉर्डिंग है, जिसमें VibeGate पूरे समय चल रहा है। उन क्षणों को देखें जहाँ Claude Code रुकता है और स्पष्ट रूप से बताता है कि VibeGate ने क्या चिह्नित किया, और क्यों, फिर जारी रखता है — जिसमें फ़ीड-लेने वाले कोड में एक वास्तविक SSRF जोखिम शामिल है जिसे वह मौके पर ठीक करता है।
यहाँ दूसरा उदाहरण है, एक स्थिर छवि के रूप में: Claude Code एक ऐसा ऐप बना रहा है जो लोगों को फ़ोटो अपलोड करने और उसका विवरण देखने देता है। VibeGate देखता है कि फ़ाइल का नाम और अन्य फ़ाइल विवरण बाद में स्क्रीन पर दिखाए जाएँगे, और चेतावनी देता है कि इसका उपयोग पृष्ठ में हानिकारक कोड इंजेक्ट करने के लिए किया जा सकता है (इसे XSS कहा जाता है)। Claude Code कोड को समायोजित करता है ताकि जानकारी सुरक्षित रूप से दिखाई जाए।
दोनों मामलों में, कुछ भी बिना कारण अवरुद्ध नहीं हुआ, और किसी को भी समस्या को पकड़ने के लिए कोड को पंक्ति-दर-पंक्ति पढ़ने की आवश्यकता नहीं हुई। VibeGate ने इसे उसी क्षण पकड़ लिया जब फ़ाइल लिखी गई, और AI ने मौके पर ही इसे ठीक कर दिया।
AI असिस्टेंट को सुरक्षित कोड लिखने के दो तरीके हैं। एक तरीका है शुरू करने से पहले बातचीत में सुरक्षित कोडिंग के बारे में निर्देशों का एक बड़ा सेट लोड करना, उदाहरण के लिए SQL इंजेक्शन, XSS, पासवर्ड हैंडलिंग, फ़ाइल अपलोड, और बहुत कुछ को कवर करने वाली एक चेकलिस्ट। दूसरा तरीका वह है जो VibeGate करता है: फ़ाइल लिखे जाने पर स्वचालित रूप से कोड की जाँच करें, और केवल तभी बोलें जब वास्तव में कुछ गलत हो।
पहला दृष्टिकोण हर संदेश पर टोकन खर्च करता है, चाहे उनकी आवश्यकता हो या न हो। कई जोखिम श्रेणियों को कवर करने वाली एक विशिष्ट सुरक्षित कोडिंग चेकलिस्ट आसानी से कुछ हज़ार टोकन जोड़ सकती है। यदि कोई AI असिस्टेंट एक सत्र में 50 फ़ाइलें लिखता है, और वह चेकलिस्ट हर बार फिर से लोड होती है या संदर्भ में रखी जाती है, तो आप 100,000 से अधिक टोकन सलाह के लिए भुगतान कर सकते हैं जो अधिकांश समय उस फ़ाइल पर लागू नहीं होती जो अभी लिखी जा रही है। एक लॉगिन पेज और एक साधारण रंग स्थिरांक फ़ाइल को समान चेतावनियों की आवश्यकता नहीं है, लेकिन एक लोड की गई चेकलिस्ट पहले से उनमें अंतर नहीं बता सकती।
VibeGate इसे उलट देता है। यह चुप रहता है, और प्रत्येक फ़ाइल के लिए जिसमें कोई जोखिमपूर्ण पैटर्न नहीं है, कुछ भी अतिरिक्त खर्च नहीं करता। केवल जब यह कुछ पाता है, जैसे उपयोगकर्ता इनपुट का डेटाबेस क्वेरी में प्रवाह, तो यह उस एक मुद्दे के बारे में एक छोटा, विशिष्ट नोट जोड़ता है, जो आमतौर पर पूर्ण चेकलिस्ट के आकार का एक छोटा अंश होता है। तो फ़ाइल चाहे जो भी हो, एक निश्चित टोकन लागत का भुगतान करने के बजाय, आप केवल उन फ़ाइलों पर एक छोटी सी लागत का भुगतान करते हैं जिन्हें वास्तव में ध्यान देने की आवश्यकता है, और वह लागत पाई गई समस्या पर सटीक रूप से केंद्रित होती है, न कि सुरक्षा पर एक सामान्य व्याख्यान।
यह मार्गदर्शन को अधिक विश्वसनीय भी बनाता है। एक AI असिस्टेंट जिसे सौ पंक्तियों का कोड लिखते समय "सुरक्षा को ध्यान में रखने" के लिए कहा जाता है, आसानी से कई में से एक जोखिमपूर्ण पंक्ति को भूल सकता है। एक गेट थकता या विचलित नहीं होता: यह हर लिखाई की, हर बार, समान निश्चित नियमों का उपयोग करके जाँच करता है।
इसे एक बार इंस्टॉल करें — यह Semgrep को भी लाता है, जिस पर VibeGate निर्भर करता है:
pipx install git+https://github.com/theMiddleBlue/vibegate
फिर इसे उस प्रोजेक्ट में चालू करें जिसे आप सुरक्षित रखना चाहते हैं:
cd your-project
vibegate on # यहाँ चालू करें (बाद में Claude Code को पुनः लोड करें)
vibegate status # जाँचें कि क्या यह इस प्रोजेक्ट के लिए चालू है
vibegate off # यहाँ बंद करें
vibegate on उस प्रोजेक्ट के .claude/settings.local.json में Write|Edit|MultiEdit के लिए
एक PreToolUse हुक जोड़ता है। यह प्रति-प्रोजेक्ट स्कोप्ड है, इसलिए इसे एक रेपो में चालू करने
से दूसरे पर कोई प्रभाव नहीं पड़ता।
Claude Code हुक को vibegate run --host claude_code के रूप में चलाता है — कोई निरपेक्ष पथ
शामिल नहीं है, इसलिए यह फिर से इंस्टॉल करने या चीज़ों को स्थानांतरित करने पर भी काम करता रहता है।
vibegate status यह भी दिखाता है कि VibeGate ने वास्तव में इस प्रोजेक्ट में क्या पकड़ा है
— हर चेतावनी और रुकावट, फ़ाइल, पंक्ति और श्रेणी के साथ — ताकि आप समय के साथ इसकी गतिविधि
देख सकें, न कि केवल यह कि यह चालू है या नहीं:
$ vibegate status
█ █ █████ ████ █████ ████ ███ █████ █████
...
● VibeGate .claude/settings.local.json में सक्षम है
हाल की गतिविधि (दर्ज 2 में से अंतिम 2, सबसे हालिया पहले):
2026-07-02T17:35:48+00:00 ⛔ रोका गया server.py:3 EXEC_INPUT (FREE_TEXT)
2026-07-02T17:35:46+00:00 ⚠ चेतावनी app.py:2 HTTP_BODY (EMAIL)
यह लॉग प्रोजेक्ट रूट में .vibegate/activity.jsonl पर रहता है — इसे अपने .gitignore में जोड़ें,
यह स्थानीय डेवलपर की स्थिति है, कमिट करने योग्य नहीं।
VibeGate यह पता लगाता है कि यह किस होस्ट से बात कर रहा है, इस क्रम में: स्पष्ट --host <name>
फ़्लैग, फिर VIBEGATE_HOST पर्यावरण चर, फिर आने वाले पेलोड से स्वतः पता लगाना, और अंत में
claude_code पर गिरना।
यदि VibeGate किसी ऐसी चीज़ को चिह्नित करता है जिसे आपने जानबूझकर सुरक्षित माना है, तो उसी
पंक्ति पर vibegate-ignore टिप्पणी जोड़ें — यह किसी भी टिप्पणी वाक्यविन्यास (#, //, …)
के साथ काम करता है, क्योंकि VibeGate केवल टेक्स्ट ढूँढता है:
query = f"SELECT * FROM users WHERE id = {user_id}" # vibegate-ignore
केवल विशिष्ट श्रेणियों को दबाने के लिए (उस पंक्ति पर सब कुछ नहीं), उन्हें कोलन के बाद सूचीबद्ध करें (तकनीकी श्रेणी या अर्थ प्रकार से मेल खाता है, अल्पविराम से अलग, केस-असंवेदनशील):
query = f"SELECT * FROM users WHERE id = {user_id}" # vibegate-ignore: DB_QUERY
src/vibegate/
├── hook.py # प्रवेश बिंदु
├── cli.py # on/off/status कमांड + ASCII बैनर
├── activity_log.py # चेतावनियों/रुकावटों को .vibegate/activity.jsonl में सहेजता है
├── colors.py # साझा ANSI रंग कोड (रिपोर्ट + CLI बैनर)
├── core.py # होस्ट-अज्ञेय पाइपलाइन
├── models.py # InputEvent / ClassifiedFinding / AnalysisResult
├── semgrep_runner.py # Semgrep को एक उपप्रक्रिया के रूप में चलाता है (फेल-सेफ)
├── classifier.py # Semgrep नियम → श्रेणी, चर नाम → डेटा प्रकार मैप करता है
├── guidance.py # स्थैतिक जोखिम/सुधार लेख
├── formatter.py # परिणामों को टर्मिनल रिपोर्ट + होस्ट संदर्भ में बदलता है
├── adapters/ # base, claude_code, codex + एक छोटा रजिस्ट्री
└── rules/ # Semgrep नियम — प्रति भाषा एक फ़ाइल (Python, JS/TS,
# Go, Java, PHP, Ruby) और एक सामान्य प्लेसहोल्डर
पाइपलाइन स्वयं (core.py) कभी भी किसी विशिष्ट होस्ट से सीधे बात नहीं करती — सभी होस्ट-विशिष्ट
इनपुट/आउटपुट adapters/ में रहते हैं, इसलिए नया होस्ट जोड़ने के लिए विश्लेषण तर्क को छूने की
आवश्यकता नहीं है।
semgrep --validate --config src/vibegate/rules/ # जाँचें कि नियम मान्य हैं
pytest tests/ # इकाई + एकीकरण परीक्षण
बिना Claude Code के अंत-से-अंत कार्य देखने के लिए:
python3 -c 'import json; print(json.dumps({"tool_name":"Write","tool_input":{"file_path":"/tmp/t.py","new_content":"email = request.json.get(\"email\")"}}))' \
| python3 src/vibegate/hook.py --host claude_code
rules/<lang>-user-input.yaml जोड़ें, नए नियम ID को
classifier.RULE_TO_TECHNICAL में पंजीकृत करें, और फ़ाइल एक्सटेंशन को
core.EXT_TO_LANGUAGE में मैप करें।classifier.VARNAME_TO_SEMANTIC में एक कीवर्ड
और guidance.SEMANTIC_GUIDANCE में एक लेख जोड़ें।RULE_TO_TECHNICAL में एक प्रविष्टि, और guidance.TECHNICAL_RISKS में एक कार्ड जोड़ें।adapters/ के अंतर्गत एक एडेप्टर जोड़ें और इसे
adapters/__init__.py में पंजीकृत करें।codex एडेप्टर एक प्रारंभिक, सर्वोत्तम-प्रयास मैपिंग है। कुछ भी रोकने पर भरोसा करने से पहले
अपने Codex संस्करण के विरुद्ध इसके इवेंट अनुबंध की दोबारा जाँच करें।"requires login" लौटाता है, इसलिए
क्लासिफ़ायर फ़ाइल सामग्री से पंक्ति संख्याओं का उपयोग करके स्वयं स्निपेट का पुनर्निर्माण करता है।Edit/MultiEdit के लिए, claude_code एडेप्टर डिस्क से पूरी संपादन-पश्चात फ़ाइल का
पुनर्निर्माण करता है ताकि एक दूषित स्रोत और एक सिंक जो अलग-अलग संपादनों द्वारा पेश किए गए
हों, फिर भी जुड़े रहें — लेकिन केवल उन पंक्तियों पर निष्कर्ष रिपोर्ट किए जाते हैं जिन्हें
संपादन ने वास्तव में छुआ है। यदि कोई सिंक पहले से मौजूद है और एक बाद का संपादन केवल उस सिंक
तक पहुँचने वाला दूषित स्रोत जोड़ता है, तो वह नहीं पकड़ा जाएगा (सिंक की पंक्ति नए संपादन का
हिस्सा नहीं थी)। यह पुनर्निर्माण Claude-Code-विशिष्ट है; codex एडेप्टर अभी तक ऐसा नहीं
करता है।| जाँच | यह क्या पकड़ता है | परिणाम |
|---|
| कमांड इंजेक्शन | अस्वच्छित इनपुट शेल कमांड तक पहुँचता है | रोकता है |
| SQL इंजेक्शन | अस्वच्छित इनपुट डेटाबेस क्वेरी तक पहुँचता है | रोकता है |
| NoSQL इंजेक्शन | अनुरोध निकाय को सीधे डेटाबेस फ़िल्टर के रूप में उपयोग किया जाता है | रोकता है |
| टेम्पलेट इंजेक्शन (SSTI) | टेम्पलेट स्रोत ही, न कि केवल उसका डेटा, उपयोगकर्ता इनपुट से आता है | रोकता है |
| असुरक्षित विसीरीकरण | अविश्वसनीय डेटा एक असुरक्षित विसीरीकरण (pickle, unsafe YAML, ...) तक पहुँचता है | रोकता है |
| पथ ट्रैवर्सल | अस्वच्छित इनपुट फ़ाइल पढ़ने, लिखने या हटाने तक पहुँचता है | रोकता है |
| XXE | बाहरी इकाइयाँ सक्षम होने पर अविश्वसनीय XML पार्स किया जाता है | रोकता है |
| XSS | अस्वच्छित इनपुट को कच्चे HTML के रूप में प्रस्तुत किया जाता है | रोकता है |
| अनियंत्रित फ़ाइल अपलोड | अपलोड की गई फ़ाइल के नाम का उपयोग सहेज पथ बनाने के लिए किया जाता है | रोकता है |
| SSRF | सर्वर एक ऐसा URL लाता है जो हार्डकोडेड नहीं है | चेतावनी देता है |
| ओपन रिडायरेक्ट | एक रिडायरेक्ट लक्ष्य जो हार्डकोडेड नहीं है | चेतावनी देता है |
| मास असाइनमेंट | पूरे अनुरोध निकाय को मॉडल कंस्ट्रक्टर या अपडेट में पास किया जाता है | चेतावनी देता है |
| अनुरोध निकाय में संवेदनशील डेटा | ईमेल, पासवर्ड, टोकन आदि अनुरोध निकाय से पढ़े जाते हैं | चेतावनी देता है |
| URL/क्वेरी में संवेदनशील डेटा | ईमेल, पासवर्ड, टोकन आदि क्वेरी स्ट्रिंग से पढ़े जाते हैं | चेतावनी देता है |
| हेडर में संवेदनशील डेटा | ईमेल, पासवर्ड, टोकन आदि अनुरोध हेडर से पढ़े जाते हैं | चेतावनी देता है |
| उपयोगकर्ता इनपुट से फ़ाइल पथ | एक चर, न कि हार्डकोडेड स्ट्रिंग, फ़ाइल पथ के रूप में उपयोग किया जाता है | चेतावनी देता है |
| CLI तर्क | डेटा कमांड-लाइन तर्कों से आता है | चेतावनी देता है |
| मानक इनपुट | डेटा stdin से आता है | चेतावनी देता है |
| पर्यावरण चर | डेटा एक पर्यावरण चर से आता है | चेतावनी देता है |
| असुरक्षित GitHub Action | कोई वर्कफ़्लो कमिट SHA के बजाय परिवर्तनीय टैग (@v4) का उपयोग करता है | चेतावनी देता है |
असुरक्षित pull_request_target | कोई वर्कफ़्लो pull_request_target ट्रिगर का उपयोग करता है | चेतावनी देता है |
| क्रेडेंशियल लॉगिंग | पासवर्ड, API कुंजी या टोकन print/console.log/लॉगर को पास किया जाता है | चेतावनी देता है |
| हार्डकोडेड रहस्य | कोई चर जिसका नाम रहस्य जैसा है, उसे वास्तविक दिखने वाला शाब्दिक मान दिया जाता है | चेतावनी देता है |
| फ़ाइल सहेजी नहीं जाती — Claude Code को कारण बताया जाता है |