परमिशन
नियंत्रित करें कि कौन सी क्रियाओं को चलने के लिए अनुमोदन की आवश्यकता है।
OpenCode यह तय करने के लिए permission कॉन्फ़िग का उपयोग करता है कि किसी दी गई क्रिया को स्वचालित रूप से चलना चाहिए, आपको प्रॉम्प्ट करना चाहिए, या ब्लॉक किया जाना चाहिए।
v1.1.1 के अनुसार, लीगेसी tools boolean कॉन्फ़िग अप्रचलित है और इसे permission में मर्ज कर दिया गया है। पुराना tools कॉन्फ़िग अभी भी बैकवर्ड संगतता के लिए समर्थित है।
क्रियाएँ
प्रत्येक परमिशन नियम इनमें से किसी एक में परिणत होता है:
"allow"— बिना अनुमोदन के चलाएँ"ask"— अनुमोदन के लिए प्रॉम्प्ट करें"deny"— क्रिया ब्लॉक करें
कॉन्फ़िगरेशन
आप परमिशन ग्लोबल रूप से (* के साथ) सेट कर सकते हैं, और विशिष्ट टूल को ओवरराइड कर सकते हैं।
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"*": "ask",
"bash": "allow",
"edit": "deny"
}
}आप सभी परमिशन एक साथ भी सेट कर सकते हैं:
{
"$schema": "https://opencode.ai/config.json",
"permission": "allow"
}सूक्ष्म नियम (Object Syntax)
अधिकांश परमिशन के लिए, आप टूल इनपुट के आधार पर विभिन्न क्रियाएँ लागू करने हेतु एक ऑब्जेक्ट का उपयोग कर सकते हैं।
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"npm *": "allow",
"rm *": "deny",
"grep *": "allow"
},
"edit": {
"*": "deny",
"packages/web/src/content/docs/*.mdx": "allow"
}
}
}नियमों का मूल्यांकन पैटर्न मिलान द्वारा किया जाता है, जहाँ अंतिम मिलान करने वाला नियम जीतता है। एक सामान्य पैटर्न यह है कि catch-all "*" नियम पहले रखें, और अधिक विशिष्ट नियम उसके बाद।
Wildcards
परमिशन पैटर्न सरल wildcard मिलान का उपयोग करते हैं:
*किसी भी कैरेक्टर के शून्य या अधिक से मेल खाता है?बिल्कुल एक कैरेक्टर से मेल खाता है- अन्य सभी कैरेक्टर शाब्दिक रूप से मेल खाते हैं
Home Directory Expansion
आप अपनी home directory को संदर्भित करने के लिए किसी पैटर्न की शुरुआत में ~ या $HOME का उपयोग कर सकते हैं। यह external_directory नियमों के लिए विशेष रूप से उपयोगी है।
~/projects/*->/Users/username/projects/*$HOME/projects/*->/Users/username/projects/*~->/Users/username
External Directories
उन tool कॉल की अनुमति देने के लिए external_directory का उपयोग करें जो उस वर्किंग डायरेक्टरी के बाहर के पथों को स्पर्श करते हैं जहाँ OpenCode शुरू हुआ था। यह किसी भी ऐसे टूल पर लागू होता है जो पथ को इनपुट के रूप में लेता है (उदाहरण के लिए read, edit, glob, grep, और कई bash कमांड)।
Home expansion (जैसे ~/...) केवल यह प्रभावित करता है कि कोई पैटर्न कैसे लिखा जाता है। यह किसी बाहरी पथ को वर्तमान वर्कस्पेस का हिस्सा नहीं बनाता, इसलिए वर्किंग डायरेक्टरी के बाहर के पथों को अभी भी external_directory के माध्यम से अनुमति देनी होगी।
उदाहरण के लिए, यह ~/projects/personal/ के अंतर्गत सब कुछ तक एक्सेस की अनुमति देता है:
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
}
}
}यहाँ अनुमति दी गई कोई भी डायरेक्टरी वर्तमान वर्कस्पेस के समान डिफ़ॉल्ट inherit करती है। चूँकि read डिफ़ॉल्ट रूप से allow होता है, इसलिए external_directory के अंतर्गत एंट्री के लिए भी reads की अनुमति होती है जब तक कि ओवरराइड न किया जाए। जब किसी टूल को इन पथों में प्रतिबंधित किया जाना चाहिए तो स्पष्ट नियम जोड़ें, जैसे reads रखते हुए edits ब्लॉक करना:
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
},
"edit": {
"~/projects/personal/**": "deny"
}
}
}सूची को विश्वसनीय पथों पर केंद्रित रखें, और अन्य टूल (उदाहरण के लिए bash) के लिए आवश्यकतानुसार अतिरिक्त allow या deny नियम layer करें।
उपलब्ध परमिशन
OpenCode परमिशन टूल नाम द्वारा keyed होती हैं, साथ ही कुछ safety guard:
read— किसी फ़ाइल को पढ़ना (फ़ाइल पथ से मेल खाता है)edit— सभी फ़ाइल संशोधन (edit,write,patchको कवर करता है)glob— फ़ाइल globbing (glob पैटर्न से मेल खाता है)grep— सामग्री खोज (regex पैटर्न से मेल खाता है)bash— शेल कमांड चलाना (git status --porcelainजैसे पार्स किए गए कमांड से मेल खाता है)task— सबएजेंट लॉन्च करना (सबएजेंट प्रकार से मेल खाता है)skill— एक skill लोड करना (skill नाम से मेल खाता है)lsp— LSP क्वेरी चलाना (वर्तमान में non-granular)question— निष्पादन के दौरान उपयोगकर्ता से प्रश्न पूछनाwebfetch— एक URL फ़ेच करना (URL से मेल खाता है)websearch— वेब खोज (क्वेरी से मेल खाता है)external_directory— तब ट्रिगर होता है जब कोई टूल प्रोजेक्ट वर्किंग डायरेक्टरी के बाहर के पथों को स्पर्श करता हैdoom_loop— तब ट्रिगर होता है जब समान tool कॉल समान इनपुट के साथ 3 बार दोहराया जाता है
डिफ़ॉल्ट
यदि आप कुछ निर्दिष्ट नहीं करते हैं, तो OpenCode अनुमतिपूर्ण डिफ़ॉल्ट से शुरू होता है:
- अधिकांश परमिशन डिफ़ॉल्ट रूप से
"allow"होती हैं। doom_loopऔरexternal_directoryडिफ़ॉल्ट रूप से"ask"होते हैं।read"allow"है, लेकिन.envफ़ाइलें डिफ़ॉल्ट रूप से deny होती हैं:
{
"permission": {
"read": {
"*": "allow",
"*.env": "deny",
"*.env.*": "deny",
"*.env.example": "allow"
}
}
}"Ask" क्या करता है
जब OpenCode अनुमोदन के लिए प्रॉम्प्ट करता है, तो UI तीन परिणाम प्रदान करता है:
once— केवल इस अनुरोध को अनुमोदित करेंalways— सुझाए गए पैटर्न से मेल खाने वाले भविष्य के अनुरोधों को अनुमोदित करें (वर्तमान OpenCode सत्र के शेष भाग के लिए)reject— अनुरोध deny करें
जिन पैटर्न को always अनुमोदित करेगा उनका सेट टूल द्वारा प्रदान किया जाता है (उदाहरण के लिए, bash अनुमोदन आमतौर पर git status* जैसे सुरक्षित कमांड prefix को whitelist करते हैं)।
एजेंट
आप परमिशन को प्रति एजेंट ओवरराइड कर सकते हैं। एजेंट परमिशन ग्लोबल कॉन्फ़िग के साथ मर्ज की जाती हैं, और एजेंट नियम प्राथमिकता लेते हैं। एजेंट परमिशन के बारे में अधिक जानें।
Note: अधिक विस्तृत पैटर्न मिलान उदाहरणों के लिए ऊपर सूक्ष्म नियम (Object Syntax) सेक्शन देखें।
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"git commit *": "deny",
"git push *": "deny",
"grep *": "allow"
}
},
"agent": {
"build": {
"permission": {
"bash": {
"*": "ask",
"git *": "allow",
"git commit *": "ask",
"git push *": "deny",
"grep *": "allow"
}
}
}
}
}आप Markdown में भी एजेंट परमिशन कॉन्फ़िगर कर सकते हैं:
---
description: Code review without edits
mode: subagent
permission:
edit: deny
bash: ask
webfetch: deny
---
Only analyze code and suggest changes.Tip: arguments वाले कमांड के लिए पैटर्न मिलान का उपयोग करें।
"grep *"grep pattern file.txtकी अनुमति देता है, जबकि केवल"grep"इसे ब्लॉक कर देगा।git statusजैसे कमांड डिफ़ॉल्ट व्यवहार के लिए काम करते हैं लेकिन arguments पास होने पर स्पष्ट परमिशन (जैसे"git status *") की आवश्यकता होती है।