İzinler
Hangi işlemlerin çalıştırılması için onay işlemini kontrol edin.
opencode, belirli bir eylemin otomatik olarak mı çalıştırılacağına, size sorulacağına veya engelleneceğine karar vermek için permission yapılandırmasını kullanır.
v1.1.1 itibarıyla eski tools boolean yapılandırması kullanımdan kaldırıldı ve permission ile birleştirildi. Eski tools yapılandırması geriye dönük uyumluluk açısından hâlâ desteklenmektedir.
Actions
Each permission rule resolves to one of:
"allow"— onay olmadan çalıştır"ask"— onay istemi"deny"— eylemi engelle
Yapılandırma
İzinleri genel olarak (* ile) ayarlayabilir ve belirli araçları geçersiz kılabilirsiniz.
{ "$schema": "https://opencode.ai/config.json", "permission": { "*": "ask", "bash": "allow", "edit": "deny" }}Ayrıca tüm izinleri aynı anda ayarlayabilirsiniz:
{ "$schema": "https://opencode.ai/config.json", "permission": "allow"}Granular Rules (Object Syntax)
Çoğu izin için, araç girişine bağlı olarak farklı eylemleri uygulamak için bir nesneyi kullanabilirsiniz.
{ "$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" } }}Kurallar, son eşleşen kuralın kazanması ile kalıp eşleşmesine göre değerlendirilir. Yaygın bir model, tümünü yakala "*" kuralını ilk sıraya koymak ve daha spesifik kuralları ondan sonra koymaktır.
Wildcards
İzin kalıpları basit joker karakter eşleştirmesini kullanır:
*herhangi bir karakterin sıfır veya daha fazlasıyla eşleşir?matches exactly one character- All other characters match literally
Ana Dizin Genişletme
Ana dizininize referans vermek için bir modelin başlangıcında ~ veya $HOME kullanabilirsiniz. Bu özellikle external_directory kuralları için kullanışlıdır.
~/projects/*->/Users/username/projects/*$HOME/projects/*->/Users/username/projects/*~->/Users/username
Dış Dizinler
opencode’un başlatıldığı çalışma dizini dışındaki yollara dokunan araç çağrılarına izin vermek için external_directory kullanın. Bu, girdi olarak bir yolu alan tüm araçlar için geçerlidir (örneğin read, edit, list, glob, grep ve birçok bash komutu).
Ana sayfa genişletmesi (~/... gibi) yalnızca bir kalıbın nasıl yazıldığını etkiler. Geçerli çalışma alanının harici bir yolunu oluşturmaz, dolayısıyla çalışma dizini dışındaki yollara yine de external_directory aracılığıyla izin verilmesi gerekir.
Örneğin bu, ~/projects/personal/ altındaki her şeye erişime izin verir:
{ "$schema": "https://opencode.ai/config.json", "permission": { "external_directory": { "~/projects/personal/**": "allow" } }}Burada izin verilen herhangi bir dizin, geçerli çalışma alanıyla aynı varsayılanları devralır. read defaults to allow’dan bu yana, geçersiz kılınmadığı sürece external_directory altındaki girişler için okumalara da izin verilir. Bir aracın bu yollarda kısıtlanması gerektiğinde (okumaları tutarken düzenlemeleri engellemek gibi) açık kurallar ekleyin:
{ "$schema": "https://opencode.ai/config.json", "permission": { "external_directory": { "~/projects/personal/**": "allow" }, "edit": { "~/projects/personal/**": "deny" } }}Listeyi güvenilir yollara odaklı tutun ve diğer araçlar için gereken ekstra izin verme veya reddetme kurallarını katmanlayın (örneğin bash).
Mevcut İzinler
opencode izinleri araç adına ve birkaç güvenlik görevlisine göre anahtarlanır:
read— bir dosyayı okumak (dosya yoluyla eşleşir)edit— tüm dosya değişiklikleri (edit,write,patch,multiedit’yi kapsar)glob— dosya genellemesi (glob düzeniyle eşleşir)grep— içerik arama (regex modeliyle eşleşir)list— bir dizideki dosyaları listeleme (dizin yoluyla eşleşir)bash— kabuk komutlarını çalıştırma (git status --porcelaingibi ayrıştırılmış komutlarla eşleşir)task— alt aracıların başlatılması (alt aracı türüyle eşleşir)skill— bir beceri yükleniyor (beceri adıyla eşleşir)lsp— LSP sorgularını çalıştırıyor (şu anda ayrıntılı değil)todoread,todowrite— reading/updating yapılacaklar listesiwebfetch— URL getiriliyor (URL ile eşleşiyor)websearch,codesearch— web/code arama (sorguyla eşleşir)external_directory— bir araç proje çalışma dizini dışındaki yollara dokunduğunda tetiklenirdoom_loop— aynı araç çağrısı aynı girdiyle 3 kez tekrarlandığında tetiklenir
Varsayılanlar
Hiçbir şey belirtmezseniz opencode izin verilen varsayılanlardan başlar:
- Çoğu izin varsayılan olarak
"allow"şeklindedir. doom_loopveexternal_directoryvarsayılan olarak"ask"’dir.read,"allow"’dir, ancak.envdosyaları varsayılan olarak reddedilir:
{ "permission": { "read": { "*": "allow", "*.env": "deny", "*.env.*": "deny", "*.env.example": "allow" } }}“Sor” Ne Yapar?
opencode onay istediğinde kullanıcı arayüzü üç sonuç sunar:
once— yalnızca bu isteği onaylaalways— önerilen kalıplarla eşleşen gelecekteki istekleri onaylayın (geçerli opencode oturumunun geri kalanı için)reject— isteği reddet
always’ın onaylayacağı kalıp seti araç tarafından sağlanır (örneğin, bash onayları genellikle git status* gibi güvenli bir komut önekini beyaz listeye alır).
Agents
Agent bazında izinleri geçersiz kılabilirsiniz. Agent izinleri global yapılandırmayla birleştirilir ve agent kuralları önceliklidir. Daha fazla bilgi.
{ "$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" } } } }}Aracı izinlerini Markdown’da da yapılandırabilirsiniz:
---description: Code review without editsmode: subagentpermission: edit: deny bash: ask webfetch: deny---
Only analyze code and suggest changes.