Bu neden önemli?
Ajanlarla kod yazarken kalite, rica etmekle değil kontrol etmekle korunuyor. Otomatik ve her seferinde aynı sonucu veren bir kontrol, bir metin dosyasındaki kuraldan çok daha güvenilir.
“Slop” ne demek?
İngilizcede slop, özensiz, ruhsuz içerik için kullanılan bir kelime. Yazılımda “AI slop” ise yapay zekânın ürettiği, çalışan ama kötü kokan kod demek. Derlenir, testleri geçer, ama içinde ileride hataya dönüşecek kısa yollar vardır.
Birçok ekip bunun önüne geçmek için projeye CLAUDE.md ya da AGENTS.md gibi dosyalar koyuyor: “Tip dönüştürmelerini zincirleme”, “unknown döndürme” gibi kurallar yazıyor. Sorun şu: Ajan bu kuralları bazen atlıyor, bazen tamamen görmezden geliyor.
Kural değil, kontrol
Videodaki fikir basit: Kuralı ajana söylemek yerine, kuralı denetleyen bir araç koy. Bu araç da yıllardır tanıdığımız linter: Kodu çalıştırmadan okuyup belli kalıpları yakalayan program.
anti-slop, geliştirici Dillon Mulroy’un kendi projelerinde kullandığı bir kural seti. Rust ile yazılmış hızlı bir JavaScript/TypeScript linter’ı olan Oxlint için hazırlanmış. Oxc ekibi, kendi ölçümlerinde Oxlint’in ESLint’ten 50-100 kat hızlı olduğunu söylüyor.
Linter’ın avantajları:
- Kesin: Kural ihlali varsa hata veriyor. “Belki uyar” yok.
- Ucuz: Ajanın her seferinde uzun bir kural listesini okumasına gerek yok. Bu da daha az token demek.
- Açıklayıcı: anti-slop’un hata mesajları sadece “yanlış” demiyor, neden yanlış olduğunu ve nasıl düzeltileceğini de yazıyor. Bu, ajan için çok değerli bir ipucu.
Bir örnek: Kanıtı çöpe atmak
TypeScript’te as ile bir değere “bu aslında şu tiptir” diyebilirsin. Bazen iki kez üst üste: veri as unknown as Kullanici. Kod derlenir ama TypeScript’in elindeki bütün bilgiyi silmiş olursun.
Videodaki örnek: Bir API’den gelen hesabı böyle bir tipe çeviriyorsun ve olusturulmaTarihi alanının bir Date olduğunu varsayıyorsun. Ama JSON’da tarih tipi yok, gelen şey aslında bir metin. İlk kez bu alanı tarih gibi kullandığında hata çıkıyor. TypeScript seni uyarabilirdi, ama zincirleme dönüşümle onu susturdun.
anti-slop’un önerdiği yol: Dışarıdan gelen veriyi sınırda doğrula. Yani Zod gibi bir kütüphaneyle “bu gerçekten beklediğim şekilde mi?” diye kontrol et, sonra kullan.
Kurallardan bazıları:
no-chained-type-assertions: Zincirleme tip dönüşümlerini reddediyor.no-unknown-returns: Fonksiyonun “ne döndürdüğüm belli değil” (unknown) demesine izin vermiyor.no-module-mocking: Testlerde modülleri sahteleyen kısa yollar yerine gerçek bağımlılık noktaları istiyor.
Döngü nasıl işliyor?
Ajan kodu yazıyor, lint komutunu çalıştırıyor, hataları okuyor ve düzeltiyor. Videoda Claude’a sadece “bu dosyadaki sorunları düzelt” deniyor, gerisini hata mesajlarına bakarak kendisi hallediyor.
Bilmen gerekenler
- Bu kuralların hiçbiri tek başına bir hata (bug) değil. Amaç, ileride hataya dönüşebilecek özensiz kalıpları erken yakalamak.
- Yazar, kuralların kendi zevkini yansıttığını açıkça söylüyor. Hepsini kullanman gerekmiyor, ekibine uyanları seç.
- anti-slop bir npm paketi değil. Kuralları projene kopyalayıp kendine göre değiştirmen öneriliyor.
Düşün
- Senin projende ajanın ya da bir insan ekip arkadaşının sürekli tekrarladığı bir kötü alışkanlık var mı? Bir linter kuralı bunu yakalayabilir mi?
- “Kural yazmak” ile “kontrol koymak” arasındaki fark, yazılım dışında nerede karşına çıkıyor?
Bu yazıdaki araçlar Araç Kutusu'nda: anti-slop, Oxlint