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
sessionKeyile 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ırmalar öncesinde 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 ön sıkıştırma çalışmalarının nereye bağlanacağı
- Sessiz bakım işleri (örn. kullanıcıya görünür çıktı üretmemesi gereken bellek yazımları)
Tek doğruluk kaynağı: Gateway
OpenClaw, oturum durumunun sahibi olan 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ıklarını yansıtmaz.
İki kalıcılık katmanı
OpenClaw, oturumları iki katmanda kalıcı hale getirir:-
Oturum deposu (
sessions.json)- Anahtar/değer haritası:
sessionKey -> SessionEntry - Küçük, değiştirilebilir, düzenlemesi (veya girdileri silmesi) güvenlidir
- Oturum meta verilerini izler (geçerli oturum kimliği, son etkinlik, anahtarlar, token sayaçları vb.)
- Anahtar/değer haritası:
-
Transkript (
<sessionId>.jsonl)- Ağaç yapılı, yalnızca eklemeli transkript (girdiler
id+parentIdiçerir) - Gerçek konuşmayı + araç çağrılarını + sıkıştırma özetlerini depolar
- Gelecek turlar için model bağlamını yeniden oluşturmakta kullanılır
- Ağaç yapılı, yalnızca eklemeli transkript (girdiler
Disk üzerindeki konumlar
Gateway ana makinesinde, ajan 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 üzerinden çözümler.
Oturum anahtarları (sessionKey)
Bir sessionKey, hangi konuşma kovasında olduğunuzu (yönlendirme + yalıtım) tanımlar.
Yaygın kalıplar:
- Ana/doğrudan sohbet (ajan 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>(aksi belirtilmedikçe)
Oturum kimlikleri (sessionId)
Her sessionKey, geçerli bir sessionId’e (konuşmayı sürdüren transkript dosyası) işaret eder.
Pratik kurallar:
- Sıfırlama (
/new,/reset), busessionKeyiçin yeni birsessionIdoluşturur. - Günlük sıfırlama (Gateway ana makinesinde varsayılan yerel saatle 04: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 penceresinden sonra bir mesaj geldiğinde yeni birsessionIdoluşturur. Günlük + boşta birlikte yapılandırıldığında, önce süresi dolan kazanır.
src/auto-reply/reply/session.ts içindeki initSessionState()’te verilir.
Oturum deposu şeması (sessions.json)
Deponun değer türü, src/config/sessions.ts içindeki SessionEntry’dır.
Temel alanlar (kapsamlı değildir):
sessionId: geçerli transkript kimliği (dosya adı,sessionFileayarlanmadıkça buradan türetilir)updatedAt: son etkinlik zaman damgasısessionFile: isteğe bağlı açık transkript yol geçersiz kılmachatType:direct | group | room(UI’lere ve gönderim politikasına yardımcı olur)provider,subject,room,space,displayName: grup/kanal etiketleme 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 ön sıkıştırma bellek boşaltmasını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’in SessionManager’i tarafından yönetilir.
Dosya JSONL’dir:
- İlk satır: oturum başlığı (
type: "session";id,cwd,timestamp, isteğe bağlıparentSessioniçerir) - Sonrasında:
id+parentId(ağaç) ile oturum girdileri
message: kullanıcı/asistan/toolResult mesajlarıcustom_message: modele bağlama giren uzantı tarafından enjekte edilen mesajlar (UI’den gizlenebilir)custom: modele bağlama girmeyen uzantı durumucompaction:firstKeptEntryIdvetokensBeforeiçeren kalıcı sıkıştırma özetibranch_summary: ağaç dalında gezinirken kalıcı özet
SessionManager’i kullanır.
Bağlam pencereleri ve izlenen token’lar
İki farklı kavram önemlidir:- Model bağlam penceresi: model başına katı üst sınır (modelin görebildiği token’lar)
- Oturum deposu sayaçları:
sessions.jsoniçine yazılan döngüsel istatistikler (/status ve 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; katı bir garanti olarak ele almayın.
Compaction: what it is
Sıkıştırma, daha eski konuşmayı transkriptte kalıcı bircompaction girdisi olarak özetler ve yakın mesajları olduğu gibi bırakır.
Sıkıştırmadan sonra, gelecek turlar şunları görür:
- Sıkıştırma özeti
firstKeptEntryId’ten sonraki mesajlar
Otomatik sıkıştırma ne zaman olur (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 → sıkıştır → yeniden dene.
- Eşik bakımı: başarılı bir turdan sonra, şu koşulda:
contextTokens > contextWindow - reserveTokens
Burada:
contextWindow, modelin bağlam penceresidirreserveTokens, istemler + bir sonraki model çıktısı için ayrılan baş boşluktur
Sıkıştırma ayarları (reserveTokens, keepRecentTokens)
Pi’nin sıkıştırma ayarları Pi ayarlarında yer alır:
compaction.reserveTokens < reserveTokensFloorise, OpenClaw 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 dokunmaz.
src/agents/pi-settings.ts içindeki ensurePiCompactionReserveTokens()
(src/agents/pi-embedded-runner.ts’dan çağrılır).
Kullanıcıya görünen yüzeyler
Sıkıştırmayı ve oturum durumunu şuradan 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şleri (NO_REPLY)
OpenClaw, kullanıcının ara çıktıları görmemesi gereken arka plan görevleri için “sessiz” turları destekler.
Convention:
- Asistan çıktısına “kullanıcıya yanıt teslim etme” anlamına gelen
NO_REPLYile başlar. - OpenClaw, teslim katmanında bunu ayıklar/bastırır.
2026.1.10 itibarıyla, OpenClaw ayrıca bir kısmi 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.
Ön sıkıştırma “bellek boşaltma” (uygulandı)
Amaç: otomatik sıkıştırma gerçekleşmeden önce, kalıcı durumu diske yazan sessiz, ajan temelli bir tur çalıştırmak (örn. ajan çalışma alanındakimemory/YYYY-MM-DD.md) ki sıkıştırma kritik bağlamı silemesin.
OpenClaw eşik öncesi boşaltma yaklaşımını kullanır:
- Monitor session context usage.
- “Yumuşak eşik” (Pi’nin sıkıştırma eşiğinin altında) aşıldığında, ajana sessiz bir “şimdi belleği yaz” yönergesi çalıştırır.
- Kullanıcının hiçbir şey görmemesi için
NO_REPLYkullanılır.
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 ekstra sistem istemi)
- Varsayılan istem/sistem istemi, teslimi bastırmak için bir
NO_REPLYipucu içerir. - Boşaltma, her sıkıştırma döngüsünde bir kez çalışır (
sessions.json’da izlenir). - Boşaltma yalnızca gömülü Pi oturumları için çalışır (CLI arka uçları atlar).
- Oturum çalışma alanı salt okunur olduğunda 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ı da sunar; ancak OpenClaw’ın
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çindekisessionKey’ı doğrulayın. - Depo ile transkript uyuşmazlığı mı? Gateway ana makinesini ve
openclaw status’den depo yolunu doğrulayın. - Sıkıştırma spam’i mi? Şunları kontrol edin:
- model bağlam penceresi (çok küçük)
- 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ızdırıyor mu? Yanıtın
NO_REPLY(tam belirteç) ile başladığını ve akış bastırma düzeltmesini içeren bir derlemede olduğunuzu doğrulayın.