Agents Never Sleep nasıl çalışır

Baştan sona gözetimsiz bir çalışmanın anlatımı — bir satış konuşması değil, mekanizmanın kendisi.

Tanım

Gözetimsiz ajan çalıştırma nedir?

Gözetimsiz ajan çalıştırma, bir kod ajanının her adımı izleyen kimse olmadan bir bilet iş listesi üzerinde çalışmasıdır — açıklayıcı bir soruyu yanıtlayacak bir insan yoktur. Bu yalnızca ajanın emin olmadığı an için sabit bir kuralı varsa işe yarar: varsay ve devam et, o tek kararı ertele ve bir sonraki bilete geç, ya da tüm çalışmayı durdur. Agents Never Sleep (ANS), bu kuralı kalıcı, uygulanan bir sözleşme olarak sağlayan yönetişim katmanıdır; böylece sabah 2'deki belirsiz bir bilet diğer otuz dokuzunu asla dondurmaz.

1. Başlatma ön kontrolü — herhangi bir token harcanmadan önce

Başsız (headless) bir çalışma, başlatıcı (bin/ans-run) aracılığıyla başlar; bu, ajan CLI'si açılmadan önce çalışan deterministik bir GO/NO-GO kapısıdır — çünkü ajanın kendi ön kontrolleri çalıştığında ilk token'lar zaten mahvolmaya mahkum olabilecek bir çalışmaya harcanmış olur.

Başlatıcı sırasıyla şunları kontrol eder: yapılandırma güveni (deponun .claude/agents-never-sleep.json dosyası kullanıcı başına bir kez açıkça güvenilir olmalı, SHA-256'sına göre indekslenir — onaylayacak kimse yokken yeni veya değişmiş bir yapılandırma bir NO-GO'dur); kimlik (yapılandırılmış bir hedef kullanıcı, asla root olarak çalışmaya bırakılan gözetimsiz bir çalışma değil); ajan seçimi (gerçek bir --version araştırmasıyla doğrulanan adlandırılmış bir ön ayar, böylece bayrak sapması harcamadan önce yakalanır, sonra değil); ve bir çalışma ağacı kilidi — aynı depoda eşzamanlı iki başlatmanın her zaman tam olarak bir kazanan üretmesini sağlayan, herhangi bir çökmede çekirdek tarafından otomatik olarak serbest bırakılan, bloklamayan bir flock(2).

Çıkış kodları basittir: 0 başlatıldı, 64 NO-GO, 65 çalışma ağacı zaten meşgul. Özerklik bayrakları — ayrılmış bir çalışmanın bir onay isteminde takılıp kalmadan gerçekten devam etmesini sağlayan izin modu — asla varsayılan değildir; bir ön ayar yalnızca bir insan o bayrağın tam olarak neyi verdiğini onayladıktan sonra başlatılabilir hale gelir.

Biletler makineden kontrol noktası kontrol noktası ilerler.
Biletler makineden kontrol noktası kontrol noktası ilerler.

2. Bilet başına durum makinesi

Çalışmaya başladıktan sonra ajan, harness'e karşı iki komutluk bir döngü yürütür: next çalışılacak bir bilet ister, complete ne olduğunu kaydeder. Her çağrı, kalıcı ve atomik olarak yazılan durum üzerinde yeni bir alt süreçtir — ikisi arasındaki bir çökme hiçbir şey kaybetmez, çünkü hiçbir şey yalnızca bellekte yaşamaz.

Her bilet, sabah sonrası tepkinin asla belirsiz olmaması için seçilmiş yedi sonuç durumundan tam olarak birinde sona erer:

  • DONE — uygulandı, deterministik kapı yeşil.
  • DONE_LOW_CONFIDENCE — kapı yeşil, ancak yüksek riskli bir diff'in devredilmiş incelemesi endişe dile getirdi, hata verdi veya hiç çalışmadı; gün ışığında inceleme gerekiyor.
  • PARKED_DECISION — bir karar bir insana ertelendi; çalışma devam etti.
  • PARKED_FOUNDATIONAL — temel bir belirsizlik; bağımlı biletler çözülene kadar karantinaya alınır.
  • BLOCKED_ENV — ortam ilerlemeyi engelledi (bir git kilidi, çalıştırılamayan bir kapı) — ajanın hatası değil.
  • FAILED_RETRYABLE — bir kapı, diff'in getirdiği bir hatayı yakaladı; düzenleme geri alındı; yeniden denemek güvenli.
  • FAILED_BUG_IN_AGENT — tekrarlanan hatalar sistematik bir sorunu düşündürür; insan bakışı gerekir.

