Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
safer-dependencies — AI कोडिंग सहायकों के लिए स्वचालित निर्भरता सुरक्षा परत जो npm, PyPI, RubyGems, Maven, Go और Rust पारिस्थितिकी तंत्रों में CVEs, typosquats, abandonment, version-age issues और hash integrity के लिए पैकेजों का ऑडिट करती है। | Kitploit
उपकरण/GitHubGitHub/robert-auger/safer-dependencies
भेद्यता स्कैनरDevSecOpsसीक्रेट डिटेक्शनआपूर्ति श्रृंखला सुरक्षा
GitHubrobert-auger/safer-dependencies

safer-dependencies

AI कोडिंग सहायकों के लिए स्वचालित निर्भरता सुरक्षा परत जो npm, PyPI, RubyGems, Maven, Go और Rust पारिस्थितिकी तंत्रों में CVEs, typosquats, abandonment, version-age issues और hash integrity के लिए पैकेजों का ऑडिट करती है।

रिपॉजिटरी देखें
30559 दिन पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

क्लॉड कोड के लिए सुरक्षित निर्भरताएँ

जब क्लॉड जैसे AI कोडिंग सहायक आपके प्रोजेक्ट में पैकेज जोड़ते हैं, तो वे अक्सर जो भी संस्करण सही लगता है उसे चुन लेते हैं — बिना यह जाँचे कि उसमें ज्ञात सुरक्षा कमज़ोरियाँ हैं या नहीं, पैकेज अभी भी सक्रिय रूप से बनाए रखा जा रहा है या नहीं, या नाम किसी दुर्भावनापूर्ण नकली से टाइपो की दूरी पर है या नहीं।

safer-dependencies क्लॉड कोड के लिए एक सुरक्षा परत है: यह क्लॉड और आपकी मैनिफ़ेस्ट फ़ाइलों के बीच बैठता है और अपनी सुरक्षा जाँच स्वचालित रूप से चलाता है: कमज़ोर इंस्टॉल चलने से पहले ही अस्वीकार कर दिए जाते हैं, और मैनिफ़ेस्ट में लिखा गया जोखिम भरा संस्करण लिखने के तुरंत बाद डिस्क पर सुधार दिया जाता है। यह जोखिम भरी निर्भरताओं का पता लगाता है और उन्हें ठीक करता है — CVEs, टाइपोस्क्वैट्स, परित्यक्त पैकेज, और संस्करण-आयु संबंधी समस्याएँ, साथ ही ब्रांड-नए रिलीज़ के लिए एक कूलडाउन अवधि — npm, PyPI, RubyGems, Maven, Go, Rust, और PHP (Composer) में। वास्तव में क्या कवर किया गया है और क्या नहीं, इसके लिए CAPABILITIES.md देखें।

नए हैं? GETTING-STARTED.md आपको लगभग पाँच मिनट में शून्य से कार्यशील इंस्टॉल तक ले जाता है।

सुरक्षा और गोपनीयता: SECURITY.md (कमज़ोरी प्रकटीकरण), PRIVACY.md (डेटा बहिर्गमन, कोई टेलीमेट्री नहीं), और CAPABILITIES.md (उपकरण किससे बचाव करता है और किससे नहीं) देखें।

लाइसेंस (स्रोत-उपलब्ध — OSI "ओपन सोर्स" नहीं): अपने स्वयं के उद्देश्यों के लिए उपयोग और संशोधन करने के लिए निःशुल्क, लाभ-उद्देश्य/कंपनी आंतरिक उपयोग और आपके द्वारा बेचे जाने वाले उत्पाद बनाने सहित। एक अलग सशुल्क लाइसेंस केवल सॉफ़्टवेयर का मुद्रीकरण करने के लिए आवश्यक है — इसे बेचना, इसे किसी बेचे जाने वाले उत्पाद या सेवा के अंदर भेजना, या इसकी कार्यक्षमता को तीसरे पक्षों को शुल्क पर प्रदान करना (होस्टेड/SaaS/API सहित)। पुनर्वितरण और व्युत्पन्न कार्यों को लाइसेंस बनाए रखना चाहिए और इस प्रोजेक्ट को श्रेय देना चाहिए। देखें (वाणिज्यिक प्रतिबंध के लिए धारा 4); वाणिज्यिक-लाइसेंस अनुरोध के माध्यम से।

स्वयं
LICENSE
github.com/robert-auger

सामग्री

  • आरंभ करना — लगभग पाँच मिनट में शून्य से इंस्टॉल तक
  • यह क्या करता है
  • इसे क्या ट्रिगर करता है
  • इस रेपो में क्या है
  • समर्थित इकोसिस्टम
  • इंस्टॉल
    • कॉन्फ़िगरेशन
    • कूलडाउन अवधि बदलना
  • चेतावनी स्तर
  • यह कैसे काम करता है
    • सामान्य मोड (मैनुअल)
    • इंटरसेप्ट मोड (स्वचालित)
    • प्री-इंस्टॉल मोड (बैश हुक)
    • पोस्ट-इंस्टॉल मोड (बैश हुक)
    • पोस्ट-एजेंट मोड (एजेंट हुक जोड़ी)
  • ऑडिट लॉग
  • आवश्यकताएँ
  • FAQ

आरंभ करना

GETTING-STARTED.md आपको लगभग पाँच मिनट में शून्य से कार्यशील इंस्टॉल तक ले जाता है — पूर्वापेक्षाएँ, इंटरैक्टिव इंस्टॉल, और सत्यापन। पूर्ण इंस्टॉल संदर्भ (वैश्विक/प्रोजेक्ट/मैनुअल इंस्टॉल, विंडोज़ विशिष्टताएँ, अनुमति अनुमतिसूची, अद्यतन, और अनइंस्टॉल) के लिए, INSTALLATION.md देखें।

दैनिक उपयोग: एक बार हुक इंस्टॉल हो जाने के बाद, चलाने के लिए कुछ भी नहीं है — safer-dependencies पृष्ठभूमि में स्वचालित रूप से काम करता है। जैसे ही क्लॉड पैकेज जोड़ता या इंस्टॉल करता है, यह जोखिम भरी निर्भरताओं को चिह्नित करता है और कमज़ोर संस्करणों को सुरक्षित संस्करण में अपग्रेड करता है — और ज्ञात-कमज़ोर इंस्टॉल को चलने से पहले ही रोक देता है — ताकि असुरक्षित पैकेज आपके पूछे बिना पकड़े और सुधारे जा सकें। आप इसे किसी भी समय सीधे भी लागू कर सकते हैं: "क्या [email protected] सुरक्षित है?", "safer-dependencies सेटअप जाँचें", या "safer-dependencies आँकड़े दिखाएँ"।

यह क्या करता है

