Manajemen Sesi
OpenClaw memperlakukan satu sesi obrolan langsung (DM) per agen sebagai yang utama. Obrolan langsung digabungkan keagent:<agentId>:<mainKey> (default main), sementara obrolan grup/saluran mendapatkan kunci mereka sendiri. session.mainKey dihormati.
Gunakan session.dmScope untuk mengontrol bagaimana pesan langsung dikelompokkan:
main(default): semua DM berbagi sesi utama yang sama untuk kesinambungan konteks.per-peer: isolasi berdasarkan ID pengirim lintas saluran.per-channel-peer: isolasi berdasarkan saluran + pengirim (direkomendasikan untuk kotak masuk multi-pengguna).per-account-channel-peer: isolasi berdasarkan akun + saluran + pengirim (direkomendasikan untuk kotak masuk multi-akun). Gunakansession.identityLinksuntuk memetakan ID pengirim berawalan penyedia ke identitas kanonik sehingga orang yang sama berbagi sesi DM lintas saluran saat menggunakan modeper-peer,per-channel-peer, atauper-account-channel-peer.
Mode DM Aman (Direkomendasikan untuk pengaturan multi-pengguna)
Peringatan Keamanan: Jika agen Anda dapat menerima DM dari banyak orang, Anda sangat disarankan untuk mengaktifkan mode DM aman. Tanpa mode ini, semua pengguna berbagi konteks percakapan yang sama, yang dapat membocorkan informasi pribadi antar pengguna.Contoh masalah dengan pengaturan default:
- Alice (
<PENGIRIM_A>) mengirim pesan ke agen Anda tentang topik pribadi (misalnya, janji temu medis). - Bob (
<PENGIRIM_B>) mengirim pesan ke agen Anda dan bertanya “Apa yang kita bicarakan tadi?” - Karena kedua DM tersebut berbagi sesi yang sama, model mungkin menjawab Bob menggunakan konteks sebelumnya dari Alice.
dmScope untuk mengisolasi sesi per pengguna:
- Anda memiliki persetujuan pairing untuk lebih dari satu pengirim.
- Anda menggunakan daftar izinkan (allowlist) DM dengan banyak entri.
- Anda menyetel
dmPolicy: "open". - Beberapa nomor telepon atau akun dapat mengirim pesan ke agen Anda.
- Defaultnya adalah
dmScope: "main"untuk kesinambungan (semua DM berbagi sesi utama). Ini cocok untuk pengaturan satu pengguna. - Untuk kotak masuk multi-akun pada saluran yang sama, lebih disarankan menggunakan
per-account-channel-peer. - Jika orang yang sama menghubungi Anda di beberapa saluran, gunakan
session.identityLinksuntuk menggabungkan sesi DM mereka menjadi satu identitas kanonik. - Anda dapat memverifikasi pengaturan DM Anda dengan
openclaw security audit(lihat keamanan).
Gateway adalah Sumber Kebenaran
Semua status sesi dimiliki oleh gateway (OpenClaw “induk”). Klien UI (aplikasi macOS, WebChat, dll.) harus menanyakan gateway untuk daftar sesi dan jumlah token, bukannya membaca file lokal.- Dalam mode jarak jauh (remote), penyimpanan sesi yang Anda kelola berada di host gateway jarak jauh, bukan di Mac Anda.
- Jumlah token yang ditampilkan di UI berasal dari bidang penyimpanan gateway (
inputTokens,outputTokens,totalTokens,contextTokens). Klien tidak mengurai transkrip JSONL untuk “memperbaiki” total tersebut.
Lokasi Penyimpanan Status
- Di host gateway:
- File store:
~/.openclaw/agents/<agentId>/sessions/sessions.json(per agen).
- File store:
- Transkrip:
~/.openclaw/agents/<agentId>/sessions/<SessionId>.jsonl(sesi topik Telegram menggunakan.../<SessionId>-topic-<threadId>.jsonl). - Store adalah peta (map)
sessionKey -> { sessionId, updatedAt, ... }. Menghapus entri aman untuk dilakukan; entri tersebut akan dibuat ulang saat dibutuhkan. - Entri grup mungkin menyertakan
displayName,channel,subject,room, danspaceuntuk melabeli sesi di UI. - Entri sesi menyertakan metadata
origin(label + petunjuk perutean) sehingga UI dapat menjelaskan dari mana sesi berasal. - OpenClaw tidak membaca folder sesi Pi/Tau versi lama.
Pemangkasan Sesi (Pruning)
OpenClaw memangkas hasil alat lama dari konteks dalam memori tepat sebelum panggilan LLM secara default. Ini tidak menulis ulang riwayat JSONL. Lihat /id-ID/concepts/session-pruning.Flush Memori Pra-pemadatan
Saat sesi mendekati pemadatan otomatis, OpenClaw dapat menjalankan giliran flush memori senyap yang mengingatkan model untuk menulis catatan penting ke disk. Ini hanya berjalan jika workspace dapat ditulis. Lihat Memori dan Pemadatan.Pemetaan Transport → Kunci Sesi
- Obrolan langsung mengikuti
session.dmScope(defaultmain).main:agent:<agentId>:<mainKey>(kesinambungan lintas perangkat/saluran).- Beberapa nomor telepon dan saluran dapat dipetakan ke kunci utama agen yang sama; mereka bertindak sebagai transport masuk ke satu percakapan.
per-peer:agent:<agentId>:dm:<peerId>.per-channel-peer:agent:<agentId>:<channel>:dm:<peerId>.per-account-channel-peer:agent:<agentId>:<channel>:<accountId>:dm:<peerId>(accountId default kedefault).- Jika
session.identityLinkscocok dengan ID pengirim berawalan penyedia (misalnyatelegram:123), kunci kanonik akan menggantikan<peerId>sehingga orang yang sama berbagi sesi lintas saluran.
- Obrolan grup mengisolasi status:
agent:<agentId>:<channel>:group:<id>(ruang/saluran menggunakanagent:<agentId>:<channel>:channel:<id>).- Forum topik Telegram menambahkan
:topic:<threadId>ke ID grup untuk isolasi. - Kunci lama
group:<id>masih dikenali untuk keperluan migrasi.
- Forum topik Telegram menambahkan
- Konteks masuk mungkin masih menggunakan
group:<id>; saluran akan disimpulkan dariProviderdan dinormalisasi ke bentuk kanonikagent:<agentId>:<channel>:group:<id>. - Sumber lainnya:
- Pekerjaan Cron:
cron:<job.id> - Webhook:
hook:<uuid>(kecuali jika diatur secara eksplisit oleh webhook) - Proses Node:
node-<nodeId>
- Pekerjaan Cron:
Siklus Hidup (Lifecycle)
- Kebijakan Reset: sesi digunakan kembali sampai kedaluwarsa, dan kedaluwarsa dievaluasi pada pesan masuk berikutnya.
- Reset Harian: default ke jam 4:00 pagi waktu lokal pada host gateway. Sebuah sesi dianggap basi jika pembaruan terakhirnya lebih lama dari waktu reset harian terbaru.
- Reset Idle (Opsional):
idleMinutesmenambahkan jendela menganggur (idle). Ketika reset harian dan idle dikonfigurasi, mana yang kedaluwarsa lebih dulu akan memaksa sesi baru. - Mode Idle-Saja (Lama): jika Anda menyetel
session.idleMinutestanpa konfigurasisession.reset/resetByType, OpenClaw tetap berada dalam mode idle-saja untuk kompatibilitas ke belakang. - Override Per Tipe (Opsional):
resetByTypememungkinkan Anda menimpa kebijakan untuk sesidirect,group, danthread(thread = utas Slack/Discord, topik Telegram, utas Matrix jika disediakan oleh konektor). - Override Per Saluran (Opsional):
resetByChannelmenimpa kebijakan reset untuk suatu saluran (berlaku untuk semua tipe sesi pada saluran tersebut dan didahulukan di atasreset/resetByType). - Pemicu Reset: perintah persis
/newatau/reset(ditambah apa pun dalamresetTriggers) memulai ID sesi baru dan meneruskan sisa pesan./new <model>menerima alias model,provider/model, atau nama penyedia (pencocokan samar) untuk menyetel model sesi baru. Jika/newatau/resetdikirim sendiri, OpenClaw menjalankan “giliran salam” singkat untuk mengonfirmasi reset. - Reset Manual: hapus kunci tertentu dari store atau hapus transkrip JSONL; pesan berikutnya akan membuatnya kembali.
- Pekerjaan cron yang terisolasi selalu membuat
sessionIdbaru per eksekusi (tidak ada penggunaan kembali sesi idle).
Kebijakan Pengiriman (Send Policy - Opsional)
Memblokir pengiriman untuk tipe sesi tertentu tanpa mencantumkan ID individu./send on→ izinkan pengiriman untuk sesi ini./send off→ tolak pengiriman untuk sesi ini./send inherit→ hapus override dan gunakan aturan konfigurasi. Kirimkan perintah ini sebagai pesan mandiri agar terdaftar.
Konfigurasi (Contoh Penggantian Nama Opsional)
Memeriksa Sesi
openclaw status— menampilkan jalur store dan sesi terbaru.openclaw sessions --json— membuang setiap entri (filter dengan--active <minutes>).openclaw gateway call sessions.list --params '{}'— mengambil sesi dari gateway yang sedang berjalan (gunakan--url/--tokenuntuk akses gateway jarak jauh).- Kirim
/statussebagai pesan mandiri dalam obrolan untuk melihat apakah agen dapat dihubungi, seberapa banyak konteks sesi yang digunakan, peralihan thinking/verbose saat ini, dan kapan kredensial WhatsApp web Anda terakhir kali disegarkan. - Kirim
/context listatau/context detailuntuk melihat apa yang ada dalam prompt sistem dan file workspace yang disuntikkan. - Kirim
/stopsebagai pesan mandiri untuk membatalkan proses saat ini, menghapus antrean tindak lanjut untuk sesi tersebut, dan menghentikan semua sub-agen yang lahir darinya. - Kirim
/compact(instruksi opsional) sebagai pesan mandiri untuk meringkas konteks lama dan membebaskan ruang jendela konteks. Lihat /id-ID/concepts/compaction. - Transkrip JSONL dapat dibuka langsung untuk meninjau secara lengkap.
Tip
- Biarkan kunci utama didedikasikan untuk lalu lintas 1:1; biarkan grup memiliki kunci mereka sendiri.
- Saat mengotomatiskan pembersihan, hapus kunci individu alih-alih seluruh store untuk menjaga konteks di tempat lain.
Metadata Asal Sesi (Session Origin)
Setiap entri sesi mencatat dari mana ia berasal (best-effort) di bagianorigin:
label: label manusia (diambil dari label percakapan + subjek grup/saluran).provider: ID saluran yang dinormalisasi (termasuk ekstensi).from/to: ID perutean asli dari amplop pesan masuk.accountId: ID akun penyedia (jika multi-akun).threadId: ID utas/topik jika saluran mendukungnya. Bidang asal ini diisi untuk pesan langsung, saluran, dan grup. Jika konektor hanya memperbarui perutean pengiriman (misalnya, untuk menjaga kesegaran sesi utama DM), ia tetap harus menyediakan konteks masuk agar sesi tetap memiliki metadata penjelasnya. Ekstensi dapat melakukan ini dengan mengirimkanConversationLabel,GroupSubject,GroupChannel,GroupSpace, danSenderNamedalam konteks masuk dan memanggilrecordSessionMetaFromInbound.