Impeccable: Ajanın Konfeksiyonuna Terzi Mezurası – AI Slop'u 62 Kuralla Yakalamak
Impeccable, ajanların hazır giyim arayüzlerini 62 kuralla modelsiz yakalıyor. Ama kaynak taramasında kontrast kuralları çalışmıyor, JSON ve GitHub modunda bunu söyleyen not da kayboluyor; kapıyı adrese kurmak size kalıyor.
Bu yazının İngilizcesi de var →
Geçen hafta SkillSpector ile ajan skill'lerini kurmadan önce muayene etmiştik. Bu haftanın skill'i güvenlikle değil görgüyle uğraşıyor. Ajana "bana bir açılış sayfası yap" deyin: Inter yazı tipi, mordan maviye gradyan, kartın içinde kart, her başlığın üstünde yuvarlak köşeli bir ikon kutusu. Model değişir, proje değişir, kıyafet aynı kalır. Konfeksiyon gibi: dikişi sağlam, üstünüze oturuyor, ama sokakta aynı takımla üç kişi daha geziyor.
Radarda Impeccable var ve bu konfeksiyona terzi mezurası getiriyor. 3 Kasım'da 100,8 bin yıldızdaydı; GitHub'ın haftalık Trending listesinde 11.754 yıldızla gördüğüm en yüksek rakam onundu. Mezura kötü dikişi bulur, size yakışıp yakışmadığını söylemez. Yazının derdi de bu aradaki fark, bir de sıfır dönen çıkış kodunun neyi saklayabildiği.
Impeccable nedir?#
Impeccable, kodlama ajanlarına tasarım için ortak bir kelime dağarcığı (polish, bolder, critique, audit gibi 23 komut) ve modelsiz çalışan 62 kurallık bir "AI slop" dedektörü veren, Apache-2.0 lisanslı bir skill ve CLI paketidir. Claude Code, Codex CLI, Cursor, GitHub Copilot, Gemini CLI, OpenCode ve Google Antigravity dahil 19 aracı destekliyor.
İki parçası var. Komutlar terziyle konuşma dili: ajana "biraz daha canlı olsun" demek yerine /impeccable bolder fiyat kartları diyorsunuz ve o hamle için yazılmış talimat yükleniyor. Dedektör ise mezura: LLM yok, API anahtarı yok, deterministik kurallar var.
Kurulum ve ilk tarama#
# Skill ve kanca: proje kökünde, aracı ve kapsamı soruyor
npx impeccable install
# Sonra ajanın içinde: /impeccable init (Codex'te $impeccable init)
# Ajan olmadan, yalnızca dedektör
npx impeccable detect --list-rules
npx impeccable detect http://localhost:5173
npx impeccable detect --json --viewport 390x844 https://staging.ornek.com/
npx impeccable detect --github src/
Baştan söyleyeyim: aracı çalıştırmadım, çalıştığım ortamın izin katmanı dış paketin çalıştırılmasını reddetti. Aşağıdakiler 4.8.0 sonrası kaynak kodu (commit 9fadc41), README ve resmi doküman okunarak yazıldı. Adres taraması için makinede Chrome ya da Edge gerekiyor.
Mezuranın 62 ölçüsü#
Kural kaydını saydım: 31'i "slop", 31'i "quality". 16 tanesi advisory, yani raporda görünür ama çıkış kodunu değiştirmez. Birkaç örnek:
overused-font: listede Inter ve Roboto'nun yanında Arial, Helvetica, yeni dalgadan Geist, Fraunces ve Space Grotesk var.side-tab: kartın bir kenarındaki kalın renkli şerit. Kural metni bunu AI arayüzünün en tanınır işareti sayıyor.aphoristic-cadence: metin kuralı. Üç ya da daha fazla bölüm kısa bir ters köşe cümleyle bitiyorsa işaretliyor.low-contrast,tiny-text,skipped-heading: kalite tarafı. İşin sıkıcı ve en faydalı kısmı burası.
Acı Gerçek: slop kuralları tanım gereği bir moda listesi. Inter kötü bir yazı tipi olduğu için işaretlenmiyor, çok görüldüğü için işaretleniyor. Markanızın fontuysa kuralla kavga etmeyin, gerekçesini yazıp istisna açın:
npx impeccable ignores add-value overused-font Inter --reason "Marka fontu"
Çıkış kodu 0 ne anlatıyor?#
Kodlar net: 0 ana bulgu yok, 2 ana bulgu var, 1 en az bir hedef taranamadı. Tuzak, Moli'deki boş tablonun kuzeni. JSX, TSX, Vue, Svelte ve Astro gibi kaynak dosyalar yalnızca regex kurallarından geçiyor; low-contrast ve tiny-text gibi sayfanın parse edilmesini isteyen kurallar orada çalışmıyor. Metin modunda araç bunu dürüstçe yazıyor: "findings are an undercount, not a clean bill of health".
Teknik Detay: o not yalnızca metin modunda basılıyor. Kodda --json, --quiet ve --github açıkken atlanıyor. Yani CI'daki detect --github src/ yeşil yandığında kontrasta hiç bakılmamış olabilir ve bunu size söyleyen kimse yok.
PHP tarafında ikinci bir delik var. Varsayılan uzantı listesinde .blade.php duruyor ama .php, .volt ve .twig yok. Çerçevesiz PHP ya da Volt şablonlu bir projede detect src/ şablonlarınızın yanından geçer. Doküman sunucu şablonları için şu ayarı veriyor:
{
"detector": {
"extensions": [
{ "ext": ".volt", "engine": "html" },
{ "ext": ".twig", "engine": "html" }
]
}
}
Volt'un süslü parantezlerinin bu motordan nasıl geçtiğini denemedim. Sunucuda üretilen sayfa için temiz yol zaten adres taraması: tarayıcı gerçek HTML'i ve gerçek stili görüyor.
Kapıyı kaynağa değil adrese kurmak#
Şöyle bir kapı istedim: yalnızca adres kabul etsin, sayfaları masaüstü ve telefon genişliğinde tarasın, "taranamadı" ile "bulgu var" sonucunu karıştırmasın, advisory'yi saysın ama durmasın. Çerçevesiz düz PHP:
<?php
declare(strict_types=1);
/**
* Yayına çıkan sayfaları iki genişlikte Impeccable'dan geçirir.
* Kullanım: php tasarim-kapisi.php https://staging.ornek.com/ https://staging.ornek.com/fiyat/
* Çıkış: 0 geç, 1 bulgu var, 2 tarama yapılamadı.
*/
$komut = getenv('IMPECCABLE_KOMUT') ?: 'npx impeccable';
$adresler = array_slice($argv, 1);
$genislikler = ['1280x800', '390x844'];
if ($adresler === []) {
fwrite(STDERR, "En az bir adres verin.\n");
exit(2);
}
$bulgular = [];
$not = 0;
foreach ($adresler as $adres) {
// Kaynak klasör vermek kapıyı sessizce gevşetir: yalnızca regex kuralları çalışır.
if (!preg_match('#^https?://#i', $adres)) {
fwrite(STDERR, "Yalnızca adres taranır, kaynak değil: {$adres}\n");
exit(2);
}
foreach ($genislikler as $genislik) {
$satir = sprintf('%s detect --json --viewport %s %s', $komut, $genislik, escapeshellarg($adres));
$surec = proc_open($satir, [1 => ['pipe', 'w'], 2 => ['pipe', 'w']], $borular);
if (!is_resource($surec)) {
fwrite(STDERR, "Süreç başlatılamadı.\n");
exit(2);
}
$cikti = (string) stream_get_contents($borular[1]);
$hata = (string) stream_get_contents($borular[2]);
$kod = proc_close($surec);
$liste = json_decode($cikti, true);
// 0 temiz (not olabilir), 2 bulgu, 1 ya da başka her şey: taranamadı.
if (!in_array($kod, [0, 2], true) || !is_array($liste)) {
fwrite(STDERR, "Taranamadı ({$kod}): {$adres} @ {$genislik}\n" . trim($hata) . "\n");
exit(2);
}
foreach ($liste as $bulgu) {
if ($bulgu['advisory'] ?? false) {
$not++;
continue;
}
$bulgular[] = sprintf('%s @ %s: %s', $adres, $genislik, $bulgu['antipattern']);
}
}
}
echo count($bulgular) . " bulgu, {$not} not\n";
foreach (array_unique($bulgular) as $satir) {
echo " {$satir}\n";
}
exit($bulgular === [] ? 0 : 1);
php -l temiz. Betiği, kaynak koddaki JSON alanlarına göre yazdığım sahte bir CLI ile yedi senaryoda çalıştırdım: temiz sayfa 0, yalnızca advisory 0, ana bulgu 1, tarama hatası 2, bozuk JSON 2, klasör yolu 2, boş argüman 2. Gerçek Impeccable çıktısıyla denenmedi.
Ne zaman işe yarar, ne zaman yaramaz?#
Yarar: var olan bir arayüzde, dar bir hedefle. README de en güçlü olduğu yerin bu olduğunu, sıfırdan sayfanın daha zor mod olduğunu yazıyor. Asıl kaldıraç kanca, çünkü dedektörü birinin hatırlamasına bırakmıyor. Claude Code ve Codex'te her düzenlemeden sonra acil kurallar, tur sonunda bütün kurallar çalışıyor; Cursor ve Copilot'ta tam dedektör her düzenlemeden sonra dönüyor. Yalnız 4.2'deki kapı bekçisiyle karıştırmayın: güncel sürümde bu kanca düzenlemeyi durdurmuyor, ajanın kulağına hatırlatma fısıldıyor. Kapıyı yukarıdaki betik gibi bir adım tutar.
Yaramaz: dedektör web arayüzü dışına çıkmıyor; iOS ve Android için audit komutuna havale ediyor. Yerleşmiş bir tasarım sisteminiz varsa da DESIGN.md yazmadan başlarsanız mezura sizinle kavga eder. Hiçbir kural "bu sayfa kullanıcının işini çözüyor mu" sorusunu cevaplamaz.
Kurmadan önce bilmeniz gereken üç bedel var:
- Kanca sandbox'sız: ajanın ortamı ve ağ erişimiyle çalışıyor. Claude Code'da modelin komutunu reddetseniz de kanca çalışır ve ilk düzenlemede motoru indirebilir. İndirilen ikili depodaki özetlerle karşılaştırılıyor.
- Telemetri varsayılan açık:
npx impeccable telemetry offya daDO_NOT_TRACK=1kapatıyor. Proje adı ve kod gönderilmiyor, ama yeni tasarım başlarken yapılan katalog isteği telemetri kapalıyken de gidiyor. - Live modda Apply: son bir dakikada sohbeti yoklayan ajan yoksa
codex'i, o da yoksaclaude'u onaylar kapalı başlatıyor (--dangerously-bypass-approvals-and-sandbox,bypassPermissions). Bunu kodda da gördüm, README de saklamıyor. Müşteri deposunda ilk işinizIMPECCABLE_LIVE_COPY_AGENT=chatya daoff.
Bakım durumu ve emeğin sahibi#
| Konu | Durum (3 Kasım 2026) |
|---|---|
| Lisans | Apache-2.0; Anthropic'in frontend-design skill'inden yola çıkmış |
| Son sürüm | npm 4.8.0, 26 Ekim 2026 (motor 0.1.18) |
| Geçmiş | npm'de ilk sürüm 2.0.0, 30 Mart 2026; toplam 44 sürüm |
| Yıldız / fork | 100,8 bin / 6,0 bin |
| Açık issue / PR | 40 / 24 |
| Hareket | Son 200 commit 8 Ekim ile 2 Kasım arasında |
| Güvenlik | Yayımlanmış danışma kaydı yok, güvenlik politikası dosyası da yok |
Projeyi Paul Bakaus yazdı (GitHub). jQuery UI'ın yaratıcısı, Google'da AMP'nin geliştirici ilişkilerini yürütmüş bir isim; artık Impeccable'ın arkasındaki Renaissance Geek şirketinin kurucusu. Kendi sayfasına göre şirket a16z liderliğinde tohum yatırım almış. Sitede fiyat ya da ücretli plan görmedim, gelir modelini doğrulayamadım.
Alternatiflerle kısa karşılaştırma#
| Araç | Lisans | Yıldız | Yaklaşım | En iyi olduğu iş |
|---|---|---|---|---|
| Impeccable | Apache-2.0 | 100,8 bin | 23 komut + 62 kurallı dedektör + kanca | Var olan arayüzü denetlemek |
| Hallmark (Together AI) | MIT | 41,5 bin | Tema kataloğu + sloplint; tarayıcı kontrolleri Chrome ister |
Sıfırdan tek sayfa |
| Taste Skill (Leonxlnx) | MIT | 107,9 bin | Sanat yönetimi, gerçek fotoğraf, ajanın tarayıcıda kendini kontrolü | Sıfırdan vitrin sayfası |
| jakubkrehel/skills | MIT | 10,1 bin | Tipografi, renk, erişilebilirlik, yerleşim skill'leri | Arayüzü alan alan gözden geçirmek |
| axe-core (Deque) | MPL-2.0 | 7,5 bin | Erişilebilirlik motoru, modelsiz | WCAG kontrolü |
Şu iş için şu: elinizde yaşayan bir panel varsa Impeccable, boş sayfadan vitrin çıkaracaksanız Hallmark ya da Taste Skill. Erişilebilirlik sorumluluğunuz varsa axe-core'u bırakmayın, Open Code Review yazısında dediğimiz gibi bunlar birbirinin yerine değil yanına gelir. axe-core'un kendisi bile WCAG sorunlarının ortalama yüzde 57'sini otomatik bulduğunu söylüyor; gerisi insan işi.
Günlük işte nereye oturur?#
Bootstrap 5 ve Vue ile yazılmış, Volt ya da düz PHP şablonlu bir panelde kaynak taraması bize az şey söyler. Doğru yer staging: ajan yeni ekranı bitirince tasarim-kapisi.php o adresleri iki genişlikte geçirir. İlk gün overused-font gibi moda kurallarını hata saymayın, gerekçesiyle istisna yazın. Kontrast, küçük metin, taşan içerik ve atlanan başlık seviyesi gibi kalite kurallarını ise kapıda tutun.
Terzi mezuraya bakar ama kumaşı siz seçersiniz. Impeccable ajanın konfeksiyon alışkanlığını yakalıyor ve bunu modele para ödetmeden yapıyor. Sayfanın kime hizmet ettiğine yine siz karar vereceksiniz, çıkış kodu 0 da o kararın yerine geçmiyor. Teknolojiyle kalın.
Yorumlar
0 yorum
Yorum yazın