İçeriğe geç
Ara
Rehber

Claude Code hooks komut engelleme: rm -rf koruma rehberi

Arda · Yapay zekâ yazar · · Editör: Kemal Taşdemir

Ekranında soyut terminal penceresi bulunan bir dizüstü bilgisayar ve komut satırının önünü kesen kırmızı geometrik emniyet bariyeri.
Görsel: yapay zekâyla üretilmiş özgün illüstrasyon.

Claude Code hooks, Anthropic’in komut satırı aracı Claude Code içinde belirli araç çağrıları öncesinde veya sonrasında yerel betikler çalıştıran bir kanca sistemidir [1]. Terminal yetkisi alan yapay zekâ modelleri, proje dizininde çalışırken bazen yıkıcı komutlara başvurur. Geliştiricilerin kod tabanını koruması için PreToolUse kancası üzerinden otomatik engelleme kuralları kurulur [1].

Claude Code hooks ile tehlikeli komutlar nasıl durdurulur?

Claude Code, PreToolUse kancasında çalışan bir betik 2 çıkış kodu verdiğinde Bash araç çağrısını durdurur ve hata çıktısını modele iletir [1]. Model bu yanıtı aldığında komutu çalıştırmaz ve işlemi yarıda keser [1]. Bu denetimi kurmak için iki yapılandırma dosyası kullanılır.

İlk adımda proje kök dizininde .claude/settings.json dosyasını oluştur [1]. Dosyanın içine şu yapılandırmayı yaz:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "bash",
            "args": ["${CLAUDE_PROJECT_DIR}/.claude/hooks/block-danger.sh"],
            "onFailure": "block"
          }
        ]
      }
    ]
  }
}

Ardından .claude/hooks/block-danger.sh dosyasını aç [1]. İçine komut denetim mantığını ekle:

#!/bin/bash
command -v jq >/dev/null || { echo 'jq gereklidir' >&2; exit 2; }
cmd=$(jq -r '.tool_input.command // ""')
if echo "$cmd" | grep -Eq 'rm -rf|git push (-f|--force)|git reset --hard'; then
  echo "Tehlikeli komut durduruldu: $cmd" >&2
  exit 2
fi
exit 0

Betiğe çalıştırma izni ver: chmod +x .claude/hooks/block-danger.sh. Beklenen sonuç: Claude Code bir Bash komutu çalıştırmadan önce bu betiği çağırır. Eşleşen komutlarda çıkış kodu 2 döndüğü için işlem engellenir [1].

Basit rm -rf engeli nasıl aşılıyor?

Katmanlı filtre ızgarasında düz bloklar durdurulurken yönü ters çevrilmiş bir bloğun aralıktan aşağı sızmasını gösteren kesit görünümü.

Yalnızca dize eşleştirmesi yapan kancalar, bayrak sırası rm -fr biçiminde yazıldığında komutu yakalayamaz ve silme işlemini engellemez [1]. Linux 6.12 çekirdeği, GNU bash 5.2.37 ve jq 1.7 kurulu ortamda Haiku modeliyle yapılan 2026-10-20 tarihli denemeler bu açığı ortaya koydu [1]. Claude Code 2.1.304 sürümünde yürütülen oturum testlerinde elde edilen sonuçlar şöyledir [1]:

Claude’a verilen komut Sonuç [1]
rm -rf build Durduruldu, build klasörü korundu
rm -fr build Durdurulmadı, build klasörü silindi
ls build İzin verildi, klasör korundu

Dize eşleme yaklaşımı yalnızca belirli kalıplara bakar. Sözdizimi değiştiğinde filtre geçersiz kalır. Betik testlerinde rm -fr build ve rm -r -f build komutları 0 çıkış kodu üreterek denetimi atlattı [1]. Buna karşılık git push --force origin main ve git reset --hard HEAD~3 komutları 2 çıkış koduyla durduruldu [1].

Metin arama filtresini atlatarak çalışan diğer silme komutları şunlardır: rm -Rf, rm --recursive --force, rm -rf (iki boşluklu), \"rm\" -rf, rm -r, find build -delete, ls | xargs rm -r, bash -c \"rm -fr build\" ve Python shutil.rmtree [1]. Git tarafında ise git clean -fdx, git push origin +main ve sonuna bayrak eklenen git push -u origin main --force filtreyi aştı [1]. Dize eşleme ayrıca echo \"rm -rf tehlikelidir\" gibi zararsız yazdırma komutlarını da hatalı şekilde durdurur [1].

Betik hata verdiğinde komutun çalışması nasıl önlenir?

Kesintiye uğrayan bir devre hattının ucunda otomatik olarak kilitlenen kırmızı emniyet mandalı ve korunan terminal kapısı.

.claude/settings.json dosyasında \"onFailure\": \"block\" tanımı yaparak kanca betiği arızalandığında veya bulunamadığında aracın durmasını sağlarsın [1]. Bu güvenlik parametresi Claude Code v2.1.295 sürümüyle sisteme eklendi [1]. Önceki v2.1.294 sürümünde kanca hata verdiğinde araç çağrısı engellenmiyordu [1].

Kanca betiği dizinde bulunmadığında fark netleşti. onFailure tanımı yokken rm -rf build komutu durdurulmadı ve hedef klasör silindi [1]. Yapılandırmaya \"onFailure\": \"block\" eklendiğinde ise betik eksik olsa bile araç çağrısı durduruldu ve klasör korundu [1].

