Oturum Yönetimi ve Sıkıştırma (Derinlemesine İnceleme)
Bu belge, OpenClaw’ın oturumları uçtan uca nasıl yönettiğini açıklar:- Oturum yönlendirme (gelen mesajların bir
sessionKeydeğerine nasıl eşlendiği) - Oturum deposu (
sessions.json) ve neyi izlediği - Transkript kalıcılığı (
*.jsonl) ve yapısı - Transkript hijyeni (çalıştırmalardan önce sağlayıcıya özgü düzeltmeler)
- Bağlam sınırları (bağlam penceresi ile izlenen token’lar)
- Sıkıştırma (elle + otomatik sıkıştırma) ve sıkıştırma öncesi işlerin nereye bağlanacağı
- Sessiz bakım (ör. kullanıcıya görünür çıktı üretmemesi gereken bellek yazımları)
- /concepts/session
- /concepts/compaction
- /concepts/memory
- /concepts/memory-search
- /concepts/session-pruning
- /reference/transcript-hygiene
Doğruluğun kaynağı: Gateway
OpenClaw, oturum durumuna sahip tek bir Gateway süreci etrafında tasarlanmıştır.- UI’ler (macOS uygulaması, web Control UI, TUI), oturum listeleri ve token sayıları için Gateway’i sorgulamalıdır.
- Uzak modda oturum dosyaları uzak ana makinededir; “yerel Mac dosyalarınızı kontrol etmek”, Gateway’in kullandığını yansıtmaz.
İki kalıcılık katmanı
OpenClaw, oturumları iki katmanda kalıcı hale getirir:-
Oturum deposu (
sessions.json)- Anahtar/değer eşlemesi:
sessionKey -> SessionEntry - Küçük, değiştirilebilir, düzenlenmesi güvenli (veya girdiler silinebilir)
- Oturum meta verilerini izler (geçerli oturum kimliği, son etkinlik, anahtarlar, token sayaçları vb.)
- Anahtar/değer eşlemesi:
-
Transkript (
<sessionId>.jsonl)- Ağaç yapılı eklemeli transkript (girdilerde
id+parentIdvardır) - Gerçek konuşmayı + araç çağrılarını + sıkıştırma özetlerini saklar
- Gelecek turlar için model bağlamını yeniden oluşturmakta kullanılır
- Ağaç yapılı eklemeli transkript (girdilerde
Disk üzerindeki konumlar
Gateway ana makinesinde, agent başına:- Depo:
~/.openclaw/agents/<agentId>/sessions/sessions.json - Transkriptler:
~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl- Telegram konu oturumları:
.../<sessionId>-topic-<threadId>.jsonl
- Telegram konu oturumları:
src/config/sessions.ts aracılığıyla çözümler.
Depo bakımı ve disk denetimleri
Oturum kalıcılığı,sessions.json ve transkript yapılarını korumak için otomatik bakım denetimlerine (session.maintenance) sahiptir:
mode:warn(varsayılan) veyaenforcepruneAfter: eski giriş yaş sınırı (varsayılan30d)maxEntries:sessions.jsoniçindeki giriş sınırı (varsayılan500)rotateBytes:sessions.jsonaşırı büyüdüğünde döndürme eşiği (varsayılan10mb)resetArchiveRetention:*.reset.<timestamp>transkript arşivleri için saklama süresi (varsayılan:pruneAfterile aynı;falsetemizlemeyi devre dışı bırakır)maxDiskBytes: isteğe bağlı oturumlar dizini bütçesihighWaterBytes: temizlikten sonraki isteğe bağlı hedef (varsayılanmaxDiskBytesdeğerinin%80’i)
mode: "enforce"):
- Önce en eski arşivlenmiş veya sahipsiz transkript yapılarını kaldırın.
- Hâlâ hedefin üzerindeyse en eski oturum girdilerini ve transkript dosyalarını çıkarın.
- Kullanım
highWaterBytesdeğerine veya altına inene kadar devam edin.
mode: "warn" modunda OpenClaw olası çıkarmaları bildirir, ancak depoyu/dosyaları değiştirmez.
Bakımı isteğe bağlı olarak çalıştırın:
Cron oturumları ve çalıştırma günlükleri
Yalıtılmış cron çalıştırmaları da oturum girdileri/transkriptler oluşturur ve bunların özel saklama denetimleri vardır:cron.sessionRetention(varsayılan24h), oturum deposundaki eski yalıtılmış cron çalıştırma oturumlarını budar (falsebunu devre dışı bırakır).cron.runLog.maxBytes+cron.runLog.keepLines,~/.openclaw/cron/runs/<jobId>.jsonldosyalarını budar (varsayılanlar:2_000_000bayt ve2000satır).
Oturum anahtarları (sessionKey)
Bir sessionKey, hangi konuşma kovasında olduğunuzu tanımlar (yönlendirme + yalıtım).
Yaygın desenler:
- Ana/doğrudan sohbet (agent başına):
agent:<agentId>:<mainKey>(varsayılanmain) - Grup:
agent:<agentId>:<channel>:group:<id> - Oda/kanal (Discord/Slack):
agent:<agentId>:<channel>:channel:<id>veya...:room:<id> - Cron:
cron:<job.id> - Webhook:
hook:<uuid>(geçersiz kılınmadıkça)
Oturum kimlikleri (sessionId)
Her sessionKey, geçerli bir sessionId değerine işaret eder (konuşmayı sürdüren transkript dosyası).
Temel kurallar:
- Sıfırlama (
/new,/reset), busessionKeyiçin yeni birsessionIdoluşturur. - Günlük sıfırlama (varsayılan olarak gateway ana makinesinin yerel saatine göre sabah 4:00), sıfırlama sınırından sonraki ilk mesajda yeni bir
sessionIdoluşturur. - Boşta kalma süresi dolumu (
session.reset.idleMinutesveya eskisession.idleMinutes), boşta kalma penceresinden sonra mesaj geldiğinde yeni birsessionIdoluşturur. Günlük + boşta kalma birlikte yapılandırıldığında hangisinin süresi önce dolarsa o kazanır. - Thread üst çatallama koruması (
session.parentForkMaxTokens, varsayılan100000), üst oturum zaten çok büyükse üst transkript çatallamasını atlar; yeni thread temiz başlar. Devre dışı bırakmak için0ayarlayın.
src/auto-reply/reply/session.ts içindeki initSessionState() içinde verilir.
Oturum deposu şeması (sessions.json)
Deponun değer türü, src/config/sessions.ts içindeki SessionEntry türüdür.
Temel alanlar (tam liste değildir):
sessionId: geçerli transkript kimliği (eğersessionFileayarlanmışsa dosya adı bundan türetilmez)updatedAt: son etkinlik zaman damgasısessionFile: isteğe bağlı açık transkript yolu geçersiz kılmasıchatType:direct | group | room(UI’lere ve gönderim ilkesine yardımcı olur)provider,subject,room,space,displayName: grup/kanal etiketlemesi için meta veriler- Anahtarlar:
thinkingLevel,verboseLevel,reasoningLevel,elevatedLevelsendPolicy(oturum başına geçersiz kılma)
- Model seçimi:
providerOverride,modelOverride,authProfileOverride
- Token sayaçları (en iyi çaba / sağlayıcıya bağlı):
inputTokens,outputTokens,totalTokens,contextTokens
compactionCount: bu oturum anahtarı için otomatik sıkıştırmanın kaç kez tamamlandığımemoryFlushAt: son sıkıştırma öncesi bellek boşaltmanın zaman damgasımemoryFlushCompactionCount: son boşaltmanın çalıştığı sıradaki sıkıştırma sayısı
Transkript yapısı (*.jsonl)
Transkriptler, @mariozechner/pi-coding-agent içindeki SessionManager tarafından yönetilir.
Dosya JSONL biçimindedir:
- İlk satır: oturum başlığı (
type: "session",id,cwd,timestamp, isteğe bağlıparentSessioniçerir) - Sonra:
id+parentIdiçeren oturum girdileri (ağaç)
message: kullanıcı/asistan/toolResult mesajlarıcustom_message: model bağlamına giren uzantı enjeksiyonlu mesajlar (UI’de gizlenebilir)custom: model bağlamına girmeyen uzantı durumucompaction:firstKeptEntryIdvetokensBeforeiçeren kalıcı sıkıştırma özetibranch_summary: bir ağaç dalında gezinirken kalıcı özet
SessionManager kullanır.
Bağlam pencereleri ve izlenen token’lar
İki farklı kavram önemlidir:- Model bağlam penceresi: model başına sabit üst sınır (modele görünen token’lar)
- Oturum deposu sayaçları:
sessions.jsoniçine yazılan dönen istatistikler (/statusve panolar için kullanılır)
- Bağlam penceresi model kataloğundan gelir (ve yapılandırma ile geçersiz kılınabilir).
- Depodaki
contextTokens, çalışma zamanı tahmini/raporlama değeridir; bunu katı bir garanti olarak görmeyin.
Sıkıştırma: nedir
Sıkıştırma, daha eski konuşmayı transkriptte kalıcı bircompaction girdisi halinde özetler ve son mesajları bozulmadan tutar.
Sıkıştırmadan sonra gelecekteki turlar şunları görür:
- Sıkıştırma özeti
firstKeptEntryIdsonrasındaki mesajlar
Sıkıştırma parça sınırları ve araç eşleştirme
OpenClaw uzun bir transkripti sıkıştırma parçalarına böldüğünde, asistan araç çağrılarını eşleşentoolResult girdileriyle eşli tutar.
- Token paylaşımı bölümü bir araç çağrısı ile sonucu arasına denk gelirse OpenClaw çifti ayırmak yerine sınırı asistan araç çağrısı mesajına kaydırır.
- Sondaki bir araç sonucu bloğu parçayı aksi halde hedefin üstüne iteceksa OpenClaw bekleyen bu araç bloğunu korur ve özetlenmemiş kuyruğu bozulmadan tutar.
- İptal edilen/hatalı araç çağrısı blokları bekleyen bir bölünmeyi açık tutmaz.
Otomatik sıkıştırma ne zaman olur (Pi çalışma zamanı)
Gömülü Pi agent’ında otomatik sıkıştırma iki durumda tetiklenir:- Taşma kurtarma: model bir bağlam taşması hatası döndürür
(
request_too_large,context length exceeded,input exceeds the maximum number of tokens,input token count exceeds the maximum number of input tokens,input is too long for the model,ollama error: context length exceededve benzeri sağlayıcı biçimli varyantlar) → sıkıştır → yeniden dene. - Eşik bakımı: başarılı bir turdan sonra, şu durumda:
contextTokens > contextWindow - reserveTokens
Burada:
contextWindow, modelin bağlam penceresidirreserveTokens, istemler + bir sonraki model çıktısı için ayrılan boşluk payıdır
Sıkıştırma ayarları (reserveTokens, keepRecentTokens)
Pi’nin sıkıştırma ayarları Pi settings içinde bulunur:
- Eğer
compaction.reserveTokens < reserveTokensFloorise OpenClaw bunu yükseltir. - Varsayılan taban sınır
20000token’dır. - Taban sınırı devre dışı bırakmak için
agents.defaults.compaction.reserveTokensFloor: 0ayarlayın. - Değer zaten daha yüksekse OpenClaw dokunmaz.
src/agents/pi-settings.ts içindeki ensurePiCompactionReserveTokens()
(src/agents/pi-embedded-runner.ts içinden çağrılır).
Takılabilir sıkıştırma sağlayıcıları
Plugin’ler, plugin API üzerinderegisterCompactionProvider() aracılığıyla bir sıkıştırma sağlayıcısı kaydedebilir. agents.defaults.compaction.provider, kaydedilmiş bir sağlayıcı kimliğine ayarlandığında güvenlik uzantısı, özetlemeyi yerleşik summarizeInStages hattı yerine bu sağlayıcıya devreder.
provider: kayıtlı bir sıkıştırma sağlayıcı plugin’inin kimliği. Varsayılan LLM özetlemesi için boş bırakın.providerayarlamakmode: "safeguard"değerini zorlar.- Sağlayıcılar, yerleşik yol ile aynı sıkıştırma yönergelerini ve tanımlayıcı koruma ilkesini alır.
- Güvenlik koruması, sağlayıcı çıktısından sonra da son turların ve bölünmüş turun sonek bağlamını korur.
- Sağlayıcı başarısız olursa veya boş sonuç döndürürse OpenClaw otomatik olarak yerleşik LLM özetlemesine geri döner.
- Abort/timeout sinyalleri çağıran iptaline saygı göstermek için yeniden fırlatılır (yutulmaz).
src/plugins/compaction-provider.ts, src/agents/pi-hooks/compaction-safeguard.ts.
Kullanıcıya görünür yüzeyler
Sıkıştırmayı ve oturum durumunu şuralardan gözlemleyebilirsiniz:/status(herhangi bir sohbet oturumunda)openclaw status(CLI)openclaw sessions/sessions --json- Ayrıntılı mod:
🧹 Auto-compaction complete+ sıkıştırma sayısı
Sessiz bakım (NO_REPLY)
OpenClaw, kullanıcının ara çıktıları görmemesi gereken arka plan görevleri için “sessiz” turları destekler.
Kural:
- Asistan, “kullanıcıya yanıt teslim etme” anlamına gelecek şekilde çıktısına tam sessiz token
NO_REPLY/no_replyile başlar. - OpenClaw bunu teslim katmanında temizler/bastırır.
- Tam sessiz token bastırması büyük/küçük harfe duyarsızdır; yani tüm yük yalnızca sessiz token ise
NO_REPLYveno_replyikisi de sayılır. - Bu yalnızca gerçek arka plan/teslim yok turları içindir; sıradan eyleme dönük kullanıcı istekleri için bir kısayol değildir.
2026.1.10 itibarıyla OpenClaw, kısmi bir parça NO_REPLY ile başladığında
taslak/yazıyor akışını da bastırır; böylece sessiz işlemler tur ortasında
kısmi çıktı sızdırmaz.
Sıkıştırma öncesi “bellek boşaltma” (uygulandı)
Amaç: otomatik sıkıştırma olmadan önce diske kalıcı durum yazan sessiz bir agentic tur çalıştırmak (ör. agent çalışma alanındakimemory/YYYY-MM-DD.md), böylece sıkıştırma kritik bağlamı
silemez.
OpenClaw eşik öncesi boşaltma yaklaşımını kullanır:
- Oturum bağlam kullanımını izleyin.
- Bu kullanım bir “yumuşak eşiği” geçtiğinde (Pi’nin sıkıştırma eşiğinin altında), agente sessiz bir “şimdi belleğe yaz” yönergesi çalıştırın.
- Kullanıcı hiçbir şey görmesin diye tam sessiz token
NO_REPLY/no_replykullanın.
agents.defaults.compaction.memoryFlush):
enabled(varsayılan:true)softThresholdTokens(varsayılan:4000)prompt(boşaltma turu için kullanıcı mesajı)systemPrompt(boşaltma turu için eklenen ek sistem istemi)
- Varsayılan prompt/system prompt, teslimi bastırmak için
NO_REPLYipucu içerir. - Boşaltma, sıkıştırma döngüsü başına bir kez çalışır (
sessions.jsoniçinde izlenir). - Boşaltma yalnızca gömülü Pi oturumlarında çalışır (CLI arka uçları bunu atlar).
- Oturum çalışma alanı salt okunursa boşaltma atlanır (
workspaceAccess: "ro"veya"none"). - Çalışma alanı dosya düzeni ve yazma desenleri için Memory sayfasına bakın.
session_before_compact hook’u da sunar, ancak OpenClaw’ın
boşaltma mantığı bugün Gateway tarafında bulunur.
Sorun giderme kontrol listesi
- Oturum anahtarı yanlış mı? /concepts/session ile başlayın ve
/statusiçindekisessionKeydeğerini doğrulayın. - Depo ile transkript uyuşmuyor mu? Gateway ana makinesini ve
openclaw statusçıktısındaki depo yolunu doğrulayın. - Sıkıştırma spam’i mi var? Şunları kontrol edin:
- model bağlam penceresi (çok küçük olabilir)
- sıkıştırma ayarları (model penceresi için
reserveTokensçok yüksekse daha erken sıkıştırmaya neden olabilir) - tool-result şişmesi: oturum budamayı etkinleştirin/ayarlayın
- Sessiz turlar sızıyor mu? Yanıtın
NO_REPLYile başladığını (büyük/küçük harfe duyarsız tam token) ve akış bastırma düzeltmesini içeren bir sürüm kullandığınızı doğrulayın.