- 2 günlük deneyin sonucu olarak Claude Fable 5'i "relentlessly proactive" diye tanımlamak uygun görünüyor
- Yalnızca ekran görüntüleri ve tek satırlık bir prompt ile yerel geliştirme sunucusunu çalıştırdı, gerçek tarayıcıyı kullandı ve ölçüm kodu ekleyerek CSS hatasının nedenini izledi
- Fable, Playwright, Firefox, WebKit ve Safari arasında gidip gelerek hatayı yeniden üretmeye çalıştı; başarısız olunca gerçek tarayıcı pencerelerini bulup ekran görüntüsü otomasyonunu bizzat kurdu
/ tuşuyla açılan modal iletişim kutusunu test etmek için Datasette şablonuna JavaScript ekledi ve pencere yüklendikten sonra klavye olayını tetikleyerek gerekli durumu oluşturdu
- Sayfa içi ölçümleri almak için Python
http.server tabanlı bir CORS toplama sunucusu kurdu ve Web Component'in shadow DOM içindeki <textarea> bilgilerini JSON olarak kaydetti
- Güçlü kodlama ajanları terminalde kullanıcının yapabileceği işleri yapabildiğinden, sandbox dışında çalıştırılmaları prompt injection ve veri sızıntısı riskini büyütür
Claude Fable 5'in hata ayıklama süreci
- Datasette Agent'in jump menu sohbet prompt'unda ortaya çıkan gereksiz yatay kaydırma çubuğunu incelemeye başladı
- Claude Fable 5, hedefine ulaşmak için çeşitli teknikleri aktif biçimde devreye soktu
- Girdi olarak ekran görüntüleri ve
Look at dependencies to help figure out why there is a horizontal scrollbar here şeklinde tek satırlık bir prompt verildi
- Sorunun kaynağının Datasette Agent'in bağımlılıklarında, özellikle de Datasette'in kendisinde olabileceği düşüncesiyle önce bağımlılık kodlarına bakması istendi
- Claude Code'a açıkça tarayıcı otomasyonu talimatı verilmemiş olmasına rağmen normal bir Firefox penceresi açıp ilgili iletişim kutusuna gitti; ardından araştırmaya devam etmek için bir Safari penceresi de açtı
Tarayıcı ekran görüntüsü otomasyonu
- Fable,
uv run --with pyobjc-framework-Quartz kullanarak tarayıcı pencerelerinin ekran görüntüsünü almak için kendi yöntemini kurdu
- Python ile makinedeki tüm pencereleri dolaştı ve pencere adında
"textarea" gibi beklenen dizgeleri içeren Safari pencerelerini filtreledi
- Pencere numarası gibi
153551 tamsayı kimliğini bulduktan sonra screencapture CLI ile PNG kaydetti
/tmp/textarea-scrollbar-test.html gibi geçici bir HTML sayfası yazıp Safari'de açarak ekran görüntüsü aldı
- Örnek komut
screencapture -x -o -l 153551 /tmp/safari-cases.png idi
Modal iletişim kutusunu otomatik çalıştırma
- Test edilen modal yalnızca tıklama veya klavye kısayoluyla açılabiliyordu ve Safari içinde fare hareketi ya da klavye kısayolu çalıştırmak için net bir mekanizma görünmüyordu
- Claude, uygulama kaynak kodunun bulunduğu klasörde çalışıyordu ve Datasette yerel geliştirme sunucusunu başlatabilecek kadar yapıyı kavradı
- Pencere açıldıktan sonra
/ tuşuna basılmasını simüle etmek için Datasette şablonuna JavaScript ekledi
- Bu kod, pencere yüklendikten 1.2 saniye sonra
/ tuşu için keydown olayını tetikleyerek modalı açan kısayolu çalıştırdı
<script>
window.addEventListener("load", function () {
setTimeout(function () {
document.dispatchEvent(new KeyboardEvent("keydown", {key: "/", bubbles: true}));
}, 1200);
});
</script>
Sayfa içi ölçümlerin toplanması
- Claude, ölçümleri doğrudan almak için sayfada JavaScript çalıştırmak zorundaydı; bunun için CORS üzerinden bilgi alan kendi web uygulamasını yazdı
- Python standart kütüphanesindeki
http.server ile 127.0.0.1:9999 üzerinde yerel bir sunucu çalıştırdı
- Sunucu, JSON içeren POST isteklerini alıp
/tmp/diag.json dosyasına yazdı ve farklı domain'lerden gelen kodun da iletişim kurabilmesi için Access-Control-Allow-Origin: * başlığını döndürdü
- Claude, tarayıcıda yüklenen şablona JavaScript ekleyerek
<navigation-search> Web Component içindeki <textarea> öğesini buldu
- Eklenen kod
devicePixelRatio, scrollWidth, clientWidth, whiteSpace ve width değerlerini ölçüp yerel sunucuya gönderdi
const host = document.querySelector("navigation-search");
const ta = host.shadowRoot.querySelector("textarea");
const cs = getComputedStyle(ta);
fetch("http://127.0.0.1:9999/diag", {
method: "POST",
body: JSON.stringify({
dpr: window.devicePixelRatio,
scrollWidth: ta.scrollWidth, clientWidth: ta.clientWidth,
whiteSpace: cs.whiteSpace, width: cs.width,
}),
});
Opus'a geçiş ve düzeltmenin doğrulanması
- Fable, çeşitli teknikler keşfettikten sonra görünmez guardrail'lere takıldı ve Opus'a düşürüldü
- Opus, tüm konuşma kaydına erişebiliyordu ve Fable'ın önünü açtığı teknikleri kullanmayı sürdürdü
- Sonrasında Opus sorunu buldu, test etti, doğruladı ve düzeltme commit'ini tamamladı
- Opus, oturum sırasında gerçek tarayıcı üzerinde kullandığı otomasyon tekniklerini ve çalıştırılabilir kod örneklerini
/tmp/automation-report.md içinde özetledi
- Bu rapor ayrı bir gist olarak paylaşıldı; Claude Code'un tam terminal kaydı da yayınlandı
Yapılan işlerin tamamının gözden geçirilmesi
- Claude Fable 5 ve Claude Code, yerel geliştirme sunucusunun nasıl çalıştırılacağını buldu ve çalışması için gereken sahte ortam değişkenlerini de ayarladı
- Bir Playwright Chrome oturumu başlattı ve Chrome'daki görünür kaydırma çubuğu ayarını
defaults write com.google.chrome.for.testing AppleShowScrollBars Always komutuyla açıp daha sonra yeniden kapattı
- Playwright'in Firefox ve WebKit seçeneklerini de denedi ancak hatayı yeniden üretmeyi başaramadı
- Varsayılan tarayıcının Safari olduğunu tespit etti ve
textarea-scrollbar-test.html adlı bir HTML belgesi oluşturdu
- Test belgesini gerçek Firefox'ta açtı, ancak
osascript erişimi “osascript is not allowed assistive access” nedeniyle engellendi
pyobjc-framework-Quartz tabanlı bir geçici çözüm bularak pencere numarası üzerinden ekran görüntüsü akışını kurdu
- Site şablonuna JavaScript ekleyip
/ tuşunu tetikledi ve Python CORS sunucusuyla JSON verilerini aldı
- Web Component'in shadow DOM katmanına girerek gerekli bilgiyi buldu ve Safari'de hatanın nedenini doğruladı
- Özel şablona olası düzeltmeyi uygulayıp çalıştığını doğruladıktan sonra sorunun nasıl çözüleceğini raporladı
Maliyet tahmini
- Kullanılan plan aylık 100 dolarlık Claude Max planıydı; Anthropic, 22 Haziran'a kadar Fable için cömert bir kullanım hakkı sunduğunu, sonrasında ise tam API ücretini uygulayacağını belirtti
- AgentsView harcama takibi için kullanıldı ve tam fiyat ödenmiş olsaydı bu oturumun maliyeti yaklaşık 12.11 dolar olacaktı
- Oturum çıktısı
68606, azami context 113178, kullanılan modeller ise claude-fable-5 ve claude-opus-4-8 idi
- Fable, maliyet yakından izlenmezse CSS hata ayıklamak için yeni yöntemler icat ederek yaklaşık 12 dolarlık token maliyetini kolayca tüketebilir
Sandbox gerekliliği
- Fable'ın sonunda yalnızca iki satırlık bir CSS düzeltmesi için gereken bilgiyi toplamak adına uç yöntemlere kadar gitmesi etkileyiciydi
- Kodlama ajanları, kullanıcının terminale komut yazarak yapabileceği işleri yerine getirebilir ve frontier modeller çok sayıda tekniği bilir
- Kötü niyetli talimatlar, kod ya da issue thread içindeki prompt injection'lar veya terminale dikkatsizce yapıştırılan içerikler varsa bu durum veri sızıntısına ya da başka zararlara yol açabilir
- Kodlama ajanlarını sandbox dışında çalıştırmak her zaman kötü bir fikirdir ve kodlama ajanı güvenlik olayları için başlıca adaylardan biri sayılır
- Fable daha zeki olduğu için kötü niyetli talimatlara karşı daha şüpheci olabilir; ancak bir kez kandığında durmaksızın proaktif davranması nedeniyle hasarın boyutu büyüyebilir
1 yorum
Hacker News yorumları
Bu, insan inisiyatifinin ölümcül kaybını gösteren etkileyici bir örnek gibi okunuyor ve gerçek commit’ler de epey şey ortaya koyuyor [0]
Yazar yatay kaydırma çubuğunu gizlemek istiyordu. İşi bilen bir junior frontend geliştirici olsaydı hemen “
overflow-x: hidden;satırını nereye koyayım?” diye sorardı. Tam çözüm için tarayıcıda “Inspect element”e basıp CSS sınıfını bulmak, kodda (rip)grep ile yerini aramak ve bir satır eklemek yeterliDaha inisiyatif sahibi bir programcı ise boş metin kutusunda ne tür bir içerik olduğunu, taşmaya neden olan şeyin ne olduğunu, neden kök neden yerine sadece semptomu örten bir geçici çözümün iki yere eklenmesi gerektiğini,
textareayı bir kez stil vermenin daha iyi olup olmayacağını sorardı[0] https://github.com/datasette/datasette-agent/commit/a75a8b72...
__init__.pyiçinde saklandığını da sorabilirdi [0]Claude ile deneyimim genelde yapısı iyi kurulmuş kod üretmesi yönünde olduğu için bu aslında biraz şaşırtıcı. Ama ben bunu tam anlamıyla vibe coding’den ziyade, robot olan başka bir mühendisle dostane bir Sokratik tartışma yapmaya daha yakın görüyorum
[0] https://github.com/datasette/datasette-agent/blob/main/datas...
Benim bir junior geliştiriciden beklediğim şey de tam olarak bu. Hatanın gerçekten var olup olmadığını doğrulaması, nasıl düzeltileceğini bulması ve hatanın düzeltilip düzeltilmediğini teyit etmesi
Sorun ise, blog yazısında da doğru biçimde işaret edildiği gibi, daha yüksek ayrıcalık gerektiğinde durup sormak yerine durmadan kendi başına hackvari geçici yollar araması. Bunu insan geliştiriciye uyarlarsak, üçüncü taraf sandbox erişimi gerekiyor ama kıdemliden gerekli kimlik bilgilerini istemek yerine kendi sandbox’ını sıfırdan kurmaya kalkışması gibi
Eskiden çevrimiçi dünyaya bağlanırken dakika başına ücret ödediğimiz zamanları hatırlatıyor. Sayacın dönmeye devam etmesini sağlamak için çok fazla teşvik vardı; bu da o türden bir şey gibi geliyor bana
“Kodlama ajanlarını sandbox dışında çalıştırmak her zaman kötü bir fikirdi” diye bunu açıkça kabul ederken yine de pek çok kişinin bunu yapmayı sürdürmesi hâlâ kafamı karıştırıyor ve beni şaşırtıyor
Sanki yolcu koltuğunda oturup ayaklarını torpidonun üstüne koyduğu bir video paylaşıp “Kaza olursa airbag'in bacaklarınızı kırabileceğini ya da daha kötüsüne yol açabileceğini unutmayın! Bunun benim başıma gelmemiş olması ne büyük şans!” diyormuş gibi
Sorun, insanların prompt verme biçiminin fazla farklı olması
Örneğin ben “bu X cluster'ında bu servisin k8s pod'unda bu annotation'ın çeşitli varyasyonlarını dene. Bu, Y teorisini kanıtlıyor” gibi bir istekte bulunabilirim. Ama bir ekip arkadaşım “Y teorisini test et” der. Bunu iki junior mühendise sorsanız, biri production ortamında rastgele şeyler denerken diğeri local test çalıştırabilir. Bu, “istediğini yap ama öğren” tarzı bir yönsüz istek ve ajan bunu, sınırlar kendisine aktarılmamış ama “öğren” baskısı güçlü şekilde verilmiş bir junior gibi okuyor
claudekullanmaktan memnunumDotfile'larımın benzeri var ama gizli değerler yok. Home dizinim 0700,
claudeayrı SSH anahtarlarına sahip ve bunları GitHub profilime ekledim ama parola korumalı; push/pull işlemlerini ben yapıyorum. Ayrı bir Postgres geliştirme/test kullanıcısı ve veritabanı da var, süper kullanıcı değilYani ona projedeki diğer geliştiricilerden biri gibi davranıyorum. sudo ile bir şey çalıştırması gerekirse bana soruyor. Bazen aynı işi paralel şekilde ikimiz de yapabiliyoruz. Zaten Unix baştan beri çok kullanıcılı bir sistem olmalıydı
Sık kullandığım bir numara, onun git depolarında şöyle ek bir remote bulundurmak:
paul ssh://paul@localhost/~/src/example (fetch)paul ssh://paul@localhost/~/src/example (push)Böylece henüz paylaşmaya hazır olmadığım şeylerde birlikte çalışmak kolaylaşıyor
Bu kurulum oldukça rahat hissettiriyor. Yine de Linux yetki yükseltme açıkları beni endişelendiriyor. Yapay zekanın exploit kullanımına izin verilmediğini gerçekten anladığına güvenmiyorum. İlk işimde acil bir durumda, resmî olarak
httpd.confdüzenlemeyle sınırlı sudo yetkisini genişletmek için vim'in:!özelliğini yanlış kullandığım bir anı aklıma geliyor. Artık otomatik güvenlik güncellemeleri olsa da paketleri elle daha sık yükseltiyorum. Opus'un güvenlik açıklarını araştıracak kadar uğraş vereceğini sanmıyorum ama Fable yapabilir ve son zamanlarda böyle açıklar çoktu. Gelecekteki modeller kendi başına yeni açıklar bulabilir ya da SSH anahtarı parolasını öğrenmeye çalışmak için keylogger kurabilirAyrı kullanıcı, ayrı makine hariç duyduğum en paranoyak kurulumlara yakın. Bu yüzden hız ve kullanım kolaylığından fazla mı ödün veriyorum diye de düşünüyorum. Yine de pratikte hâlâ çok kullanışlı ve verimli olduğu kadar sorumlu bir yaklaşım gibi geliyor. Bir açık görüyorsanız duymak isterim
Fable, “sorunun düzeldiğinden emin olana kadar durmasına izin verilmeyen bir harness üzerinde çalışan Opus” gibi hissettiriyor. Benchmark'ta daha iyi bir model istiyorsanız mantıklı bir yön
Çok iyi bir model ama primi yüksek. Sadece token'ların kendisi daha pahalı değil, model o token'ların hepsini de kullanmak istiyor. Örneğin React Native işlerinde Fable “tamam, yaptım ve bitti” demiyor. Uygulamanın tamamını baştan yeniden build ediyor, tüm test paketini çalıştırıyor, bütün log'ları ve uyarıları izlemeye çalışıyor
LLM kullanırken ilk kez, şirket izin verse bile model yükseltmenin değmeyeceğini hissettim. Çünkü build ve test süreçleri makinemle bataryamı o kadar zorluyor ki başka iş yapamıyorum
Şu an için Opus üzerinde ultracode kullanmak daha iyi görünüyor. Ana context daha az kirleniyor ve araştırma da daha paralel ilerliyor
Fable oyunumdaki UI değişikliklerini doğrulamaya çalıştı. Ben başka bir pencerede çalışıyordum ama görev çubuğunda programın açıldığını gördüm. Fable, CLI'dan movie maker aracıyla oyunu açtı, çıktıyı kaydetti ve son frame'i yakalayıp UI'ı doğruladı. Oyunun karşılama ekranı görmek istediği kısmı kapatınca geçici bir worktree oluşturup karşılama ekranını kaldırdı, sonra movie maker'ı yeniden çalıştırdı
Süreci izlerken, benden bir ekran görüntüsü istemiş olsa token tasarrufu yapardı diye düşündüm. Yine de etkilenmemek elde değildi. Opus olsaydı bunu asla yapmazdı
Bu tür yazılar bana sanki paralel bir evrenden gelmiş gibi hissettiriyor. Kendi anekdotsal deneyimime ve hâlâ öznel olsa da bizzat hazırladığım benchmark’a göre (https://pshirshov.github.io/llm-bench-pi-oneshot/) Fable o kadar da etkileyici değil
Bazen gpt-5.5 ve opus 4.8 seviyesinde daha iyi, bazen daha kötü; ayrıca kesinlikle daha pahalı ve React sorularında kimya konusunda yardımcı olamayacağını söyleyerek reddedebiliyor
Bu yaygaranın gerçekten temelli olup olmadığını, yoksa IPO öncesi AGI abartısı mı olduğunu bilmiyorum
Fable’a karmaşık implementasyonları koordine ettiriyorum. Linear’daki üst seviye ticket’ları verip “bu ticket’ın alt issue’larına bak, hangilerini doğrudan senin implemente edebileceğine, hangi sırayla yapılmaları gerektiğine ve diğer takım arkadaşlarının hâlihazırda üzerinde çalıştıkları şeylerle nasıl koordine edilmesi gerektiğine karar ver” diyorum. Bu ticket’lar önemsiz şeyler değil; çok sayıda hareketli parça ve bağımlılık içeriyor, aynı projenin içinde ve dışında, örneğin backend’le de bağlantılı oluyor
Sonra Fable ticket’ları seçiyor ve her ticket’ı alt ajanlara (yine Fable) devrediyor. Alt ajanlar ilgili ticket’ın Figma tasarımına bakıyor, repository rehberlerine ve teamüllerine titizlikle uyarak kusursuz şekilde implemente ediyor, her parçanın ekran görüntüsünü alıyor, ayrıntılı commit mesajları ve PR açıklamaları yazıyor ve kanıt olarak ekran görüntülerini ekliyor. En sonunda da “Önce PR #1283 merge edilmeli. Bu arada şu ve şu ekranların Figma tasarımı yoktu ama mevcut benzer ekranlara bakıp aynı deseni uyguladım” gibi bir özet veriyor
Bu muhtemelen Fable’ın yapabildiklerinin %20’si civarında. Gerçekten güçlü bir model
Opus 4.8 de bunların çoğunu yapabiliyordu ama çok daha fazla yönlendirme istiyordu ve tıkandığı bir noktaya gelirse “buraya kadar gelebildim ama daha fazla ilerleyemiyorum” deyip durma ihtimali yüksekti
Fable biraz daha akıllı, ama tam da bu yüzden genel olarak daha kötü bir araç gibi geliyor
Tek bir prompt’la bitecek 50 satırlık bir patch işini sürekli 30 dakikalık bir keşfe çeviriyor ve çoğu zaman buna hiç değmiyor. Hatta sık sık yanlış da yapıyor
Bunu oldukça basit bir işle test ettim. Hash fonksiyonu değiştiğinde redis dedup cache’ini backfill etme işiydi. Yapılması gereken, tüm DB değerlerine yeni hash fonksiyonunu çalıştırıp cache’i genişletmekti; ama Fable, her cache değerinin hash fonksiyonu sürümünü tahmin etmeye ve sadece eski hash’leri yeniden hesaplamaya çalışan gereğinden fazla karmaşık bir cache güncellemesi implemente etti. Bazı bağlamlarda mantıklı olabilir ama 30 dakika boyunca token yakmanın sonucu, benim 10 satırlık bir
fordöngüsüyle değiştirdiğim kod olduProgramlama genelinde bu bana kötü haber gibi geliyor. LLM teknolojisinin zekâ açısından azalan getiri duvarına çarptığı gayet açık görünüyor; buna verilen karşılık onları sadece daha inatçı hâle getirmekse, bununla ilgili herkes için berbat bir çözüm. Token satanlarla 0-day taramak için gereken token’ları karşılayabilenler hariç tabii
Birincisi, nedensel bir model yok. Yapabildikleri şey sadece deneme-yanılma araması ve bu birçok problemde oldukça iyi işliyor ama pek çok başka problem nedensel bir model gerektiriyor
İkincisi, prompt’lar hassas değil. Programlama dilleri ve makine modelleri zaten tam olarak bu sorunu çözmek için icat edildi. İngilizce harika ama bir programlama dili değil
IPO öncesinde çok sayıda stratejik benimsetme ve manipülasyon yaptılar ve o açıdan işe de yaradı
tscçalıştırmak yeterliyken, her alt ajandatscçalıştırıp sonuçları birleştiren başka bir script daha yazdıGerçekten sinir bozucuydu. En fazla 1-2 dakikada bitecek iş, o yolu izlediği için yaklaşık 10 dakika sürdü
Daha sonra çok daha karmaşık işler deneyeceğim ama basit şeylerde posta kutusuna Corvette’le gitmek gibiydi
Kendi lokal makinemde terminal tabanlı LLM kullanmama yönündeki isteksizliğimin sürekli haklı çıktığını hissediyorum
Kötü niyetli bir davranışta bulunmasa bile, kayda değer miktarda iş kaybına yol açabilecek ya da makinemle birlikte çalışma kapasitemi de mahvedebilecek çok fazla şey var
1 trilyon dolarlık bir şirketin bunu nispeten kolay sağlayabilmesi gerekmez mi? Tüm harness’in yanında küçük bir iş gibi görünüyor
Güvenliğin daha büyük mesele olduğu açık ama bunu okurken aklımdan tek geçen, 2 satır CSS düzeltmek için ne kadar token harcandığı oldu
Tahmin edilmesi gereken, bunun bir insanın ne kadar zamanını alacağı
İnsanlar artık tembel olup yine de üretken görünmeyi başarıyor; ama bu hâlâ tembellik
Artık tek bir e-posta yazmak için yüz binlerce dolarlık donanıma erişim iznine ihtiyaç duyan insanlar var. Ben almayayım. Milyarderlerin düşünme makinesine bağımlı hâle gelmek için beynimi yakmak istemiyorum
Lokal bir “benim yerime düşünen makine” için de beynimi yakmayacağım. Erişebildiğim donanımdan daha değerli bir insan olmak istiyorum
Fable 5’in kendi tarzında hareket ettiği kişisel deneyimim çok olumluydu
Loglara ya da konsola hata bırakmayan bir Python modülü çökmesinin kök nedenini bulmaya çalıştı. Fable, UI tıklamalarını simüle eden bir test harness’i yazdıktan sonra, kodum üzerinde ikili arama yaparak çöküşün başladığı noktayı buldu. Ardından çöküş nedenine dair abartılı bir hipotez kurup,
/tmpaltında ilgili Python modülünün her sürümü için sanal ortam oluşturan tek satırlık bash komutlarını art arda çalıştırarak çökme yaşanmayan sürümü bulduBen tek başımayken yapabildiğimden çok daha derine inerek kök nedeni izledi ve nedenin heap allocation overflow’a yol açan bir modül regresyonu olduğu ortaya çıktı. Hata raporu göndermeye yetecek kadar bilgi ve sadeleştirilmiş bir örnek sundu; ayrıca bunun uygulamamda yaşanmaması için bir geçici çözüm de yazdı
Tamamen serbest bırakmıyorum. Çalıştırmak istediği her CLI komutunu ben gözden geçiriyorum ve benzer şekilde, ben “yes” ile devam ederken aşırı token kullanımını önlemek için yanıtıma eklemeler yapıyorum
Prompt’ta veya Markdown’da sınırlar koymak yardımcı oluyor. Örneğin web browser otomasyonu kullanmamasını söylerseniz, Fable’ın hem bu kurala hem de niyetine uyduğunu gördüm. Garip hack’ler de yapmadı
Yine de bazı basit debugging işlerini gerçekte olduğundan daha karmaşık ele alıyor gibi görünüyor. Sanırım asıl gönderi buna iyi bir örnek
git bisectdöngüsü çalıştırmak adına gerçekten bir ajana ihtiyaç olup olmadığı soru işaretiTest case ve
git bisectdöngüsü üretmesini anlayabiliyorum ama bunun neden internet ve GPU gibi şeyler üzerinden çalıştırılması gerektiğini anlamıyorum. Tek çekirdekli bir Celeron’da da çalışabilecek bir iş değil mi?