Claude Code के अनुमति नियम settings.json में allow / ask / deny से तय करते हैं कि कौन से टूल, कमांड, फ़ाइल और domain बिना पुष्टि अनुमत हैं, पुष्टि माँगते हैं या निषिद्ध हैं। टीम इन्हें साझा करके मेल खाते कॉल रोक सकती है और पहले समीक्षित नियमित काम की मंज़ूरी घटा सकती है। एक ही प्रोग्राम के वैकल्पिक रूप या स्क्रिप्ट के रास्ते ये एक समान नहीं रोकते।

यह गाइड बताती है कि परमिशन रूल्स क्या हैं (और वे परमिशन मोड्स से कैसे अलग हैं), allow/ask/deny की प्राथमिकता, रूल सिंटैक्स, settings.json की पदानुक्रम, और व्यावहारिक रेसिपी — सब आधिकारिक स्पेसिफ़िकेशन पर आधारित।

CLAUDE CODE · PERMISSION RULES

allow / ask / deny से बारीक नियंत्रण

मूल्यांकन क्रम deny → ask → allow (पहला मैच जीतता है)

⛔

deny

मेल खाने वाले deny नियम पहले जाँचें

❓

ask

हर बार पुष्टि माँगता है

✅

allow

बिना पूछे चलता है

1. परमिशन रूल्स क्या हैं (मोड्स से अंतर)

Claude Code में स्तरों वाला अनुमति तंत्र है। Manual को आधार मानें तो कार्य क्षेत्र में पढ़ने के लिए सामान्यतः पुष्टि नहीं चाहिए, जबकि संपादन और Bash चलाने के लिए चाहिए; अंतर्निहित केवल पढ़ने वाले कमांड और allow जैसे अपवाद हैं। इस आधार पर नियम व्यक्तिगत अपवाद तय करते हैं (स्रोत: Claude Code का आधिकारिक “Configure permissions”)।

नियमों को अनुमति मोड से भ्रमित करना आसान है। मोड सामान्य पुष्टि नीति तय करते हैं (default, acceptEdits, auto आदि); नियम व्यक्तिगत टूल और कमांड तय करते हैं। दोनों साथ काम करते हैं: मोड आधार देते हैं, नियम “हमेशा इसे अनुमति दें” या “इस कॉल को रोकें” से उसे बदलते हैं।

💡 रूल्स को Claude Code लागू करता है, मॉडल नहीं। आपका प्रॉम्प्ट या CLAUDE.md यह आकार देता है कि Claude क्या करने की कोशिश करे, पर यह नहीं कि क्या अनुमत है। एक्सेस देने या रद्द करने के लिए /permissions, रूल्स, मोड्स, या किसी PreToolUse हुक का उपयोग करें।

2. allow / ask / deny और प्राथमिकता

तीन रूल प्रकार होते हैं। /permissions कमांड इन्हें सूचीबद्ध और संपादित करता है (और दिखाता है कि प्रत्येक किस settings.json से आ रहा है)।

ALLOW

बिना पूछे चलता है

निर्दिष्ट टूल/कमांड मैनुअल मंज़ूरी के बिना चलता है।

ASK

हर बार पुष्टि माँगता है

हर उपयोग पर पुष्टि माँगता है। मैच होने वाला ask तब भी पूछता है जब कोई व्यापक allow भी मैच कर रहा हो।

DENY

वर्जित (सर्वोच्च प्राथमिकता)

सेटिंग के नियमों में मेल खाने वाला deny दूसरे स्रोत के allow से नहीं पलटता।

नियम deny → ask → allow क्रम में जाँचे जाते हैं। सामान्य सेटिंग नियमों में पहला मिलान निर्णय देता है; विशिष्टता क्रम नहीं बदलती। व्यापक Bash(aws *) deny, अधिक विशिष्ट Bash(aws s3 ls) allow को भी रोकता है। मुख्य बात: allow मेल खाते deny को नहीं पलटता। Read/Edit के सापेक्ष पथों का नकारात्मक पैटर्न अलग सुविधा है।