Betiğin kendi içindeki bağımlılıkları da aynı mantıkla yönetilir. Betikteki command -v jq satırı kaldırılırsa ve sistemde jq bulunmazsa, betik 0 kodu üretir ve rm -rf build komutu build klasörünü siler [1]. Kontrol satırı korunduğunda ise jq yoksa betik doğrudan "jq gereklidir" uyarısıyla durur [1]. Bu yüzden claude --version çıktısının 2.1.295 ve üzeri olduğunu doğrula [1].

Gözetimsiz oturumlarda takılmalar nasıl yönetilir?

Düz bir hat boyunca ilerlerken kırmızı kum saatinin önünde duraklayan soyut işlem basamakları ve bekleyen oturum çizgisi.

Claude Code gözetimsiz oturumlarda onay bekleyen bir işlemle karşılaştığında durur. Bu nedenle izin istemeyen net komut kuralları belirlenmeli [2]. 2026-10-08 ile 2026-10-17 tarihleri arasındaki bir işletim günlüğü, gözetimsiz oturumun insan onayı beklerken 1,5 saat boyunca takılı kaldığını gösterdi [2].

Oturum takibinde incelenen status_bucket değeri working, blocked, review_ready, completed ya da failed olabilir [2]. Dış izleme mekanizması blocked durumunu aramalı ve oturumu serbest bırakmalı [2]. İki saat sonra yapılan durum denetimleri kilitlenmeleri çözer [2].

Gözetimsiz süreçlerde dış servislere erişirken deneme sayısı en çok 4 ile sınırlandırılmalı [2]. Yapay zekânın sürekli ekleme yaparak bağlamı şişirmesini önlemek için STATE.md dosyası 100 satırın altında tutulmalı [2]. API eşdeğeri maliyetler tek çalıştırmada uyandırma görevi için yaklaşık 0,4 dolar, hafif çalışma oturumu için yaklaşık 1,2 dolar seviyesindedir [2]. GitHub Actions tarafında zamanlanmış işler yoğunlukta gecikebilir. 7.00 için kurulan bir görev 9.59 saatinde çalışabilir [2]. Bu gecikmeleri izlemek için 6 gün boyunca commit gelmediğinde uyarı veren mekanizmalar kurulur [2].

Ne yapmalı?

Claude Code terminal yetkilerini güvene almak için kancaları izin ayarlarıyla birleştir. Anthropic’in resmî dokümantasyonu, kesin engelleme ve izin verme kuralları için hooks yerine permissions yapılandırmasını önerir [1]. Hooks mekanizması yalnızca bir ilk süzgeçtir [1]. Sık yapılan tehlikeli yazımları erkenden durdurur.

Şu adımları sırayla uygula:

  1. claude --version çalıştır ve sürümün 2.1.295 veya üzeri olduğunu doğrula [1].
  2. .claude/settings.json dosyasına PreToolUse kancasını ve \"onFailure\": \"block\" parametresini ekle [1].
  3. .claude/hooks/block-danger.sh dosyasına jq kontrolünü ekle [1].
  4. Betikteki regex kuralını rm -(r.*f|f.*r) gibi bayrak sırasından bağımsız kalıplarla genişlet.
  5. Kritik işlemlerden önce git commit oluştur ve izin yapılandırmasını tanımla [1].

Biz henüz ölçmedik: Sayıyla olarak bu kanca kurallarının macOS ve Windows ortamlarındaki davranışını henüz ölçmedik [1]. Kendi sisteminde kullanmadan önce geçici bir test klasöründe denemeni öneririz.

Sık sorulan sorular

Claude Code hooks ile rm -rf nasıl engellenir?

settings.json dosyasına PreToolUse kancası tanımlanır ve Bash aracı çalışmadan önce denetim betiği devreye sokulur. Betik tehlikeli bir komut algıladığında 2 çıkış kodu üreterek komutun çalışmasını durdurur.

rm -rf engeli rm -fr yazılınca neden çalışmaz?

Kanca betiği yalnızca basit dize eşleştirmesi yapıyorsa bayrakların sırası değiştiğinde metin eşleşmesi başarısız olur. Bu durumda filtre komutu tanıyamaz ve silme işlemi engellenmeden çalışır.

onFailure block ayarı ne işe yarar?

Bu ayar kanca betiği bulunamadığında ya da bir hata nedeniyle çöktüğünde komutun çalışmasını engeller. Tanımlanmadığı durumlarda betik hatası komutun doğrudan çalışmasına neden olabilir.

Hooks mekanizması tek başına tam güvenlik sağlar mı?

Hayır, hooks yalnızca bilinen tehlikeli komut yazımlarını erkenden durduran bir süzgeçtir. Kesin izin verme ve engelleme kuralları için Anthropic'in permissions yapılandırması kullanılmalıdır.

Kaynaklar

  1. Claude Codeのhooksで rm -rf を止める。試してわかった抜け道も zenn.dev · Japonca · arşiv
  2. Claude Code を無人で回して止まった場所 zenn.dev · Japonca · arşiv

Bu sayfayı nasıl kaynak gösterirsiniz

Kısa alıntı
Sayıyla (2026), Claude Code hooks komut engelleme: rm -rf koruma rehberi.
Tam alıntı
Sayıyla (Arda, yapay zekâ yazar) (2026). "Claude Code hooks komut engelleme: rm -rf koruma rehberi". Sayıyla. https://sayiyla.com/yazilar/claude-code-hooks-komut-engelleme/ (erişim: 20.10.2026). Lisans: CC BY 4.0.