Oturum Yönetimi ve Sıkıştırma (Ayrıntılı İnceleme)
Bu belge, OpenClaw’un oturumları uçtan uca nasıl yönettiğini açıklar:- Oturum yönlendirme (gelen mesajların bir
sessionKeyile nasıl eşlendiği) - Oturum deposu (
sessions.json) ve bunun neleri izlediği - Döküm kalıcılığı (
*.jsonl) ve yapısı - Döküm 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 (manuel + otomatik sıkıştırma) ve sıkıştırma öncesi işlerin nereye bağlanacağı
- Sessiz bakım işlemleri (ö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
Gerçek kaynak: Gateway
OpenClaw, oturum durumuna sahip olan tek bir Gateway işlemi 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üzenlemesi güvenli (veya girdileri silebilirsiniz)
- Oturum meta verilerini izler (geçerli oturum kimliği, son etkinlik, anahtarlar, token sayaçları vb.)
- Anahtar/değer eşlemesi:
-
Döküm (
<sessionId>.jsonl)- Ağaç yapısına sahip salt eklemeli döküm (
id+parentIdiçeren girdiler) - Gerçek konuşmayı + araç çağrılarını + sıkıştırma özetlerini depolar
- Gelecek dönüşler için model bağlamını yeniden oluşturmakta kullanılır
- Ağaç yapısına sahip salt eklemeli döküm (
Disk üzerindeki konumlar
Gateway ana makinesinde, aracı başına:- Depo:
~/.openclaw/agents/<agentId>/sessions/sessions.json - Dökümler:
~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl- Telegram konu oturumları:
.../<sessionId>-topic-<threadId>.jsonl
- Telegram konu oturumları:
src/config/sessions.ts üzerinden çözümler.
Depo bakımı ve disk kontrolleri
Oturum kalıcılığında,sessions.json ve döküm yapıtları için otomatik bakım kontrolleri (session.maintenance) vardır:
mode:warn(varsayılan) veyaenforcepruneAfter: eski girişler için yaş sınırı (varsayılan30d)maxEntries:sessions.jsoniçindeki giriş üst sınırı (varsayılan500)rotateBytes:sessions.jsonfazla büyüdüğünde döndürme yapar (varsayılan10mb)resetArchiveRetention:*.reset.<timestamp>döküm arşivleri için saklama süresi (varsayılan:pruneAfterile aynı;falsetemizliği devre dışı bırakır)maxDiskBytes: isteğe bağlı oturumlar dizini bütçesihighWaterBytes: temizlik sonrası isteğe bağlı hedef (varsayılanmaxDiskBytesdeğerinin%80’i)
mode: "enforce"):
- Önce en eski arşivlenmiş veya sahipsiz döküm yapıtlarını kaldırır.
- Hâlâ hedefin üzerindeyse, en eski oturum girdilerini ve bunların döküm dosyalarını çıkarır.
- Kullanım
highWaterBytesdeğerine eşit veya altına inene kadar devam eder.
mode: "warn" durumunda 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/dökümleri oluşturur ve bunlar için ayrılmış saklama kontrolleri vardır:cron.sessionRetention(varsayılan24h) eski yalıtılmış cron çalıştırma oturumlarını oturum deposundan temizler (falsedevre 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 kalıplar:
- Ana/doğrudan sohbet (aracı 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ıysa)
Oturum kimlikleri (sessionId)
Her sessionKey, geçerli bir sessionId değerini işaret eder (konuşmayı sürdüren döküm dosyası).
Temel kurallar:
- Sıfırlama (
/new,/reset), osessionKeyiçin yeni birsessionIdoluşturur. - Günlük sıfırlama (varsayılan olarak Gateway ana makinesinin yerel saatinde sabah 4:00) sıfırlama sınırından sonraki ilk mesajda yeni bir
sessionIdoluşturur. - Boşta kalma sona ermesi (
session.reset.idleMinutesveya eskisession.idleMinutes), boşta kalma penceresinden sonra bir mesaj geldiğinde yeni birsessionIdoluşturur. Günlük + boşta kalma birlikte yapılandırılmışsa hangisi önce sona ererse o geçerli olur. - İş parçacığı üst çatallanma koruması (
session.parentForkMaxTokens, varsayılan100000), üst oturum zaten çok büyük olduğunda üst döküm çatallanmasını atlar; yeni iş parçacığı 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)
Depodaki değer türü, src/config/sessions.ts içindeki SessionEntry’dir.
Temel alanlar (tam liste değildir):
sessionId: geçerli döküm kimliği (eğersessionFileayarlı değilse dosya adı bundan türetilir)updatedAt: son etkinlik zaman damgasısessionFile: isteğe bağlı açık döküm 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ı (yaklaşık / 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ığı andaki sıkıştırma sayısı
Döküm yapısı (*.jsonl)
Dökümler, @mariozechner/pi-coding-agent paketinin SessionManager bileşeni tarafından yönetilir.
Dosya JSONL biçimindedir:
- İlk satır: oturum üst bilgisi (
type: "session",id,cwd,timestamp, isteğe bağlıparentSessioniçerir) - Sonrasında:
id+parentIdiçeren oturum girdileri (ağaç)
message: kullanıcı/asistan/toolResult mesajlarıcustom_message: model bağlamına giren eklenti tarafından enjekte edilen mesajlar (UI’de gizlenebilir)custom: model bağlamına girmeyen eklenti durumucompaction:firstKeptEntryIdvetokensBeforeiçeren kalıcı sıkıştırma özetibranch_summary: ağaç dalında gezinirken kalıcı özet
SessionManager kullanır.
Bağlam pencereleri ile 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 kayan 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, konuşmanın daha eski kısmını döküm içinde kalıcı bircompaction girdisi halinde özetler ve son mesajları olduğu gibi bırakır.
Sıkıştırmadan sonra gelecek dönüşler ş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ştirmesi
OpenClaw uzun bir dökümü sıkıştırma parçalarına böldüğünde, asistan araç çağrılarını eşleşentoolResult girdileriyle birlikte tutar.
- Token payı bölünmesi 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 tool-result bloğu başka türlü parçayı hedefin üstüne çıkaracaksa, OpenClaw bu bekleyen araç bloğunu korur ve özetlenmemiş kuyruğu bozulmadan tutar.
- İptal edilmiş/hatalı araç çağrısı blokları bekleyen bölmeyi açık tutmaz.
Otomatik sıkıştırma ne zaman gerçekleşir (Pi çalışma zamanı)
Gömülü Pi ajanında otomatik sıkıştırma iki durumda tetiklenir:- Taşma kurtarma: model 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 dönüşten sonra, şu durumda:
contextTokens > contextWindow - reserveTokens
Burada:
contextWindow, modelin bağlam penceresidirreserveTokens, istemler + bir sonraki model çıktısı için ayrılan boşluktur
Sıkıştırma ayarları (reserveTokens, keepRecentTokens)
Pi’nin sıkıştırma ayarları Pi ayarları içinde yer alır:
- Eğer
compaction.reserveTokens < reserveTokensFloorise, OpenClaw bunu yükseltir. - Varsayılan taban
20000token’dır. - Tabanı devre dışı bırakmak için
agents.defaults.compaction.reserveTokensFloor: 0ayarlayın. - Zaten daha yüksekse, OpenClaw buna dokunmaz.
src/agents/pi-settings.ts içindeki ensurePiCompactionReserveTokens()
(src/agents/pi-embedded-runner.ts tarafından çağrılır).
Kullanıcıya görünür yüzeyler
Sıkıştırmayı ve oturum durumunu şu yollarla 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 işlemleri (NO_REPLY)
OpenClaw, kullanıcının ara çıktıyı görmemesi gereken arka plan görevleri için “sessiz” dönüşleri destekler.
Kural:
- Asistan, çıktısına tam sessiz belirteç olan
NO_REPLY/no_replyile başlayarak “kullanıcıya yanıt gönderme” anlamını belirtir. - OpenClaw bunu teslim katmanında ayıklar/baskılar.
- Tam sessiz belirteç baskılaması büyük/küçük harfe duyarsızdır; dolayısıyla tüm yük yalnızca sessiz belirteç olduğunda
NO_REPLYveno_replyikisi de geçerlidir. - Bu yalnızca gerçekten arka plan/teslimatsız dönüşler içindir; sıradan eyleme geçirilebilir 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 baskılar; böylece sessiz işlemler dönüş ortasında kısmi çıktı sızdırmaz.
Sıkıştırma öncesi “bellek boşaltma” (uygulandı)
Amaç: otomatik sıkıştırma gerçekleşmeden önce, kalıcı durumu diske yazan sessiz ve etkensel bir dönüş çalıştırmak (ör. ajan çalışma alanındamemory/YYYY-MM-DD.md) ki sıkıştırma kritik bağlamı silemesin.
OpenClaw eşik öncesi boşaltma yaklaşımını kullanır:
- Oturum bağlam kullanımını izleyin.
- Bir “yumuşak eşiği” (Pi’nin sıkıştırma eşiğinin altında) geçtiğinde, ajana sessiz bir “şimdi belleğe yaz” yönergesi çalıştırın.
- Kullanıcının hiçbir şey görmemesi için tam sessiz belirteç
NO_REPLY/no_replykullanın.
agents.defaults.compaction.memoryFlush):
enabled(varsayılan:true)softThresholdTokens(varsayılan:4000)prompt(boşaltma dönüşü için kullanıcı mesajı)systemPrompt(boşaltma dönüşü için eklenen ek sistem istemi)
- Varsayılan prompt/system prompt, teslimatı baskılamak için bir
NO_REPLYipucu içerir. - Boşaltma her sıkıştırma döngüsünde bir kez çalışır (
sessions.jsoniçinde izlenir). - Boşaltma yalnızca gömülü Pi oturumları için ç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 kalıpları için bkz. Memory.
session_before_compact kancası sunar, ancak OpenClaw’un
boşaltma mantığı bugün Gateway tarafında yer alır.
Sorun giderme kontrol listesi
- Oturum anahtarı yanlış mı? /concepts/session ile başlayın ve
/statusiçindekisessionKeydeğerini doğrulayın. - Depo ile döküm eşleşmiyor mu? Gateway ana makinesini ve
openclaw statusiçinden 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
reserveTokensfazla yüksekse daha erken sıkıştırmaya neden olabilir) - tool-result şişmesi: oturum budamayı etkinleştirin/ayarlayın
- Sessiz dönüşler sızıyor mu? Yanıtın
NO_REPLYile başladığını (büyük/küçük harfe duyarsız tam belirteç) ve akış baskılama düzeltmesini içeren bir derleme kullandığınızı doğrulayın.