कॉन्फ़िगरेशन स्कोप
तीन कॉन्फ़िगरेशन स्कोप हैं, जिनका मूल्यांकन प्राथमिकता क्रम में किया जाता है:
जब failproofai को एक हुक ईवेंट मिलता है, तो यह सभी तीन फ़ाइलों को लोड और मर्ज करता है जो वर्तमान कार्य निर्देशिका के लिए मौजूद हैं।
मर्ज नियम
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 को यह दिखता है: “Force-pushing is blocked. Try creating a fresh branch instead.”
गैर-स्ट्रिंग मान और खाली स्ट्रिंग्स को चुप्पी से अनदेखा किया जाता है। यदि hint सेट नहीं है, तो व्यवहार अपरिवर्तित रहता है (पश्चविमुखी-संगत)।
customPoliciesPath
प्रकार: string (निरपेक्ष पाथ)
कस्टम हुक नीतियों वाली JavaScript फ़ाइल का पाथ। यह स्वचालित रूप से failproofai policies --install --custom <path> द्वारा सेट किया जाता है (पाथ को निरपेक्ष के लिए हल किया जाता है फिर संग्रहीत किया जाता है)।
फ़ाइल प्रत्येक हुक ईवेंट पर ताज़ी लोड की जाती है - कोई कैशिंग नहीं है। विस्तार के लिए कस्टम पॉलिसीज़ देखें।
कन्वेंशन-आधारित नीतियां
स्पष्टcustomPoliciesPath के अलावा, failproofai स्वचालित रूप से .failproofai/policies/ निर्देशिकाओं से नीति फ़ाइलों की खोज करता है और लोड करता है:
फ़ाइल मिलान: केवल
*policies.{js,mjs,ts} से मेल खाने वाली फ़ाइलें लोड की जाती हैं (उदा. security-policies.mjs, workflow-policies.js)। निर्देशिका में अन्य फ़ाइलें अनदेखी की जाती हैं।
कोई कॉन्फ़िग की आवश्यकता नहीं: कन्वेंशन नीतियों के लिए policies-config.json में प्रविष्टियों की आवश्यकता नहीं है। बस निर्देशिका में फ़ाइलें डालें और अगली हुक ईवेंट पर उन्हें चुना जाएगा।
यूनियन लोडिंग: प्रोजेक्ट और उपयोगकर्ता दोनों कन्वेंशन निर्देशिकाएं स्कैन की जाती हैं। दोनों स्तरों से सभी मेल खाने वाली फ़ाइलें लोड की जाती हैं (customPoliciesPath के विपरीत जो पहले-स्कोप-जीत का उपयोग करता है)।
अधिक विवरण और उदाहरणों के लिए कस्टम पॉलिसीज़ देखें।
llm
प्रकार: object (वैकल्पिक)
उन नीतियों के लिए LLM क्लाइंट कॉन्फ़िगरेशन जो AI कॉल करते हैं। अधिकांश सेटअप के लिए आवश्यक नहीं है।
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 (beta):
~/.copilot/hooks/failproofai.json(उपयोगकर्ता),<cwd>/.github/hooks/failproofai.json(प्रोजेक्ट) — Copilot के पास कोईlocalस्कोप नहीं है। हुक एंट्रीज़ Copilot के OS-keyedbash/powershellकमांड फ़ील्ड का उपयोग करते हैंtimeoutSecके साथ; फ़ाइल एक टॉप-लेवलversion: 1मार्कर ले जाती है। Copilot CLI समर्थन beta है जबकि हमevents.jsonlरिकॉर्ड स्कीमा को सत्यापित करते हैं (जिसे सार्वजनिक दस्तावेज़ निर्दिष्ट नहीं करते) अधिक वास्तविक-दुनिया सत्रों के विरुद्ध। - Cursor Agent (beta):
~/.cursor/hooks.json(उपयोगकर्ता),<cwd>/.cursor/hooks.json(प्रोजेक्ट) — Cursor के पास कोईlocalस्कोप नहीं है। हुक एंट्रीज़ Claude-shaped{type, command, timeout}फॉर्म का उपयोग करते हैं (कोईbash/powershellविभाजन नहीं), लेकिन camelCase ईवेंट कुंजियों के तहत संग्रहीत (preToolUse,beforeSubmitPrompt, …) Cursor के hooks schema के अनुसार एक फ्लैट ऐरे में; फ़ाइल एक टॉप-लेवलversion: 1मार्कर ले जाती है। हैंडलर camelCase → PascalCase कोCURSOR_EVENT_MAPके माध्यम से कैनोनिकलाइज़ करता है ताकि मौजूदा बिल्ट-इन नीतियां अपरिवर्तित रूप से चलें। Cursor Agent समर्थन beta है जबकि हम Cursor के ट्रांसक्रिप्ट को सत्यापित करते हैं (सार्वजनिक दस्तावेज़ में निर्दिष्ट नहीं) अधिक वास्तविक-दुनिया इंस्टॉल्स के विरुद्ध। - OpenCode (beta):
~/.config/opencode/opencode.json+~/.config/opencode/plugins/failproofai.mjs(उपयोगकर्ता),<cwd>/.opencode/opencode.json+<cwd>/.opencode/plugins/failproofai.mjs(प्रोजेक्ट) — OpenCode के पास कोईlocalस्कोप नहीं है। अन्य पाँच CLI के विपरीत, OpenCode के पास कोई बाहरी-कमांड हुक सिस्टम नहीं है: यह JS/TS प्लगइन कोopencode.jsonमेंplugin: []ऐरे के माध्यम से स्पष्ट रूप से पंजीकृत करके इन-प्रॉसेस लोड करता है (.opencode/plugins/से ऑटो-डिस्कवरी नहीं है कि प्लगइन opencode v1.14.33 पर कैसे लोड होते हैं)। इंस्टॉल एक छोटा जेनरेटेड प्लगइन शिम छोड़ता है जो failproofai बाइनरी को subprocess-कॉल करता है और बाइनरी के Claude-shape JSON प्रतिक्रिया को प्लगइन शब्दावली में वापस अनुवाद करता है:throw new Error()टूल-ईवेंट deny के लिए (टूल कॉल को रद्द करता है),client.session.prompt(...)instruct AND के लिएStop/SubagentStopdeny (deny कारण को अगले उपयोगकर्ता संदेश के रूप में जमा करता है — एकमात्र force-retry चैनल क्योंकिsession.idleकेवल-अधिसूचना है और इससे throw करना एक no-op है), और allow के लिए no-op। शिम both टूल नाम (lowercase → PascalCaseOPENCODE_TOOL_MAPके माध्यम से) और tool-input arg कुंजियां (camelCase → snake_caseOPENCODE_TOOL_INPUT_MAPके माध्यम सेRead/Write/Editके लिए, उदा.filePath→file_path,oldString→old_string) कैनोनिकलाइज़ करता है बाइनरी में अग्रेषित करने से पहले, इसलिए path-checking builtins जैसेblock-read-outside-cwd,block-env-files, औरblock-secrets-writeOpenCode tool कॉल पर अपरिवर्तित रूप से चलते हैं। सत्र opencode के SQLite DB में~/.local/share/opencode/opencode.dbमें रहते हैं; डैशबोर्ड का सत्र दर्शकopencode db --format jsonऔरopencode export <id>के माध्यम से उन्हें पढ़ता है। OpenCode समर्थन beta है जबकि हम संस्करणों में व्यवहार को सत्यापित करते हैं और अधिक वास्तविक-दुनिया सत्रों के विरुद्ध। OpenCode plugins docs देखें। - Pi (beta):
~/.pi/agent/settings.json(उपयोगकर्ता),<cwd>/.pi/settings.json(प्रोजेक्ट) — Pi के पास कोईlocalस्कोप नहीं है। Pi स्टार्टअप पर TypeScript extension पैकेज लोड करता है; सेटिंग्स फ़ाइल एक फ्लैट स्ट्रिंग ऐरे{"packages": ["./relative/path", …]}है। failproofai एक single packages-array एंट्री लिखता है जो अपनी bundledpi-extension/निर्देशिका की ओर इशारा करता है। एक्सटेंशन आंतरिक रूप से Pi केtool_call/user_bash/input/session_startईवेंट्स की सदस्यता लेता है औरfailproofai --hook <Event> --cli piके लिए shell बाहर निकालता है; हैंडलर underscore_lower_snake_case → PascalCase कोPI_EVENT_MAPके माध्यम से कैनोनिकलाइज़ करता है ताकि मौजूदा बिल्ट-इन नीतियां अपरिवर्तित रूप से चलें। Tool input args कोPI_TOOL_INPUT_MAPके माध्यम से भी कैनोनिकलाइज़ किया जाता है (Pi के Read / Write / Editpathके बजायfile_pathप्रदान करते हैं; शीर्ष-स्तरीय कुंजी को मैप करनाblock-env-filesऔरblock-secrets-writeको चलने देता है —block-read-outside-cwdपहले से ही एकpathfallback था)। Pi समर्थन beta है जबकि Pi का एक्सटेंशन API और session-log लेआउट स्थिर होता है। - Hermes (hermes-agent):
~/.hermes/config.yaml(उपयोगकर्ता स्कोप केवल — Hermes के पास कोई project/local कॉन्फ़िग नहीं है)। Hermes एक Slack/Telegram गेटवे है, इसलिए एक इंस्टॉल हर प्लेटफॉर्म (Slack/Telegram/cli/cron) और आंतरिक subagents से tool कॉल को इंटरसेप्ट करता है। हुक एंट्रीज़ एक{command, timeout}pair (सेकंड में timeout) हैं एकhooks:map के तहत Hermes के snake_case ईवेंट्स द्वारा keyed (pre_tool_call/post_tool_call/on_session_start/on_session_end/subagent_stop); हैंडलर ईवेंट्स कोHERMES_EVENT_MAPके माध्यम से और टूल नाम कोHERMES_TOOL_MAPके माध्यम से कैनोनिकलाइज़ करता है ताकि बिल्ट-इन नीतियां अपरिवर्तित रूप से चलें। कॉन्फ़िग एक comment-preserving YAMLDocumentround-trip के माध्यम से संपादित किया जाता है ताकि ऑपरेटर की अन्य सेटिंग्स जीवित रहें, और installhooks_auto_accept: trueसेट करता है ताकि headless gateway (कोई TTY नहीं) consent प्रॉम्प्ट के बिना हुक चलाए। मूल्यांकनकर्ता Hermes के{"decision":"block","reason"}stdout contract उत्सर्जित करता है (Hermes exit कोड को अनदेखा करता है)। सीमाएं: Hermes के पास कोई turn-endStopईवेंट नहीं है, इसलिएrequire-*-before-stopbuiltins कभी इसके लिए नहीं चलते (inapplicable, broken नहीं);instructallow-with-logged-note में degrade होता है (कोई additional-context चैनल नहीं); और output-secret redaction (sanitize-*) shell-hook contract के ऊपर tool output को rewrite नहीं कर सकता। Hermes भी एक offline audit स्रोत है — डैशबोर्ड अपने gateway सत्रों को सीधे~/.hermes/state.dbसे पढ़ता है।
- Claude Code:
policies-config.json— failproofai को बताता है कि कौन सी नीतियों का मूल्यांकन करना है और किस पैरामीटर के साथ (सभी एजेंट CLIs में साझा)
--cli claude|codex|copilot|cursor|opencode|pi|hermes पास करें (space-separated या repeated किसी भी subset के लिए):
--cli omit किया जाता है, failproofai पता लगाता है कि कौन से एजेंट CLIs installed हैं (which claude / which codex / which copilot / which cursor-agent / which opencode / which pi / which hermes):
- एक CLI detected — prompt के बिना उस CLI को auto-select करता है।
- Multiple CLIs detected एक interactive terminal में — एक arrow-key single-select प्रॉम्प्ट दिखाता है एक
Detected (N)section (एकInstall for all N detectedaggregate row + प्रत्येक detected CLI individually के साथ) और एकNot installed (M) · install hooks ahead of timesection में grouped (हर undetected supported CLI को एक forward-install विकल्प के रूप में सूचीबद्ध करता है (↑↓ move करने के लिए, Enter select करने के लिए, ^C quit करने के लिए))। uninstall flow केवल Detected section दिखाता है। - Multiple CLIs detected एक non-interactive run में (CI, कोई TTY नहीं) — prompt के बिना सभी detected CLIs के लिए install करता है।
- None detected —
claudeको fallback करता है, एक warning के साथ कि कोई एजेंट बाइनरी PATH में नहीं मिला; हुक कमांड अभी भी लिखा जाता है ताकि यह तुरंत सक्रिय हो जाए जब आप एक install करते हैं।
policies-config.json को सीधे edit कर सकते हैं; changes अगली हुक ईवेंट पर तुरंत प्रभावी होते हैं restart की आवश्यकता नहीं है।
उदाहरण: टीम डिफ़ॉल्ट के साथ प्रोजेक्ट-लेवल कॉन्फ़िग
अपने रेपो में.failproofai/policies-config.json को कमिट करें:
.failproofai/policies-config.local.json (gitignored) बना सकता है बिना teammates को प्रभावित किए।