3. Karar ver — sonra uygula

Bir dosyaya dokunmadan önce harness, biletin etki alanını sınıflandırır ve PROCEED, PARK veya HALT kararı verir. Yalnızca bir PROCEED bileti uygulanmak üzere ajana ulaşır; bir PARK, herhangi bir düzenlemeden önce kaydedilir, çünkü kararın kendisi iş ürünüdür.

Bir PROCEED bileti devredildiğinde, bu tasarımdaki işçi olan ajan, tam olarak o biletin dosyalarını düzenler. Harness önce çalışma ağacının anlık görüntüsünü alır, böylece ajanın yaptığı her şey geri alınabilir.

Kapı karar verir: damga yalnızca testler geçince iner.
Kapı karar verir: damga yalnızca testler geçince iner.

4. Deterministik kapı — tek sıkı engel

Bir kapı, düzenlemeden sonra çalıştırılan bir kabuk komutudur — test paketiniz. Çıkış 0 yeşildir; sıfır olmayan kırmızıdır. Bu, tüm çalışma boyunca bir bileti sıkı şekilde engelleyebilen tek şeydir; geri kalan her şey (devredilmiş bir model incelemesi, uzman bir bakış açısı) danışmandır ve yalnızca bir güven damgasını esirgeyebilir, işi asla geri alamaz veya çalışmayı durduramaz.

Kırmızı bir kapı yalnızca raporlanmaz, sınıflandırılır: diff'in açıkça getirdiği bir hata son yeşil commit'e geri döner ve FAILED_RETRYABLE kaydeder; önceden var olan, kararsız veya ortama bağlı görünen bir hata güveni düşürür ama işi korur; hiç çalışamayan bir kapı (bir kilit, bir zaman aşımı, yanıtlayamayacağı etkileşimli olmayan bir istem) BLOCKED_ENV kaydeder — asla sessiz bir durma değil. ANS, yeşili zorlamak için başarısız bir testi asla silmez veya atlamaz.

---
id: fix-flaky-webhook-retry
title: Retry webhook delivery on 5xx with backoff
blast_radius: medium      # optional hint — the harness auto-classifies from the diff
gate: pytest tests/webhooks/ -x
---

The webhook sender should retry on 5xx responses with exponential backoff
(max 3 attempts). Cover it with a test that simulates two 500s then a 200.

Açıklayıcı örnek — bir bilet, isteğe bağlı bir YAML ön madde bloğuna sahip bir Markdown dosyasıdır; gövde tek zorunlu kısımdır ve gate, o bilet için başarı veya başarısızlığa karar veren komutu adlandırır.

5. ASK / PARK / HALT — karar noktaları

Belirsizliğe üç farklı yanıt, asla tek bir yanıta indirgenmez. Bir çalışma gözetimsiz olduğu anda ASK yasaktır — yanıtlayacak kimse yoktur, bu yüzden otomatik olarak PARK'a dönüştürülür. Geriye iki gerçek seçenek kalır:

  • PARK — bu tek bileti veya kararı ertele ve doğrudan bir sonraki bağımsız bilete geç. Bu normal ve sağlıklıdır, bir durma değildir. Bir bekletme her zaman nedenini, aday yorumları ve sabahleyin bekleyen tam insan kararını kaydeder. Kesinlikle bekletmeye alınan (Hard-PARK) gerçek örnekler: bir veritabanı geçişinin hangi yöne gitmesi gerektiği, genel veya paylaşılan bir API sözleşmesindeki bir değişiklik, bir güvenlik veya kiracı izolasyonu sınırına dokunan her şey ve para, faturalandırma veya fiyatlandırmayla ilgili her şey.
  • HALT — tüm çalışmayı durdur. Hiçbir güvenlik ağı olmadan gerçekten geri alınamaz tehlike için ayrılmıştır — örneğin, sürüm kontrolünün olmadığı ve oluşturulamayacağı durumlar. HALT tasarım gereği nadirdir; belirsizliğin çoğu bir HALT değil, bir PARK'tır.

