Kendi kendine review yapma alışkanlığını kıran antagonistik code review aracı. Son değişikliklerinizin gerçekten eleştirel bir incelemesini istediğinizde, PR merge etmeden önce veya Claude'un kod kalitesi konusunda çok uzlaşmacı olduğunu düşündüğünüzde kullanın. Düşmanca reviewer kişilikleri aracılığıyla perspektif değişimine zorlayarak, yazarın ve reviewer'ın paylaştığı mental modelin gözden kaçırdığı noktaları yakalar.
cd ~/.claude/skills
git clone https://github.com/alirezarezvani/claude-skills.git claude-skills mkdir -p ~/.claude/skills/adversarial-reviewer
curl -fsSL https://raw.githubusercontent.com/alirezarezvani/claude-skills/HEAD/.gemini/skills/adversarial-reviewer/SKILL.md \
-o ~/.claude/skills/adversarial-reviewer/SKILL.md Üç düşmanca gözlemci kişiliği (Saboteur, New Hire, Security Auditor) aracılığıyla gerçek perspektif değişimini zorlayan adversarial code review yeteneği. Her kişiliğin en az bir sorun bulması GEREKİR — hiçbir "LGTM" kaçamaz. Bulgular ciddiyete göre sınıflandırılır ve birden fazla kişilik tarafından yakalandığında çapraz olarak yükseltilir.
/adversarial-review # Review staged/unstaged changes
/adversarial-review --diff HEAD~3 # Review last 3 commits
/adversarial-review --file src/auth.ts # Review a specific file
/adversarial-review --diff main...HEAD
Tüm üç kişilikten gelen, tekilleştirilmiş ve ciddiyete göre sıralanmış bulgularla yapılandırılmış bir rapor üretir ve BLOCK/CONCERNS/CLEAN kararıyla sonlanır.
Claude yazdığı kodu (veya yeni okuduğu kodu) incelediğinde, yazar ile aynı mental modeli, varsayımları ve kör noktaları paylaşır. Bu, yeni bir insan gözlemcinin hemen işaret edeceği koda dair "Looks good to me" incelemeleri üretir. Kullanıcılar bunu AI-destekli geliştirmenin en büyük hayal kırıklıklarından biri olarak bildirmiştir.
Bu yeteneği, adversarial kişilikleri benimsemeyi zorlayarak — her birinin farklı öncelikleri, farklı endişeleri ve "kötü kod"un farklı tanımları vardır — gerçek bir perspektif değişimini sağlar.
/adversarial-review # Review staged/unstaged changes
/adversarial-review --diff HEAD~3 # Review last 3 commits
/adversarial-review --file src/auth.ts # Review a specific file
İstifadeye bağlı olarak neleri inceleyeceğinizi belirleyin:
git diff (unstaged) + git diff --cached (staged) komutlarını çalıştırın. Her ikisi de boşsa, git diff HEAD~1 (son commit) komutunu çalıştırın.--diff <ref>: git diff <ref> komutunu çalıştırın.--file <path>: Dosyanın tamamını okuyun. İncelemeleri yalnızca değişikliklere değil, tam dosyaya odaklayın.Hiçbir değişiklik bulunamazsa, durdurun ve rapor edin: "Nothing to review."
Diffteki her dosya için:
Her kişiliği sırayla yürütün. Her kişiliğin en az bir bulgu üretmesi GEREKİR. Bir kişiliğin hiçbir sorun bulamaması, yeterince bakmadığını gösterir — geri dönün ve tekrar bakın.
ÖNEMLİ: Bulguları yumuşatmayın. Belirsiz kalmayın. "Bu muhtemelen iyi olabilir ama..." demeyin — ya bir sorun vardır ya da yoktur. Doğrudan olun.
Üç kişiliğin de rapor etmesinden sonra:
Mindset: "Bu kodu üretimde kırmaya çalışıyorum."
Priorities:
Review Process:
En az bir sorun bulmanız GEREKİR. Kod gerçekten kusursuzsa, güvendiği en kırılgan varsayımı not edin.
Mindset: "Bu takıma az önce katıldım. Altı ay sonra, orijinal yazardan sıfır bağlam olmadan bu kodu anlayıp değiştirmem gerekiyor."
Priorities:
data ne anlama geliyor? process() ne yapıyor?)Review Process:
En az bir sorun bulmanız GEREKİR. Kod kristal berraksa, yeni gelenlerin kafa karışması için en olası noktayı not edin.
Mindset: "Bu kod saldırı altına alınacak. İşim saldırganın önüne bulmakken açığı bulmak."
OWASP-Temelli Kontrol Listesi:
| Kategori | Neye Bakılmalı |
|---|---|
| Injection | SQL, NoSQL, OS command, LDAP — user input'ı parameterizasyon olmadan bir sorgu veya komuta ulaştıran herhangi bir yer |
| Broken Auth | Hardcoded kimlik bilgileri, yeni endpoint'lerde eksik auth kontrolü, session token'ları URL veya log'larda |
| Data Exposure | Error message'larında, log'larda veya API response'larında hassas veriler; rest veya transit'te eksik encryption |
| Insecure Defaults | Debug modu açık bırakıldı, permissive CORS, wildcard izinleri, default şifreler |
| Missing Access Control | IDOR (A kullanıcısı B'nin verilerine erişebilir mi?), eksik role kontrolü, privilege escalation path'leri |
| Dependency Risk | Bilinen CVE'leri olan yeni dependency'ler, vulnerable versiyonlara sabitlenen, gereksiz transitive dependency'ler |
| Secrets | API key'leri, token'lar, şifreler kodda, config'de veya comment'lerde — hatta "temporary" olanlar bile |
Review Process:
En az bir sorun bulmanız GEREKİR. Kodun security yüzeyi yoksa, en yakın security-ilgili varsayımı not edin.
| Severity | Tanım | Gerekli Action |
|---|---|---|
| CRITICAL | Veri kaybına, security ihlâline veya production kesintisine neden olacak. Merge'den önce düzeltilmelidir. | Merge'i engelle. |
| WARNING | Edge case'lerde hatalara neden olması muhtemeldir, performansı düşürebilir veya gelecekteki maintainer'ları kafa karıştırabilir. Merge'den önce düzeltilmesi gerekir. | Düzelt veya risk'i açıkça kabul et. |
| NOTE | Style sorunu, küçük iyileştirme fırsat'ı veya dokümantasyon boşluğu. Düzeltmek güzeldir. | Yazarın takdiri. |
Promotion kuralı: 2+ kişilik tarafından işaretlenen bulgu bir seviye yükseltilir (NOTE, WARNING olur; WARNING, CRITICAL olur).
İncelemenizi şu şekilde yapılandırın:
## Adversarial Review: [nelerin incelendiğine dair kısa açıklama]
**Scope:** [incelenen dosyalar, değiştirilen satırlar, değişiklik türü]
**Verdict:** BLOCK / CONCERNS / CLEAN
### Critical Findings
[Varsa — merge'i engelle]
### Warnings
[Düzeltilmesi gereken öğeler]
### Notes
[Düzeltilmesi güzel olan öğeler]
### Summary
[2-3 cümle: genel risk profili nedir? Düzeltilmesi gereken en önemli tek şey nedir?]
Verdict tanımları:
| Anti-Pattern | Neden Yanlış |
|---|---|
| "LGTM, no issues found" | Hiçbir şey bulamamanız yeterince bakmadığınız anlamına gelir. Her değişikliğin en az bir riski, varsayımı veya iyileştirme fırsat'ı vardır. |
| Yalnızca kozmetik bulgular | Whitespace/formatting raporlarken null dereference kaçırmak hiç inceme yapmamaktan daha kötüdür. Substance önce, style sonra. |
| Punches çekmek | "Bu muhtemelen küçük bir endişe olabilir..." — Hayır. Doğrudan olun. "Bu, user undefined olduğunda NullPointerException fırlatacak." |
| Diffi tekrar söylemek | "Bu function, authentication işlemek için eklendi" bulgu değildir. Authentication'ı işlemede NE YANLIŞ? |
| Test boşluklarını yoksaymak | Yeni kod testler olmadan bir bulgudur. Her zaman. Testler opsiyonel değildir. |
| Yalnızca değiştirilen satırları incelemek | Hatalar yeni kodun mevcut kodla etkileşim şeklinde yaşanır. Tam dosyayı okuyun. |
Muhtemelen yazdığınız veya yeni okuduğunuz kodu inceliyorsunuz. Beyin ağırlıklarınız bu kodu üreten aynı mental modeli oluşturmuştur. Doğal olarak beklentilerinizle eşleştiği için doğru görünecek.
Bu deseni kırmak için:
engineering-team/senior-security — derin security analiziengineering-team/code-reviewer — genel code quality reviewra-qm-team/ — quality management workflow'larıHerhangi bir yaratıcı çalışmaya başlamadan önce bunu mutlaka kullanın - feature oluştururken, component inşa ederken, functionality eklerken veya davranış değiştirirken. Kullanıcı niyetini, gereksinimleri ve tasarımı implementation öncesinde araştırır.
Uygulama tamamlandığında, tüm testler geçtiğinde ve çalışmanızı nasıl entegre edeceğinize karar vermeniz gerektiğinde kullanın - merge, PR veya cleanup seçeneklerini sunarak geliştirme sürecinin tamamlanmasını rehberlik eder.
Kod incelemesi geri bildirimi alırken, önerileri uygulamadan önce kullanın; özellikle geri bildirim belirsiz veya teknik olarak şüpheli görünüyorsa - performatif anlaşmadan veya körü körüne uygulamadan ziyade teknik titizlik ve doğrulama gerekir.
Görevleri tamamlarken, büyük özellikleri hayata geçirirken veya merge etmeden önce çalışmanın gereksinimleri karşıladığını doğrulamak için kullanın.
Yeni bir feature üzerinde çalışmaya başlarken veya implementasyon planını yürütmeden önce kullanın - native araçlar veya git worktree fallback aracılığıyla izole edilmiş bir workspace sağlar.
Herhangi bir konuşma başlatırken kullanın - skill'lerin nasıl bulunacağını ve kullanılacağını belirler, clarification soruları da dahil olmak üzere HERHANGİ bir yanıt vermeden önce skill invocation gerektirir.