Bir Claude ajanini CI’ya derliyorsunuz. Asiliyor. Hata yok, zaman asimi yok — sadece orada oturuyor, kimsenin cevaplayamayacagi bir izin istemi bekliyor. Cozum tek bir bayrak. Ama yanlis bayragi secerseniz, Claude’a uretim sunucunuza sinirsiz erisim vermis olursunuz.
Alti izin modu, Claude’un ne kadar ozerklik alacagini kontrol eder — her eylemden once sormaktan, her seyi sessizce yurutmeye kadar. Arac duzeyinde izin listeleri ve engel listeleri ile birlestirildiqinde, Claude’un tam olarak ne yapabilecegini ve ne yapamaycagini belirleyen izin sistemini olustururlar.
Okuma Sirasi Notu: Bircoq okuyucu once Arac Yapilandirmasi (Bolum 9) okuyup sonra buraya donmeyi faydali buluyor. Her iki bolum de birbirine siki sikiya bagli — bu bolum izin modlarini ve onceligi kapsar, Bolum 9 ise arac duzeyinde izin ver/engelle kurallarini ve ayar dosyalarini kapsar.
Temel Cikarimlar
413 satirlik modlar, oncelik kurallari ve uc durumlara girmeden once, bilmeniz gerekenler sunlardir:
- default modu reddedildiginde bir kez yeniden dener —
acceptEditsvazgecmeden once iki reddetme uretir;defaultbirinden sonra durur. Daha yuksek deneme sayisi = daha yuksek maliyet. - plan modu ne olacagini gosterir — Eylemleri yurutmeden once on izlemek icin kullanin. Claude’un ne yapmak istedigini gormek icin JSON ciktisindaki
permission_denialskontrol edin. - bypassPermissions tehlikelidir — Yalnizca izole ortamlarda (CI/CD, konteynerler, sanal makineler) kullanin. Tek bir bayrak tum korumacilari kaldirir.
- Oncelik her-zaman-engelleme-kazanir seklindedir — HERHANGI bir seviyedeki engelleme kurali yurutmeyi durdurur. Daha dusuk seviyedeki hicbir izin kurali bunu gecersiz kilamaz.
- —settings proje kurallarini gecersiz kilar —
--allowedTools’un aksine (engelleme kurallarini dikkate alir),--settingsdaha yuksek bir oncelik katmaninda calisir ve proje engellerini gecersiz KILABILIR. Dikkatli kullanin.
Alti Mod
Her claude oturumu tam olarak bir izin modunda calisir. --permission-mode MOD ile ayarlarsiniz veya varsayilani kabul edersiniz.
Izin Modlari
| Mod | Bayrak | Davranis | Kullanim Alani |
|---|---|---|---|
default | (gerekli degil) | Her aracin ilk kullaniminda izin ister | Interaktif gelistirme |
acceptEdits | —permission-mode acceptEdits | Dosya duzenlemelerini otomatik onaylar, kabuk komutlari icin sorar | Guvenilir duzenleme oturumlari |
plan | —permission-mode plan | Salt okunur — analiz yapabilir ama dosyalari degistiremez veya komut calistiramaz | Kod inceleme, mimari analiz |
dontAsk | —permission-mode dontAsk | Izin kurallari ile onceden onaylanmadikca araclari otomatik reddeder | Basliksiz / otomatik is akislari |
bypassPermissions | —permission-mode bypassPermissions | Tum izin istemlerini atlar — her arac cagrisi basarili olur | Yalnizca CI/CD, konteynerler, sanal makineler |
auto | —permission-mode auto | Yapay zeka siniflandirici guvenli eylemleri otomatik onaylar, riskli olanlari engeller (7 izin + 26 engelleme kurali) | Gelecekteki varsayilan — henuz mevcut degil (API beta kapisi) |
default, claude’u bayrak olmadan baslattiginizda elde ettiginiz moddur. Her yikici arac — Bash, Edit, Write — bir kerelik onay gerektirir. Onaylandiginda, kural oturum boyunca (dosya duzenlemeleri) veya proje basina kalici olarak (bash komutlari) devam eder. Grep ve dosya okumalari gibi salt okunur araclar asla izin gerektirmez.
acceptEdits, proje dizini icindeki dosya degisiklikleri icin Claude’a guven verir. Bash komutlari hala onay gerektirir. Bu, hiz istediginiz ancak sinirsiz kabuk erisimi istemediqiniz odakli kodlama oturumlari icin ideal noktadir.
plan salt okunurdur. Claude dosyalari okuyabilir, kod arayabilir ve akil yurutebilir — ancak dosya yazamaz veya komut calistiramaz. Bunu kod inceleme, mimari analiz veya Claude’un hicbir seye dokunmadan bir plan uretmesini istediginizde kullanin.
dontAsk, default’un tersidir. Bilinmeyen araclar icin sormak yerine, onlari sessizce reddeder. Yalnizca izin kurallarinda acikca listelenen araclar calisir. Bu, sorulan istemi cevaplayacak insan olmayan interaktif olmayan veya otomatik is akislari icin tasarlanmistir.
bypassPermissions, tum izin kontrollerini devre disi birakir. Her arac cagrisi sormadan basarili olur. Bu yalnizca izole ortamlarda — patlama yaricapi sinirli CI/CD boru hatlari, konteynerler veya sanal makinelerde — kullanilmalidir.
auto en sofistike moddur. Statik arac tabanli kurallar yerine, 7 izin kurali (yerel islemler, salt okunur, bildirilen bagimliliklar…) ve 26 engelleme kurali (veri sizintisi, uretim dagitimi, kimlik bilgisi arastirmasi…) ile yapilandirilabilir guven sinirlarina sahip bir yapay zeka guvenlik siniflandiricisi kullanir. Siniflandiriciyi claude auto-mode config ve claude auto-mode defaults ile inceleyin. Su anda yayinlanmamis bir API betasinin (afk-mode-2026-01-31) arkasinda kapali — CLI hazir ama sunucu tarafi siniflandirici henuz gonderilmedi.
Mod Secimi
Karar iki soruya dayanir: bir insan izliyor mu ve ortama ne kadar guveniyorsunuz?
Mod Secim Kilavuzu
| Senaryo | Mod | Neden |
|---|---|---|
| Interaktif gelistirme, projede ilk kez | default | Guven olusturana kadar her eylemi gormek ve onaylamak istiyorsunuz |
| Odakli kodlama oturumu, guvenilir kod tabani | acceptEdits | Dosya duzenlemeleri serbestce akar; kabuk komutlari hala onay gerektirir |
| Yalnizca kod inceleme veya planlama | plan | Claude hicbir seyi degistirmeden analiz eder |
| Acik izin kurallari olan otomatik boru hatti | dontAsk | Bir istemde takili kalmak yerine onaylanmamis araclarda hizla basarisiz olur |
| Bir konteyner veya sanal makinede CI/CD | bypassPermissions | Insan yok, izole ortam patlama yaricapini sinirlar |
| Planla-sonra-yurutu is akisi | plan sonra bypassPermissions | Salt okunurda planla, ciktiyi incele, tam erisimle devam et |
Yaygin bir kalip, modlari oturumlarla birlestirmektir. plan modunda planlayin, ciktiyi inceleyin, sonra yurutmek icin ayni oturumu bypassPermissions ile --resume edin. Oturum Zincirleri bolumu bu is akisini ayrintili olarak kapsar.
—allowedTools / —disallowedTools
Alti modun otesinde, bireysel arac duzeyinde filtreleme yapabilirsiniz. Bu bayraklar virgullerle ayrilmis arac isimlerini kabul eder ve kalip eslestirmeyi destekler.
# Yalnizca dosya okumaya ve grep'e izin ver — baska bir sey yokclaude -p "auth.py'yi analiz et" --allowedTools "Read,Grep,Glob"
# Kabuk erisimi haricinde her seye izin verclaude -p "Bu modulu yeniden duzenle" --disallowedTools "Bash"
# Glob kaliplari ile belirli bash komutlarina izin verclaude -p "Testleri calistir" --allowedTools "Bash(npm test:*),Read,Edit"Arac belirleyicileri izin kurallariyla ayni kalip sozdizimini kullanir:
Bash(git:*)—git status,git commitvb. ile eslesirEdit(/src/**/*.ts)—/src/altindaki herhangi bir TypeScript dosyasiyla eslesirmcp__puppeteer__*— puppeteer MCP sunucusundan tum araclarla eslesir
Bu bayraklar gecicidir ve yalnizca mevcut oturuma uygulanir. Izin moduyla birlesirler — bir aracin yurutulmesi icin hem mod kontrolunu hem de izin/engel listesi kontrolunu gecmesi gerekir.
Izin kurallarinin kapsamlar arasinda nasil etkilestiqi, oncelik, --settings gecersiz kilmalari ve birlestirme davranisi dahil olmak uzere, asagidaki Izin Onceligi bolumune bakin.
Asagidaki karsilastirmayi okumadan once sunu deneyin: ayni promptu plan modunda ve ardindan default modunda calistirin.
claude -p “Hello’yu /tmp/test.txt’ye yaz” —permission-mode plan —output-format json | jq ‘.permission_denials’
permission_denials’da ne gorunuyor? Simdi ayni promptu —permission-mode olmadan deneyin. Ne degisiyor?
Modlar Uygulamada — Ayni Prompt, Uc Sonuc
Modlarin davranisi nasil etkiledigini gormek icin, ayni prompt uc farkli modda calistirilmistir: “Hello’yu /tmp/perm_test.txt’ye yaz” — proje dizininin disinda bir yola yazma.
default modu yazmayi engeller ve bir reddetme bildirir:
acceptEdits modu da yazmayi engeller — ancak Claude vazgecmeden once bir kez yeniden dener ve iki reddetme ile ekstra bir tur uretir:
bypassPermissions modu hemen basarili olur — sifir reddetme, en dusuk maliyet:
Bu verilerden elde edilen temel ici goru: acceptEdits proje dizini disindaki yazmalari otomatik onaylamaz. Dosya sistemi sandbox kisitlamasi izin modundan bagimsiz olarak uygulanir. Yeniden deneme davranisi da daha yuksek maliyet anlamina gelir — ne oldugunu anlamak icin permission_denials.length kontrol edin.
Yaygin Hatalar
Yaygin hata: default modunda bir izin reddetmesi gorursunuz ve bunu “duzetmek” icin hemen --permission-mode bypassPermissions’a gecersiniz.
Cozum: Claude’un ne yapmak istedigini gormek icin once plan modunu kullanin veya belirli araclari beyaz listeye almak icin --allowedTools kullanin. bypassPermissions TUM korumacilari kaldirir — siz bir araci onaylamak istediniz, sinirsiz erisim degil. Dardan baslayin, yalnizca gerektiginde genisletin.
Evet, —dangerously-skip-permissions korkutucu geliyor. Ama onemli olan da bu — bypassPermissions ile ayni bayraktir, sadece sizi korkutmak icin isimlendirilmistir. Ve korkutmasi lazim. Uzun isim, betiklerin icerdigi riski kendi kendine belgelemeleri icin vardir.
plan modu, ExitPlanMode aracini — Claude’un planlamadan yurutmeye gecmek icin cagirdigi dahili araci — engelleyerek calisir. Salt okunur araclar (dosya okumalari, Grep, Glob) asla izin gerektirmediginden calismaya devam ederler. Claude her seyi analiz edebilir; sadece analizinin sonucunda harekete gecemez.
JSON yanitindaki permission_denials dizisi, hangi araclarin engellendigini ve Claude’un hangi argumanlari denedigini tam olarak size soyler. Bunu otomasyonunuzda Claude’un yapmasina izin verilmeyen bir sey yapmaya calistigini tespit etmek icin ayristirin — ve denetim icin kaydedin.
auto izin modu CLI’da mevcuttur ancak henuz gonderilmemis bir API betasi (afk-mode-2026-01-31) gerektirir. Siniflandirici kurallarini claude auto-mode config ile inceleyebilirsiniz — veri sizintisi, uretim dagitimi, kimlik bilgisi arastirmasi ve dahasi icin 26 engelleme kurali ortaya koydugunu goreceksiniz. Beta gonderildiginde, auto cogu is akisi icin onerilen mod haline gelebilir.
Betiklerinizden birine —permission-mode plan ekleyin. Calistirin. JSON ciktisindaki permission_denials dizisini kontrol edin — Claude’un ne yapmak istedigini ama yapamadigini goreceksiniz. Bu dizi denetim izinizdir.
Izin Onceligi
Proje ayarlarinizda Write icin bir izin kurali ekliyorsunuz. Calismaz — organizasyon duzeyindeki yonetilen bir engelleme kurali bunu sessizce gecersiz kilar. Izin kurallarinin bir oncelik hiyerarsisi vardir ve ayarladiginiz kurallar aslinda uygulanan kurallar olmayabilir.
Oncelik Kurallari
Izin kurallari birden fazla seviyede tanimlanabilir. Kurallar catistiginda, daha yuksek oncelikli seviye kazanir. Ayni seviyede engelleme her zaman izin vermeyi yener.
Izin Oncelik Kademesi (En Yuksek -> En Dusuk)═══════════════════════════════════════════════════════════════
1. Yonetilen Ayarlar (Kurumsal MDM) └─ Organizasyon capinda, gecersiz KILINAMAZ ↓ asagidaki her seyi yener
2. CLI Argumanlari (--allowedTools, --disallowedTools) └─ Yalnizca mevcut oturum ↓ proje/kullanici ayarlarini yener
3. Yerel Proje Ayarlari (.claude/settings.local.json) └─ Gelistirici basina, gitignore'da ↓ paylasilmis proje/kullanici ayarlarini yener
4. Paylasilmis Proje Ayarlari (.claude/settings.json) └─ Takim capinda, repoya commit edilmis ↓ kullanici ayarlarini yener
5. Kullanici Ayarlari (~/.claude/settings.json) └─ Kullanici icin global varsayilanlar ↓ en dusuk oncelik
═══════════════════════════════════════════════════════════════HER seviyede: engelle > sor > izin verBir arac HERHANGI bir seviyede engellenmisse, daha dusuk seviyedeki hicbir izin bunu gecersiz kilamaz.Kritik kural: engelle > sor > izin ver her seviyede. Bir arac HERHANGI bir seviyede engellenmisse, daha dusuk seviyedeki hicbir izin kurali bunu gecersiz kilamaz. Bir takim lideri paylasilmis proje ayarlarinda Bash(rm -rf:*) komutunu engelleyebilir ve hicbir bireysel gelistiricinin yerel ayarlari veya CLI bayraklari bunu yeniden etkinlestiremez.
Ayar Onceligi (En Yuksekten En Dusuge)
| Seviye | Kaynak | Kapsam |
|---|---|---|
| 1 | Yonetilen ayarlar (kurumsal MDM) | Organizasyon capinda, gecersiz kilinamaz |
| 2 | CLI argumanlari (—allowedTools, —disallowedTools) | Yalnizca mevcut oturum |
| 3 | Yerel proje ayarlari (.claude/settings.local.json) | Gelistirici basina, gitignore’da |
| 4 | Paylasilmis proje ayarlari (.claude/settings.json) | Takim capinda, repoya commit edilmis |
| 5 | Kullanici ayarlari (~/.claude/settings.json) | Kullanici icin global varsayilanlar |
Farkli kapsamlarda catisan kurallar olusturarak kural onceliqini test edin. Projenizin .claude/settings.json dosyasina bir izin kurali ve CLI bayragi uzerinden bir engelleme kurali ekleyin:
claude -p “Hello’yu test.txt’ye yaz” —disallowedTools “Write” —output-format json | jq ‘.permission_denials’
Hangi kural kazandi — proje izni mi yoksa CLI engeli mi? Bu, her-zaman-engelleme-kazanir ilkesini gosterir.
--settings Calisma Zamani Gecersiz Kilmasi
--settings bayragi, satir ici JSON veya dosya yolundan ek ayarlar yukler ve proje ayarlarinin uzerinde yeni bir oncelik katmani olusturur:
# Satir ici JSON — bu oturum icin proje engelleme kuralini gecersiz kilclaude -p "Dagitim notlarini yaz" \ --settings '{"permissions":{"allow":["Write"]}}' \ --permission-mode bypassPermissions
# Dosya tabanli — ayni etkiclaude -p "Dagitim notlarini yaz" \ --settings ./ci-overrides.json \ --permission-mode bypassPermissions--settings ile allow:["Write"] kullanmak, Write’i engelleyen proje .claude/settings.json dosyasini gecersiz kilar. Dosya sifir permission_denials ile basariyla olusturulur. Hem satir ici JSON hem de dosya tabanli formatlar ayni sekilde davranir.
--settings, --allowedTools ile birlikte calisir — iki bayrak da catisma olmadan birlikte kullanilabilir. --settings ayar oncelik katmanini etkilerken --allowedTools arac filtresi katmaninda calisir.
—allowedTools ve —disallowedTools arasindaki iliskinin aksine (ayni seviyede engelleme her zaman kazanir), —settings proje ayarlarindan daha yuksek bir oncelik seviyesinde calisir. Bir —settings izni, proje duzeyindeki bir engeli gecersiz KILABILIR. Bu bayraga —permission-mode bypassPermissions ile ayni dikkati gosterin.
Dizi Ayarlari Birlestirme Davranisi
Ayarlar birden fazla kapsamdan (kullanici, proje, yerel, CLI) yuklendiginde, permissions.allow ve permissions.deny gibi dizi degerleri degistirilmek yerine birlestirilir ve tekrarlar kaldirilir. Proje duzeyinde allow: ["Read"] ile kullanici duzeyinde allow: ["Write"] birlesince sonuc allow: ["Read", "Write"] olur.
Bu birlestir-ve-tekrarlari-kaldir stratejisi, tum kapsamlardaki tum dizi turundeki ayarlara uygulanir.
Ayarlar birden fazla kapsamdan (kullanici, proje, yerel, CLI) yuklendiginde, permissions.allow ve permissions.deny gibi dizi degerleri degistirilmek yerine birlestirilir ve tekrarlar kaldirilir. Proje duzeyinde allow: [“Read”] ile kullanici duzeyinde allow: [“Write”] birlesince sonuc allow: [“Read”, “Write”] olur. Bu birlestir-ve-tekrarlari-kaldir stratejisi, tum kapsamlardaki tum dizi turundeki ayarlara uygulanir.
.claude/settings.json icindeki izin kurallari kesinlikle yereldir — dizin agacinda yukariya dogru yurumezler. Bir ust dizinin permissions.deny: [“Write”] ayari, bir alt dizin settings.json’u olmasa bile alt klasor oturumlarina uygulanmaz. Bu, CLAUDE.md ve MCP yapilandirmalarinden farklidir, cunku onlar yukariya dogru miras alir. Monorepo capinda izin uygulamasi icin yonetilen ayarlari (kurumsal seviye) kullanin.
claude -p “Hello’yu test.txt’ye yaz” —output-format json | jq ‘.permission_denials’ calistirin ve gercekte hangi kurallarin uygulandigini kontrol edin. Beklenmeyen engellerle karsilasirseniz, oncelik hiyerarsisi uzerinden izleyin: yonetilen > CLI bayraklari > yerel proje > paylasilmis proje > kullanici. Bulamadiginiz engel genellikle baktiginizdan daha yuksek bir kapsamdadir.