जब क्लॉड आपके प्रोजेक्ट में एक पैकेज जोड़ने वाला होता है, तो safer-dependencies हस्तक्षेप करता है और 5 जाँचें चलाता है:

  1. उत्पत्ति -- आधिकारिक रजिस्ट्री, टाइपोस्क्वाट पहचान (npm/PyPI/RubyGems/Maven/crates.io), पैकेज आयु
  2. संस्करण आयु -- 7+ दिन पहले प्रकाशित नवीनतम स्थिर संस्करण चुनता है (कूलडाउन विंडो)
  3. कमज़ोरी स्कैन -- OSV API, उपलब्ध होने पर इकोसिस्टम-मूल उपकरणों (npm audit, pip-audit, bundle audit) के साथ
  4. हैश-पिन अखंडता -- PyPI requirements.txt पंक्तियों के लिए --hash=sha256:... पिन के साथ, घोषित हैश को PyPI के प्रकाशित हैश के विरुद्ध सत्यापित किया जाता है; बेमेल एक WARNING उत्सर्जित करता है
  5. परित्यक्त और पुराने पैकेज -- ज्ञात-परित्यक्त पैकेज (जैसे paperclip, request, pycrypto, github.com/dgrijalva/jwt-go) तुरंत सुझाए गए प्रतिस्थापन के साथ हार्ड-ब्लॉक किए जाते हैं; 2+ वर्षों में कोई स्थिर रिलीज़ न होने वाले पैकेजों को एक सलाहकार STALE: चेतावनी मिलती है। हार्ड-ब्लॉक किए गए पैकेज मैनिफ़ेस्ट से हटा दिए जाते हैं और क्लॉड पूछेगा कि आगे कैसे बढ़ना है; केवल-पुराने पैकेज अपनी जगह पर छोड़ दिए जाते हैं।

यदि समस्याएँ पाई जाती हैं, तो क्लॉड चेतावनियाँ उत्सर्जित करता है और सुरक्षित संस्करण पर वापस जा सकता है। सभी जाँचें ~/.claude/safer-dependencies-audit-YYYY-MM.log में लॉग की जाती हैं (प्रति कैलेंडर माह एक फ़ाइल)।

इसे क्या ट्रिगर करता है

स्किल स्वचालित रूप से तब सक्रिय होती है जब क्लॉड:

