अनुमतियाँ
कंट्रोल करें कि कौन से एक्शन को चलाने के लिए अनुमोदन की आवश्यकता है।
OpenCode permission कॉन्फ़िग का उपयोग यह तय करने के लिए करता है कि कोई दिया गया एक्शन स्वचालित रूप से चलना चाहिए, आपसे पुष्टि के लिए पूछना चाहिए, या ब्लॉक होना चाहिए।
v1.1.1 से, लेगेसी tools बूलियन कॉन्फ़िग डेप्रिकेटेड है और 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"
}ग्रैन्युलर रूल्स (ऑब्जेक्ट सिंटैक्स)
अधिकांश परमिशन के लिए, आप टूल इनपुट के आधार पर अलग-अलग एक्शन लागू करने के लिए ऑब्जेक्ट का उपयोग कर सकते हैं।
{
"$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"
}
}
}रूल्स पैटर्न मैच द्वारा इवैल्युएट होते हैं, आखिरी मैचिंग रूल जीतता है। एक सामान्य पैटर्न है कैच-ऑल "*" रूल पहले रखना, और अधिक स्पेसिफिक रूल्स उसके बाद।
वाइल्डकार्ड्स
परमिशन पैटर्न सिंपल वाइल्डकार्ड मैचिंग का उपयोग करते हैं:
*शून्य या अधिक किसी भी कैरेक्टर से मैच करता है?बिल्कुल एक कैरेक्टर से मैच करता है- अन्य सभी कैरेक्टर लिटरली मैच करते हैं
होम डायरेक्टरी एक्सपैंशन
आप अपनी होम डायरेक्टरी को रेफरेंस करने के लिए पैटर्न की शुरुआत में ~ या $HOME का उपयोग कर सकते हैं। यह external_directory रूल्स के लिए विशेष रूप से उपयोगी है।
~/projects/*->/Users/username/projects/*$HOME/projects/*->/Users/username/projects/*~->/Users/username
एक्सटर्नल डायरेक्टरीज़
external_directory का उपयोग उन टूल कॉल्स को अनुमति देने के लिए करें जो OpenCode शुरू होने वाली वर्किंग डायरेक्टरी के बाहर के पाथ को टच करते हैं। यह किसी भी टूल पर लागू होता है जो पाथ को इनपुट के रूप में लेता है (उदाहरण के लिए read, edit, list, glob, grep, और कई bash कमांड)।
होम एक्सपैंशन (जैसे ~/...) केवल यह प्रभावित करता है कि पैटर्न कैसे लिखा जाता है। यह एक्सटर्नल पाथ को करंट वर्कस्पेस का हिस्सा नहीं बनाता, इसलिए वर्किंग डायरेक्टरी के बाहर के पाथ को अभी भी external_directory के माध्यम से अनुमति देनी होगी।
उदाहरण के लिए, यह ~/projects/personal/ के अंतर्गत सब कुछ एक्सेस करने की अनुमति देता है:
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
}
}
}यहाँ अनुमत कोई भी डायरेक्टरी करंट वर्कस्पेस के समान डिफ़ॉल्ट इनहेरिट करती है। चूंकि read डिफ़ॉल्ट रूप से allow है, external_directory के अंतर्गत एंट्रीज़ के लिए रीड्स भी अनुमत हैं जब तक ओवरराइड न किया जाए। जब इन पाथ में टूल को प्रतिबंधित किया जाना चाहिए तो एक्सप्लिसिट रूल्स जोड़ें, जैसे रीड्स रखते हुए एडिट्स ब्लॉक करना:
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"external_directory": {
"~/projects/personal/**": "allow"
},
"edit": {
"~/projects/personal/**": "deny"
}
}
}लिस्ट को विश्वसनीय पाथ पर केंद्रित रखें, और अन्य टूल्स (उदाहरण के लिए bash) के लिए आवश्यकतानुसार अतिरिक्त allow या deny रूल्स जोड़ें।
उपलब्ध परमिशन
OpenCode परमिशन टूल नाम से कीड हैं, साथ ही कुछ सेफ्टी गार्ड्स:
read— फाइल पढ़ना (फाइल पाथ से मैच करता है)edit— सभी फाइल मॉडिफिकेशन (edit,write,patch,multieditकवर करता है)glob— फाइल ग्लॉबिंग (ग्लॉब पैटर्न से मैच करता है)grep— कंटेंट सर्च (रेगेक्स पैटर्न से मैच करता है)list— डायरेक्टरी में फाइल्स लिस्ट करना (डायरेक्टरी पाथ से मैच करता है)bash— शेल कमांड चलाना (पार्स्ड कमांड जैसेgit status --porcelainसे मैच करता है)task— सबएजेंट लॉन्च करना (सबएजेंट टाइप से मैच करता है)skill— स्किल लोड करना (स्किल नाम से मैच करता है)lsp— LSP क्वेरीज़ चलाना (वर्तमान में नॉन-ग्रैन्युलर)todoread,todowrite— टूडू लिस्ट पढ़ना/अपडेट करनाwebfetch— URL फ़ेच करना (URL से मैच करता है)websearch,codesearch— वेब/कोड सर्च (क्वेरी से मैच करता है)external_directory— जब टूल प्रोजेक्ट वर्किंग डायरेक्टरी के बाहर पाथ टच करता है तब ट्रिगर होता हैdoom_loop— जब समान टूल कॉल समान इनपुट के साथ 3 बार दोहराई जाती है तब ट्रिगर होता है
डिफ़ॉल्ट्स
यदि आप कुछ भी स्पेसिफाई नहीं करते, OpenCode परमिसिव डिफ़ॉल्ट्स से शुरू होता है:
- अधिकांश परमिशन डिफ़ॉल्ट रूप से
"allow"हैं। doom_loopऔरexternal_directoryडिफ़ॉल्ट रूप से"ask"हैं।read"allow"है, लेकिन.envफाइल्स डिफ़ॉल्ट रूप से डिनाइड हैं:
{
"permission": {
"read": {
"*": "allow",
"*.env": "deny",
"*.env.*": "deny",
"*.env.example": "allow"
}
}
}"Ask" क्या करता है
जब OpenCode अनुमोदन के लिए पूछता है, UI तीन परिणाम प्रदान करता है:
once— केवल इस रिक्वेस्ट को अप्रूव करेंalways— सुझाए गए पैटर्न से मैच करने वाली भविष्य की रिक्वेस्ट को अप्रूव करें (करंट OpenCode सेशन के बाकी समय के लिए)reject— रिक्वेस्ट रिजेक्ट करें
always जो पैटर्न अप्रूव करेगा वह टूल द्वारा प्रदान किया जाता है (उदाहरण के लिए, bash अप्रूवल आमतौर पर git status* जैसे सेफ कमांड प्रीफिक्स को व्हाइटलिस्ट करते हैं)।
एजेंट्स
आप प्रति एजेंट परमिशन ओवरराइड कर सकते हैं। एजेंट परमिशन ग्लोबल कॉन्फ़िग के साथ मर्ज होते हैं, और एजेंट रूल्स प्रीसीडेंस लेते हैं। एजेंट परमिशन के बारे में अधिक जानें।
नोट: अधिक विस्तृत पैटर्न मैचिंग उदाहरणों के लिए ऊपर ग्रैन्युलर रूल्स (ऑब्जेक्ट सिंटैक्स) सेक्शन देखें।
{
"$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.टिप: आर्ग्युमेंट वाले कमांड के लिए पैटर्न मैचिंग का उपयोग करें।
"grep *"grep pattern file.txtकी अनुमति देता है, जबकि अकेला"grep"इसे ब्लॉक करेगा।git statusजैसे कमांड डिफ़ॉल्ट बिहेवियर के लिए काम करते हैं लेकिन जब आर्ग्युमेंट पास किए जाते हैं तो एक्सप्लिसिट परमिशन (जैसे"git status *") की आवश्यकता होती है।