# Kimse izlemezken çalıştırmak

Bir izin sorusuna cevap verecek kimse yoksa elinizdeki tek denetçi izin kuralları. Güvenli kurulum: dar allow kuralları, sert deny kuralları, sınırlı bir çalıştırma ve ulaşılabilecek yerde değerli hiçbir şey olmaması.

## Siz çıkınca ne değişir

İnteraktif Claude Code size soruyor. Her onay sorusu, bir insanın eyleme baktığının küçük bir kontrolü. Gözetimsiz çalıştırdığınızda o kontrol kayboluyor ve işi başka bir şeyin yapması gerekiyor. Dört katman var: izin modu, deny kuralları, çalıştırmanın sınırları ve en baştan nelere ulaşılabildiği.

Sıra önemli. Mod bir kolaylık. Deny kuralı ise bir sınır.

## Modu seçmek

Altı mod var: `default`, `acceptEdits`, `plan`, `auto`, `dontAsk` ve `bypassPermissions`. Gözetimsiz script'ler için doküman `dontAsk` ile `--allowedTools` kombinasyonunu öneriyor. Mantığı şu: listelediğiniz her şeye izin var, geri kalan her şey sorulmadan reddediliyor.

`bypassPermissions` yalnızca atılabilir container'larda kullanılmalı. Bypass, tanınan bir sandbox dışında root olarak ya da sudo altında çalışırken reddediliyor.

Auto modu bir orta yol. Bir sınıflandırıcı model, önemsiz olmayan her eylemi gözden geçiriyor. Uzun gözetimsiz iş için uygunluğunu tek bir noktada kaybediyor: arka arkaya üç sınıflandırıcı engeli ya da toplamda yirmi engel auto modunu duraklatıp yeniden sormaya başlıyor. Orada kimse yoksa çalıştırma takılıyor.

> **Varsayılan hatırladığınız değil**
Yeni terminal ve VS Code oturumları auto modunda başlıyor, ama `claude -p` ve Agent SDK `default` modunda başlıyor. Modu devralmak yerine her script'te açıkça belirtin.


**Question:** Doküman gözetimsiz bir script için hangi ikiliyi öneriyor?

- Dizüstünüzde bypassPermissions
- dontAsk ile --allowedTools
- plan modu
- Bayraksız default modu

**Answer:** dontAsk ile --allowedTools. dontAsk ile açık bir --allowedTools listesi, listedeki eylemlerin çalışması ve geri kalan her şeyin beklenecek bir soru olmadan reddedilmesi demek.


## Gerçek çit deny kuralları

Auto modu ve sohbette söylediğiniz bir sınır ("push etme"), yargıdır, uygulama değil. Sohbetteki sınır bir engelleme sinyali gibi davranır ama kural olarak saklanmaz, bu yüzden compaction onu düşürebilir. Sert "asla" kurallarını deny kurallarına ya da hook'lara koyun.

Deny kuralları bypass dahil her modda geçerli. Allow kuralları bypass'ta hiçbir etki yapmıyor. Deny'ın güvenlik katmanı olmasının sebebi bu asimetri.

Best-practices sayfasından bazı örnekler: `Bash(git push *)`, `Read(./.env)`, `Read(./secrets/**)`. Erişimlerini de bilin. `Read` deny kuralı `cat .env`'yi de yakalar ama dosyayı açan bir script'i yakalamaz. Bir `WebFetch` domain deny kuralı, sandbox açık değilse o domain'e `curl` atılmasını engellemez.

`/sandbox` burada devreye giriyor. macOS, Linux ve WSL2'de Claude'u işletim sistemi düzeyinde sınırlıyor, Read deny kurallarınızı ve WebFetch domain kurallarınızı alıyor. Strict sandbox modu, sandbox dışında yeniden deneme kaçış kapısını kaldırıyor.

## Çalıştırmayı sınırlayın

Çıkışı olmayan döngü para bitene kadar döner. Print modunda:

- `--max-turns` turları sınırlar.
- `--max-budget-usd` harcamayı sınırlar, istemci tarafı bir tahmin kullanır. Fatura değil, koruma olarak görün.
- `--permission-prompts none` sorulacak her şeyi reddeder ve Claude'a tekrar denememesini söyler.

```terminal
$ claude -p "fix the lint errors" --permission-mode dontAsk --allowedTools "Bash(npm run lint)" "Edit" --max-turns 15 --max-budget-usd 2
* Lint'i çalıştırır, dosyaları düzenler
* git push çalıştırmayı dener
* Reddedilir, permission_denied olarak raporlanır
# Çalıştırma onsuz devam eder.
```

İzin sorma aracı olmayan bir `-p` çalıştırmasında tekrarlayan engellemeler eylemi düşürüyor ve çalıştırma durmak yerine devam ediyor. O yüzden sonuçtaki `permission_denials` alanını okuyun. Sessiz bir çalıştırma, hiçbir şeyin reddedilmediğinin kanıtı değil.

## Her şeyi erişimin dışında tutun

En güçlü sınır, Claude'un ulaşamadığı şey. Birkaç koruma var ve her birinin bir kenarı var.

- `.git`, `.claude`, `.vscode`, `.idea`, shell rc dosyaları ve `.mcp.json` gibi korumalı yollara yazma, bypass dışında asla otomatik onaylanmaz.
- Dosya sistemi kökü, ev klasörünüz ya da çalışma klasörü gibi kritik hedeflerin `rm` ile silinmesi, hiçbir modda allow kuralları ya da hook'larla onaylanamaz.
- `permissions.blockWritesOutsideWorkingDirectories` yazmaları proje içinde tutar.

> **Bypass açıkken plan modu çit değil**
Bypass'ın kullanılabildiği interaktif bir terminalde plan modunun düzenleme engeli uygulanmaz: Claude'a düzenleme yapmaması söylenir ama düzenlemeler çalışırdı. Bypass söz konusuyken bir mod adını garanti saymayın.


Headless bir çalıştırmanın neyi yüklediğine de dikkat edin. `--bare` olmadan `-p`, güvenmediğiniz bir klasörde bile proje hook'larını çalıştırıyor ve `.mcp.json` sunucularına bağlanıyor. CI'da `--bare` kullanın, bir API key verin ve o key'e işin ihtiyaç duyduğundan fazlasını vermeyin.

> **Bir reddedilmeyi prova edin**
`--permission-mode dontAsk` ile ve görevin ihtiyaç duyduğu bir şeyi içermeyen bir allowlist ile bir `-p` komutu çalıştırın. Sonuçtaki `permission_denials` alanını okuyun, sonra eksik kuralın eklenip eklenmeyeceğine ya da görevin gözetimsiz çalışmaması gerektiğine karar verin.


**Question:** "Asla push etme" kuralını prompt'ta söylemek yerine neden deny kuralına koymalı?

- Prompt'ta push kelimesi geçemez
- Deny kuralı her modda geçerlidir ve uygulanır; söylenen sınır yargıdır ve compaction onu düşürebilir
- Deny kuralları daha hızlıdır
- Print modunda prompt yok sayılır

**Answer:** Deny kuralı her modda geçerlidir ve uygulanır; söylenen sınır yargıdır ve compaction onu düşürebilir. Deny kuralları bypass dahil her modda geçerli. Sohbette söylenen sınır kural olarak saklanmaz ve compaction onu düşürebilir.
