# İzin modları

Altı mod, Claude'un sormadan ne kadarını yapabileceğini belirliyor. Modu, bir hatanın maliyetine göre seçin ve katı kuralları harness'ın zorladığı yere koyun.

## Tek ayar, altı konum

Her oturum altı izin modundan birinde çalışıyor: `default`, `acceptEdits`, `plan`, `auto`, `dontAsk` ve `bypassPermissions`. Terminalde `Shift+Tab` default, acceptEdits ve plan arasında dönüyor. Bypass bu döngüde yalnızca başlangıçta etkinleştirildiyse görünüyor, dontAsk ise orada hiç görünmüyor.

Bir modda başlamak için `--permission-mode <mode>` kullanabilir ya da ayarlarda `permissions.defaultMode` tanımlayabilirsiniz. Ayarın arkasındaki soru basit: ne kadar bölünmek istiyorsunuz ve Claude yanılırsa ne olur?

## Her mod gerçekte neye izin veriyor

- `default` Manuel mod. Claude serbestçe okuyor, düzenlemeden ve komut çalıştırmadan önce soruyor.
- `acceptEdits` dosya düzenlemelerini sormadan onaylıyor. Çalışma dizini içinde `mkdir`, `touch`, `rm`, `rmdir`, `mv`, `cp` ve `sed` komutlarını da otomatik onaylıyor. Listede `rm` olduğuna dikkat edin.
- `plan` Claude'un okumasına ve öneri sunmasına izin veriyor. Siz planı onaylayana kadar düzenlemeler engelli.
- `auto` kararı, her önemli eylemi inceleyen bir sınıflandırıcı modele bırakıyor. Varsayılan sınıflandırıcı Claude Sonnet 5.
- `dontAsk` gözetimsiz script'ler için, `--allowedTools` ile birlikte kullanılıyor.
- `bypassPermissions` istemleri atlıyor. Yalnızca atılabilir container'larda çalıştırın.

Bazı yollar, düzenlemeler otomatik onaylıyken bile korunuyor: `.git`, `.claude`, `.vscode`, `.idea`, kabuk rc dosyaları ve `.mcp.json` gibi yerlere yazma, bypass dışında asla otomatik onaylanmıyor.

**Question:** Daha hızlı ilerlemek için acceptEdits'e geçtiniz. Çalışma dizini içinde başka ne otomatik hale geliyor?

- Hiçbir şey, yalnızca dosya düzenlemeleri
- mkdir, rm, mv, cp ve sed gibi komutlar
- Her Bash komutu
- Ağ istekleri

**Answer:** mkdir, rm, mv, cp ve sed gibi komutlar. acceptEdits yalnızca düzenlemeleri değil, çalışma dizini içinde rm ve sed gibi bir dosya komutları kümesini de otomatik onaylıyor.


## Muhakeme mi, duvar mı

En dikkatli anlaşılması gereken mod auto, çünkü duvar gibi hissettiriyor ama değil. Bir sınıflandırıcı her eylem için bir yargıya varıyor. Üst üste üç engelleme ya da toplamda yirmi engelleme onu duraklatıyor ve istemler geri dönüyor. Auto moda girmek, `Bash(*)` gibi geniş allow kurallarını da düşürüyor, `Bash(npm test)` gibi dar olanlar kalıyor.

Sohbette söylediğiniz sınırlar, örneğin "push etme", sınıflandırıcıya sinyal oluyor. Kural olarak saklanmıyorlar, yani compaction onları kaybettirebilir. Her zaman tutması gereken bir kural için deny kuralı ya da hook yazın. Deny kuralları bypass dahil her modda geçerli, allow kuralları ise bypass'ta hiçbir etki yapmıyor.

Rehberden kural sözdizimi örnekleri: `Bash(git push *)` ve `Read(./.env)`. Bir `Read` deny kuralı `cat .env` komutunu da yakalıyor, ama dosyayı açan bir script'i yakalamıyor. `/sandbox` bu boşluğu işletim sistemi düzeyinde kısıtlamayla kapatıyor.

> **Varsayılanlar yüzeye göre değişiyor**
Yeni terminal ve VS Code oturumları auto modda başlıyor. `claude -p` ve Agent SDK ise `default` modda. Bir proje ayar dosyasında `defaultMode`'u `auto` ya da `bypassPermissions` yapmak sessizce yok sayılıyor; yalnızca kullanıcı ya da yönetilen ayarlar bunu dikkate alıyor.


## Nasıl seçilir

Sabrınızdan değil, bir hatanın maliyetinden yola çıkın.

- Tanımadığınız bir depo ya da geri alınamayacak bir şeye yakın değişiklik: `default`, ve her istemi okuyun.
- Sonradan `/diff` ile gözden geçireceğiniz bir refactor: `acceptEdits`.
- Önce yaklaşım üzerinde anlaşmak istediğiniz bir iş: `plan` (sonraki ders).
- İstemlerin darboğaz olduğu uzun işler: `auto`, asla olmaması gerekenler için deny kurallarıyla.
- İnsansız bir script: sıkı bir `--allowedTools` ile `dontAsk`.

İstemler sizi rahatsız ediyorsa modu gevşetmek yerine nedenini giderin. `/fewer-permission-prompts` transkriptlerinizi tarayıp `.claude/settings.json` içine salt okunur bir izin listesi yazıyor, `/permissions` ise engellenen bir eylemi `r` ile yeniden denediğiniz bir "Recently denied" sekmesi sunuyor.

> **Dar, genişten iyidir**
Allow kuralı olarak `Bash(pnpm tsc --noEmit)`, her saat gördüğünüz bir istemi kaldırıyor ve her komuta kapıyı açmıyor.


**Question:** Claude'un asla git push çalıştırmayacağına dair garanti istiyorsunuz. Nereye koyarsınız?

- Sohbette söylerim
- CLAUDE.md'ye yazarım
- Bash(git push *) gibi bir deny kuralı eklerim
- Auto modu kullanırım

**Answer:** Bash(git push *) gibi bir deny kuralı eklerim. Sohbetteki sınırlar ve CLAUDE.md muhakemedir, kaybolabilir. Deny kuralı her modda zorlanır.