मैनिफ़ेस्ट / इंस्टॉल संचालन

  • package.json, requirements.txt, Gemfile, pom.xml, build.gradle, Cargo.toml, go.mod, या किसी अन्य समर्थित मैनिफ़ेस्ट में एक पैकेज जोड़ता या अद्यतन करता है
  • मैनिफ़ेस्ट में पहले से घोषित न किए गए पैकेज के लिए import, require, या use लिखता है
  • एक लॉक फ़ाइल उत्पन्न या अद्यतन करता है (केवल नई/बदली हुई प्रविष्टियों की जाँच करता है)
  • बैश के माध्यम से पैकेज-मैनेजर इंस्टॉल चलाता है (npm install, bundle install, poetry install, uv sync, go mod tidy, आदि) — प्री-इंस्टॉल कमांड तर्कों का ऑडिट करता है, पोस्ट-इंस्टॉल परिणामी लॉकफ़ाइल का ऑडिट करता है
  • एक Dockerfile या CI वर्कफ़्लो (.github/workflows/*.yml, आदि) लिखता है जिसमें पिन किए गए पैकेज-मैनेजर इंस्टॉल चरण एम्बेडेड होते हैं

चयन और अनुशंसा प्रश्न

  • लाइब्रेरी/फ्रेमवर्क तुलना: "क्या मुझे axios या node-fetch उपयोग करना चाहिए?", "moment बनाम dayjs?", "X या Y में से कौन बेहतर है?"
  • अनुशंसा अनुरोध: "Python के लिए एक अच्छा HTTP क्लाइंट क्या है?", "Go के लिए एक लॉगिंग लाइब्रेरी की अनुशंसा करें", "Node में CSV कौन सा पैकेज संभालता है?"
  • संस्करण चयन: "मुझे Django का कौन सा संस्करण उपयोग करना चाहिए?", "नवीनतम स्थिर Flask?"

उपयोग-इरादे की अभिव्यक्तियाँ (जोड़ने से पहले)

  • "मैं इसके लिए FastAPI उपयोग करना चाहता हूँ", "मैं Celery जोड़ने के बारे में सोच रहा हूँ", "हम Prisma को ORM के रूप में देख रहे हैं", "चलो Tailwind उपयोग करें"

पैकेज स्वास्थ्य और विश्वास प्रश्न

  • "क्या moment.js अभी भी बनाए रखा जा रहा है?", "क्या यह gem अभी भी सक्रिय है?", "क्या X परित्यक्त है?", "क्या X EOL है?", "क्या मैं इस पैकेज पर भरोसा कर सकता हूँ?", "faker को आखिरी बार कब अपडेट किया गया था?"

स्कैफोल्डिंग कमांड

  • npx create-react-app, npm create vite@latest, django-admin startproject, rails new, cargo new + cargo add, "एक नया FastAPI प्रोजेक्ट बूटस्ट्रैप करें"

अंतर्निहित पैकेज जोड़ (फीचर अनुरोध जो एक नई निर्भरता का संकेत देते हैं)

  • "ऐप में Redis कैशिंग जोड़ें", "Postgres से कनेक्ट करें", "JWT प्रमाणीकरण जोड़ें", "ईमेल भेजने के लिए कोड लिखें" — तब सक्रिय होता है जब उस क्षमता के लिए कोई पैकेज पहले से मैनिफ़ेस्ट में नहीं होता

माइग्रेशन और पोर्टिंग

  • "requests से httpx में माइग्रेट करें", "CRA से Vite में जाएँ", "moment से date-fns में पोर्ट करें" — आने वाले पैकेज का ऑडिट करता है

यह निम्नलिखित के लिए सक्रिय नहीं होता:

  • मानक लाइब्रेरी इम्पोर्ट (os, fs, java.util.*, आदि)
  • पहले से घोषित निर्भरताएँ जिन्हें बदला नहीं जा रहा है
  • किसी पैकेज के आंतरिक कार्य की शैक्षणिक चर्चा ("React के reconciler की व्याख्या करें", "webpack का मॉड्यूल रिज़ॉल्यूशन कैसे काम करता है?") — तुलना और चयन प्रश्न अभी भी सक्रिय होते हैं
  • OS-स्तरीय ऐप्स, रनटाइम, या IDE एक्सटेंशन इंस्टॉल करना (Python स्वयं, Docker, Homebrew, VS Code एक्सटेंशन)

इस रेपो में क्या है

यह एक स्किल + हुक बंडल है, एकल स्किल फ़ाइल नहीं। एक पूर्ण इंस्टॉल इन भागों को तैनात करता है:

फ़ाइलभूमिका
skills/safer-dependencies.mdस्किल (इंस्टॉल होने पर SKILL.md)। ऑडिट प्रक्रियाओं का वर्णन करता है और इंस्टॉलेशन/आँकड़ों के लिए प्रबंधन मोड शामिल करता है।
skills/safer-dependencies-shim.shPostToolUse:Write/Edit हुक — मैनिफ़ेस्ट + लॉकफ़ाइल लेखन का ऑडिट करता है और कमज़ोर संस्करणों को स्थान पर स्वतः सुधारता है (इंटरसेप्ट मोड)।
skills/safer-dependencies-pretooluse-bash.shPreToolUse:Bash हुक — पैकेज-मैनेजर इंस्टॉल कमांड का प्री-फ़्लाइट OSV ऑडिट; इंस्टॉल चलने से पहले कमज़ोर कंक्रीट पिन को अस्वीकार करता है (प्री-इंस्टॉल मोड)।
skills/safer-dependencies-posttooluse-bash.shPostToolUse:Bash हुक — बैश कमांड के बाद पोस्ट-फ़्लाइट ऑडिट; नई लिखी गई लॉकफ़ाइलों, sed/jq/स्क्रिप्ट के माध्यम से संपादित मैनिफ़ेस्ट, और सादे pip install के हल किए गए वातावरण में ट्रांज़िटिव CVEs को पकड़ता है (पोस्ट-इंस्टॉल मोड)।
skills/safer-dependencies-pretooluse-agent.sh + skills/safer-dependencies-posttooluse-agent.shPreToolUse:Agent + PostToolUse:Agent हुक जोड़ी — सबएजेंट कवरेज अंतर को बंद करती है। मोड 2–4 केवल रूट-सत्र टूल कॉल के लिए सक्रिय होते हैं, इसलिए सबएजेंट द्वारा लिखा गया कोई भी मैनिफ़ेस्ट उन्हें बायपास करता है। पोस्ट-एजेंट प्रत्येक Agent टूल-कॉल के लौटने के बाद सबएजेंट द्वारा लिखी गई किसी भी चीज़ का ऑडिट करता है (पोस्ट-एजेंट मोड)।
skills/scripts/साझा Python लाइब्रेरी (safedep/) और स्टैंडअलोन रिज़ॉल्वर स्क्रिप्ट जो सभी हुक द्वारा उपयोग की जाती हैं।
skills/scripts/safer_dependencies_manager.pyइंटरैक्टिव इंस्टॉलेशन, उपयोग आँकड़े, और सेटअप सत्यापन के लिए प्रबंधन मॉड्यूल।

अकेले स्किल फ़ाइल पर्याप्त नहीं है — हुक के बिना, स्वचालित आह्वान क्लॉड के स्किल तक पहुँचने के निर्णय पर निर्भर करता है। पूर्ण कवरेज के लिए सभी पाँच भाग इंस्टॉल करें; कई स्किल और स्लैश कमांड आंतरिक रूप से सबएजेंट भेजते हैं, इसलिए पोस्ट-एजेंट जोड़ी मायने रखती है भले ही आप कभी स्पष्ट रूप से एक न बनाएँ। (अकेले स्किल कवरेज की गारंटी क्यों नहीं दे सकता, इसके लिए FAQ.md देखें।)

समर्थित इकोसिस्टम

इकोसिस्टममैनिफ़ेस्टलॉक फ़ाइल
npmpackage.jsonpackage-lock.json, yarn.lock, pnpm-lock.yaml
PyPIrequirements.txt, pyproject.toml, Pipfile, setup.py, setup.cfgPipfile.lock, poetry.lock, uv.lock
RubyGemsGemfile, *.gemspecGemfile.lock
Mavenpom.xml, build.gradle, libs.versions.toml--
Gogo.modgo.sum
RustCargo.tomlCargo.lock
PHP (Composer)composer.jsoncomposer.lock

इंस्टॉल

प्रोजेक्ट में नए हैं? GETTING-STARTED.md से शुरू करें। संक्षिप्त संस्करण:```bash git clone https://github.com/robert-auger/safer-dependencies /tmp/safer-dependencies python3 /tmp/safer-dependencies/skills/scripts/safer_dependencies_manager.py interactive_install

root@kitploit:~
इंस्टॉलर स्कोप (ग्लोबल बनाम प्रोजेक्ट) और कौन से हुक सक्षम करने हैं, इसके बारे में पूछता है, फिर आपके लिए `settings.json` लिखता है — दोनों हुक एंट्री **और** अनुमतियाँ अनुमति-सूची, जो स्किल के चेक कमांड को हर ऑडिट पर अनुमोदन प्रॉम्प्ट के बिना चलाने देती है।

इंस्टॉल से जुड़ी बाकी सब कुछ **[INSTALLATION.md](https://github.com/robert-auger/safer-dependencies/blob/main/INSTALLATION.md)** में रहती है, जो इंस्टॉल तंत्र का एकमात्र संदर्भ है: मैन्युअल फ़ाइल-दर-फ़ाइल इंस्टॉल (ग्लोबल और प्रोजेक्ट-स्तर), Windows विशेषताएँ, Post-Agent हुक, [अनुमतियाँ अनुमति-सूची](https://github.com/robert-auger/safer-dependencies/blob/main/INSTALLATION.md#permissions-allowlist), सेटअप सत्यापन, अपडेट, रिलीज़ टैग पर पिन करना, और अनइंस्टॉल करना।

इंस्टॉल के बाद, दिन-प्रतिदिन का प्रबंधन Claude को प्राकृतिक भाषा में किया जाता है — `install safer-dependencies` (फिर से चलाएँ / हुक बदलें), `show safer-dependencies stats`, `check safer-dependencies setup` — या `/safer-dependencies` मेनू के माध्यम से। अपडेट भी सत्र के भीतर होता है: `/safer-dependencies update` नवीनतम रिलीज़ लागू करता है (`update --check` ड्राई-रन के लिए, `update --rollback` पूर्ववत करने के लिए); विश्वास मॉडल के लिए [INSTALLATION.md](https://github.com/robert-auger/safer-dependencies/blob/main/INSTALLATION.md#in-session-self-updater-safer-dependencies-update) देखें।

> **प्लेटफ़ॉर्म नोट:** macOS, Linux, और Windows समर्थित हैं। Windows को Git for Windows (जो bash प्रदान करता है) और `PATH` पर Python 3 की आवश्यकता होती है — WSL की कोई आवश्यकता नहीं। अब तक के व्यावहारिक परीक्षण **macOS और Windows** पर केंद्रित रहे हैं; Linux समर्थन स्वचालित CI मैट्रिक्स द्वारा परखा जाता है।

### कॉन्फ़िगरेशन

इंस्टॉल के बाद दो चीज़ें कॉन्फ़िगर करने योग्य हैं:

- **अनुमतियाँ अनुमति-सूची** — स्किल के केवल-पढ़ने वाले चेक कमांड (सटीक-रूप `npm audit` / `bundle audit` नियम और स्किल के अपने रिज़ॉल्वर स्क्रिप्ट) को पहले से अनुमोदित करती है, ताकि ऑडिट हर बार अनुमोदन प्रॉम्प्ट के बिना चलें; `curl` कभी पहले से अनुमोदित नहीं होता, और `npm view` / `pip-audit` Convenience प्रोफ़ाइल के माध्यम से ऑप्ट-इन होते हैं। इंटरैक्टिव इंस्टॉलर आपके लिए मुख्य एंट्री लिखता है; मैन्युअल इंस्टॉल पूरा ब्लॉक हाथ से जोड़ते हैं। पूरा ब्लॉक और तर्क: [INSTALLATION.md → अनुमतियाँ अनुमति-सूची](https://github.com/robert-auger/safer-dependencies/blob/main/INSTALLATION.md#permissions-allowlist)।
- **सुरक्षा नीति** — रिलीज़-आयु कूलडाउन विंडो/मोड और हर चेक प्रकार के लिए एक प्रति-चेक `off`/`warn`/`block` स्तर, जिसे `/safer-dependencies config` से संपादित किया जाता है और `~/.config/safer-dependencies/config.toml` में संग्रहीत किया जाता है। स्कीमा और स्तर शब्दार्थ: [`skills/references/configuration.md`](https://github.com/robert-auger/safer-dependencies/blob/main/skills/references/configuration.md)।

### कूलडाउन अवधि बदलना

कूलडाउन (जिसे कॉन्फ़िग में **cooloff** कहा जाता है) वह न्यूनतम आयु है जो एक रिलीज़ को स्किल द्वारा चुने जाने से पहले प्राप्त करनी चाहिए — डिफ़ॉल्ट **7 दिन**। इसे बदलने के लिए, Claude से पूछें या कॉन्फ़िग कमांड सीधे चलाएँ:```
/safer-dependencies config set cooloff.days 14     # require releases to be 14+ days old
/safer-dependencies config set cooloff.mode block  # gate strength: off | warn | block (default: warn)
/safer-dependencies config unset cooloff.days      # revert to the 7-day default
/safer-dependencies config                         # show effective values and where each comes from

वही क्रियाएँ Claude सत्र के बाहर भी काम करती हैं:```bash python3 skills/scripts/safer_dependencies_manager.py config set cooloff.days 14

root@kitploit:~
यह सेटिंग `~/.config/safer-dependencies/config.toml` (अनुभाग `[cooloff]`) में बनी रहती है; `SAFE_DEP_COOLOFF_DAYS` और `SAFE_DEP_COOLOFF_MODE` पर्यावरण चर प्रति-सत्र फ़ाइल को ओवरराइड करते हैं। तीन व्यवहार जानने योग्य हैं: `mode = "off"` संस्करण चयन से आयु फ़िल्टर को पूरी तरह हटा देता है; CVE-संचालित पुनर्लेखन गेट को बायपास करता है, इसलिए सुरक्षा सुधार को कभी भी बहुत नया होने के कारण रोका नहीं जाता; और गेट npm, PyPI, RubyGems, और crates.io को कवर करता है — Maven और Go को जानबूझकर गेट नहीं किया गया है। पूर्ण शब्दार्थ: [`skills/references/configuration.md`](https://github.com/robert-auger/safer-dependencies/blob/main/skills/references/configuration.md)।

## चेतावनी स्तर

| स्तर | अर्थ | उदाहरण |
|-------|---------|---------|
| CRITICAL | रोकें और उपयोगकर्ता से पूछें | टाइपोस्क्वाट का पता चला, छेड़छाड़ किया गया हस्ताक्षर |
| HIGH | चेतावनी दें और आगे बढ़ें | ज्ञात CVE, पैकेज 30 दिन से कम पुराना |
| MEDIUM | चेतावनी दें और आगे बढ़ें | संस्करण 7 दिन से कम पुराना, हस्ताक्षर गायब |
| LOW | चेतावनी दें और आगे बढ़ें | अहस्ताक्षरित Ruby gem (अपेक्षित) |

## यह कैसे काम करता है

यह स्किल पाँच मोड में संचालित होती है (नीचे सारांशित; सबसे गहरा डिज़ाइन तर्क `skills/safer-dependencies.md` में है):

### सामान्य मोड (मैनुअल)

जब Claude एक `import` लिखने, मैनिफ़ेस्ट में पैकेज जोड़ने, या लॉक फ़ाइल अपडेट करने वाला होता है, तो स्किल आपके सत्र में इनलाइन चलती है:

1. स्थिर संस्करणों के लिए पैकेज रजिस्ट्री से पूछताछ करती है
2. 7+ दिन पहले प्रकाशित नवीनतम संस्करण को स्वतः चुनती है (निर्धारक — कोई LLM निर्णय नहीं)
3. इकोसिस्टम टूल्स और OSV API के माध्यम से ज्ञात कमजोरियों की जाँच करती है
4. जहाँ उपलब्ध हो, पैकेज हस्ताक्षर सत्यापित करती है
5. समस्याएँ मिलने पर चेतावनियाँ जारी करती है, सटीक संस्करण पिन करती है
6. परिणाम को ऑडिट ट्रेल में लॉग करती है

संस्करण चयन स्किल के साथ बंडल किए गए स्टैंडअलोन Python स्क्रिप्ट द्वारा संभाला जाता है, न कि नियमों की व्याख्या करने वाले LLM द्वारा। कमांड `SELECTED: <version>` आउटपुट करता है और Claude उस संस्करण का सटीक उपयोग करता है।

### इंटरसेप्ट मोड (स्वचालित)

स्वचालित, पारदर्शी पैकेज सत्यापन सक्षम करने के लिए `.claude/settings.json` को `PostToolUse` हुक के साथ कॉन्फ़िगर करें:

1. Claude मूल रूप से अनुरोधित संस्करण के साथ एक मैनिफ़ेस्ट फ़ाइल (जैसे `package.json`) लिखता है — फ़ाइल डिस्क पर आ जाती है
2. `PostToolUse` हुक लेखन पूर्ण होते ही तुरंत सक्रिय होता है और `safer-dependencies-shim.sh` को आमंत्रित करता है
3. शिम फ़ाइल पढ़ता है, घोषित पैकेजों को पार्स करता है, और सभी सुरक्षा जाँचें (टाइपोस्क्वाट, परित्यक्त, CVE, स्टेलनेस, हैश-पिन) चलाता है
4. यदि सुधार आवश्यक हैं, तो शिम सुरक्षित संस्करणों के साथ **मैनिफ़ेस्ट को स्थान पर पुनर्लेखित करता है** (या उन प्रविष्टियों को हटा देता है जिनका कोई सुरक्षित संस्करण नहीं है)
5. शिम stdout पर `hookSpecificOutput.additionalContext` के माध्यम से सिग्नल (`UPDATED:`, `BLOCKED:`, `WARNING:`, `STALE:`, `MAJOR-UPDATE-CONFIRM:`, `REFACTOR-REQUIRED:`, `REGRESSION:`, `TYPOSQUAT-CONFIRM:`, `VERIFY:`, `CLEAN:`) उत्सर्जित करता है। `REGRESSION:` एक `MAJOR-UPDATE-CONFIRM:` से पहले आता है जब ऑडिट लॉग दिखाता है कि समान (फ़ाइल, पैकेज) को पहले उसी सुरक्षित लक्ष्य पर सुधारा गया था — अर्थात, एक सबएजेंट या पुरानी योजना ने ज्ञात-कमजोर संस्करण को पुनः प्रस्तुत किया है, और ऑर्केस्ट्रेटर को प्रमुख बंप को फिर से तय करने के बजाय पहले-अनुमोदित संस्करण को पुनर्स्थापित करना चाहिए।
6. Claude उन सिग्नलों को सिस्टम-रिमाइंडर के रूप में प्राप्त करता है और अनुवर्ती कार्य करता है (प्रभावित imports खोजें, परीक्षण चलाएँ, ब्रेकिंग परिवर्तनों के लिए रीफैक्टर करें)

**डिज़ाइन नोट — Shape C (पोस्ट-राइट सुधारात्मक):** हुक लेखन को ब्लॉक नहीं करता। प्रत्येक कमजोर संस्करण पहले डिस्क पर आता है और फिर उसी टूल-उपयोग चक्र के भीतर स्वतः सुधारा जाता है। यह `PreToolUse` ब्लॉकिंग डिज़ाइन पर एक जानबूझकर चयन है — ट्रेडऑफ़ के लिए [FAQ.md](https://github.com/robert-auger/safer-dependencies/blob/main/FAQ.md#why-posttooluse-post-write-corrective-instead-of-pretooluse-pre-write-blocking-for-the-manifest-path) देखें।

**उदाहरण सिग्नल:**```
UPDATED: aiohttp 3.8.5 → 3.9.0 (HIGH: 33 CVEs fixed)

मूल एजेंट इन संकेतों का उपयोग प्रभावित कोड की पहचान करने और आवश्यकतानुसार रीफैक्टर करने के लिए करता है।

प्री-इंस्टॉल मोड (Bash हुक)

पैकेज-मैनेजर इंस्टॉल कमांड की प्री-फ्लाइट ऑडिटिंग सक्षम करने के लिए .claude/settings.json को PreToolUse:Bash हुक के साथ कॉन्फ़िगर करें। यह इंटरसेप्ट मोड का पूरक है (इसे प्रतिस्थापित नहीं करता) — साथ मिलकर ये एक स्तरित सुरक्षा बनाते हैं।

  1. Claude एक Bash टूल कॉल का प्रयास करता है (जैसे npm install [email protected])
  2. कॉल चलने से पहले PreToolUse हुक सक्रिय होता है और safer-dependencies-pretooluse-bash.sh को आमंत्रित करता है
  3. एक शुद्ध-bash प्रारंभिक फ़िल्टर गैर-PM कमांड को ~115 ms में शॉर्ट-सर्किट करता है (कोई Python इनवोकेशन नहीं), इसलिए git status / ls / npm test हॉट पाथ पर नगण्य लागत वहन करते हैं
  4. मान्यता प्राप्त पैकेज-मैनेजर इंस्टॉल (npm/pnpm/yarn install/i/add) के लिए, हेल्पर shlex के माध्यम से टोकनाइज़ करता है, प्रत्येक pkg@version तर्क निकालता है, और OSV पर POST करता है
  5. कोई भी असुरक्षित कंक्रीट पिन → हुक permissionDecision: "deny" लौटाता है, जिसमें प्रति-फाइंडिंग GHSA-id + CVSS + सारांश, साथ ही safer-dependencies स्किल को आमंत्रित करने का संकेत होता है
  6. इंस्टॉल कभी नहीं चलता — कोई नेटवर्क फ़ेच नहीं, कोई postinstall स्क्रिप्ट नहीं

यह इंटरसेप्ट मोड के अतिरिक्त क्यों मौजूद है: पोस्ट-राइट शिम Bash के प्रति अंधा है। npm install [email protected] किसी भी ऑडिट सक्रिय होने से पहले पूर्ण रूप से चलता है (और postinstall स्क्रिप्ट निष्पादित होती हैं); npm install -g typosquat-pkg कोई प्रोजेक्ट मैनिफेस्ट ही नहीं लिखता। प्री-इंस्टॉल मोड उन अंतरालों को संरचनात्मक रूप से बंद करता है।

प्री-इंस्टॉल मोड केवल वही देखता है जो उपयोगकर्ता ने टाइप किया है (कमांड लाइन पर pkg@version तर्क)। यह उस ट्रांज़िटिव ट्री को नहीं देख सकता जिसे रिज़ॉल्वर वास्तव में इंस्टॉल करेगा। पोस्ट-इंस्टॉल मोड (नीचे) इंस्टॉल पूर्ण होने पर लॉकफ़ाइल की ऑडिट करता है — दोनों मोड पूरक हैं, अनावश्यक नहीं।

दायरा: यहाँ कवर किए गए पैकेज-मैनेजर CLI पाँच इकोसिस्टम में फैले हैं (npm/pnpm/yarn/bun/npx/deno, pip/pip3/pipx/pipenv/uv/uvx/poetry, gem/bundle, go, cargo), साथ ही इंटरसेप्ट मोड के माध्यम से Maven (Maven निर्भरताएँ आमतौर पर pom.xml/build.gradle में घोषित की जाती हैं, CLI वर्ब के माध्यम से नहीं जोड़ी जातीं)।

ज्ञात अंतराल: Maven CLI mvn dependency:get -Dartifact=group:art:version और mvn dependency:copy के माध्यम से सीधे डाउनलोड का समर्थन करता है। यह हुक अभी तक उन इनवोकेशन को पहचानता नहीं है। यदि आप इन्हें नियमित रूप से उपयोग करते हैं, तो मौजूदा पोस्ट-राइट शिम अभी भी आपके मैनिफेस्ट में जो कुछ भी आता है उसे पकड़ लेता है, लेकिन प्री-फ़ेच सुरक्षा केवल ऊपर सूचीबद्ध इकोसिस्टम पर लागू होती है। फॉलो-अप के रूप में ट्रैक किया गया।

प्रति-इकोसिस्टम मान्यता प्राप्त सिंटैक्स:

PMVerbsकंक्रीट-पिन सिंटैक्स
npm, pnpm, yarn, buninstall, i, add (साथ ही yarn/pnpm dlx, bun x, yarn create)[email protected], @scope/[email protected]
npx(वर्बलेस — पैकेज पहला पोज़िशनल है)[email protected]
denoadd, installnpm:[email protected] (npm-उपसर्गित स्पेक्स)
pip, pip3, pipx, pipenv, uv, uvx, poetryinstall (pip/pip3/pipx/pipenv) / add (uv/poetry) / वर्बलेस (uvx)pkg==1.2.3 (एक्स्ट्रा pkg[extra]==X भी संभाले जाते हैं)
gem, bundleinstall (gem) / add-v 1.2.3, --version 1.2.3, --version=1.2.3 (अलग फ़्लैग)
goget, install[email protected] (Go मॉड्यूल के अनुसार v उपसर्ग शामिल होना चाहिए)
cargoadd, install[email protected]

रेंज पिन (npm ^4.17, pip >=, poetry ^/~, Go @latest) और अनिर्दिष्ट संस्करण इंस्टॉल के बाद इंटरसेप्ट मोड में पास हो जाते हैं — पोस्ट-राइट शिम जो भी रिज़ॉल्वर चुनता है उसकी ऑडिट करता है। सुरक्षित संस्करण में ऑटो-रीराइट फॉलो-अप के रूप में कतारबद्ध है।

विफलता मोड: फेल-ओपन। कोई भी त्रुटि (Python अनुपलब्ध, नेटवर्क ब्लिप, गलत इनपुट) बिना आउटपुट के 0 के साथ बाहर निकलती है, जिससे bash आगे बढ़ने देता है। इंटरसेप्ट मोड इंस्टॉल के बाद भी चलता है, इसलिए विफल प्री-फ्लाइट मौजूदा सुरक्षा में सुचारू रूप से डिग्रेड हो जाती है।

उदाहरण अस्वीकृति:``` safer-dependencies pre-flight audit blocked this install. Vulnerable pinned version(s) detected:

  • [email protected] → GHSA-35jh-r3h4-6jhm (CVSS:7.4): Command Injection in lodash Re-run with a patched version, or invoke the safer-dependencies skill for a recommended pin.
root@kitploit:~
### पोस्ट-इंस्टॉल मोड (बैश हुक)

Bash कमांड के बाद पोस्ट-फ्लाइट ऑडिटिंग सक्षम करने के लिए `.claude/settings.json` में `PostToolUse:Bash` हुक कॉन्फ़िगर करें। यह कमांड के `cwd` के विरुद्ध **तीन स्वतंत्र स्कैन** चलाता है, जिनमें से प्रत्येक उस अंतर को भरता है जिसे अन्य हुक संबोधित नहीं कर सकते:

- **स्कैन A — लॉकफ़ाइलें।** एक सफल इंस्टॉल वर्ब (`npm install`, `bundle install`, `poetry install`, `uv sync`, `go mod tidy`, आदि) के बाद, हाल ही में संशोधित लॉकफ़ाइलों (`package-lock.json`, `Gemfile.lock`, `poetry.lock`, `uv.lock`, `go.sum`, `yarn.lock`, `pnpm-lock.yaml`, `Pipfile.lock`) का ऑडिट करता है। यह **ट्रांज़िटिव-CVE अंतर** को बंद करता है जिसे प्री-इंस्टॉल नहीं देख सकता: उपयोगकर्ता ने `pkg@version` टाइप किया, लेकिन रिज़ॉल्वर ने दर्जनों ट्रांज़िटिव पैकेज खींच लिए होंगे जिनका नाम किसी ने नहीं लिया।
- **स्कैन B — मैनिफ़ेस्ट।** किसी भी Bash कमांड के बाद जो रीड-ओनली डेनीलिस्ट (`ls`, `cat`, `git status`, …) पर *नहीं* है, हाल ही में संशोधित मैनिफ़ेस्ट का ऑडिट करता है। यह `sed -i`, `jq`, या स्क्रिप्ट के माध्यम से किए गए मैनिफ़ेस्ट संपादनों के लिए **एकमात्र** फ़ॉलबैक है — वे `Write`/`Edit` टूल को बायपास करते हैं जिस पर इंटरसेप्ट मोड हुक करता है।
- **स्कैन C — हल किया गया वातावरण।** सादा `pip install` / `pip install -r requirements.txt` कोई लॉकफ़ाइल नहीं लिखता, इसलिए स्कैन A हल किए गए ट्री को कभी नहीं देखता। pip-आकार के इंस्टॉल के बाद, स्कैन C उसी pip को रीड-ओनली `list --format=json` के साथ फिर से लागू करता है और पूरे हल किए गए वातावरण (डायरेक्ट + ट्रांज़िटिव) की OSV-जाँच करता है।

स्कैन कैसे चलता है:

1. Claude एक Bash टूल कॉल चलाता है
2. `PostToolUse` हुक कमांड पूरा होने के *बाद* फायर होता है और `safer-dependencies-posttooluse-bash.sh` को लागू करता है
3. एक शुद्ध-बैश प्रारंभिक फ़िल्टर उन कमांडों को शॉर्ट-सर्किट करता है जो ~115 ms में किसी स्कैन गेट से मेल नहीं खाते (प्री-इंस्टॉल के समान फास्ट-पाथ कन्वेंशन), इसलिए `ls` / `git` / `cat` नगण्य लागत वहन करते हैं
4. प्रत्येक स्कैन `find -maxdepth 5` के साथ `cwd` को ट्रैवर्स करता है (मोनोरेपो लेआउट को कवर करता है; `node_modules`, `.git`, `.venv`, `venv` को बाहर करता है) पिछले 60 s के भीतर संशोधित फ़ाइलों के लिए — `SAFE_DEP_POSTINSTALL_MTIME_WINDOW` के माध्यम से ओवरराइड करें
5. प्रत्येक हाल ही में संशोधित फ़ाइल (स्कैन A/B) के लिए, हुक एक सिंथेटिक `PostToolUse:Write` पेलोड बनाता है और इसे मौजूदा शिम में पाइप करता है — शिम के लॉकफ़ाइल और मैनिफ़ेस्ट ऑडिटर अपरिवर्तित चलते हैं, कोई डुप्लिकेट लॉजिक नहीं
6. प्रति-फ़ाइल सिग्नल संयोजित होते हैं और पैरेंट एजेंट को एक `hookSpecificOutput` JSON के रूप में उत्सर्जित होते हैं

**यह क्या पकड़ता है जो प्री-इंस्टॉल नहीं:** ट्रांज़िटिव कमजोरियाँ। एक साफ-सुथरा दिखने वाला `bundle install` `sinatra` के ट्रांज़िटिव के रूप में `[email protected]` (CVE-2025-27610) खींच सकता है — उपयोगकर्ता ने कभी `rack` नहीं टाइप किया, इसलिए प्री-इंस्टॉल इसे नहीं देख सकता, लेकिन पोस्ट-इंस्टॉल हल किए गए `Gemfile.lock` को पढ़ता है और CVE की रिपोर्ट करता है।

**दायरा:** स्कैन A हल किए गए संस्करणों को फिर से नहीं लिखता — ऑटो-करेक्ट अनुबंध केवल उन मैनिफ़ेस्ट पर लागू होता है जिन्हें Claude ने सीधे लिखा था। ट्रांज़िटिव CVE के लिए, फिक्स आमतौर पर "उस डायरेक्ट डिप को अपडेट करें जो ट्रांज़िटिव का मालिक है" होता है, जिसके लिए मानवीय निर्णय की आवश्यकता होती है। स्कैन B *वास्तव में* ऑटो-करेक्ट करता है, क्योंकि यह इंटरसेप्ट मोड के समान शिम पथ के माध्यम से मैनिफ़ेस्ट का ऑडिट करता है। स्कैन A तब छोड़ दिया जाता है जब `transitive` चेक टियर `off` पर सेट होता है (`config set checks.transitive off`)।

**विफलता मोड:** फेल-ओपन, अन्य हुक के समान। कोई भी त्रुटि (शिम गायब, विकृत पेलोड, Python अनुपलब्ध) चुपचाप 0 के साथ बाहर निकलती है।

**उदाहरण WARNING:**```
WARNING: [email protected] in lock file has GHSA-29mw-wpgm-hmr9, GHSA-35jh-r3h4-6jhm

पोस्ट-एजेंट मोड (एजेंट हुक जोड़ी)

ऊपर बताए गए चार मोड केवल रूट-सेशन टूल कॉल के लिए सक्रिय होते हैं। जब रूट सेशन किसी सबएजेंट को भेजता है (Agent टूल के माध्यम से — कई स्किल्स और स्लैश कमांड आंतरिक रूप से ऐसा करते हैं), तो सबएजेंट के Write/Edit/Bash कॉल इन सभी को बायपास कर देते हैं। पोस्ट-एजेंट मोड उस अंतराल के लिए प्रतिक्रियाशील सुरक्षा जाल है।

  1. एक PreToolUse:Agent हुक (safer-dependencies-pretooluse-agent.sh) प्रत्येक Agent डिस्पैच से ठीक पहले चलता है और /tmp/.safer-deps-agent-<PPID>-<session_id>.sentinel पर एक सेंटिनल फ़ाइल बनाता है (जब कोई सत्र आईडी उपलब्ध न हो तो केवल PPID-आधारित नाम पर फ़ॉलबैक करता है)
  2. सबएजेंट चलता है और मैनिफेस्ट या लॉकफ़ाइल लिख सकता है
  3. एक PostToolUse:Agent हुक (safer-dependencies-posttooluse-agent.sh) Agent कॉल लौटने के बाद चलता है, सेंटिनल से नई हर मैनिफेस्ट और लॉकफ़ाइल को find करता है, और उसी शिम पथ के माध्यम से प्रत्येक का ऑडिट करता है
  4. निष्कर्ष रूट सत्र के अगले टर्न के लिए additionalContext के रूप में सामने आते हैं; सेंटिनल हटा दिया जाता है

नेस्टेड सबएजेंट स्वचालित रूप से कवर हो जाते हैं — रूट का PostToolUse:Agent तभी सक्रिय होता है जब बाहरी एजेंट का सारा काम (जिसमें वह सब कुछ शामिल है जो उसने भेजा था) डिस्क पर मौजूद हो। एक अंतराल वैश्विक इंस्टॉल है जो कोई मैनिफेस्ट या लॉकफ़ाइल नहीं लिखता (npm install -g …): स्कैन करने के लिए कुछ भी नहीं होता। अन्य हुकों की तरह, यह फेल-ओपन होता है — कोई भी त्रुटि (लापता सेंटिनल, लापता शिम, अपठनीय पेलोड) चुपचाप 0 के साथ बाहर निकलती है। पूर्ण डिज़ाइन तर्क skills/safer-dependencies.md में दिया गया है।

ऑडिट लॉग

हर जाँच ~/.claude/safer-dependencies-audit-YYYY-MM.log (प्रति कैलेंडर माह एक फ़ाइल, जहाँ YYYY-MM UTC वर्ष-माह है) में एक JSON लाइन के रूप में लॉग की जाती है। पूर्ण पथ को SAFE_DEP_AUDIT_LOG पर्यावरण चर से ओवरराइड करें (सेट होने पर, दिनांक प्रत्यय नहीं जोड़ा जाता)। फ़ाइलें तब भी आकार-रोटेट होती हैं जब वे SAFE_DEP_LOG_MAX_BYTES (डिफ़ॉल्ट 10 MiB; अक्षम करने के लिए 0 सेट करें) से अधिक हो जाती हैं। प्रत्येक प्रविष्टि में source.model में लिखे मॉडल मान को ओवरराइड करने के लिए SAFE_DEP_MODEL सेट करें — मॉडल संस्करणों के बीच A/B तुलना के लिए उपयोगी।

सभी पाँच मोड एक ही फ़ाइल में जोड़ते हैं। प्रत्येक प्रविष्टि में एक source ब्लॉक (स्कीमा 2.2) होता है जो पहचानता है कि इसे किस घटक ने लिखा:

source.componentकिसके द्वारा लिखा गयाट्रिगर
shim.posttooluseshim.shमैनिफेस्ट या लॉकफ़ाइल लेखन (इंटरसेप्ट मोड, पोस्ट-इंस्टॉल डिस्पैच)
shim.install_errorshim.shशिम प्रीफ़्लाइट इंस्टॉल विफलता
bash.pretoolusepretooluse-bash.shBash इंस्टॉल कमांड (प्री-इंस्टॉल मोड)
bash.posttooluseposttooluse-bash.shपोस्ट-इंस्टॉल Bash हुक स्वयं, जब यह शिम तक पहुँचने से पहले फेल-ओपन होता है
agent.pretoolusepretooluse-agent.shप्री-एजेंट फेल-ओपन घटनाओं के लिए आरक्षित (हुक स्वयं सफलता पर वर्तमान में मौन है)
agent.posttooluseposttooluse-agent.shपोस्ट-एजेंट हुक फेल-ओपन घटनाएँ (जैसे शिम लापता, python_missing)
manual.skillसामान्य मोड में चल रहा Claudeइनलाइन मैन्युअल ऑडिट

source.model सत्र में सक्रिय Claude Code मॉडल को रिकॉर्ड करता है (जैसे "claude-sonnet-4-6")। स्कीमा 2.1+ में मौजूद; पुराने इंस्टॉल द्वारा लिखी गई प्रविष्टियाँ फ़ील्ड को छोड़ देती हैं। स्टैट्स कमांड अनुपस्थित होने पर शालीनता से "unknown" पर डिग्रेड हो जाता है।

jq के साथ source.component द्वारा फ़िल्टर करें:```bash jq -r '.source.component' audit.log | sort | uniq -c | sort -rn jq -c 'select(.source.component == "bash.pretooluse")' audit.log

Surface every silent fail-open across all hooks:

jq -c 'select(.source.mode == "fail_open") | {component: .source.component, reason: .fail_open.reason, ts}' audit.log

root@kitploit:~
आसान विश्लेषण के लिए, लॉग को मैन्युअल रूप से पार्स करने के बजाय क्लॉड से उपयोग आँकड़े पूछें:```
"Show safer-dependencies stats for the last month"

यह ऑडिट लॉग से निकाले गए गतिविधि, सुरक्षा प्रभाव और प्रदर्शन मेट्रिक्स के मानव-पठनीय सारांश प्रदान करता है।

प्रविष्टि आकृतियाँ (स्कीमा 2.2)। तीन अलग-अलग आकृतियाँ समान ts / schema / source हेडर साझा करती हैं:

आकृतिकब लिखी जाती हैविशिष्ट फ़ील्ड
ऑडिट प्रविष्टिमैनिफ़ेस्ट / लॉकफ़ाइल / bash-इंस्टॉल ऑडिटfile, ecosystem, checked, findings, abandoned, stale, typosquat, unknown, signatures, notes, clean
इंस्टॉल-त्रुटि प्रविष्टिशिम प्रीफ़्लाइट इंस्टॉल-त्रुटि (घटक shim.install_error)install_error, shim_dir, scripts_dir
फेल-ओपन प्रविष्टिकोई भी हुक एंट्री-पॉइंट helper_missing / shim_missing / python_missing के कारण जल्दी बाहर निकलता है। source.mode "fail_open" हैfail_open: { reason, detail? }

ऑडिट प्रविष्टियाँ: इंटरसेप्ट मोड पूरी पाइपलाइन (प्रोवेनेंस, संस्करण आयु, OSV, abandoned/stale, typosquat, signatures) चलाता है, इसलिए सभी ऐरे भरे जा सकते हैं। प्री-इंस्टॉल मोड आज केवल OSV चलाता है, इसलिए abandoned / stale / typosquat / signatures हमेशा खाली रहते हैं। पोस्ट-इंस्टॉल डिस्पैच (लॉकफ़ाइल ऑडिट) shim.posttooluse के अंतर्गत लिखता है, जिसमें findings लॉकफ़ाइल ऑडिटर्स के WARNING: स्ट्रिंग्स से भरे जाते हैं। notes ऐरे सूचनात्मक NOTE: सिग्नल (जैसे मैनिफ़ेस्ट-स्किप्ड-क्योंकि-अनपिन्ड) ले जाता है।

स्कीमा 2.2 ने — योगात्मक रूप से — लॉकफ़ाइल ऑडिट प्रविष्टियों में चार फ़ील्ड जोड़े: lockfile, manifest_ref, relation_summary (सहोदर मैनिफ़ेस्ट के विरुद्ध प्रत्येक फ़्लैग किए गए पैकेज का प्रत्यक्ष/ट्रांज़िटिव/अज्ञात वर्गीकरण), और एक policy ब्लॉक जो लागू transitive टियर दर्ज करता है। यह बदलाव पिछड़ा-संगत है: 2.1 प्रविष्टियों के पाठक नए फ़ील्ड सहन करते हैं, और source.model फ़ील्ड 2.1 से आगे भी मौजूद रहता है।```json { "ts": "2026-04-19T12:34:56Z", "schema": "2.2", "source": { "component": "shim.posttooluse", "script": "shim.sh", "hook": "PostToolUse:Write", "tool": "Write", "mode": "intercept", "model": "claude-sonnet-4-6" }, "file": "/path/to/project/package.json", "ecosystem": "npm", "checked": ["[email protected]", "[email protected]"], "findings": ["UPDATED: express 4.18.2 → 4.22.1 (HIGH: 1 CVE fixed)"], "abandoned": [], "stale": [], "typosquat": [], "unknown": [], "signatures": [], "notes": [], "clean": ["[email protected]"] }

root@kitploit:~
प्री-इंस्टॉल मोड उदाहरण (Bash हुक, असुरक्षित पिन अस्वीकृत):```json
{
  "ts": "2026-04-23T06:56:21Z",
  "schema": "2.2",
  "source": {
    "component": "bash.pretooluse",
    "script": "pretooluse-bash.sh",
    "hook": "PreToolUse:Bash",
    "tool": "Bash",
    "mode": "intercept",
    "model": "claude-sonnet-4-6"
  },
  "file": "bash:npm install [email protected] [email protected]",
  "ecosystem": "npm",
  "checked": ["[email protected]", "[email protected]"],
  "findings": [
    "BLOCKED: [email protected] GHSA-35jh-r3h4-6jhm (CVSS:3.1/...): Command Injection in lodash"
  ],
  "abandoned": [],
  "stale": [],
  "typosquat": [],
  "unknown": [],
  "signatures": [],
  "notes": [],
  "clean": ["[email protected]"]
}

फेल-ओपन मोड उदाहरण (पोस्ट-इंस्टॉल बैश हुक जो बिना किसी शिम के पास में कॉल किया गया — टूटी हुई इंस्टॉल):```json { "ts": "2026-05-03T07:14:11Z", "schema": "2.2", "source": { "component": "bash.posttooluse", "script": "safer-dependencies-posttooluse-bash.sh", "hook": "PostToolUse", "tool": "Bash", "mode": "fail_open", "model": "claude-sonnet-4-6" }, "fail_open": { "reason": "shim_missing", "detail": "/home/alice/.claude/skills/safer-dependencies" } }

root@kitploit:~
एक fail-open प्रविष्टि कहती है: "यह हुक फायर हुआ लेकिन बिना ऑडिट किए जल्दी बाहर निकल गया क्योंकि कोई पूर्वापेक्षा गायब थी।" अपने लॉग में हर मूक सुरक्षा-हानि घटना को सतह पर लाने के लिए उपरोक्त jq फ़िल्टर (`select(.source.mode == "fail_open")`) का उपयोग करें।

जब शिम ड्राई-रन मोड में चलता है (`SAFE_DEP_DRY_RUN=1`), प्रविष्टियों में `"mode": "dry_run"` भी शामिल होता है ताकि पोस्ट-हॉक विश्लेषण केवल-ऑडिट इनवोकेशन को फ़िल्टर कर सके।

## आवश्यकताएँ

- Python 3.9+ (हुक इसकी जाँच करते हैं और पुराने इंटरप्रेटरों पर fail-open होते हैं)
- `curl` (रजिस्ट्री API कॉल और OSV भेद्यता जाँच के लिए)
- इकोसिस्टम उपकरण (वैकल्पिक, गायब होने पर स्किल OSV API पर वापस आ जाती है):
  - npm पैकेजों के लिए `npm`
  - Python पैकेजों के लिए `pip-audit`
  - Ruby पैकेजों के लिए `bundle`
  - Java पैकेजों के लिए `dependency-check`

## FAQ

डिज़ाइन-निर्णय तर्क (PreToolUse के बजाय PostToolUse क्यों, हस्ताक्षर सत्यापित क्यों नहीं किए जाते, स्क्रिप्ट और शिम डुप्लिकेट क्यों हैं, स्किल-लोडिंग गॉचा, आदि) [`FAQ.md`](https://github.com/robert-auger/safer-dependencies/blob/main/FAQ.md) में प्रलेखित है।
टूल डाउनलोड करें