⚠️ deny के दो रूप अलग व्यवहार करते हैं: केवल टूल का नाम जैसे Bash उस टूल को Claude के संदर्भ से पूरी तरह हटा देता है (Claude उसे कभी देखता ही नहीं)। एक दायरे वाला रूल जैसे Bash(rm *) टूल को उपलब्ध रखता है और केवल मैच होने वाले कॉल्स को ब्लॉक करता है।

3. रूल सिंटैक्स (Tool(specifier))

प्रारूप है Tool (सब कुछ) या Tool(specifier) (विशिष्ट)। हर टूल की अपनी specifier शैली होती है।

टूलउदाहरणअर्थ
BashBash(npm run *)npm run से शुरू होने वाले कमांड्स (अंत में * = शब्द-सीमा)
Read / EditRead(./.env)मौजूदा डायरेक्टरी की .env पढ़ना (gitignore-शैली पथ)
WebFetchWebFetch(domain:example.com)example.com पर फ़ेच करता है
MCPmcp__github__get_*github सर्वर के get_ टूल्स
AgentAgent(Explore)Explore सबएजेंट

MCP नियम केवल उसी सर्वर पर लागू होते हैं जिसका नाम उनमें लिया गया है। v2.1.299 (14 अक्टूबर 2026) से mcp__a a__b या a_ नाम वाले किसी दूसरे सर्वर को अनुमति नहीं देता। जिस सर्वर के नाम में __ है या जो _ पर समाप्त होता है, उसके लिए सामान्यीकृत नाम के पूरे हिस्से के बाद __* लिखें, जैसे mcp__reports__v2__* (आधिकारिक और चेंजलॉग, 18 अक्टूबर 2026 को जाँचा गया)।

Bash वाइल्डकार्ड कहीं भी आ सकते हैं। Bash(ls *) (स्पेस + *) ls -la से मैच करता है पर lsof से नहीं (शब्द-सीमा); Bash(ls*) (बिना स्पेस) दोनों से मैच करता है। अंत में :* लगाना * के समतुल्य है।

// निर्दिष्ट कॉल अनुमत या निषिद्ध करें; यह उसी प्रोग्राम के सभी रास्ते नहीं रोकता
{
  "permissions": {
    "allow": [
      "Bash(npm run *)",
      "Bash(git commit *)"
    ],
    "deny": [
      "Bash(git push *)"
    ]
  }
}

जुड़े हुए कमांड का हर उपकमांड मिलता है और पहचाने गए wrappers जाँच से पहले हटते हैं। लेकिन एक ही प्रोग्राम के वैकल्पिक रूप हमेशा नहीं मिलते: Bash(git push *), git -C . push से नहीं मिलता। अंतर्निहित केवल पढ़ने वाले कमांड सामान्यतः पुष्टि छोड़ते हैं, पर कार्य क्षेत्र से बाहर पढ़ने की सीमा और auto क्लासिफ़ायर का इंतज़ार अलग शर्तें हैं।

Read/Edit पथ gitignore शब्दार्थ का पालन करते हैं, जिनमें चार एंकर होते हैं:

रूपएंकरउदाहरण
//pathफ़ाइलसिस्टम निरपेक्षRead(//tmp/x)
~/pathहोमRead(~/.ssh/**)
/pathसेटिंग्स फ़ाइल का आधार (प्रोजेक्ट सेटिंग्स में प्रोजेक्ट रूट, यूज़र सेटिंग्स में ~/.claude)Edit(/src/**)
path / ./pathमौजूदा डायरेक्टरीRead(.env)

* /Users/... निरपेक्ष नहीं है — यह सेटिंग्स फ़ाइल के आधार के सापेक्ष है (प्रोजेक्ट सेटिंग्स में प्रोजेक्ट रूट)। यूज़र सेटिंग्स में Read(/secrets/**) का मतलब ~/.claude/secrets/** है, इसलिए हर प्रोजेक्ट में लागू होने वाले नियम के लिए // या ~/ लिखें। निरपेक्ष पथ के लिए //Users/... (डबल स्लैश) का उपयोग करें। Read(.env) Read(**/.env) के बराबर है और नीचे की हर .env से मैच करता है।

