कॉन्फ़िगरेशन स्कोप
तीन कॉन्फ़िगरेशन स्कोप हैं, प्राथमिकता क्रम में मूल्यांकन किए गए:| स्कोप | फ़ाइल पथ | उद्देश्य |
|---|---|---|
| प्रोजेक्ट | .failproofai/policies-config.json | प्रति-रेपो सेटिंग्स, संस्करण नियंत्रण में कमिट की गई |
| स्थानीय | .failproofai/policies-config.local.json | व्यक्तिगत प्रति-रेपो ओवरराइड, gitignored |
| वैश्विक | ~/.failproofai/policies-config.json | सभी प्रोजेक्ट्स में उपयोगकर्ता-स्तरीय डिफ़ॉल्ट |
मर्ज नियम
enabledPolicies - सभी तीन स्कोप का यूनियन। किसी भी स्तर पर सक्षम नीति सक्रिय है।
policyParams - पहला स्कोप जो किसी नीति के लिए पैराम्स को परिभाषित करता है पूरी तरह जीतता है। नीति के पैराम्स के भीतर मानों का कोई गहरी मर्जिंग नहीं है।
customPoliciesPath - पहला स्कोप जो इसे परिभाषित करता है जीतता है।
llm - पहला स्कोप जो इसे परिभाषित करता है जीतता है।
कॉन्फ़िग फ़ाइल प्रारूप
फ़ील्ड संदर्भ
enabledPolicies
प्रकार: string[]
सक्षम करने के लिए नीति नामों की सूची। नाम failproofai policies द्वारा दिखाए गए नीति पहचानकर्ताओं से बिल्कुल मेल खाने चाहिए। पूर्ण सूची के लिए बिल्ट-इन नीतियां देखें।
enabledPolicies में न आने वाली नीतियां निष्क्रिय हैं, भले ही उनके पास policyParams में प्रविष्टियां हों।
policyParams
प्रकार: Record<string, Record<string, unknown>>
प्रति-नीति पैरामीटर ओवरराइड। बाहरी कुंजी नीति का नाम है; आंतरिक कुंजियां नीति-विशिष्ट हैं। प्रत्येक नीति अपने उपलब्ध पैरामीटर्स को बिल्ट-इन नीतियों में दस्तावेज़ करती है।
यदि किसी नीति के पैरामीटर हैं लेकिन आप उन्हें निर्दिष्ट नहीं करते हैं, तो नीति के बिल्ट-इन डिफ़ॉल्ट का उपयोग किया जाता है। जो उपयोगकर्ता policyParams को बिल्कुल कॉन्फ़िगर नहीं करते वे पिछले संस्करणों के समान व्यवहार प्राप्त करते हैं।
किसी नीति के पैरामीटर ब्लॉक के अंदर अज्ञात कुंजियां हुक-फायर समय पर चुपचाप अनदेखी की जाती हैं लेकिन जब आप failproofai policies चलाते हैं तो चेतावनियों के रूप में फ्लैग की जाती हैं।
hint (क्रॉस-कटिंग)
प्रकार: string (वैकल्पिक)
जब नीति deny या instruct देती है तो कारण में जोड़ा जाने वाला संदेश। Claude को नीति को स्वयं संशोधित किए बिना कार्यवाही योग्य मार्गदर्शन देने के लिए इसका उपयोग करें।
किसी भी नीति प्रकार के साथ काम करता है — बिल्ट-इन, कस्टम (custom/), प्रोजेक्ट सम्मेलन (.failproofai-project/), या उपयोगकर्ता सम्मेलन (.failproofai-user/)।
block-force-push अस्वीकार करता है, Claude देखता है: “जबरन पुश करना अवरुद्ध है। इसके बजाय एक ताजी शाखा बनाने का प्रयास करें।”
गैर-स्ट्रिंग मानों और खाली स्ट्रिंग्स को चुपचाप अनदेखा किया जाता है। यदि hint सेट नहीं है, तो व्यवहार अपरिवर्तित है (पिछड़े-संगत)।
customPoliciesPath
प्रकार: string (पूर्ण पथ)
कस्टम हुक नीतियों वाली JavaScript फ़ाइल का पथ। यह failproofai policies --install --custom <path> द्वारा स्वचालित रूप से सेट किया जाता है (पथ संग्रहीत होने से पहले पूर्ण में हल किया जाता है)।
फ़ाइल हर हुक ईवेंट पर नई लोड की जाती है - कोई कैशिंग नहीं है। विस्तारों के लिए कस्टम नीतियां देखें।
सम्मेलन-आधारित नीतियां
स्पष्टcustomPoliciesPath के अलावा, failproofai स्वचालित रूप से .failproofai/policies/ निर्देशिकाओं से नीति फ़ाइलें खोजता है और लोड करता है:
| स्तर | निर्देशिका | स्कोप |
|---|---|---|
| प्रोजेक्ट | .failproofai/policies/ | संस्करण नियंत्रण के माध्यम से टीम के साथ साझा |
| उपयोगकर्ता | ~/.failproofai/policies/ | व्यक्तिगत, सभी प्रोजेक्ट्स पर लागू |
*policies.{js,mjs,ts} से मेल खाने वाली फ़ाइलें लोड की जाती हैं (उदाहरण के लिए security-policies.mjs, workflow-policies.js)। निर्देशिका में अन्य फ़ाइलें अनदेखी की जाती हैं।
कोई कॉन्फ़िग आवश्यक नहीं: सम्मेलन नीतियों को policies-config.json में प्रविष्टियों की आवश्यकता नहीं है। बस फ़ाइलें निर्देशिका में डालें और वे अगली हुक ईवेंट पर उठाई जाती हैं।
यूनियन लोडिंग: प्रोजेक्ट और उपयोगकर्ता दोनों सम्मेलन निर्देशिकाओं को स्कैन किया जाता है। दोनों स्तरों से सभी मिलान वाली फ़ाइलें लोड की जाती हैं (customPoliciesPath के विपरीत जो पहले-स्कोप-जीतें का उपयोग करता है)।
अधिक विवरण और उदाहरणों के लिए कस्टम नीतियां देखें।
llm
प्रकार: object (वैकल्पिक)
AI कॉल करने वाली नीतियों के लिए LLM क्लाइंट कॉन्फ़िगरेशन। अधिकांश सेटअप के लिए आवश्यक नहीं है।
CLI से कॉन्फ़िगरेशन प्रबंधित करना
policies --install और policies --uninstall कमांड आपके एजेंट CLI की हुक सेटिंग्स फ़ाइल (हुक प्रवेश बिंदु) में लिखते हैं, जबकि policies-config.json वह फ़ाइल है जिसे आप सीधे प्रबंधित करते हैं। दोनों अलग हैं:
- एजेंट CLI सेटिंग्स — एजेंट को प्रत्येक उपकरण उपयोग पर
failproofai --hook <event>कॉल करने के लिए बताता है:- Claude Code:
~/.claude/settings.json(उपयोगकर्ता),<cwd>/.claude/settings.json(प्रोजेक्ट),<cwd>/.claude/settings.local.json(स्थानीय) - OpenAI Codex:
~/.codex/hooks.json(उपयोगकर्ता),<cwd>/.codex/hooks.json(प्रोजेक्ट) — Codex के पास कोईlocalस्कोप नहीं है - GitHub Copilot CLI (बीटा):
~/.copilot/hooks/failproofai.json(उपयोगकर्ता),<cwd>/.github/hooks/failproofai.json(प्रोजेक्ट) — Copilot के पास कोईlocalस्कोप नहीं है। हुक प्रविष्टियां Copilot के OS-कुंजीयुक्तbash/powershellकमांड फ़ील्ड का उपयोग करते हैं जिसमेंtimeoutSecहै; फ़ाइल शीर्ष-स्तरीयversion: 1मार्कर ले जाती है। Copilot CLI समर्थन बीटा है जबकि हमevents.jsonlरिकॉर्ड स्कीमा को सत्यापित करते हैं (जिसे सार्वजनिक दस्तावेज निर्दिष्ट नहीं करते) अधिक वास्तविक दुनिया सत्रों के विरुद्ध। - Cursor Agent (बीटा):
~/.cursor/hooks.json(उपयोगकर्ता),<cwd>/.cursor/hooks.json(प्रोजेक्ट) — Cursor के पास कोईlocalस्कोप नहीं है। हुक प्रविष्टियां Claude-आकार{type, command, timeout}फॉर्म का उपयोग करते हैं (कोईbash/powershellविभाजन नहीं), लेकिन Cursor के हुक स्कीमा के अनुसार एक सपाट सरणी प्रति camelCase ईवेंट कुंजियों (preToolUse,beforeSubmitPrompt, …) के तहत संग्रहीत; फ़ाइल शीर्ष-स्तरीयversion: 1मार्कर ले जाती है। हैंडलरCURSOR_EVENT_MAPके माध्यम से camelCase → PascalCase को सामान्य करता है ताकि मौजूदा बिल्ट-इन नीतियां अपरिवर्तित रहें। Cursor Agent समर्थन बीटा है जबकि हम Cursor के डिस्क पर ट्रांसक्रिप्ट प्रारूप को सत्यापित करते हैं (सार्वजनिक दस्तावेज़ में निर्दिष्ट नहीं) अधिक वास्तविक स्थापनों के विरुद्ध। - OpenCode (बीटा):
~/.config/opencode/opencode.json+~/.config/opencode/plugins/failproofai.mjs(उपयोगकर्ता),<cwd>/.opencode/opencode.json+<cwd>/.opencode/plugins/failproofai.mjs(प्रोजेक्ट) — OpenCode के पास कोईlocalस्कोप नहीं है। अन्य छह CLI के विपरीत, OpenCode के पास कोई बाहरी-कमांड हुक सिस्टम नहीं है: यहopencode.jsonमेंplugin: []सरणी के माध्यम से स्पष्ट रूप से पंजीकृत में-प्रक्रिया JS/TS प्लग-इन लोड करता है (.opencode/plugins/से ऑटो-खोज नहीं कैसे प्लग-इन opencode v1.14.33 पर लोड होते हैं)। इंस्टॉल एक छोटा उत्पन्न प्लग-इन शिम छोड़ता है जो failproofai बाइनरी को सबप्रोसेस-कॉल करता है और बाइनरी की Claude-आकार JSON प्रतिक्रिया को प्लग-इन शब्दार्थ में वापस अनुवाद करता है: टूल-ईवेंट अस्वीकार के लिएthrow new Error()(उपकरण कॉल को रद्द करता है),client.session.prompt(...)निर्देश के लिए ANDStop/SubagentStopअस्वीकार के लिए (अगले उपयोगकर्ता संदेश के रूप में अस्वीकार कारण जमा करता है — एकमात्र बल-पुनः प्रयास चैनल क्योंकिsession.idleकेवल सूचना है और इससे फेंकना एक कोई-ऑप है), और allow के लिए कोई-ऑप। शिम दोनों उपकरण नामों को सामान्य करता है (लोअरकेस → PascalCaseOPENCODE_TOOL_MAPके माध्यम से) और टूल-इनपुट आर्ग कुंजियां (camelCase → snake_caseOPENCODE_TOOL_INPUT_MAPके माध्यम सेRead/Write/Editके लिए, उदाहरण के लिएfilePath→file_path,oldString→old_string) बाइनरी को भेजने से पहले, ताकि पथ-जांच बिल्ट-इन जैसेblock-read-outside-cwd,block-env-files, औरblock-secrets-writeOpenCode उपकरण कॉल पर अपरिवर्तित रहें। सत्र opencode की SQLite DB पर रहते हैं~/.local/share/opencode/opencode.db; डैशबोर्ड का सत्र दर्शकopencode db --format jsonके माध्यम से पढ़ता है औरopencode export <id>करता है। OpenCode समर्थन बीटा है जबकि हम संस्करणों में व्यवहार को सत्यापित करते हैं और अधिक वास्तविक सत्रों के विरुद्ध। OpenCode प्लग-इन दस्तावेज़ देखें। - Pi (बीटा):
~/.pi/agent/settings.json(उपयोगकर्ता),<cwd>/.pi/settings.json(प्रोजेक्ट) — Pi के पास कोईlocalस्कोप नहीं है। Pi स्टार्टअप पर TypeScript एक्सटेंशन पैकेज लोड करता है; सेटिंग्स फ़ाइल एक सपाट स्ट्रिंग सरणी है{"packages": ["./relative/path", …]}. failproofai एक एकल packages-array प्रविष्टि लिखता है जो अपनी बंडल की गईpi-extension/निर्देशिका की ओर इशारा करती है। एक्सटेंशन आंतरिक रूप से Pi कीtool_call/user_bash/input/session_startईवेंट्स को सबस्क्राइब करता है औरfailproofai --hook <Event> --cli piको शेल करता है; हैंडलर underscore_lower_snake_case → PascalCase कोPI_EVENT_MAPके माध्यम से सामान्य करता है ताकि मौजूदा बिल्ट-इन नीतियां अपरिवर्तित रहें। टूल इनपुट आर्ग्स कोPI_TOOL_INPUT_MAPके माध्यम से भी सामान्य किया जाता है (Pi का Read / Write / Editfile_pathके बजायpathप्रदान करता है; शीर्ष-स्तरीय कुंजी को मैपिंगblock-env-filesऔरblock-secrets-writeको आग लगाने देता है —block-read-outside-cwdपहले से हीpathफॉलबैक था)। Pi समर्थन बीटा है जबकि Pi का एक्सटेंशन API और सत्र-लॉग लेआउट स्थिर होता है। - Gemini CLI (बीटा):
~/.gemini/settings.json(उपयोगकर्ता),<cwd>/.gemini/settings.json(प्रोजेक्ट) — Gemini के पास कोईlocalस्कोप नहीं है (यह/etc/gemini-cli/settings.jsonपर एकsystemस्कोप दस्तावेज़ करता है जिसे failproofai उजागर नहीं करता)। हुक प्रविष्टियां Claude के{type, command, timeout}फॉर्म का उपयोग करते हैं Gemini के{matcher, hooks: [...]}मेचर स्कीमा में लपेटा जाता है जिसमेंmatcher: "*"डिफ़ॉल्ट है। ईवेंट्स PascalCase हैं (SessionStart,BeforeAgent,AfterAgent,BeforeModel,AfterModel,BeforeToolSelection,BeforeTool,AfterTool,PreCompress,Notification,SessionEnd); हैंडलरGEMINI_EVENT_MAPके माध्यम से Claude canonical नामों को मैप करता है। उपकरण के नाम snake_case हैं (run_shell_command,read_file,write_file,replace, …) — हैंडलरGEMINI_TOOL_MAPके माध्यम से सामान्य करता है ताकि मौजूदा बिल्ट-इन नीतियां अपरिवर्तित रहें। नीति मूल्यांकनकर्ता Gemini का समतल{decision: "deny", reason}आकार उत्सर्जित करता है (Gemini के Golden Rule exit-0 अनुबंध के अनुसार पसंदीदा),{hookSpecificOutput: {hookEventName, additionalContext}}BeforeAgent / AfterTool / SessionStart पर संदर्भ इंजेक्शन के लिए, और{decision: "block", reason}AfterAgent पर बल-पुनः प्रयास शब्दार्थ के लिए। Gemini CLI समर्थन बीटा है जबकि हम वास्तविक दुनिया के कवरेज को चौड़ा करते हैं। Gemini CLI हुक दस्तावेज़ देखें।
- Claude Code:
policies-config.json— failproofai को बताता है कि कौन सी नीतियों का मूल्यांकन करना है और किन पैराम्स के साथ (सभी एजेंट CLI में साझा)
--cli claude|codex|copilot|cursor|opencode|pi|gemini पास करें (स्पेस-अलग या किसी भी सबसेट के लिए दोहराया गया):
--cli छोड़ दिया जाता है, failproofai पहचानता है कि कौन से एजेंट CLI स्थापित हैं (which claude / which codex / which copilot / which cursor-agent / which opencode / which pi / which gemini):
- एक CLI पहचाना गया — बिना संकेत के उस CLI को स्वचालित रूप से चुनता है।
- एक इंटरैक्टिव टर्मिनल में कई CLI पहचाने गए — एक तीर-कुंजी एकल-चयन संकेत दिखाता है
Detected (N)सेक्शन में समूहीकृत (एकInstall for all N detectedसमुच्चय पंक्ति + प्रत्येक पहचाने गए CLI अलग) और एकNot installed (M) · install hooks ahead of timeसेक्शन जो हर अपहचाने गए समर्थित CLI को एक forward-install विकल्प के रूप में सूचीबद्ध करता है (↑↓ स्थानांतरित करने के लिए, Enter चुनने के लिए, ^C बाहर निकलने के लिए)। अनइंस्टॉल प्रवाह केवल डिटेक्टेड सेक्शन दिखाता है। - एक गैर-इंटरैक्टिव रन में कई CLI पहचाने गए (CI, कोई TTY नहीं) — संकेत के बिना सभी पहचाने गए CLI के लिए स्थापित करता है।
- कोई भी नहीं पहचाना गया —
claudeमें फॉलबैक, एक चेतावनी के साथ कि PATH में कोई एजेंट बाइनरी नहीं मिला; हुक कमांड अभी भी लिखा जाता है ताकि यह सक्रिय हो जाए जैसे ही आप एक स्थापित करते हैं।
policies-config.json को संपादित कर सकते हैं; परिवर्तन तुरंत अगली हुक ईवेंट पर प्रभाव डालते हैं पुनरारंभ की आवश्यकता के बिना।
उदाहरण: टीम डिफ़ॉल्ट के साथ प्रोजेक्ट-स्तरीय कॉन्फ़िगरेशन
.failproofai/policies-config.json को अपने रेपो में कमिट करें:
.failproofai/policies-config.local.json (gitignored) बना सकता है व्यक्तिगत ओवरराइड के लिए सहकर्मियों को प्रभावित किए बिना।
