> ## Documentation Index
> Fetch the complete documentation index at: https://exosphere-auto-translate-docs-20260624-1149.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

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

> कॉन्फ़िग फ़ाइल प्रारूप, तीन-स्कोप सिस्टम, और मर्ज नियम

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

***

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

तीन कॉन्फ़िगरेशन स्कोप हैं, प्राथमिकता क्रम में मूल्यांकन किए गए:

| स्कोप         | फ़ाइल पथ                                  | उद्देश्य                                             |
| ------------- | ----------------------------------------- | ---------------------------------------------------- |
| **प्रोजेक्ट** | `.failproofai/policies-config.json`       | प्रति-रेपो सेटिंग्स, संस्करण नियंत्रण में कमिट की गई |
| **स्थानीय**   | `.failproofai/policies-config.local.json` | व्यक्तिगत प्रति-रेपो ओवरराइड, gitignored             |
| **वैश्विक**   | `~/.failproofai/policies-config.json`     | सभी प्रोजेक्ट्स में उपयोगकर्ता-स्तरीय डिफ़ॉल्ट       |

जब failproofai को एक हुक ईवेंट मिलता है, तो यह वर्तमान कार्य निर्देशिका के लिए सभी तीन फ़ाइलें लोड और मर्ज करता है जो मौजूद हैं।

### मर्ज नियम

**`enabledPolicies`** - सभी तीन स्कोप का यूनियन। किसी भी स्तर पर सक्षम नीति सक्रिय है।

```text theme={null}
project:  ["block-sudo"]
local:    ["block-rm-rf"]
global:   ["block-sudo", "sanitize-api-keys"]

resolved: ["block-sudo", "block-rm-rf", "sanitize-api-keys"]  ← डिडुप्लिकेट यूनियन
```

**`policyParams`** - पहला स्कोप जो किसी नीति के लिए पैराम्स को परिभाषित करता है पूरी तरह जीतता है। नीति के पैराम्स के भीतर मानों का कोई गहरी मर्जिंग नहीं है।

```text theme={null}
project:  block-sudo → { allowPatterns: ["sudo apt-get update"] }
global:   block-sudo → { allowPatterns: ["sudo systemctl status"] }

resolved: { allowPatterns: ["sudo apt-get update"] }   ← प्रोजेक्ट जीतता है, वैश्विक अनदेखा किया जाता है
```

```text theme={null}
project:  (कोई block-sudo प्रविष्टि नहीं)
local:    (कोई block-sudo प्रविष्टि नहीं)
global:   block-sudo → { allowPatterns: ["sudo systemctl status"] }

resolved: { allowPatterns: ["sudo systemctl status"] }  ← वैश्विक तक गिरता है
```

**`customPoliciesPath`** - पहला स्कोप जो इसे परिभाषित करता है जीतता है।

**`llm`** - पहला स्कोप जो इसे परिभाषित करता है जीतता है।

***

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

```json theme={null}
{
  "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` द्वारा दिखाए गए नीति पहचानकर्ताओं से बिल्कुल मेल खाने चाहिए। पूर्ण सूची के लिए [बिल्ट-इन नीतियां](/hi/built-in-policies) देखें।

`enabledPolicies` में न आने वाली नीतियां निष्क्रिय हैं, भले ही उनके पास `policyParams` में प्रविष्टियां हों।

### `policyParams`

प्रकार: `Record<string, Record<string, unknown>>`

प्रति-नीति पैरामीटर ओवरराइड। बाहरी कुंजी नीति का नाम है; आंतरिक कुंजियां नीति-विशिष्ट हैं। प्रत्येक नीति अपने उपलब्ध पैरामीटर्स को [बिल्ट-इन नीतियों](/hi/built-in-policies) में दस्तावेज़ करती है।

यदि किसी नीति के पैरामीटर हैं लेकिन आप उन्हें निर्दिष्ट नहीं करते हैं, तो नीति के बिल्ट-इन डिफ़ॉल्ट का उपयोग किया जाता है। जो उपयोगकर्ता `policyParams` को बिल्कुल कॉन्फ़िगर नहीं करते वे पिछले संस्करणों के समान व्यवहार प्राप्त करते हैं।

किसी नीति के पैरामीटर ब्लॉक के अंदर अज्ञात कुंजियां हुक-फायर समय पर चुपचाप अनदेखी की जाती हैं लेकिन जब आप `failproofai policies` चलाते हैं तो चेतावनियों के रूप में फ्लैग की जाती हैं।