सापेक्ष पथ के deny में नकारात्मक पैटर्न अलग सुविधा है। उसी स्रोत की सूची में Read(*.env) के बाद Read(!sample.env) जोड़ने से sample.env उसी नियम के दायरे से निकलता है। इससे दूसरे स्रोत का deny, /, ~/ या // से स्थिर किया नियम या पूरी डायरेक्टरी का निषेध नहीं हट सकता। इसे allow से deny पलटना न समझें। आधिकारिक संदर्भ: नकारात्मक पैटर्न।

4. settings.json की पदानुक्रम और प्राथमिकता

सेटिंग मान पदानुक्रम से तय होते हैं। अनुमति नियमों में मेल खाता deny, allow से पहले जाँचा जाता है। नीचे की तालिका सेटिंग फ़ाइल और CLI नियमों की प्राथमिकता बताती है; यह mods से निर्णय बदलने को भी समेटने वाली पूरी गारंटी नहीं है।

प्राथमिकतास्थानउपयोग
1 (सबसे मज़बूत)Managed settingsसंगठन नीति। उपयोगकर्ता/CLI द्वारा ओवरराइड नहीं की जा सकती
2कमांड-लाइन आर्ग्युमेंट्सअस्थायी सत्र ओवरराइड
3.claude/settings.local.jsonव्यक्तिगत प्रोजेक्ट सेटिंग्स (gitignored)
4.claude/settings.jsonसाझा प्रोजेक्ट सेटिंग्स (committed)
5~/.claude/settings.jsonसभी प्रोजेक्ट्स के लिए उपयोगकर्ता सेटिंग्स
// .claude/settings.json (team-shared)
{
  "permissions": {
    "defaultMode": "acceptEdits",
    "allow": ["Bash(npm run *)", "WebFetch(domain:docs.example.com)"],
    "deny": ["Read(.env)", "Read(**/secrets/**)", "Bash(git push *)"],
    "additionalDirectories": ["../shared-lib"]
  }
}

डिफ़ॉल्ट परमिशन मोड भी यहीं defaultMode के रूप में सेट होता है (मोड विवरण)। हालांकि auto और bypassPermissions प्रोजेक्ट सेटिंग्स (.claude/settings.json, .claude/settings.local.json) में लिखने पर लागू नहीं होते, इसलिए इन्हें यूज़र सेटिंग्स या मैनेज्ड सेटिंग्स में लिखें। कार्यशील डायरेक्टरी के बाहर पढ़ने/संपादित करने के लिए, पथ additionalDirectories में जोड़ें।

5. व्यावहारिक रेसिपी

समीक्षित नियमित कॉल के लिए सीमित allow चुनें और बाकी में ask/deny लगाएँ। मिलते-जुलते कमांड या स्क्रिप्ट अपने आप उसी नियम से नहीं मिलते।

🔒 गुप्त फ़ाइलों की रक्षा करें

deny: ["Read(.env)", "Read(**/secrets/**)", "Read(~/.ssh/**)"]। अंतर्निहित फ़ाइल टूल और पहचाने गए लक्ष्य पथ वाले कमांड सीमित करता है। recursive खोज, मनमानी स्क्रिप्ट और MCP समेत दूसरे रास्ते रहते हैं।

इन निर्दिष्ट टूल कॉल पर पुष्टि माँगना

ask: ["Bash(git push *)", "Bash(rm *)"]। मेल खाते कॉल पर auto में भी पुष्टि जोड़ता है। वैकल्पिक रूपों और mods से निर्णय बदलाव पर ध्यान दें।

⚡ नियमित काम स्वचालित करें

allow: ["Bash(npm run *)", "Bash(git commit *)"]. टेस्ट/बिल्ड/कमिट बिना रुकावट चलते हैं। हालाँकि ऑटो मोड में Bash(npm run *) जैसा पैकेज मैनेजर के run कमांड का व्यापक नियम हटा दिया जाता है और ये कमांड क्लासिफ़ायर के पास जाते हैं।

केवल Bash के URL तर्क से बाध्य सीमा पर्याप्त नहीं है। curl/wget को deny करके WebFetch इस्तेमाल करें, तब भी पूर्ण पथ, sh -c और दूसरे प्रोग्राम से संचार के रास्ते रहते हैं। WebFetch domain उसी टूल का नियंत्रण है, पूरे Bash नेटवर्क का नहीं। बाध्य गंतव्य सीमा के लिए sandbox की नेटवर्क allowlist जोड़ें और sandbox के बाहर टूल तथा retries अलग नियंत्रित करें।

