Skip to content

Izin Modlari

Claude'un neler yapabilecegini kontrol edin — modlar, izin listeleri ve engel listeleri

10 dk okuma

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.

Note

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 deneracceptEdits vazgecmeden once iki reddetme uretir; default birinden 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_denials kontrol 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), --settings daha 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

ModBayrakDavranisKullanim Alani
default(gerekli degil)Her aracin ilk kullaniminda izin isterInteraktif gelistirme
acceptEdits—permission-mode acceptEditsDosya duzenlemelerini otomatik onaylar, kabuk komutlari icin sorarGuvenilir duzenleme oturumlari
plan—permission-mode planSalt okunur — analiz yapabilir ama dosyalari degistiremez veya komut calistiramazKod inceleme, mimari analiz
dontAsk—permission-mode dontAskIzin kurallari ile onceden onaylanmadikca araclari otomatik reddederBasliksiz / otomatik is akislari
bypassPermissions—permission-mode bypassPermissionsTum izin istemlerini atlar — her arac cagrisi basarili olurYalnizca CI/CD, konteynerler, sanal makineler
auto—permission-mode autoYapay zeka siniflandirici guvenli eylemleri otomatik onaylar, riskli olanlari engeller (7 izin + 26 engelleme kurali)Gelecekteki varsayilan — henuz mevcut degil (API beta kapisi)
Permission Mode Spectrum
MORE CONTROL read-only MORE AUTONOMY full access plan read only default prompt each acceptEdits auto-approve edits dontAsk deny unknown bypass skip all checks interactive dev CI / containers

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

SenaryoModNeden
Interaktif gelistirme, projede ilk kezdefaultGuven olusturana kadar her eylemi gormek ve onaylamak istiyorsunuz
Odakli kodlama oturumu, guvenilir kod tabaniacceptEditsDosya duzenlemeleri serbestce akar; kabuk komutlari hala onay gerektirir
Yalnizca kod inceleme veya planlamaplanClaude hicbir seyi degistirmeden analiz eder
Acik izin kurallari olan otomatik boru hattidontAskBir istemde takili kalmak yerine onaylanmamis araclarda hizla basarisiz olur
Bir konteyner veya sanal makinede CI/CDbypassPermissionsInsan yok, izole ortam patlama yaricapini sinirlar
Planla-sonra-yurutu is akisiplan sonra bypassPermissionsSalt 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.

Terminal window
# Yalnizca dosya okumaya ve grep'e izin ver — baska bir sey yok
claude -p "auth.py'yi analiz et" --allowedTools "Read,Grep,Glob"
# Kabuk erisimi haricinde her seye izin ver
claude -p "Bu modulu yeniden duzenle" --disallowedTools "Bash"
# Glob kaliplari ile belirli bash komutlarina izin ver
claude -p "Testleri calistir" --allowedTools "Bash(npm test:*),Read,Edit"

Arac belirleyicileri izin kurallariyla ayni kalip sozdizimini kullanir:

  • Bash(git:*)git status, git commit vb. ile eslesir
  • Edit(/src/**/*.ts)/src/ altindaki herhangi bir TypeScript dosyasiyla eslesir
  • mcp__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.

Try This

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:

default modu — Write engellendiartifacts/03/default_mode.json
1{
2 "type": "result",
3 "subtype": "success",
4 "is_error": false,
5 "duration_ms": 6611,
6 "num_turns": 2,A
7 "result": "It looks like permission to write to `/tmp/perm_test_default.txt` was denied. This is outside the project directory, so you'd need to grant permission for that path.",
8 "session_id": "14325d7c-c649-41b1-83a1-5b2b08c38184",
9 "total_cost_usd": 0.027987,
10 "permission_denials": [
11 {
12 "tool_name": "Write",B
13 "tool_use_id": "toolu_01ET8KmMAWVY5WqSDxsne9mZ",
14 "tool_input": {C
15 "file_path": "/tmp/perm_test_default.txt",
16 "content": "hello\n"
17 }
18 }
19 ]
20}
A2 tur: bir deneme, bir aciklama
BTek reddetme — Claude yeniden denemedi
CEngellenen tam Write cagrisi

acceptEdits modu da yazmayi engeller — ancak Claude vazgecmeden once bir kez yeniden dener ve iki reddetme ile ekstra bir tur uretir:

acceptEdits modu — Write hala engellendi (proje disinda)artifacts/03/accept_edits_mode.json
1{
2 "type": "result",
3 "subtype": "success",
4 "is_error": false,
5 "duration_ms": 6647,
6 "num_turns": 3,A
7 "result": "It seems write access to `/tmp/perm_test_accept.txt` is being blocked by your permission settings.",
8 "session_id": "1e0f7082-6e8f-4810-8e85-e40c516d735d",
9 "total_cost_usd": 0.038465,B
10 "permission_denials": [
11 {C
12 "tool_name": "Write",
13 "tool_use_id": "toolu_01RpQemEPzcTaV1tcxtrbZMA",
14 "tool_input": {
15 "file_path": "/tmp/perm_test_accept.txt",
16 "content": "hello\n"
17 }
18 },
19 {
20 "tool_name": "Write",
21 "tool_use_id": "toolu_01Ew64DqvyigeEs7Ue1VQAf7",
22 "tool_input": {
23 "file_path": "/tmp/perm_test_accept.txt",
24 "content": "hello\n"
25 }
26 }
27 ]
28}
A3 tur — yeniden denemeden kaynaklanan ekstra bir tur
BYeniden deneme nedeniyle daha yuksek maliyet
CAyni eylem icin iki reddetme — Claude bir kez yeniden denedi

bypassPermissions modu hemen basarili olur — sifir reddetme, en dusuk maliyet:

bypassPermissions modu — Write basariliartifacts/03/bypass_mode.json
1{
2 "type": "result",
3 "subtype": "success",
4 "is_error": false,
5 "duration_ms": 6191,
6 "num_turns": 2,
7 "result": "Done. Wrote \"hello\" to `/tmp/perm_test_bypass.txt`.",A
8 "session_id": "8962eff5-0fee-4dd6-aec1-b862af7f426d",
9 "total_cost_usd": 0.026981,C
10 "permission_denials": []B
11}
ADosyanin yazildiginin onaylanmasi
BBos dizi — sifir izin reddetmesi
CEn dusuk maliyet: yeniden deneme yok, reddetme yonetimi yok
Izin Modu Karsilastirmasi
default modu
1{
2 "type": "result",
3 "subtype": "success",
4 "is_error": false,
5 "duration_ms": 6611,
6 "num_turns": 2,
7 "result": "It looks like permission to write to `/tmp/perm_test_default.txt` was denied. This is outside the project directory, so you'd need to grant permission for that path.",
8 "session_id": "14325d7c-c649-41b1-83a1-5b2b08c38184",
9 "total_cost_usd": 0.027987,
10 "permission_denials": [
11 {
12 "tool_name": "Write",
13 "tool_use_id": "toolu_01ET8KmMAWVY5WqSDxsne9mZ",
14 "tool_input": {
15 "file_path": "/tmp/perm_test_default.txt",
16 "content": "hello\n"
17 }
18 }
19 ]
20}
bypassPermissions modu
1{
2 "type": "result",
3 "subtype": "success",
4 "is_error": false,
5 "duration_ms": 6191,
6 "num_turns": 2,
7 "result": "Done. Wrote \"hello\" to `/tmp/perm_test_bypass.txt`.",
8 "session_id": "8962eff5-0fee-4dd6-aec1-b862af7f426d",
9 "total_cost_usd": 0.026981,
10 "permission_denials": []
11}
1.permission_denials karsilastirin: engellenmis ve bos dizi
2.default modundaki yeniden deneme yuku nedeniyle maliyet farki

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

Ilk Reddedilmede bypassPermissions'a Atlamayin

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.

Gotcha

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.

Gotcha

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.

Tip

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.

Note

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.

Now Do This

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

Permission precedence: CLI flags, project settings, user settings, defaultsPRIORITYCLI Flags--allowedTools, --disallowedToolsProject Settings.claude/settings.jsonUser Settings~/.claude/settings.jsonDefaultsBuilt-in defaultsoverridesoverridesoverrides

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 ver
Bir 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)

SeviyeKaynakKapsam
1Yonetilen ayarlar (kurumsal MDM)Organizasyon capinda, gecersiz kilinamaz
2CLI argumanlari (—allowedTools, —disallowedTools)Yalnizca mevcut oturum
3Yerel proje ayarlari (.claude/settings.local.json)Gelistirici basina, gitignore’da
4Paylasilmis proje ayarlari (.claude/settings.json)Takim capinda, repoya commit edilmis
5Kullanici ayarlari (~/.claude/settings.json)Kullanici icin global varsayilanlar
Try This

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:

Terminal window
# Satir ici JSON — bu oturum icin proje engelleme kuralini gecersiz kil
claude -p "Dagitim notlarini yaz" \
--settings '{"permissions":{"allow":["Write"]}}' \
--permission-mode bypassPermissions
# Dosya tabanli — ayni etki
claude -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.

--settings Proje Engelleme Kurallarini Gecersiz Kilabilir

—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.

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.

Gotcha

.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.

Now Do This

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.