Seçimin arkasındaki disiplin etki alanıdır: adlandırma, iç yapı, günlük ifadesi veya iki eşdeğer yerel uygulama arasındaki bir seçim PROCEED ile devam edebilir (varsay, günlüğe kaydet, devam et, geri alınabilir şekilde). Büyük etki alanına sahip herhangi bir şey veya gerçekten sınıflandırılamayan herhangi bir şey bekletmeye alınır. Yanlışlıkla bekletilen küçük bir öğe beş saniyelik bir sabah kararına mal olur; yanlışlıkla varsayılan büyük bir öğe ise yanlış yönde bir gece yanlış işe mal olur.

Bekçi nöbette; donan bir çalışma kaldığı yerden yeniden başlatılır.
Bekçi nöbette; donan bir çalışma kaldığı yerden yeniden başlatılır.

6. Bekçi köpeği — donma, sonra devam edilebilir bir yeniden başlatma

Bir donma, bir durmadan farklı bir hatadır: süreç canlıdır, hiçbir şey yapmaz ve erken bir durmayı izleyen hiçbir kanca bunu göremez. Sürdürülen bir sağlayıcı aşırı yüklenme dalgası gerçekçi nedendir — çalışma hâlâ oradadır, ama kalp atışı bayatlamıştır.

Bekçi köpeği, gözetimsiz komutu bir alt süreç olarak çalıştıran ve kalp atışı dosyasını yoklayan bir yan araçtır (sidecar). Kalp atışı yapılandırılmış bir eşiği aştığında bayatladığında, alt süreci öldürür ve yeniden başlatır — ve ANS durumu kalıcı olduğundan, yeniden başlatma çalışmanın kaldığı yerden tam olarak devam eder; işlemdeki biletin kısmi düzenlemeleri son anlık görüntüsüne geri alınır, böylece hiçbir şey kaybolmaz veya iki kez sayılmaz. Sınırlı sayıda yeniden başlatmadan sonra, sonsuza kadar yeniden başlatmak yerine bir uyarı tetikler ve çıkar. ans-run, her ayrılmış başlatmayı varsayılan olarak bekçi köpeğiyle sarmalar.

Aynı yan araç ayrıca kendi sızdırılmış alt süreçlerini de toplar — örneğin ajanın başlattığı ve hiç kapatmadığı bir MCP sunucusu — kesinlikle çalışmanın kendi süreç kimliğinden ebeveyn zinciri soyuyla, asla bir süreç adını eşleştirerek değil (bir ad eşleşmesi aynı makinedeki ilgisiz bir çalışmayı öldürebilir). Dürüst sınır: denetleyicinin kendisi zorla sonlandırılırsa, olaydan sonra toplayamaz, bu yüzden bu süreç sızıntısını azaltır, ortadan kaldırmaz.

7. Boşaltma (drain) — yapacak hiçbir şey kalmayana kadar çalıştırma

Ajan, next bir uç durum döndürene kadar next sonra complete çağırmaya devam eder: DRAINED (iş listesi boş), HALTED (bir HALT koşulu tetiklendi) veya LOW_YIELD (son biletlerin çoğu tamamlanmak yerine bekletiliyor veya engelleniyor olduğu için bir devre kesici attı — iş listesinin kendisiyle ilgili bir şeyin daha fazla deneme değil, insan bakışı gerektirdiğinin bir işareti). Deneme ve döngü tavanları, aksi takdirde tüm çalışmayı tüketecek herhangi bir tek bileti zorla bekletmeye alır, böylece lanetli bir öğe tam olarak bu tasarımın önlemek için var olduğu hatayı tekrarlayamaz.

8. Sabah raporu

Çalışma sona erdiğinde, ne olduğunu günlüklerden yeniden inşa etmenizi beklemek yerine tek, öncelik sıralı bir rapor (night-report.md) yazar. Şunları belirtir: neyin tamamlandığı ve güvenilir olduğu, neyin tamamlandığı ama gün ışığında inceleme gerektirdiği (devredilmiş incelemesi onu geçirmeyen yüksek riskli bir değişiklik), neyin bekletildiği — her biri aday yorumları ve tam sonraki eylemiyle birlikte — ortam tarafından neyin engellendiği ve herhangi bir kör nokta: bozulmuş bir garanti, mevcut olmayan bir yetenek, çalışmanın okuyamadığı bir kimlik bilgisi. Düşük verimli bir gece raporda açıkça işaretlenir, böylece "çalışma bitti" asla "iş yapıldı" ile karıştırılmaz.