Uzun soluklu işler için harness
Saatlerce çalışan bir loop oturumlar arasında her şeyi unutur, bu yüzden hafızası dosyalarda durmalı. İlerleme kayıtları, ajanın yalnızca çevirebildiği bir özellik listesi, bir başlangıç rutini ve model değiştikçe her parçayı yeniden test etme alışkanlığı.
Her oturum hafızasız başlar
Saatlerce çalışan bir loop aslında art arda gelen birçok oturum ve her biri bir öncekini hatırlamadan başlıyor. Justin Young'ın uzun soluklu ajanlar yazısı bu gerçekten yola çıkıyor. Sonraki oturumun bilmesi gereken her şey, okuyabileceği bir yerde durmak zorunda.
Bağlam mühendisliği rehberi aynı şeyi öbür taraftan söylüyor: yapılandırılmış not almak dış hafızadır. Addy Osmani'nin tarifi bunu bir hafıza deposu olarak içeriyor: yapılanı ve sıradakini kaydeden, diskte duran bir markdown dosyası ya da pano. Ralph'ın plan dosyası da aynı fikrin en yalın hâli.
Young'ın yazısı dört hata üzerine kurulu ve her çözüm birine denk geliyor: erken zafer ilanı, belgelenmemiş durum, erken "bitti" ve boşa giden kurulum.
İlk oturum sahneyi hazırlar
Young işi bir başlatıcı (initializer) oturuma ve birçok kodlama oturumuna bölüyor. Başlatıcı tek seferlik kurulumu yapıyor.
- Projeyi ayağa kaldıran
init.shscript'ini yazıyor, böylece sonraki oturumlar bunu çözmeye vakit harcamıyor. - Bir ilerleme kaydı başlatıyor.
- İlk git commit'ini atıyor.
- Prompt'u, her özelliği başarısız işaretlenmiş bir JSON özellik listesine genişletiyor.
Sonraki her oturum tek bir özellik yapıyor. O özelliğin yalnızca passes alanını değiştirebiliyor. Young bu dosya için Markdown yerine JSON seçti, çünkü modeller JSON'u daha az eziyor. Ajanın yeniden yazabildiği bir özellik listesi, iş bitmiş görünene kadar sessizce küçülen bir listedir.
{
"feature": "User can reset a password by email",
"steps": ["open reset page", "submit email", "follow link", "set new password"],
"passes": false
}Özellik listesi neden her özellik başarısız işaretli başlıyor ve sonraki oturumlar neden yalnızca passes alanını değiştirebiliyor?
Başlangıç rutini
Her kodlama oturumu aynı kısa rutinle başlıyor.
Özellik seçmeden önceki son kontrol gerisini koruyor. Önceki oturum uygulamayı bozuk bıraktıysa yeni oturum, bozuğun üstüne inşa etmeden önce bunu öğreniyor. Young ayrıca tarayıcı otomasyonunun, kendi kurulumunda bir Puppeteer MCP'nin, kodu okuyarak kaçan hataları yakaladığını aktarıyor.
Oturum sonunda ajan açıklayıcı bir mesajla commit atıyor ve ilerleme kaydını güncelliyor, böylece sonraki temiz başlıyor.
Derleyici koşusunun öğrettikleri
Nicholas Carlini'nin C derleyicisi farklı bir şekil kullandı: ortak tek bir git deposunda, ayrı Docker konteynerlerinde 16 ajan, hiç orkestratör yok. Koordinasyon dosyalar ve git'ti.
- Kilit dosyaları. Bir ajan,
current_tasks/içine kilit dosyası yazarak görevi sahipleniyor. Aynı görevi deneyen ikinci ajanı git başka birini seçmeye zorluyor. - Küçücük test çıktısı. Birkaç satırda tutun, ayrıntıları dosyalara loglayın. Bağlamı çıktıyla boğan bir koşu ajanı kör ediyor.
- Zaman körlüğü. Claude geçen süreyi yargılayamıyor, o da hızlı bir örnekleme modu ekledi ve ilerleme çıktısını seyrek tuttu.
- CI. Yeni özellikler eskileri bozmaya devam etti, bu yüzden testler ve CI harness'ın parçası oldu.
Oyun harness'ının öğrettikleri
Prithvi Rajasekaran'ın retro oyun yapıcı harness'ı üç rol kullandı: tek cümleyi 16 özellikli, 10 sprintlik bir spec'e çeviren planlayıcı, bir üretici ve ayrı bir değerlendirici. Üretici ile değerlendirici, her sprint için "bitti"nin ne demek olduğu üzerinde dosyalar üzerinden anlaştı.
En faydalı kısım sonradan geldi. Sonnet 4.5 ile harness'ın bağlam sıfırlamalarına, yani taze bir ajan ve yapılandırılmış bir devre ihtiyacı vardı; yazının "context anxiety" dediği şey yüzünden. Opus 4.5 ile bu sıfırlamalar bırakıldı. Opus 4.6 ile sprint yapısı kaldırıldı, değerlendirici tek bir son geçişe taşındı, planlayıcı kaldı.
Yeni bir model çıktı. Uzun soluklu harness araştırması harness'ınızla ne yapmanızı öneriyor?
- Effective harnesses for long-running agents (Justin Young)
- Building a C compiler with a team of parallel Claudes (Nicholas Carlini)
- Harness design for long-running application development (Prithvi Rajasekaran)
- Effective context engineering for AI agents (Anthropic Applied AI team)
- Loop Engineering (Addy Osmani)
Bölüm tamamlandı
Loop engineering kursunun 6 bölümünden 6. bölümü bitirdiniz.