Agent Loop (OpenClaw)
Aracısal bir döngü, bir aracının tam “gerçek” çalıştırmasıdır: alım → bağlam derleme → model çıkarımı → araç yürütme → akış halinde yanıtlar → kalıcılık. Bu, oturum durumunu tutarlı tutarken bir mesajı eylemlere ve nihai yanıta dönüştüren yetkili yoldur. OpenClaw’da bir döngü, oturum başına tek ve serileştirilmiş bir çalıştırmadır; model düşünürken, araç çağırırken ve çıktı akışı yaparken yaşam döngüsü ve akış olayları üretir. Bu belge, bu özgün döngünün uçtan uca nasıl bağlandığını açıklar.Giriş noktaları
- Gateway RPC:
agentveagent.wait. - CLI:
agentkomutu.
Nasıl çalışır (üst düzey)
agentRPC parametreleri doğrular, oturumu çözümler (sessionKey/sessionId), oturum meta verilerini kalıcı hale getirir ve hemen{ runId, acceptedAt }döndürür.agentCommandaracı çalıştırır:- model + thinking/verbose varsayılanlarını çözümler
- Skills anlık görüntüsünü yükler
runEmbeddedPiAgentçağırır (pi-agent-core çalışma zamanı)- gömülü döngü bir tane üretmezse yaşam döngüsü end/error yayar
runEmbeddedPiAgent:- çalıştırmaları oturum başına + genel kuyruklar aracılığıyla serileştirir
- model + auth profile çözümler ve pi oturumunu oluşturur
- pi olaylarına abone olur ve assistant/tool delta’larını akış halinde iletir
- zaman aşımını uygular -> aşılırsa çalıştırmayı durdurur
- yükleri + kullanım meta verilerini döndürür
subscribeEmbeddedPiSession, pi-agent-core olaylarını OpenClawagentakışına köprüler:- araç olayları =>
stream: "tool" - assistant delta’ları =>
stream: "assistant" - yaşam döngüsü olayları =>
stream: "lifecycle"(phase: "start" | "end" | "error")
- araç olayları =>
agent.wait,waitForAgentRunkullanır:runIdiçin yaşam döngüsü end/error bekler{ status: ok|error|timeout, startedAt, endedAt, error? }döndürür
Kuyruklama + eşzamanlılık
- Çalıştırmalar oturum anahtarı başına (oturum hattı) ve isteğe bağlı olarak genel bir hat üzerinden serileştirilir.
- Bu, araç/oturum yarışlarını önler ve oturum geçmişini tutarlı tutar.
- Mesajlaşma kanalları, bu hat sistemine beslenen kuyruk modlarını (collect/steer/followup) seçebilir. Bkz. Command Queue.
Oturum + çalışma alanı hazırlığı
- Çalışma alanı çözümlenir ve oluşturulur; sandbox içindeki çalıştırmalar sandbox çalışma alanı köküne yönlendirilebilir.
- Skills yüklenir (veya bir anlık görüntüden yeniden kullanılır) ve env ile prompt içine eklenir.
- Bootstrap/bağlam dosyaları çözümlenir ve sistem prompt raporuna eklenir.
- Bir oturum yazma kilidi alınır;
SessionManager, akış başlamadan önce açılır ve hazırlanır.
Prompt derleme + sistem prompt’u
- Sistem prompt’u, OpenClaw’ın temel prompt’undan, Skills prompt’undan, bootstrap bağlamından ve çalıştırma başına geçersiz kılmalardan oluşturulur.
- Modele özgü sınırlar ve compaction rezerv token’ları uygulanır.
- Modelin ne gördüğü için bkz. System prompt.
Hook noktaları (nerede araya girebilirsiniz)
OpenClaw’ın iki hook sistemi vardır:- Internal hooks (Gateway hook’ları): komutlar ve yaşam döngüsü olayları için olay odaklı script’ler.
- Plugin hooks: aracı/araç yaşam döngüsü ve gateway işlem hattı içindeki genişletme noktaları.
Internal hooks (Gateway hook’ları)
agent:bootstrap: sistem prompt’u son halini almadan önce bootstrap dosyaları oluşturulurken çalışır. Bunu bootstrap bağlam dosyaları eklemek/çıkarmak için kullanın.- Komut hook’ları:
/new,/reset,/stopve diğer komut olayları (bkz. Hooks belgesi).
Plugin hooks (agent + gateway yaşam döngüsü)
Bunlar aracı döngüsü veya gateway işlem hattı içinde çalışır:before_model_resolve: model çözümlemesinden önce sağlayıcıyı/modeli deterministik olarak geçersiz kılmak için oturum öncesi (messagesolmadan) çalışır.before_prompt_build: prompt gönderiminden önceprependContext,systemPrompt,prependSystemContextveyaappendSystemContexteklemek için oturum yüklendikten sonra (messagesile) çalışır. Tur başına dinamik metin içinprependContextkullanın; sistem prompt alanında yer alması gereken kararlı yönlendirme için system-context alanlarını kullanın.before_agent_start: eski uyumluluk hook’udur; her iki aşamada da çalışabilir; bunun yerine yukarıdaki açık hook’ları tercih edin.before_agent_reply: satır içi eylemlerden sonra ve LLM çağrısından önce çalışır; bir plugin’in turu sahiplenmesine ve sentetik bir yanıt döndürmesine veya turu tamamen sessize almasına izin verir.agent_end: tamamlandıktan sonra nihai mesaj listesini ve çalıştırma meta verilerini inceler.before_compaction/after_compaction: compaction döngülerini gözlemler veya açıklama ekler.before_tool_call/after_tool_call: araç parametrelerine/sonuçlarına araya girer.before_install: yerleşik tarama bulgularını inceler ve gerekirse skill veya plugin kurulumlarını engeller.tool_result_persist: araç sonuçları oturum transkriptine yazılmadan önce bunları eşzamanlı olarak dönüştürür.message_received/message_sending/message_sent: gelen + giden mesaj hook’ları.session_start/session_end: oturum yaşam döngüsü sınırları.gateway_start/gateway_stop: gateway yaşam döngüsü olayları.
before_tool_call:{ block: true }sondur ve daha düşük öncelikli işleyicileri durdurur.before_tool_call:{ block: false }işlem yapmayan bir no-op’tur ve önceki bir engeli temizlemez.before_install:{ block: true }sondur ve daha düşük öncelikli işleyicileri durdurur.before_install:{ block: false }işlem yapmayan bir no-op’tur ve önceki bir engeli temizlemez.message_sending:{ cancel: true }sondur ve daha düşük öncelikli işleyicileri durdurur.message_sending:{ cancel: false }işlem yapmayan bir no-op’tur ve önceki bir iptali temizlemez.
Akış + kısmi yanıtlar
- Assistant delta’ları pi-agent-core’dan akış halinde gelir ve
assistantolayları olarak yayımlanır. - Blok akışı,
text_endveyamessage_endüzerinde kısmi yanıtlar yayımlayabilir. - Muhakeme akışı ayrı bir akış olarak veya blok yanıtları olarak yayımlanabilir.
- Parçalama ve blok yanıt davranışı için bkz. Streaming.
Araç yürütme + mesajlaşma araçları
- Araç başlangıç/güncelleme/bitiş olayları
toolakışında yayımlanır. - Araç sonuçları, günlüklenmeden/yayımlanmadan önce boyut ve görsel yükleri açısından temizlenir.
- Mesajlaşma aracı gönderimleri, yinelenen assistant onaylarını bastırmak için izlenir.
Yanıt şekillendirme + bastırma
- Nihai yükler şunlardan derlenir:
- assistant metni (ve isteğe bağlı muhakeme)
- satır içi araç özetleri (verbose + izinliyse)
- model hata verirse assistant hata metni
- Tam sessiz belirteç
NO_REPLY/no_reply, giden yüklerden filtrelenir. - Mesajlaşma aracı tekrarları nihai yük listesinden kaldırılır.
- İşlenebilir hiç yük kalmazsa ve bir araç hata verdiyse, yedek bir araç hata yanıtı yayımlanır (bir mesajlaşma aracı zaten kullanıcıya görünür bir yanıt göndermediyse).
Compaction + yeniden denemeler
- Otomatik compaction,
compactionakış olayları üretir ve yeniden denemeyi tetikleyebilir. - Yeniden denemede, yinelenen çıktıyı önlemek için bellek içi tamponlar ve araç özetleri sıfırlanır.
- Compaction işlem hattı için bkz. Compaction.
Olay akışları (bugün)
lifecycle:subscribeEmbeddedPiSessiontarafından yayımlanır (ve yedek olarakagentCommandtarafından)assistant: pi-agent-core’dan akış halinde gelen delta’lartool: pi-agent-core’dan akış halinde gelen araç olayları
Sohbet kanalı işleme
- Assistant delta’ları sohbet
deltamesajları içine tamponlanır. - Sohbet
final, lifecycle end/error durumunda yayımlanır.
Zaman aşımları
agent.waitvarsayılanı: 30s (yalnızca bekleme).timeoutMsparametresi geçersiz kılar.- Agent çalışma zamanı:
agents.defaults.timeoutSecondsvarsayılanı 172800s (48 saat);runEmbeddedPiAgentiptal zamanlayıcısında uygulanır.
İşlerin erken bitebileceği yerler
- Agent zaman aşımı (iptal)
- AbortSignal (iptal)
- Gateway bağlantısının kesilmesi veya RPC zaman aşımı
agent.waitzaman aşımı (yalnızca bekleme, agent’ı durdurmaz)
İlgili
- Tools — kullanılabilir agent araçları
- Hooks — agent yaşam döngüsü olaylarıyla tetiklenen olay odaklı script’ler
- Compaction — uzun konuşmaların nasıl özetlendiği
- Exec Approvals — kabuk komutları için onay kapıları
- Thinking — thinking/muhakeme düzeyi yapılandırması