allow, deny, instruct डिसीजन्स का उपयोग करते हैं।
क्विक उदाहरण
कस्टम पॉलिसीज़ लोड करने के दो तरीके
विकल्प 1: कन्वेंशन-आधारित (सुझाया गया)
*policies.{js,mjs,ts} फ़ाइलें .failproofai/policies/ में ड्रॉप करें और वे स्वचालित रूप से लोड हो जाती हैं — कोई फ्लैग्स या कॉन्फ़िग बदलाव की जरूरत नहीं। यह git हुक्स की तरह काम करता है: एक फ़ाइल ड्रॉप करें, और यह बस काम करता है।
- प्रोजेक्ट और यूजर दोनों डायरेक्टरीज़ स्कैन की जाती हैं (यूनियन — first-scope-wins नहीं)
- फ़ाइलें प्रत्येक डायरेक्टरी के भीतर वर्णक्रम में लोड होती हैं। ऑर्डर नियंत्रित करने के लिए
01-,02-प्रीफ़िक्स करें - केवल
*policies.{js,mjs,ts}से मेल खाने वाली फ़ाइलें लोड होती हैं; अन्य फ़ाइलें अनदेखी की जाती हैं - प्रत्येक फ़ाइल स्वतंत्र रूप से लोड होती है (प्रति फ़ाइल fail-open)
- स्पष्ट
--customऔर बिल्ट-इन पॉलिसीज़ के साथ काम करता है
विकल्प 2: स्पष्ट फ़ाइल पाथ
policies-config.json में customPoliciesPath के रूप में स्टोर किया जाता है। फ़ाइल हर हुक इवेंट पर ताजा लोड होती है - इवेंट्स के बीच कोई कैशिंग नहीं है।
दोनों को एक साथ उपयोग करना
कन्वेंशन पॉलिसीज़ और स्पष्ट--custom फ़ाइल एक साथ मौजूद रह सकती हैं। लोड ऑर्डर:
- स्पष्ट
customPoliciesPathफ़ाइल (यदि कॉन्फ़िगर की गई है) - प्रोजेक्ट कन्वेंशन फ़ाइलें (
{cwd}/.failproofai/policies/, वर्णक्रम में) - यूजर कन्वेंशन फ़ाइलें (
~/.failproofai/policies/, वर्णक्रम में)
API
इम्पोर्ट
customPolicies.add(hook)
एक पॉलिसी रजिस्टर करता है। समान फ़ाइल में कई पॉलिसीज़ के लिए आवश्यकतानुसार इसे कॉल करें।
डिसीजन हेल्पर्स
deny(message) - संदेश Claude को "Blocked by failproofai:" प्रीफ़िक्स के साथ दिखाई देता है। एक एकल deny सभी आगे के मूल्यांकन को शॉर्ट-सर्किट करता है।
instruct(message) - संदेश वर्तमान टूल कॉल के लिए Claude के संदर्भ में जोड़ा जाता है। सभी instruct संदेश जमा किए जाते हैं और एक साथ डिलीवर किए जाते हैं।
सूचनात्मक allow संदेश
allow(message) ऑपरेशन को अनुमति देता है और Claude को वापस एक सूचनात्मक संदेश भेजता है। संदेश हुक हैंडलर के stdout रेस्पांस में additionalContext के रूप में डिलीवर होता है — instruct द्वारा उपयोग किया गया समान तंत्र, लेकिन शब्दार्थ रूप से भिन्न: यह एक स्टेटस अपडेट है, चेतावनी नहीं।
उपयोग मामले:
- स्टेटस कन्फर्मेशन:
allow("All CI checks passed.")— Claude को बताता है सब कुछ ठीक है - Fail-open व्याख्याएं:
allow("GitHub CLI not installed, skipping CI check.")— Claude को बताता है कि चेक क्यों छोड़ा गया ताकि इसके पास पूर्ण संदर्भ हो - कई संदेश जमा होते हैं: यदि कई पॉलिसीज़ में से प्रत्येक
allow(message)रिटर्न करता है, तो सभी संदेश नई लाइन्स के साथ जोड़े जाते हैं और एक साथ डिलीवर किए जाते हैं
PolicyContext फ़ील्ड्स
SessionMetadata फ़ील्ड्स
इवेंट टाइप्स
मूल्यांकन ऑर्डर
पॉलिसीज़ इस ऑर्डर में मूल्यांकन किए जाते हैं:- बिल्ट-इन पॉलिसीज़ (डेफिनिशन ऑर्डर में)
customPoliciesPathसे स्पष्ट कस्टम पॉलिसीज़ (.add()ऑर्डर में)- प्रोजेक्ट
.failproofai/policies/से कन्वेंशन पॉलिसीज़ (फ़ाइलें वर्णक्रम में,.add()ऑर्डर के भीतर) - यूजर
~/.failproofai/policies/से कन्वेंशन पॉलिसीज़ (फ़ाइलें वर्णक्रम में,.add()ऑर्डर के भीतर)
पहला
deny सभी सबसे आगे की पॉलिसीज़ को शॉर्ट-सर्किट करता है। सभी instruct संदेश जमा किए जाते हैं और एक साथ डिलीवर किए जाते हैं।ट्रांजिटिव इम्पोर्ट्स
कस्टम पॉलिसी फ़ाइलें सापेक्ष पाथ का उपयोग करके स्थानीय मॉड्यूल्स को इम्पोर्ट कर सकती हैं:from "failproofai" इम्पोर्ट्स को वास्तविक dist पाथ में फिर से लिखकर और ESM कम्पैटिबिलिटी सुनिश्चित करने के लिए अस्थायी .mjs फ़ाइलें बनाकर लागू किया जाता है।
इवेंट टाइप फ़िल्टरिंग
match.events का उपयोग करके सीमित करें कि एक पॉलिसी कब फायर हो:
match को पूरी तरह छोड़ दें।
एरर हैंडलिंग और विफलता मोड्स
कस्टम पॉलिसीज़ fail-open हैं: एरर्स कभी भी बिल्ट-इन पॉलिसीज़ को ब्लॉक नहीं करते या हुक हैंडलर को क्रैश नहीं करते।पूर्ण उदाहरण: कई पॉलिसीज़
उदाहरण
examples/ डायरेक्टरी में तैयार-से-चलने वाली पॉलिसी फ़ाइलें हैं:

