title: अंतर्निहित नीतियाँ description: “39 अंतर्निहित नीतियाँ जो एजेंट की आम विफलताओं को पकड़ती हैं” icon: shield
failproofai के साथ 39 अंतर्निहित नीतियाँ आती हैं जो एजेंट की आम विफलताओं को पकड़ती हैं। प्रत्येक नीति एक विशिष्ट हुक ईवेंट प्रकार और उपकरण नाम पर सक्रिय होती है। उन्नीस नीतियाँ पैरामीटर स्वीकार करती हैं जो आपको कोड लिखे बिना उनके व्यवहार को ट्यून करने देती हैं। पाँच वर्कफ़्लो नीतियाँ Claude के रुकने से पहले एक commit → push → PR → CI पाइपलाइन को लागू करती हैं।अवलोकन
नीतियाँ श्रेणियों में विभाजित हैं:block-— एजेंट को आगे बढ़ने से रोकें।warn-— एजेंट को अतिरिक्त संदर्भ दें ताकि यह स्वयं को ठीक कर सके।sanitize-— एजेंट को देखने से पहले उपकरण आउटपुट से संवेदनशील डेटा हटाएँ।
नेमस्पेस
प्रत्येक नीति एक<namespace>/<name> स्लॉट में रहती है। अंतर्निहित नीतियाँ failproofai/ नेमस्पेस से संबंधित हैं — उदाहरण के लिए, failproofai/sanitize-jwt। नेमस्पेस तब collision को रोकता है जब आप कस्टम या तीसरे पक्ष की नीतियों को समान छोटे नामों के साथ भी लोड करते हैं।
आपके कॉन्फ़िग में आप अंतर्निहित को उसके छोटे नाम या योग्य नाम दोनों से संदर्भित कर सकते हैं; दोनों रूप एक ही नीति को resolve करते हैं:
/ नहीं है, failproofai इसे default नेमस्पेस failproofai के अंतर्गत मानता है। नाम जिनमें पहले से / है (जैसे myorg/foo, custom/my-hook) जैसे-जैसे रखे जाते हैं।
require-— Stop ईवेंट को ब्लॉक करें जब तक शर्तें पूरी न हों।
खतरनाक आदेश
एजेंटों को उन ऑपरेशन चलाने से रोकें जो को पूर्ववत करना कठिन हो या जो होस्ट सिस्टम को नुकसान पहुंचा सकते हैं।block-sudo
ईवेंट: PreToolUse (Bash)डिफ़ॉल्ट: कोई भी
sudo कमांड deny करता है।
sudo कीवर्ड सहित invocations को ब्लॉक करता है। पैटर्न मिलान कच्ची स्ट्रिंग के बजाय parsed कमांड टोकन पर किया जाता है, shell operator injection के माध्यम से bypass को रोकने के लिए।
पैरामीटर:
उदाहरण:
sudo systemctl status nginx अनुमत है, लेकिन sudo rm /etc/hosts deny किया जाता है।
पैटर्न को कच्ची कमांड स्ट्रिंग के बजाय parsed tokens के विरुद्ध मिलाया जाता है। यह appended shell operators के माध्यम से bypass को रोकता है (उदाहरण के लिए
sudo systemctl status x; rm -rf / sudo systemctl status * से match नहीं करता)।block-rm-rf
ईवेंट: PreToolUse (Bash)डिफ़ॉल्ट:
rm -rf, rm -fr, और समान recursive deletion रूपों को deny करता है।
पैरामीटर:
उदाहरण:
block-curl-pipe-sh
ईवेंट: PreToolUse (Bash)डिफ़ॉल्ट:
curl <url> | bash, curl <url> | sh, wget <url> | bash, और समान patterns को deny करता है।
कोई पैरामीटर नहीं।
block-failproofai-commands
ईवेंट: PreToolUse (Bash)डिफ़ॉल्ट: उन कमांडों को deny करता है जो failproofai को स्वयं को uninstall या disable करने के लिए होंगे (उदाहरण के लिए
npm uninstall failproofai, failproofai policies --uninstall)।
कोई पैरामीटर नहीं।
infra आदेश
कोडिंग एजेंटों को infrastructure CLIs चलाने या CI/CD pipelines को trigger करने से रोकें। इस श्रेणी में सभी नीतियाँ opt-in हैं (defaultEnabled: false) — एजेंट जिन्हें वैध रूप से kubectl, terraform, आदि को कॉल करने की आवश्यकता है, जब तक आप नीति को enable नहीं करते, तब तक बाधित नहीं होंगे। जब enabled हो, तो matched CLI का हर invocation deny किया जाता है जब तक कमांड allowPatterns में एक entry से match न हो।
पैटर्न grammar block-sudo के समान है: tokens को parsed argv के विरुद्ध मिलाया जाता है, * एक token के लिए wildcard है, और कोई भी कमांड जिसमें एक standalone shell operator (&&, ||, |, ;) या embedded shell metacharacters वाला token है, injection bypasses को रोकने के लिए allowlist matching से पहले reject किया जाता है।
block-kubectl
ईवेंट: PreToolUse (Bash)डिफ़ॉल्ट: कोई भी
kubectl invocation deny करता है।
पैरामीटर:
उदाहरण:
kubectl get pods अनुमत है लेकिन kubectl apply -f deploy.yaml deny किया जाता है।
block-terraform
ईवेंट: PreToolUse (Bash)डिफ़ॉल्ट: कोई भी
terraform या tofu (OpenTofu) invocation deny करता है।
पैरामीटर:
उदाहरण:
block-aws-cli
ईवेंट: PreToolUse (Bash)डिफ़ॉल्ट: कोई भी
aws CLI invocation deny करता है।
पैरामीटर:
उदाहरण:
block-gcloud
ईवेंट: PreToolUse (Bash)डिफ़ॉल्ट: कोई भी
gcloud (Google Cloud) CLI invocation deny करता है।
पैरामीटर:
उदाहरण:
block-az-cli
ईवेंट: PreToolUse (Bash)डिफ़ॉल्ट: कोई भी
az (Azure) CLI invocation deny करता है।
पैरामीटर:
उदाहरण:
block-helm
ईवेंट: PreToolUse (Bash)डिफ़ॉल्ट: कोई भी
helm invocation deny करता है।
पैरामीटर:
उदाहरण:
block-gh-pipeline
ईवेंट: PreToolUse (Bash)डिफ़ॉल्ट: निम्नलिखित
gh CLI subcommands को deny करता है जो state को mutate करते हैं या pipelines को trigger करते हैं:
gh workflow run,gh workflow enable,gh workflow disablegh run rerun,gh run cancelgh pr mergegh release create,gh release deletegh cache deletegh secret set,gh secret delete
gh subcommands जैसे gh pr view, gh pr list, gh run list, gh release view, और gh api repos/.../... इस नीति से match नहीं होते हैं — वे workflow checks के लिए नियमित रूप से आवश्यक हैं (failproofai का अपना require-ci-green-before-stop सहित)।
पैरामीटर:
उदाहरण:
गोपनीयता (सैनिटाइज़र)
एजेंटों को credentials को अपने context या output में leak करने से रोकें। Sanitizer नीतियाँ PostToolUse ईवेंट पर fire होती हैं। जब Claude Bash कमांड चलाता है, फाइल पढ़ता है, या कोई भी tool कॉल करता है, ये नीतियाँ आउटपुट को inspect करती हैं इससे पहले कि यह Claude को वापस दिया जाए। यदि एक secret pattern detect किया जाता है, तो नीति एक deny decision return करती है जो आउटपुट को वापस जाने से रोकता है।sanitize-jwt
ईवेंट: PostToolUse (सभी tools)डिफ़ॉल्ट: JWT tokens को redact करता है (तीन base64url segments
. से separated)।
कोई पैरामीटर नहीं।
sanitize-api-keys
ईवेंट: PostToolUse (सभी tools)डिफ़ॉल्ट: सामान्य API key formats को redact करता है: Anthropic (
sk-ant-), OpenAI (sk-), GitHub PATs (ghp_), AWS access keys (AKIA), Stripe keys (sk_live_, sk_test_), और Google API keys (AIza)।
पैरामीटर:
उदाहरण:
sanitize-connection-strings
ईवेंट: PostToolUse (सभी tools)डिफ़ॉल्ट: डेटाबेस connection strings को redact करता है जिनमें embedded credentials हैं (उदाहरण के लिए
postgresql://user:password@host/db)।
कोई पैरामीटर नहीं।
sanitize-private-key-content
ईवेंट: PostToolUse (सभी tools)डिफ़ॉल्ट: PEM blocks को redact करता है (
-----BEGIN PRIVATE KEY-----, -----BEGIN RSA PRIVATE KEY-----, आदि)।
कोई पैरामीटर नहीं।
sanitize-bearer-tokens
ईवेंट: PostToolUse (सभी tools)डिफ़ॉल्ट:
Authorization: Bearer <token> headers को redact करता है जहाँ token 20 या अधिक characters है।
कोई पैरामीटर नहीं।
वातावरण
संवेदनशील environment configuration को एजेंटों द्वारा read या expose किए जाने से बचाएँ।block-env-files
ईवेंट: PreToolUse (Bash, Read)डिफ़ॉल्ट:
.env files को cat .env, file path के रूप में .env के साथ Read tool calls आदि के माध्यम से पढ़ने को deny करता है।
.envrc या अन्य environment-adjacent files को नहीं रोकता — केवल exactly .env नाम वाली files को।
कोई पैरामीटर नहीं।
protect-env-vars
ईवेंट: PreToolUse (Bash)डिफ़ॉल्ट: उन कमांडों को deny करता है जो environment variables को print करते हैं:
printenv, env, echo $VAR।
कोई पैरामीटर नहीं।
फाइल एक्सेस
एजेंटों को project boundaries के भीतर और sensitive files से दूर रखें।block-read-outside-cwd
ईवेंट: PreToolUse (Read, Bash)डिफ़ॉल्ट: project root के बाहर की files को पढ़ने को deny करता है। boundary
CLAUDE_PROJECT_DIR है (एक बार प्रति session Claude Code द्वारा set), जिसमें fallback होता है session के current working directory में जब यह variable unset हो। live cwd के बजाय project root का उपयोग करने का मतलब है कि boundary स्थिर रहता है भले ही Claude subdirectory में cd कर जाए।
पैरामीटर:
उदाहरण:
block-secrets-write
ईवेंट: PreToolUse (Write, Edit)डिफ़ॉल्ट: private keys और certificates के लिए आमतौर पर उपयोग की जाने वाली files को write करने को deny करता है:
id_rsa, id_ed25519, *.key, *.pem, *.p12, *.pfx।
पैरामीटर:
उदाहरण:
Git
accidental pushes, force-pushes, और branch mistakes को रोकें जो undo करना कठिन हो।block-push-master
ईवेंट: PreToolUse (Bash)डिफ़ॉल्ट:
git push origin main और git push origin master को deny करता है।
पैरामीटर:
उदाहरण:
block-work-on-main
ईवेंट: PreToolUse (Bash)डिफ़ॉल्ट:
git commit, git merge, git rebase, और git cherry-pick को deny करता है जबकि working tree main या master पर हो। Branch creation और switching (git checkout, git checkout -b, git switch, git switch -c) प्रभावित नहीं होते।
पैरामीटर:
block-force-push
ईवेंट: PreToolUse (Bash)डिफ़ॉल्ट:
git push --force और git push -f को deny करता है।
कोई policy-specific पैरामीटर नहीं। cross-cutting hint का उपयोग करें alternatives suggest करने के लिए:
warn-git-amend
ईवेंट: PreToolUse (Bash)डिफ़ॉल्ट: Claude को सावधानी से proceed करने का instruct करता है जब
git commit --amend चलाया जाए। कमांड को block नहीं करता।
कोई पैरामीटर नहीं।
warn-git-stash-drop
ईवेंट: PreToolUse (Bash)डिफ़ॉल्ट: Claude को
git stash drop चलाने से पहले confirm करने का instruct करता है। कमांड को block नहीं करता।
कोई पैरामीटर नहीं।
warn-all-files-staged
ईवेंट: PreToolUse (Bash)डिफ़ॉल्ट: Claude को review करने का instruct करता है कि यह क्या stage कर रहा है जब
git add -A या git add . चलाया जाए। कमांड को block नहीं करता।
कोई पैरामीटर नहीं।
डेटाबेस
destructive SQL operations को execute होने से पहले पकड़ें अपने database के विरुद्ध।warn-destructive-sql
ईवेंट: PreToolUse (Bash)डिफ़ॉल्ट: Claude को confirm करने का instruct करता है SQL चलाने से पहले जिसमें
DROP TABLE, DROP DATABASE, या WHERE clause के बिना DELETE हो।
कोई पैरामीटर नहीं।
warn-schema-alteration
ईवेंट: PreToolUse (Bash)डिफ़ॉल्ट: Claude को
ALTER TABLE statements चलाने से पहले confirm करने का instruct करता है।
कोई पैरामीटर नहीं।
चेतावनियाँ
एजेंटों को potentially risky लेकिन non-destructive operations से पहले extra context दें।warn-large-file-write
ईवेंट: PreToolUse (Write)डिफ़ॉल्ट: Claude को 1024 KB से बड़ी files write करने से पहले confirm करने का instruct करता है। पैरामीटर:
उदाहरण:
Hook handler payloads पर 1 MB stdin limit enforce करता है। इस नीति को small content के साथ test करने के लिए,
thresholdKb को 1024 से काफी कम value में set करें।warn-package-publish
ईवेंट: PreToolUse (Bash)डिफ़ॉल्ट: Claude को
npm publish चलाने से पहले confirm करने का instruct करता है।
कोई पैरामीटर नहीं।
warn-background-process
ईवेंट: PreToolUse (Bash)डिफ़ॉल्ट: Claude को
nohup, &, disown, या screen के via background processes launch करते समय सावधान रहने का instruct करता है।
कोई पैरामीटर नहीं।
warn-global-package-install
ईवेंट: PreToolUse (Bash)डिफ़ॉल्ट: Claude को
npm install -g, yarn global add, या virtual environment के बिना pip install चलाने से पहले confirm करने का instruct करता है।
कोई पैरामीटर नहीं।
पैकेज मैनेजर
enforce करें कि एजेंट किस पैकेज मैनेजर को use करने की अनुमति है।prefer-package-manager
ईवेंट: PreToolUse (Bash)डिफ़ॉल्ट: Disabled। जब enabled हो, तो
allowed list में नहीं होने वाली कोई भी पैकेज मैनेजर command को block करता है और Claude को allowed manager का उपयोग करके command को rewrite करने का कहता है।
Detects: pip, pip3, python -m pip, npm, npx, yarn, pnpm, pnpx, bun, bunx, uv, poetry, pipenv, conda, cargo।
Built-in block list covers: pip, pip3, npm, npx, yarn, pnpm, pnpx, bun, bunx, uv, poetry, pipenv, conda, cargo। इस list में नहीं होने वाले managers को append करने के लिए
blocked का उपयोग करें।
उदाहरण कॉन्फ़िगरेशन:
pip install flask और pdm install flask दोनों deny किए जाते हैं Claude को एक message के साथ जो कहता है uv या bun का उपयोग करने के लिए। uv pip install flask जैसी commands अनुमत हैं क्योंकि uv allowlist में है और पहले check किया जाता है।
AI व्यवहार
detect करें जब एजेंट stuck हों या unexpectedly behave करें।warn-repeated-tool-calls
ईवेंट: PreToolUse (सभी tools)डिफ़ॉल्ट: Claude को reconsider करने का instruct करता है जब same tool को 3+ times identical parameters के साथ call किया जाए — एक common sign कि एजेंट एक loop में stuck है। कोई पैरामीटर नहीं।
वर्कफ़्लो
एक disciplined end-of-session workflow को enforce करें। ये नीतियाँ Stop event पर fire होती हैं और एजेंट को stop करने से deny करती हैं जब तक प्रत्येक condition meet न हो। वे एक natural dependency chain का follow करती हैं: commit → push → PR → CI। यदि एक नीति deny करती है, तो chain में बाद की नीतियाँ skip किए जाते हैं (deny short-circuits)। सभी वर्कफ़्लो नीतियाँ fail-open हैं: यदि required tool available नहीं है (उदाहरण के लिएgh installed नहीं, कोई git remote नहीं), तो नीति allow करती है एक informational message के साथ जो explain करता है कि check क्यों skip किया गया।
Per-CLI Stop semantics
Stop enforcement छहों supported CLIs में थोड़ा अलग दिखता है क्योंकि प्रत्येक एक अलग “agent finished” hook contract expose करता है। outcome same है — एजेंट workflow gate failing होने पर stop नहीं हो सकता — लेकिन mechanics अलग हैं। नीचे की table summarize करती है; केवल Pi के पास एक user-visible quirk है जो समझने के लायक है इससे पहले आप एकrequire-*-before-stop नीति को enable करें।
Pi limitation. Pi के
AgentEndEvent (Claude के Stop hook के upstream equivalent) के पास कोई Result type नहीं है — जब यह fires, Pi के agent loop पहले ही exit हो चुका है। Pi को Claude / Copilot / Cursor / OpenCode के तरीके से same loop को retry के लिए force नहीं किया जा सकता। failproofai gate को Pi के before_agent_start event में shift करता है (जो next user prompt के बाद fires) ताकि workflow check अभी भी enforce हो, बस next turn पर current के बजाय।इसका व्यावहारिक मतलब क्या है:- Pi stop करने के बाद, deny reason को in-memory में Pi session id द्वारा keyed capture किया जाता है। बिल्कुल next prompt आप same Pi process में submit करते हैं drains it: LLM को अपने system prompt के top में
MANDATORY ACTION REQUIREDdirective दिखाई देता है, commit करता है (या push / PR खोलता है / CI wait करता है), और फिर ही आपके request के साथ continue करता है। Captured deny reason एक one-shot है — एक बार drain होने के बाद, gate clear है। - Gate Pi के process lifetime द्वारा bounded है। यदि आप Pi को
Ctrl+Cकरते हैं या turns के बीच quit करते हैं, in-memory entry process के साथ drop हो जाता है और gate miss हो जाता है। Claude, Copilot, Cursor, और OpenCode के पास same bound है (एजेंट को kill करो और gate miss हो जाता है) — Pi बस इसे अधिक visible बनाता है क्योंकि एजेंट visibly exit होता है gate firing से पहले। - Pending deny भी
session_shutdownपर किसी भी कारण के लिए clear किया जाता है (new/resume/fork/quit), तो prior session से एक stale gate same Pi process में started fresh session में leak नहीं हो सकता।
Stop नीतियों के अंतर्गत किसी और पाँच supported CLIs के। हम Pi upstream को track कर रहे हैं एक future Result type के लिए AgentEndEvent पर जो हमें इस gap को close करने देगा।require-commit-before-stop
ईवेंट: Stopडिफ़ॉल्ट: Stopping को deny करता है जब uncommitted changes हों (modified, staged, या untracked files)। Informational message return करता है जब working directory clean हो। कोई पैरामीटर नहीं।
require-push-before-stop
ईवेंट: Stopडिफ़ॉल्ट: Stopping को deny करता है जब unpushed commits हों या जब current branch के पास कोई remote tracking branch नहीं हो। Suggest करता है
git push -u tracking branch create करने के लिए यदि आवश्यक हो। Fails open यदि कोई remote configured नहीं है।
पैरामीटर:
उदाहरण:
require-pr-before-stop
ईवेंट: Stopडिफ़ॉल्ट: Stopping को deny करता है जब current branch के लिए कोई pull request exist न हो, या जब existing PR merge किए बिना closed हो। Instruct करता है Claude को
gh pr create के साथ PR create करने के लिए। जब PR merged हो, नीति allow करती है (काम ship हो गया है) और message hint देता है branch को switch करने के लिए (git checkout main && git pull)।
कोई पैरामीटर नहीं।
इस नीति के लिए GitHub CLI (
gh) को installed और authenticated होना आवश्यक है।
एक personal access token के साथ gh auth login चलाएँ जिसके पास repo scope हो pull requests में read access के लिए। यदि gh installed नहीं है या authenticated नहीं है, तो नीति fail open होती है और Claude को reason report करती है।require-no-conflicts-before-stop
ईवेंट: Stopडिफ़ॉल्ट: Stopping को deny करता है जब current branch base branch में cleanly merge न हो सकता हो। नीति पहले confirm करती है कि एक
OPEN PR GitHub पर branch के लिए exist करता है — बिना उसके, कोई merge target नहीं है enforce करने के लिए, तो पूरी नीति short-circuit करके allow होती है। एक बार OPEN PR confirm होने के बाद, दो independent probes चलते हैं:
- Local —
git merge-tree --write-tree --name-only origin/<baseBranch> HEAD। Conflict पर, deny message conflicted files को name करता है ताकि Claude को पता चले कि क्या resolve करना है। - GitHub —
gh pr view --json mergeable,stateresult को reuse करता है पहले से ही precheck में fetch किया गया। Conflicts को catch करता है जो एक stale localorigin/<baseBranch>को miss करेगा (उदाहरण के लिए कोई last fetch के बादmainपर एक conflicting PR land करता है)। एकCONFLICTINGresult deny करता है। एकUNKNOWNresult भी deny करता है और Claude को instruct करता है ~10 seconds wait करने और re-check करने के लिए stop attempt करने से पहले — यह false negatives को रोकता है जबकि GitHub recompute करता है।
gh installed नहीं है, branch के लिए कोई PR exist नहीं है, PR की state OPEN नहीं है (उदाहरण के लिए MERGED, CLOSED), या gh pr view unparseable output return करता है। भी fail open करता है जब origin/<baseBranch> locally missing है या जब कोई commits base से ahead नहीं हैं — वे Layer 1 fall-throughs अभी भी cached PR mergeability को consult करते हैं allow करने से पहले।
पैरामीटर:
GitHub CLI (
gh) इस नीति के लिए आवश्यक है। नीति gh pr view का उपयोग करता है confirm करने के लिए कि branch के लिए एक OPEN PR exist करता है किसी भी conflict probe को चलाने से पहले — बिना gh के, नीति short-circuit करके allow करती है। Pull requests में read access के लिए repo scope के साथ personal access token के साथ gh auth login चलाएँ।require-ci-green-before-stop
ईवेंट: Stopडिफ़ॉल्ट: Stopping को deny करता है जब CI checks failing या अभी चल रही हों current branch पर। दोनों GitHub Actions workflow runs और third-party bot checks को check करता है (उदाहरण के लिए CodeRabbit, SonarCloud, Codecov)।
skipped, cancelled, और neutral conclusions को non-failing के रूप में treat करता है (latter उदाहरण के लिए Socket Security alerts को outside contributor PRs पर cover करता है, जहाँ app intentionally neutral report करता है success/failure के बजाय)। Informational message return करता है जब सभी checks pass करते हैं।
कोई पैरामीटर नहीं।
यह नीति GitHub CLI (
gh) को installed और authenticated होना आवश्यक करती है।
Actions workflow runs और Checks API में read access के लिए repo scope के साथ personal access token के साथ gh auth login चलाएँ। यदि gh installed नहीं है या authenticated नहीं है, तो नीति fail open होती है और Claude को reason report करती है।व्यक्तिगत नीतियों को disable करना
अपने कॉन्फ़िग मेंenabledPolicies से एक विशिष्ट नीति को remove करें, या dashboard के Policies tab में इसे toggle off करें।
enabledPolicies में listed नहीं हैं run नहीं होती, भले ही policyParams entries उनके लिए exist करें।
