Beş Ajana Aynı Sınav: Cevap Anahtarı Mühürlü Zarfta
Beş kodlama ajanına aynı eski PHP deposunu ve aynı görevi vereceğim. Bu yazı sonucu değil, sonuçlardan önce mühürlenen kuralları, puanlamayı ve gizli test ilkesini anlatıyor.
Bu yazının İngilizcesi de var →
Bu hafta LinkedIn'den bir mesaj geldi. Gönderen Atlantic'in kurucu ortağı ve CTO'su Rüzgar İmren. Ürünleri Factory'yi kısaca şöyle anlatıyordu: işi tarif ediyorsunuz, kendi izole makinesinde kodu yazıp çalıştırıyor, test edip PR açıyor, merge kararı ekipte kalıyor. Ekiple bakıp ne düşündüğümü yazmamı istiyordu.
Tek bir ürünü deneyip "beğendim" ya da "beğenmedim" demek kolay. Daha faydalısı aynı işi beş ajana vermek: Claude Code, Codex, Antigravity, Qwen Code ve Atlantic Factory. Ama bir AI kodlama ajanı karşılaştırması sonuç tablosuyla değil, kurallarla başlar. Bu yazıda sonuç yok. Sınavın kurallarını, puanlamasını ve hile kapılarını sonuçları görmeden yazıyorum ki sonra kimse, ben de dahil, kuralları kazanana göre eğemesin.
Neden önce kurallar?#
Okulda sınav kâğıdını kim hazırlıyorsa cevap anahtarını mühürlü zarfa koyar. Zarf sınavdan sonra açılır. Sebep öğretmenin dürüstlüğünden şüphe değil; sınav bittikten sonra hangi sorunun "aslında kolay" olduğunu, hangi cevabın "yarım puanı hak ettiğini" tartışmak çok kolay.
Benchmark yazılarında en sık gördüğüm sorun da bu. Testi yapan sonuçları görüyor, sonra ölçütleri kuruyor. Kazananın iyi olduğu konu ağırlık kazanıyor, kaybedenin iyi olduğu konu "kapsam dışı" oluyor. Kötü niyet gerekmiyor; insan beyni bunu kendiliğinden yapıyor. Çözüm de eski: puanlamayı önceden ilan etmek.
Sınava girenler#
Beşi aynı tür araç değil, ilk sorun burada. Dördü sizin sürdüğünüz terminal ajanları. Biri issue'dan PR'a kadar kendi kendine yürüyen bir boru hattı.
| Aday | Kimden | Tür | Nasıl başlatılır |
|---|---|---|---|
| Claude Code | Anthropic | Terminal ajanı | claude -p "<görev>" |
| Codex | OpenAI | Terminal ajanı | codex exec --sandbox workspace-write "<görev>" |
| Antigravity CLI | Terminal ajanı | Google'ın önerdiği headless yüzey | |
| Qwen Code | QwenLM, Apache-2.0 | Açık kaynak terminal ajanı | qwen -p "<görev>" |
| Atlantic Factory | Atlantic AI Inc. | Issue'dan PR'a boru hattı | GitHub Issue + GitHub App |
Kendi dokümanlarından birkaç ayrıntı (15 Ekim 2026), çünkü her biri protokolde bir satıra dönüşüyor:
- Codex:
codex execbayraksız çalışınca salt okuma kum havuzunda başlıyor. Dosya yazabilmesi için--sandbox workspace-writeşart. Eski betiklerdeki--full-autoartık desteklenmiyor. - Claude Code:
--output-format jsonçıktısındatotal_cost_usdalanı var, ama dokümanın kendisi bunun istemci tarafında bir tahmin olduğunu, faturayla ayrışabileceğini söylüyor. - Antigravity: Google Cloud blogundaki 10 Haziran 2026 yazısına göre Go ile yazılmış CLI, SSH ya da uzak konteyner gibi headless işler için önerilen yüzey. Kullanılan model test günü kaydedilecek.
- Qwen Code: Google'ın Gemini CLI'ının v0.8.2 sürümünden uyarlanmış; OpenAI, Anthropic, Gemini ve Qwen API'leriyle, lokal modellerle de çalışıyor. Acı Gerçek: Qwen Code'u başka bir firmanın modeline bağlarsanız Qwen'i değil, o modeli Qwen'in kabuğunda test etmiş olursunuz. Protokolde bir Qwen modeli sabitleniyor.
- Atlantic Factory: Ürün sayfasına göre bir GitHub App kuruluyor, iş bir ticket ile başlıyor, dal ayrı bir makinede
factory.deploy.ymltanımıyla ayağa kalkıyor, bir tarayıcı ajanı uygulamayı deniyor (sayfadaki örnekte "23 of 40 steps"), Factory kendi diff'ini en fazla iki turda gözden geçiriyor ve PR açıyor. Default dala hiç push etmiyor. Model adı verilmiyor; Low'dan Max'e katmanlar var, güvenlik sayfasına göre çağrılar Amazon Bedrock üzerinden Anthropic Claude ve OpenAI GPT modellerine gidiyor.
Buradan çıkan karar: Atlantic'i terminal ajanlarıyla aynı terazide tartmak elmayla armudu tartmak olur. O yüzden iki ayrı sonuç tutuyorum. Birincisi kodun kendisi; beşi için aynı puanlama. İkincisi süreç: görevden incelemeye hazır PR'a kadar kaç kez insan eline dokundu. Bu ikincisi puana girmiyor, ayrı yazılıyor.
Soru kitapçığı: hangi depo, hangi görev?#
Fikri tartışırken ChatGPT bana sıfırdan küçük bir e-ticaret uygulaması kurup stok rezervasyonu yazdırmayı önerdi. Mantıklı bir öneri, ama yapmayacağım. Sınav için kendi yazdığım bir depo benim beklentilerimle şekillenir; hatalar oraya ekilmiş olur, kendiliğinden büyümüş değil.
Bunun yerine gerçek bir eski bina kullanıyorum: 2020'de yazdığım Altınkaynak döviz kuru kütüphanesi (github.com/HalitYesil/altinkaynak). On PHP dosyası, son commit 6 Eylül 2020, SOAP servisine bağlı. Altınkaynak'ın web servisleri sayfası bugün yalnızca HTTPS üzerinden JSON dönen iki adres listeliyor. Görev bu farktan çıkıyor:
Görev: Kütüphaneyi Altınkaynak'ın güncel JSON uçlarına taşı.
Kaynak: https://altinkaynak.com/Araclar/Servisler
- Döviz ve altın listesini veren mevcut public metotların imzası korunacak.
- SOAP bağımlılığı ve kaynak koddaki kimlik bilgileri kaldırılacak.
- Değişikliği doğrulayan testler eklenecek.
- Görevle ilgisi olmayan dosyalara dokunulmayacak.
Bitince değiştirdiğin dosyaları ve neden değiştirdiğini PR açıklamasına yaz.
Metin dört terminal ajanına komut satırından, Atlantic'e GitHub Issue olarak aynen gidiyor. Depoda AGENTS.md, CLAUDE.md ya da başka bir kural dosyası yok. Vibe Coder 4.2'de araçların aynı dosyayı farklı okuduğunu yazmıştık; bu sınavda o fark ölçülmüyor, herkes yalnızca görev metnini görüyor.
Kurallar#
- Aynı başlangıç. Şablon depodan beş ayrı depo üretiliyor; GitHub'ın template repository özelliği her birine birbiriyle ilişkisiz bir geçmiş veriyor, PR'lar karışmıyor. Commit kimlikleri farklı olur ama dosya ağacının hash'i aynı olmalı. Sınav başlamadan bunu aşağıdaki betik kontrol ediyor.
- Aynı görev metni, yukarıdaki blok. Kelimesi değişmiyor.
- Müdahale yok. İlk turda insan dokunmuyor. Ajan soru sorarsa tek, hazır bir cevap var: "Görev metnindeki bilgiyle devam et." Her soru sayılıyor.
- Süre tavanı 60 dakika. Dolarsa o ana kadarki hâli puanlanıyor.
- Web araması kapalı. Ajanların bir kısmı web'de arama yapabiliyor ve bu yazı yayınlandığı anda internette. Kapatılamayan araçta durum kayda geçiyor.
- Model ve sürüm kaydı. Her koşuda aracın sürümü ve modeli; Atlantic için katman.
- Gizli test paketi. Ajanların görmediği testler, PR birleşmeden temiz bir kopyada çalışıyor. İçeriği sonuç yazısıyla birlikte yayınlanacak, bugün değil. Cevap anahtarı zarfta kalıyor.
- En az iki koşu. Aynı araç iki koşuda farklı sonuç verirse ikisi de yazılıyor; iyi olanı seçmek yok.
- Maliyet ayrı. Her aracın kendi raporladığı tutar, kaynağıyla. Abonelikle API faturası aynı şey değil, karıştırılmıyor.
Birinci kuralın betiği bu. Her deponun kök commit'indeki ağacı şablonun ağacıyla karşılaştırıyor:
#!/usr/bin/env bash
# sinav-yoklamasi.sh: her ajanın deposu aynı başlangıç ağacından mı çıkıyor?
set -euo pipefail
BEKLENEN=${1:?Kullanım: sinav-yoklamasi.sh <şablon-ağaç-hash> <depo>...}
shift
HATA=0
for DEPO in "$@"; do
KOK=$(git -C "$DEPO" rev-list --max-parents=0 HEAD | tail -n 1)
AGAC=$(git -C "$DEPO" rev-parse "$KOK^{tree}")
if [ "$AGAC" = "$BEKLENEN" ]; then
echo "tamam $DEPO ${AGAC:0:12}"
else
echo "FARKLI $DEPO ${AGAC:0:12}" >&2
HATA=1
fi
done
exit "$HATA"
Betiği altinkaynak'ın bir kopyasında denedim. Şablonun ağacı 7c6df0b4e980. Beş depoyu şablondan üretilmiş gibi ayrı geçmişlerle kurunca beşi de tamam dedi, çıkış kodu 0. Birinin src/Altinkaynak.php dosyasına tek satır ekleyip deposunu yeniden kurunca o depo FARKLI ile e16266be68cd bastı, çıkış 1. Tek satırlık fark sınavı başlatmıyor.
Puanlama, sonuçlardan önce#
| Ölçüt | Puan | Nasıl ölçülüyor |
|---|---|---|
| Gizli testler | 40 | Geçen test oranı |
| Sözleşme korunuyor mu | 15 | Eski public metotlar aynı imzayla çalışıyor mu |
| Kapsam disiplini | 15 | Görevle ilgisiz dokunulan dosya ve satır |
| Kendi yazdığı testler | 10 | Var mı, gerçekten bir şey ölçüyor mu |
| Kod kalitesi | 10 | php -l, okunabilirlik, sırrın gerçekten çıkması |
| PR açıklaması | 10 | Yazdığı ile diff'in tutarlı olması |
Puana girmeyen ama yazılacaklar: toplam süre, maliyet, ajanın sorduğu soru sayısı ve Atlantic için süreç sonucu.
Teknik Detay: Kapsam disiplinine 15 puan verdim, çünkü bence kodlama ajanlarının en pahalı hatası yanlış kod değil, sormadan dokunulan dosya. Doğru çalışan ama otuz dosyaya dokunan bir PR'ı incelemek, yanlış çalışan üç dosyalık bir PR'ı düzeltmekten uzun sürebilir.
Davetiyenin küçük yazısı#
İki şeyi açık yazayım. Birincisi: Atlantic'ten ücret ya da ayrıcalık almıyorum, mesajdaki referans bağlantısını kullanmıyorum. Ürün adresini doğrudan veriyorum: factory.getatlantic.ai. Şirketi Mart 2026'da Rüzgar İmren ve Ege Mustafa Çelik kurmuş; Haziran'da Galata Business Angels'tan 5 milyon dolar değerleme üzerinden yatırım aldıkları Webrazzi'de haber olmuştu.
İkincisi kart meselesi. Mesajda "ücretsiz, kart yok" yazıyordu. Fiyat sayfası bugün "Start with $50 free for 7 days" diyor, aynı sayfanın SSS'si ise "You save a card during onboarding and pay $0 today." Mesajı ilk incelettiğimde ChatGPT kart kaydını not etmişti; ikinci yanıtında kendini düzeltip kartsız başlangıç dedi. Bugünkü sayfa ilk yanıtın yanında duruyor. Bu yüzden deneme koşullarını hafızadan değil, test günü alınmış ekran görüntüsünden yazacağım.
Kod tarafında güvenlik sayfası net konuşuyor ve bunu takdir ediyorum. Çalıştırıcılar AWS us-east-1'de, model çağrıları Bedrock'un bölgeler arası yönlendirmesiyle başka bir AWS bölgesinde işlenebiliyor. Testler ağı kapalı konteynerlerde koşuyor. QA ekran görüntüleri ve tarayıcı kayıtları listelenmeyen bağlantılarla S3'te duruyor, 180 gün sonra siliniyor ve o süre boyunca "Anyone holding a link can open it." Herkese açık bir depo için sorun değil. Müşteri koduyla deneyecekseniz bu cümleyi okuyup karar verin.
Testten önce Rüzgar'a soracağım üç şey var: PHP projesi için örnek bir factory.deploy.yml, ajanın web erişiminin kapatılıp kapatılamadığı ve koşuda kullanılan modelin adı. Cevaplar sonuç yazısında olacak.
Zarf ne zaman açılacak?#
Sonuçlar, bu Cumartesi başlayan Kentsel Dönüşüm serisinin dördüncü bölümü Kaçak Kat'ta (28 Kasım) yayınlanacak: beş PR, diff'ler, gizli testler ve test çıktıları, herkesin kendisi açıp bakabileceği şekilde.
Zarfı mühürledim. Kazananı ben değil, cevap anahtarı belirleyecek. Teknolojiyle kalın.
Yorumlar
0 yorum
Yorum yazın