मुख्य सामग्री पर जाएं
failproofai JSON कॉन्फ़िगरेशन फ़ाइलों का उपयोग करता है यह नियंत्रित करने के लिए कि कौन सी नीतियां सक्रिय हैं, वे कैसे व्यवहार करती हैं, और कस्टम नीतियां कहां से लोड की जाती हैं। कॉन्फ़िगरेशन आपकी टीम के साथ साझा करना आसान बनाने के लिए डिज़ाइन किया गया है - इसे अपने रेपो में कमिट करें और हर डेवलपर को समान एजेंट सेफ्टी नेट मिलता है।

कॉन्फ़िगरेशन स्कोप

तीन कॉन्फ़िगरेशन स्कोप हैं, प्राथमिकता क्रम में मूल्यांकन किए गए:
स्कोपफ़ाइल पथउद्देश्य
प्रोजेक्ट.failproofai/policies-config.jsonप्रति-रेपो सेटिंग्स, संस्करण नियंत्रण में कमिट की गई
स्थानीय.failproofai/policies-config.local.jsonव्यक्तिगत प्रति-रेपो ओवरराइड, gitignored
वैश्विक~/.failproofai/policies-config.jsonसभी प्रोजेक्ट्स में उपयोगकर्ता-स्तरीय डिफ़ॉल्ट
जब failproofai को एक हुक ईवेंट मिलता है, तो यह वर्तमान कार्य निर्देशिका के लिए सभी तीन फ़ाइलें लोड और मर्ज करता है जो मौजूद हैं।

मर्ज नियम

enabledPolicies - सभी तीन स्कोप का यूनियन। किसी भी स्तर पर सक्षम नीति सक्रिय है।
project:  ["block-sudo"]
local:    ["block-rm-rf"]
global:   ["block-sudo", "sanitize-api-keys"]

resolved: ["block-sudo", "block-rm-rf", "sanitize-api-keys"]  ← डिडुप्लिकेट यूनियन
policyParams - पहला स्कोप जो किसी नीति के लिए पैराम्स को परिभाषित करता है पूरी तरह जीतता है। नीति के पैराम्स के भीतर मानों का कोई गहरी मर्जिंग नहीं है।
project:  block-sudo → { allowPatterns: ["sudo apt-get update"] }
global:   block-sudo → { allowPatterns: ["sudo systemctl status"] }

resolved: { allowPatterns: ["sudo apt-get update"] }   ← प्रोजेक्ट जीतता है, वैश्विक अनदेखा किया जाता है
project:  (कोई block-sudo प्रविष्टि नहीं)
local:    (कोई block-sudo प्रविष्टि नहीं)
global:   block-sudo → { allowPatterns: ["sudo systemctl status"] }

resolved: { allowPatterns: ["sudo systemctl status"] }  ← वैश्विक तक गिरता है
customPoliciesPath - पहला स्कोप जो इसे परिभाषित करता है जीतता है। llm - पहला स्कोप जो इसे परिभाषित करता है जीतता है।

कॉन्फ़िग फ़ाइल प्रारूप

{
  "enabledPolicies": [
    "block-sudo",
    "block-rm-rf",
    "block-push-master",
    "sanitize-api-keys",
    "sanitize-jwt",
    "block-env-files",
    "block-read-outside-cwd"
  ],
  "policyParams": {
    "block-sudo": {
      "allowPatterns": ["sudo systemctl status", "sudo journalctl"]
    },
    "block-push-master": {
      "protectedBranches": ["main", "release", "prod"]
    },
    "block-rm-rf": {
      "allowPaths": ["/tmp"]
    },
    "block-read-outside-cwd": {
      "allowPaths": ["/shared/data", "/opt/company"]
    },
    "sanitize-api-keys": {
      "additionalPatterns": [
        { "regex": "myco_[A-Za-z0-9]{32}", "label": "MyCo API key" }
      ]
    },
    "warn-large-file-write": {
      "thresholdKb": 512
    }
  },
  "customPoliciesPath": "/home/alice/myproject/my-policies.js"
}

फ़ील्ड संदर्भ

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/)।
{
  "policyParams": {
    "block-force-push": {
      "hint": "इसके बजाय एक ताजी शाखा बनाने का प्रयास करें।"
    },
    "block-sudo": {
      "allowPatterns": ["sudo apt-get"],
      "hint": "sudo के बिना सीधे apt-get का उपयोग करें।"
    },
    "custom/my-policy": {
      "hint": "पहले उपयोगकर्ता से अनुमोदन मांगें।"
    }
  }
}
जब 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 क्लाइंट कॉन्फ़िगरेशन। अधिकांश सेटअप के लिए आवश्यक नहीं है।
{
  "llm": {
    "model": "claude-sonnet-4-6",
    "apiKey": "sk-ant-..."
  }
}

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(...) निर्देश के लिए AND Stop / SubagentStop अस्वीकार के लिए (अगले उपयोगकर्ता संदेश के रूप में अस्वीकार कारण जमा करता है — एकमात्र बल-पुनः प्रयास चैनल क्योंकि session.idle केवल सूचना है और इससे फेंकना एक कोई-ऑप है), और allow के लिए कोई-ऑप। शिम दोनों उपकरण नामों को सामान्य करता है (लोअरकेस → PascalCase OPENCODE_TOOL_MAP के माध्यम से) और टूल-इनपुट आर्ग कुंजियां (camelCase → snake_case OPENCODE_TOOL_INPUT_MAP के माध्यम से Read / Write / Edit के लिए, उदाहरण के लिए filePathfile_path, oldStringold_string) बाइनरी को भेजने से पहले, ताकि पथ-जांच बिल्ट-इन जैसे block-read-outside-cwd, block-env-files, और block-secrets-write OpenCode उपकरण कॉल पर अपरिवर्तित रहें। सत्र 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 / Edit file_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 हुक दस्तावेज़ देखें।
  • policies-config.json — failproofai को बताता है कि कौन सी नीतियों का मूल्यांकन करना है और किन पैराम्स के साथ (सभी एजेंट CLI में साझा)
किसी विशिष्ट एजेंट को लक्षित करने के लिए --cli claude|codex|copilot|cursor|opencode|pi|gemini पास करें (स्पेस-अलग या किसी भी सबसेट के लिए दोहराया गया):
failproofai policies --install --cli codex --scope project
failproofai policies --install --cli copilot --scope project
failproofai policies --install --cli cursor --scope project
failproofai policies --install --cli opencode --scope project
failproofai policies --install --cli pi --scope project
failproofai policies --install --cli gemini --scope project
failproofai policies --install --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 को अपने रेपो में कमिट करें:
{
  "enabledPolicies": [
    "block-sudo",
    "block-rm-rf",
    "block-push-master",
    "sanitize-api-keys",
    "block-env-files"
  ],
  "policyParams": {
    "block-push-master": {
      "protectedBranches": ["main", "release", "hotfix"]
    }
  }
}
प्रत्येक डेवलपर तब .failproofai/policies-config.local.json (gitignored) बना सकता है व्यक्तिगत ओवरराइड के लिए सहकर्मियों को प्रभावित किए बिना।