Her Şeyi Değiştiren Olaylar
Bir yapay zeka kodlama ajanı, kullanıcının tüm home directory’sini sildi. Ajan rm -rf tests/ patches/ plan/ ~/ komutunu üretti, sondaki ~/ hatalı eklenmişti1. SSD’nin TRIM fonksiyonu, birisi fark etmeden önce blokları sıfırladı. Kurtarma mümkün değildi.
Bu izole bir olay değildi.
Amazon’un Kiro ajanı Aralık 2025’te canlı bir production ortamını silerek 13 saatlik bir AWS kesintisine neden oldu2. Ayrı bir olayda, Claude Code veritabanında --accept-data-loss flag’ini onay almadan çalıştırarak şemayı sildi3. Başka bir olayda ise bir yapay zeka ajanı, kullanıcının kabul ettiğini hallucinate ederek saatlerce biriken build artifact’leri, derlenmiş kernel’ları ve autotune sonuçlarını barındıran çalışan bir GPU instance’ını yok etti4.
Bunlar uç vakalar değil. Terminal erişimi ve otomatik izinler verilen bir yapay zeka ajanının öngörülebilir sonuçları.
Solo girişimci olarak pek çok projeyi Claude Code üzerinden yönetiyorum. Her ne kadar son kararları kendim veriyor, her adımı kontrol etmeye gayret ediyor olsam dahi bazı durumlarda otomatik izinler iş akışıma dahil olabiliyor. Ancak bunu körü körüne yapmak yerine, önce ortaya çıkması muhtemel sorunlar için önlemler alıyor; gücü kapatmak yerine korkuluklar inşa ediyorum.
5 Katmanlı Savunma Modeli
Topluluk tartışmalarını, akademik makaleleri ve kendi hatalarımı inceledikten sonra net bir kalıp ortaya çıktı. Gartner’a göre ajantik yapay zeka projelerinin %40’ından fazlası büyük ölçüde yetersiz risk kontrolleri nedeniyle 2027 sonuna kadar iptal edilecek5. Çünkü tek bir koruma mekanizması yeterli değil. Topluluk, en güçlüden (aşılması en zor) en zayıfa (aşılması en kolay) sıralanan beş katmanlı bir derinlemesine savunma modeli üzerinde birleşti:
| Katman | Mekanizma | Aşılabilir mi? | Örnek |
|---|---|---|---|
| 1. OS Sandbox | Docker, macOS Seatbelt, bubblewrap | Hayır | Ajan container dışındaki dosyalara erişemez |
| 2. Hook’lar/Guard’lar | PreToolUse script’leri, shellfirm | Yaratıcı bypass mümkün | Shell script rm -rf / komutunu çalıştırılmadan engeller |
| 3. İzin Kuralları | settings.json deny kalıpları | Bilinen bug’lar var | "deny": ["Bash(rm -rf:*)"] |
| 4. Model Sınıflandırıcılar | Otomatik mod risk değerlendirmesi | Olasılıksal | Model komutun “güvenli göründüğüne” karar verir |
| 5. Talimatlar | CLAUDE.md kuralları | Uyuma bağlı | ”Sormadan yıkıcı komut çalıştırma” |
Çoğu geliştirici yalnızca Katman 5’e güvenir. “Yapay zekaya yapmamasını söyledim” bir güvenlik mekanizması değildir. Talimatlar, çalışmayana kadar çalışır ve başarısız olduklarında, yakalayacak başka katman olmadığı için felaket olur.
Yazının girişinde bahsi geçen olayların hepsinde ortak bir nokta vardı: ajan Katman 5 talimatlarını ihlal etti ve onu durduracak altında hiçbir şey yoktu.
Önceki Durumum
Zaten güçlü bir Katman 5 kapsamamız vardı: build kilitleme, alt ajan kısıtlamaları, git güvenliği ve doğrulama gereksinimleri için CLAUDE.md kuralları. İki tane Katman 2 hook’um vardı: git commit’lerde --no-verify engelleyen biri, linter config düzenlemelerini önleyen diğeri. edit-guard aracılığıyla dosya düzenleme için Katman 2 kapsamamız vardı; ardışık edit hatalarını ve içerik kaybını tespit eden bir sistem. Hook sisteminin genel mimarisi ve 4 katmanlı workflow otomasyonu hakkında önceki yazımda detaylı bir anlatım mevcut.
Eksik olan: yıkıcı Bash komutlarına karşı hiçbir koruma. rm -rf, git reset --hard, git push --force, DROP TABLE, bulut kaynak silme veya disk formatlama komutlarına karşı guard olmaması. “Geri dönüşü olmayan terminal komutları” kategorisinin tamamı korumasızdı.
Bileşen 1: Yıkıcı Eylem Guard’ı
Guard, Bash aracına PreToolUse hook olarak kaydedilmiş bir shell script’tir. Claude Code her Bash çalıştırmasından önce bu hook’u tetikler. Script komutu stdin’den JSON olarak alır, regex kalıplarıyla eşleştirir ve bir exit code döndürür: engellemek için 2, izin vermek için 0.
Önem Derecesi Modeli
Tüm tehlikeli komutlar aynı yanıtı hak etmez. Yanlışlıkla git stash drop çalıştırmak kötü ama kurtarılabilir. rm -rf ~/ çalıştırmak felaket ve geri dönüşü yok. Guard iki önem derecesi katmanı kullanır:
BLOCK (exit 2): Komut çalıştırılmaz. Ajan, neyin yakalandığını açıklayan ve alternatifler öneren bir hata mesajı görür. Coffee Debt’e bir çekirdek eklenir.
| Kategori | Örnekler |
|---|---|
| Tehlikeli yollarda özyinelemeli silme | rm -rf ~/, rm -rf /, rm -rf $HOME |
| Git geçmişi yok etme | git reset --hard, git push --force, git clean -f |
| Veritabanı şeması yok etme | DROP TABLE, DROP DATABASE, TRUNCATE TABLE |
| Bulut kaynak silme | vercel rm, railway delete, fly destroy, neon delete |
| Docker toplu silme | docker rm -f, docker system prune -a |
| Tehlikeli bypass flag’leri | --accept-data-loss |
| Disk işlemleri | mkfs.*, dd if=... of=/dev/* |
WARN (exit 0, stderr): Komut çalıştırılır ama ajan bir uyarı görür. Çekirdek eklenmez.
| Kategori | Örnekler |
|---|---|
| WHERE olmadan DELETE | DELETE FROM users; |
| Paket kaldırma | pip uninstall, npm uninstall react |
| Yedek/veritabanı dosyası silme | rm *.db, rm *.sqlite |
| Kimlik bilgisi dosyası silme | rm .env* |
Beyaz Liste Problemi
Bu guard’ı oluşturmanın en zor kısmı tehlikeli komutları yakalamak değildi. Güvenli olanları yakalamamaktı.
rm -rf node_modules özyinelemeli silme kalıbıyla eşleşir. rm -rf dist, rm -rf .next, rm -rf __pycache__ ve rm -rf .venv de öyle. Bunları engellemek, guard’ı herhangi bir JavaScript, Python veya Astro projesi için kullanılamaz hâle getirirdi.
Çözüm: herhangi bir BLOCK kalıbından önce kontrol edilen güvenli hedef beyaz listesi. Guard silme hedefini çıkarır, basename’i 15 bilinen build artifact dizinine karşı kontrol eder ve tüm hedefler güvenliyse kısa devre yaparak izin verir. Bu kontrol, herhangi bir regex eşleştirmesinden önce çalışır.
Komut Zinciri İşleme
Ajanlar komutları zincirler. echo "done" && rm -rf / yine de yakalanmalıdır. Guard komutları &&, ||, ; ve | üzerinden böler, ardından her segmenti bağımsız olarak kontrol eder. Zincirin herhangi bir yerindeki tehlikeli segment, uygun önem derecesini tetikler.
Bileşen 2: Coffee Debt, Geri Bildirim Döngüsü
Yıkıcı komutları engellemek reaktiftir. Hasarı durdurur ama ajanın bunu ilk etapta denemesini engellemez. Bunun için bir geri bildirim döngüsü gerekir.
Coffee Debt, oyunlaştırılmış bir hata takip sistemidir. Ajanın yaptığı her hata, ister araç hatası, ister kullanıcı düzeltmesi, ister engellenen yıkıcı girişim olsun, kalıcı bir sayaca 1 çekirdek ekler. 5 çekirdek, ajanın borçlu olduğu 1 kahveye eşittir. Borç her oturumun başında gösterilir.
Neler Takip Ediliyor
Üç hook aynı JSONL log’una beslenir:
-
PostToolUse (coffee-tracker.sh): Edit eşleşme hatalarını (“old_string not found”), Bash sıfır olmayan exit code’larını ve Write hatalarını yakalar. Her hata araç adı, dosya yolu, hata parçacığı ve zaman damgasıyla loglanır.
-
UserPromptSubmit (coffee-correction-detector.sh): Kullanıcının ajanı düzelttiğini tespit eder. Kalıp eşleştirme hem Türkçe (“yanlış”, “bunu nereden çıkardın”, “hatalı”) hem de İngilizce (“that’s wrong”, “you hallucinated”, “incorrect”) kapsar. Düzeltme, ajanın yanlış çıktıyla kullanıcının zamanını harcadığı anlamına gelir.
-
PreToolUse (guard-destructive.sh): Engellenen yıkıcı girişimler “blocked” olayları olarak loglanır. Ajan tehlikeli bir şey denedi, bu başlı başına takip edilmeye değer bir hatadır.
Oturum Analizi
Oturum başlangıcında ikinci bir hook, JSONL log’unun son 7 gününü okur ve bir kalıp özeti gösterir:
+-- 7 Günlük Kalıplar ----------------+
| En çok hata: Edit (12) > Bash (5) |
| En çok neden: edit_fail (9x) |
| Yoğun saatler: 22:00-02:00 (akşam) |
| Engellenen: 2 yıkıcı girişim |
+-------------------------------------+
Bu bana tek bir hata mesajının söyleyemeyeceği bir şeyi anlatıyor: hataların ne zaman ve nasıl kümelendiğini. Edit hataları 22:00’dan sonra artıyorsa, belki de gece geç saatlerde karmaşık refactoring oturumlarından kaçınmalıyım. Bash hataları TypeScript projelerinde yoğunlaşıyorsa, belki de ajanın build konfigürasyonu hakkında daha fazla bağlama ihtiyacı var.
Akademik Bağlantı
Bu yaklaşımın formel desteği var. Reflexion6, başarısızlık derslerinin doğal dil olarak saklanıp bağlama geri beslendiğinde, herhangi bir model yeniden eğitimi olmadan LLM’lerin görevlerde geliştiğini gösterdi. Coffee Debt bu prensibin pratik bir uygulamasıdır: hatalar loglanır, kalıplar çıkarılır ve oturum başlangıç özeti farkındalık oluşturur.
Trajectory-Informed Memory7 bunu daha ileri taşıyor: çalışma yörüngelerinden dersler çıkarıp yeniden kullanılabilir hafıza olarak saklıyor. Deep analysis CLI’ımız tam olarak bunu yapıyor: hata kalıplarını arama geçmişi ve kod karmaşıklığıyla çapraz referanslayarak eyleme dönüştürülebilir içgörüler üretiyor.
Bileşen 3: Deep Analysis CLI
Oturum başlangıç özeti tasarım gereği hafiftir (500ms’nin altında). Daha derin araştırma için bir Python CLI dört veri kaynağını çapraz referanslar. Aslında bu, monitoring kör noktaları yazısında tartıştığım problemin pratik bir çözümü: mevcut araçlar post-mortem debugging yapıyor, ama hiçbiri kaynakları çapraz referanslamıyor.
| Kaynak | Ne Ortaya Çıkarır |
|---|---|
| coffee-log.jsonl | Hata türleri, araçlar, zaman damgaları, engellenen girişimler |
| hermes.db | Web arama kalıpları, sorgu sıklığı, bilgi boşlukları |
| state.db (dnm-audit) | Dosya karmaşıklığı, statik analiz sorunları, kod sağlığı trendleri |
| knowledge.db | Dosya etkileşim kalıpları, en çok okunan ve düzenlenen dosyalar |
Çapraz Kaynak Korelasyonları
İlginç içgörüler, tek bir kaynağın gösteremeyeceği korelasyonlardan gelir:
Hata-arama korelasyonu: Ajan bir hata yapmadan 5 dakika önce web araması yaptığında, bu aramanın yeterli bağlam sağlamadığını gösterir. Bu bir bilgi boşluğudur: ajan öğrenmeye çalıştı, yeterince öğrenemedi ve ardından görevde başarısız oldu.
Sorunlu dosyalar: Hem hata log’unda (sık edit hataları) hem de kod sağlığı veritabanında (yüksek döngüsel karmaşıklık, çok sayıda statik analiz sorunu) görünen dosyalar “çifte bela”dır. Bu dosyalar hem ajanın doğru düzenlemesi zor hem de objektif olarak karmaşıktır. Refactoring adaylarıdır.
Zaman risk profili: Tüm kaynaklardan zaman damgalarını birleştirmek, saat bazında hata/prompt oranı üretir. Verilerim net bir kalıp gösteriyor: hata oranları 22:00’dan sonra tırmanıyor ve gece yarısı ile 02:00 arasında zirve yapıyor. Bu ajanın yorulması değil; oturumların uzaması, bağlam pencerelerinin dolması ve ben yoruldukça prompt’larımın daha az kesinleşmesi.
Bu Sistemin Yapamadıkları
Sınırlamalar konusundaki şeffaflık, özellik listelerinden daha önemli.
Değişken genişletme: Guard, rm -rf $SOME_VAR komutunu değerlendiremez çünkü literal komut string’i üzerinde çalışır. Değişken / olarak genişlerse, guard bunu yakalayamaz. Bunu yalnızca OS sandbox önleyebilir.
Alias ve gizleme: alias destroy='rm -rf /' ardından destroy geçecektir. Guard alias çağrısını görür, altındaki komutu değil.
Davranış değişikliği: Coffee Debt hataları takip eder, ancak ajan borç sayısına göre davranışını doğrudan değiştirmez. Geri bildirim döngüsü bağlam enjeksiyonu (oturum özeti) aracılığıyla çalışır, model ağırlık güncellemeleri aracılığıyla değil. Ajanın gerçekten daha dikkatli olup olmadığı açık bir soru.
Yanlış negatifler: Regex tabanlı hiçbir sistem her tehlikeli komutu yakalayamaz. Yeni CLI araçları, yaratıcı komut yapılandırmaları ve çok adımlı saldırılar (her bir komut güvenli ama sıralama yıkıcı olan) geçecektir.
Esasında bu yüzden 5 Katmanlı Savunma Modeli var. Guard Katman 2’dir. Bariz vakaları yakalar. Geri kalan her şey için yedek olarak Katman 1, 3 ve 4’e ihtiyacınız var.
Sonuçlar ve Sıradaki Adımlar
Sistem canlı. Dağıtımdan sonraki ilk oturumda, guard bir veri dosyasını hedefleyen bir rm komutunu yakaladı, normalde manuel olarak onaylamam gereken bir şey. Oturum başlangıç analizi 300ms’nin altında çalışıyor ve zaten fark etmediğim bir kalıbı ortaya çıkardı: edit hataları son zamanlarda okumadığım dosyalarda yoğunlaşıyor.
Peki, topluluk için açık sorular neler?
Uyarlanabilir önem derecesi: Guard, tekrarlanan girişimlerden sonra WARN’ı BLOCK’a yükseltmeli mi? Ajan aynı uyarıyı bir oturumda üç kez tetiklerse, belki de engellenmelidir.
Oturumlar arası öğrenme: Bir oturumdaki hata kalıpları bir sonrakini bilgilendirebilir mi? JSONL log’u kalıcıdır, ancak analiz şu anda yalnızca oturum başlangıcında çalışır. “22:00’dan sonra .tsx dosyalarını düzenlemede başarısız olma eğilimindesin” gibi bir prompt enjeksiyonu gerçek davranışsal farkındalık oluşturabilir.
OS sandbox entegrasyonu: Guard Katman 2’dir. Katman 1 (sandbox-runtime veya Docker) eklemek sistemi önemli ölçüde daha güçlü hale getirir. Soru, DX ödünleşmesinin solo geliştirici iş akışı için kabul edilebilir olup olmadığı.
edit-guard (dosya düzenleme güvenlik bileşeni) açık kaynak. Yıkıcı eylem guard’ı, Coffee Debt ve analiz CLI’ı, kalıplar stabilize olduktan sonra açık kaynak yapmayı planladığım bir Claude Code hook koleksiyonunun parçası.
İleri Okumalar
- Reflexion: Language Agents with Verbal Reinforcement Learning (Shinn ve ark., NeurIPS 2023)
- Trajectory-Informed Memory Generation for Self-Improving Agent Systems (IBM Research, 2026)
- AGrail: A Lifelong Agent Guardrail with Effective and Adaptive Safety Detection
- Claude Code Hooks Documentation
- edit-guard, dosya düzenleme güvenlik hook’u
- Claude ile Pair Programming: Pratikte Şekillenen Bir Çerçeve, bu savunma katmanlarının parçası olduğu bütünsel AI pair programming çerçevesi
Footnotes
-
Claude Code
rm -rf ~/ile home directory silme olayı. GitHub Issue #12637, Aralık 2025. ↩ - Amazon Kiro ajanının AWS Cost Explorer production ortamını silmesi. Financial Times, Aralık 2025. ↩
-
Claude Code’un
--accept-data-lossflag’iyle veritabanı şemasını silmesi. GitHub Issue #5370. ↩ - Yapay zeka ajanının çalışan GPU instance’ını yok etmesi. Tom’s Hardware. ↩
- Gartner, “Over 40% of Agentic AI Projects Will Be Canceled by End of 2027.” Gartner Newsroom, Haziran 2025. ↩
- Shinn, N. ve ark. “Reflexion: Language Agents with Verbal Reinforcement Learning.” NeurIPS 2023. arXiv:2303.11366. ↩
- “Trajectory-Informed Memory Generation for Self-Improving Agent Systems.” IBM Research, 2026. arXiv:2603.10600. ↩
- 01 Otomatik izinli yapay zeka ajanları rm -rf, git reset --hard ve bulut kaynak silme komutlarını sormadan çalıştırabiliyor. Gerçek olaylar bunun varsayımsal olmadığını kanıtlıyor.
- 02 5 Katmanlı Savunma Modeli: OS Sandbox > Hook'lar/Guard'lar > İzin Kuralları > Model Sınıflandırıcılar > Talimatlar. Tek bir katman yeterli değil.
- 03 BLOCK/WARN önem dereceli PreToolUse hook'u, yıkıcı komutları çalıştırılmadan önce yakalıyor. 25 BLOCK kalıbı, 6 WARN kalıbı, 15 güvenli liste istisnası.
- 04 Coffee Debt hata takibini oyunlaştırıyor: her hata bir çekirdek ekliyor, 5 çekirdek 1 kahve borcu. Oturum analizi 'edit hatalarının çoğu 22:00'dan sonra oluşuyor' gibi kalıpları ortaya çıkarıyor.
- 05 Hata loglarını arama geçmişi, kod karmaşıklığı ve dosya etkileşim verileriyle çapraz referanslamak, tek kaynak analizinin kaçırdığı korelasyonları ortaya koyuyor.
+ Yapay zeka kodlama ajanları hangi yıkıcı eylemleri gerçekleştirebilir?
Terminal erişimi olan yapay zeka ajanları, kullanıcının çalıştırabileceği her komutu çalıştırabilir: rm -rf (özyinelemeli silme), git reset --hard (tüm değişiklikleri atma), git push --force (uzak geçmişi yeniden yazma), DROP TABLE (veritabanı şemasını yok etme) ve bulut CLI silmeleri (vercel rm, railway delete, fly destroy). Otomatik izinler açıkken bunlar onay almadan çalışır.
+ PreToolUse hook'u yıkıcı eylemleri nasıl önler?
Claude Code her araç çalıştırılmadan önce PreToolUse olayını tetikler. Bir shell script komutu JSON olarak stdin'den alır, tehlikeli işlemler için regex kalıplarıyla eşleştirir ve çalıştırmayı engellemek için exit code 2, uyarı vermek için exit code 0 döndürür. Guard, zincirlenen komutların (&&, ||, ;, |) her segmentini bağımsız olarak kontrol eder.
+ Coffee Debt sistemi nedir?
Coffee Debt, her yapay zeka hatasının (araç hatası, kullanıcı düzeltmesi, engellenen yıkıcı girişim) kalıcı bir sayaca 1 çekirdek eklediği oyunlaştırılmış bir hata takip sistemidir. 5 çekirdek, ajanın 'borçlu olduğu' 1 kahveye eşittir. Oturum analizi 7 günlük hata kalıplarını gösterir ve deep analysis CLI gizli korelasyonları bulmak için 4 veri kaynağını çapraz referanslar.
+ Bu yaklaşım Claude Code dışındaki yapay zeka ajanlarıyla çalışabilir mi?
5 Katmanlı Savunma Modeli evrenseldir. Spesifik uygulama Claude Code'un hook sistemini kullanır, ancak kalıplar terminal erişimi olan her ajana uygulanabilir: Cursor, GitHub Copilot Workspace, Amazon Q, Windsurf. Temel prensip aynıdır: komutları çalıştırılmadan önce yakala, riski sınıflandır, engelle veya uyar.