#### `hint` (क्रॉस-कटिंग)

प्रकार: `string` (वैकल्पिक)

जब नीति `deny` या `instruct` देती है तो कारण में जोड़ा जाने वाला संदेश। Claude को नीति को स्वयं संशोधित किए बिना कार्यवाही योग्य मार्गदर्शन देने के लिए इसका उपयोग करें।

किसी भी नीति प्रकार के साथ काम करता है — बिल्ट-इन, कस्टम (`custom/`), प्रोजेक्ट सम्मेलन (`.failproofai-project/`), या उपयोगकर्ता सम्मेलन (`.failproofai-user/`)।

```json theme={null}
{
  "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>` द्वारा स्वचालित रूप से सेट किया जाता है (पथ संग्रहीत होने से पहले पूर्ण में हल किया जाता है)।

फ़ाइल हर हुक ईवेंट पर नई लोड की जाती है - कोई कैशिंग नहीं है। विस्तारों के लिए [कस्टम नीतियां](/hi/custom-policies) देखें।

### सम्मेलन-आधारित नीतियां

स्पष्ट `customPoliciesPath` के अलावा, failproofai स्वचालित रूप से `.failproofai/policies/` निर्देशिकाओं से नीति फ़ाइलें खोजता है और लोड करता है:

| स्तर       | निर्देशिका                 | स्कोप                                         |
| ---------- | -------------------------- | --------------------------------------------- |
| प्रोजेक्ट  | `.failproofai/policies/`   | संस्करण नियंत्रण के माध्यम से टीम के साथ साझा |
| उपयोगकर्ता | `~/.failproofai/policies/` | व्यक्तिगत, सभी प्रोजेक्ट्स पर लागू            |

**फ़ाइल मिलान:** केवल `*policies.{js,mjs,ts}` से मेल खाने वाली फ़ाइलें लोड की जाती हैं (उदाहरण के लिए `security-policies.mjs`, `workflow-policies.js`)। निर्देशिका में अन्य फ़ाइलें अनदेखी की जाती हैं।

**कोई कॉन्फ़िग आवश्यक नहीं:** सम्मेलन नीतियों को `policies-config.json` में प्रविष्टियों की आवश्यकता नहीं है। बस फ़ाइलें निर्देशिका में डालें और वे अगली हुक ईवेंट पर उठाई जाती हैं।

**यूनियन लोडिंग:** प्रोजेक्ट और उपयोगकर्ता दोनों सम्मेलन निर्देशिकाओं को स्कैन किया जाता है। दोनों स्तरों से सभी मिलान वाली फ़ाइलें लोड की जाती हैं (`customPoliciesPath` के विपरीत जो पहले-स्कोप-जीतें का उपयोग करता है)।

अधिक विवरण और उदाहरणों के लिए [कस्टम नीतियां](/hi/custom-policies) देखें।

### `llm`

प्रकार: `object` (वैकल्पिक)

AI कॉल करने वाली नीतियों के लिए LLM क्लाइंट कॉन्फ़िगरेशन। अधिकांश सेटअप के लिए आवश्यक नहीं है।

```json theme={null}
{
  "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 के [हुक स्कीमा](https://cursor.com/docs/hooks) के अनुसार एक सपाट सरणी प्रति 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` के लिए, उदाहरण के लिए `filePath` → `file_path`, `oldString` → `old_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 प्लग-इन दस्तावेज़](https://opencode.ai/docs/plugins/) देखें।
  * **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 हुक दस्तावेज़](https://geminicli.com/docs/hooks/) देखें।
* **`policies-config.json`** — failproofai को बताता है कि कौन सी नीतियों का मूल्यांकन करना है और किन पैराम्स के साथ (सभी एजेंट CLI में साझा)

किसी विशिष्ट एजेंट को लक्षित करने के लिए `--cli claude|codex|copilot|cursor|opencode|pi|gemini` पास करें (स्पेस-अलग या किसी भी सबसेट के लिए दोहराया गया):

```bash theme={null}
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` को अपने रेपो में कमिट करें:

```json theme={null}
{
  "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) बना सकता है व्यक्तिगत ओवरराइड के लिए सहकर्मियों को प्रभावित किए बिना।