6. सावधानियाँ और आम गलतफहमियाँ

  • deny को Claude Code लागू करता है, मॉडल नहीं। अपने प्रॉम्प्ट या CLAUDE.md में "इसे मत पढ़ो" लिखने से रूल के बिना यह नहीं रुकेगा।
  • Read/Edit deny परोक्ष पहुँच नहीं रोक सकता। यह अंतर्निहित फ़ाइल टूल और cat/head/sed पर लागू है, पर खुद फ़ाइल खोलने वाली Python या Node स्क्रिप्ट पर नहीं। grep -r pattern . जैसे लक्ष्य फ़ाइल का नाम न देने वाले recursive कार्य भी अपवाद हैं। OS सीमा sandbox के अंदर processes पर लागू है; अंतर्निहित Read, MCP और दूसरे रास्तों के नियंत्रण अलग हैं।
  • एनवायरनमेंट रनर्स से सावधान रहें। devbox run *, npx, और docker exec अपने आर्ग्युमेंट्स को एक कमांड के रूप में चलाते हैं, इसलिए Bash(devbox run *) devbox run rm -rf . को भी अनुमति दे देता है। ऐसे रूल लिखें जिनमें भीतरी कमांड शामिल हो।
  • Hooks नियम नहीं पलटते। PreToolUse hook अनुमति बढ़ा सकता है, लेकिन उसके परिणाम से अलग deny/ask जाँचे जाते हैं। mod का tool.check बाद में निर्णय बदल सकता है। वह ask मंज़ूर कर सकता है और प्रबंधित सेटिंग के बिना व्यक्तिगत परिवेश में deny भी। प्रबंधित मशीन और Team/Enterprise में deny डिफ़ॉल्ट से प्राथमिक है, लेकिन संगठन सेटिंग इसे बदल सकती है। इंस्टॉल किए mods पर भरोसा करने का निर्णय आपको लेना है।
  • ऑटो मोड में allow में लिखी कमांड भी क्लासिफ़ायर के पास जा सकती है। ऑटो मोड में जाते ही मनमाना कोड चलाने देने वाले व्यापक allow नियम (बिना शर्त Bash(*), Bash(python*) जैसे वाइल्डकार्ड वाले इंटरप्रेटर, पैकेज मैनेजर की run कमांड, Agent नियम आदि) हटा दिए जाते हैं और मोड से निकलने पर लौट आते हैं; Bash(npm test) जैसे संकरे नियम बने रहते हैं। नियम सिर्फ़ लिखे हुए रूप में ही मेल खाते हैं, इसलिए Bash(git push *) का मेल git -C . push से नहीं होता, और जिस कमांड से कोई नियम मेल न खाए उसका फ़ैसला क्लासिफ़ायर करता है। सुरक्षित पाथ पर लिखना भी, allow नियम होने के बावजूद, क्लासिफ़ायर के पास जाता है। कोई जायज़ क्रिया ब्लॉक हो जाए तो /permissions के Recently blocked (v2.1.314 से पहले Recently denied) से उसे दोबारा आज़मा सकते हैं (देखें परमिशन मोड)। GitHub पर ऐसे issue भी हैं जिनमें allow में लिखी कमांड के ब्लॉक होने की शिकायत है (उदाहरण: #95996)। यह बिंदु 9 अक्टूबर 2026 की स्थिति के आधिकारिक दस्तावेज़ (Choose a permission mode) पर आधारित है।

अनुमति नियमों और mods की शर्तें 9 अक्टूबर 2026 को आधिकारिक मूल दस्तावेज़ों से दोबारा जाँची गईं। सेटिंग बदलाव और शुरू करने के प्रयोग नहीं किए गए।

सारांश

Claude Code परमिशन रूल्स पर तीन मुख्य बातें।

  • ये क्या हैं: settings.json में allow/ask/deny, जिनसे प्रति टूल, कमांड, फ़ाइल और डोमेन के स्तर पर अनुमति दें/पुष्टि माँगें/वर्जित करें। मोड्स आधार रेखा तय करते हैं; रूल्स बारीकियाँ संभालते हैं।
  • प्राथमिकता: deny → ask → allow (पहला मिलान प्रभावी; विशिष्टता अप्रासंगिक)। सेटिंग नियमों में allow मेल खाता deny नहीं पलटता। स्तर: managed > CLI > local > project > user।
  • सिंटैक्स: Tool(specifier). Bash वाइल्डकार्ड का उपयोग करता है (स्पेस + * एक शब्द-सीमा है), Read/Edit gitignore-शैली पथ का, WebFetch domain: का। संयुक्त कमांड्स में हर उप-कमांड का मैच होना ज़रूरी है।

हर नियम का मिलान समझें और केवल ज़रूरी मंज़ूरी घटाएँ। नियमों को अनुमति मोड और hooks के साथ मिलाएँ। बाध्य फ़ाइल या नेटवर्क सीमा चाहिए तो sandbox देखें। कौन सी परत किस रास्ते पर लागू है, अलग पहचानें।

कोड बदले बिना वर्तमान स्थिति की जाँच और केवल सलाह चाहिए, तो Codex और Claude Code से केवल जाँच करवाने का तरीका देखें। इसमें ऐप, IDE और CLI के चरण तथा ऐसा निर्देश दिया गया है जिसमें रिपोर्ट देने के बाद काम समाप्त होता है और बदलाव लागू करने को नहीं कहा जाता।

FAQ

Q. परमिशन रूल्स मोड्स से कैसे अलग हैं?

A. मोड्स पुष्टि की व्यापक आधार रेखा हैं (default/acceptEdits/auto आदि); रूल्स प्रति-टूल, प्रति-कमांड विनिर्देश हैं। ये साथ काम करते हैं, और रूल्स मोड्स को ओवरराइड करते हैं (जैसे ask/deny रूल्स auto मोड में भी लागू रहते हैं)।

Q. मैंने इसे allow कर दिया — फिर भी यह पुष्टि क्यों माँगता है?

A. क्योंकि मूल्यांकन deny → ask → allow क्रम में होता है। यदि कोई अलग ask (या deny) भी उस कॉल से मैच करता है, तो वह अधिक विशिष्ट allow पर भी जीत जाता है। विशिष्टता क्रम को नहीं बदलती।

Q. मैं settings.json कहाँ रखूँ?

A. टीम-साझा: .claude/settings.json (committed). व्यक्तिगत: .claude/settings.local.json (gitignored). सभी प्रोजेक्ट्स के लिए: ~/.claude/settings.json. संगठन-व्यापी प्रवर्तन के लिए, managed settings का उपयोग करें (इन्हें ओवरराइड नहीं किया जा सकता)।

Q. .env जैसी गुप्त फ़ाइलों तक पहुँच को कैसे सीमित करें?

A. deny: ["Read(.env)", "Read(**/secrets/**)"] अंतर्निहित फ़ाइल टूल और पहचाने गए फ़ाइल कमांड सीमित करता है। लक्ष्य पथ का नाम न देने वाली recursive खोज, Python/Node और MCP समेत हर रास्ता रोकने की गारंटी नहीं। Shell के लिए OS पढ़ने की अनुमति या sandbox में denyRead देखें; दूसरे टूल की अनुमतियाँ अलग जाँचें।

Q. क्या मैं Bash आर्ग्युमेंट्स के ज़रिए URL या फ़ाइलें सीमित कर सकता हूँ?

A. Bash पैटर्न केवल मेल खाने वाले कॉल नियंत्रित करता है। वैकल्पिक प्रोग्राम या रूप उससे छूट सकते हैं। WebFetch domain नियम पूरे नेटवर्क ट्रैफ़िक का नियंत्रण नहीं हैं; OS नेटवर्क सीमा आवश्यकतानुसार जोड़ें।

अनुमति नियमों के दायरे और अपवादों को 9 अक्टूबर 2026 को आधिकारिक मूल दस्तावेज़ों से दोबारा मिलाया गया। डिवाइस सेटिंग नहीं बदली गई और शुरू करने के प्रयोग नहीं किए गए।