Sessiyani boshqarish¶
OpenClaw treats one direct-chat session per agent as primary. Direct chats collapse to agent:<agentId>:<mainKey> (default main), while group/channel chats get their own keys. activeMinutes?: number — faqat N daqiqa ichida yangilangan sessiyalar
session.mainKey hisobga olinadi.
main(standart): barcha DMlar uzluksizlikni ta’minlash uchun asosiy sessiyadan foydalanadi.per-peer: kanallar bo‘yicha jo‘natuvchi identifikatori asosida ajratadi.per-channel-peer: kanal + jo‘natuvchi bo‘yicha ajratadi (ko‘p foydalanuvchili kirish qutilari uchun tavsiya etiladi).per-account-channel-peer: hisob + kanal + jo‘natuvchi bo‘yicha ajratadi (ko‘p hisobli kirish qutilari uchun tavsiya etiladi).per-peer,per-channel-peeryokiper-account-channel-peerishlatilganda bir xil shaxs turli kanallarda bitta DM sessiyasidan foydalanishi uchun provayder prefiksli peer identifikatorlarini kanonik identifikatsiyaga moslashtirish maqsadidasession.identityLinksdan foydalaning.
Xavfsiz DM rejimi (ko‘p foydalanuvchili sozlamalar uchun tavsiya etiladi)¶
Xavfsizlik ogohlantirishi: Agar agentingiz bir nechta odamdan DM qabul qila olsa, xavfsiz DM rejimini yoqishni qat’iy tavsiya qilamiz. Aks holda, barcha foydalanuvchilar bir xil suhbat kontekstidan foydalanadi, bu esa foydalanuvchilar o‘rtasida shaxsiy ma’lumotlarning oshkor bo‘lishiga olib kelishi mumkin.
Standart sozlamalardagi muammo misoli:
- Alice (
<SENDER_A>) messages your agent about a private topic (for example, a medical appointment) - Bob (
<SENDER_B>) messages your agent asking "What were we talking about?" - Because both DMs share the same session, the model may answer Bob using Alice's prior context.
The fix: Set dmScope to isolate sessions per user:
// ~/.openclaw/openclaw.json
{
session: {
// Secure DM mode: isolate DM context per channel + sender.
dmScope: "per-channel-peer",
},
}
When to enable this:
- You have pairing approvals for more than one sender
- You use a DM allowlist with multiple entries
- You set
dmPolicy: "open" - Multiple phone numbers or accounts can message your agent
Notes:
- Default is
dmScope: "main"for continuity (all DMs share the main session). This is fine for single-user setups. - For multi-account inboxes on the same channel, prefer
per-account-channel-peer. - If the same person contacts you on multiple channels, use
session.identityLinksto collapse their DM sessions into one canonical identity. - You can verify your DM settings with
openclaw security audit(see security).
Gateway is the source of truth¶
All session state is owned by the gateway (the “master” OpenClaw). UI clients (macOS app, WebChat, etc.) must query the gateway for session lists and token counts instead of reading local files.
- In remote mode, the session store you care about lives on the remote gateway host, not your Mac.
- Token counts shown in UIs come from the gateway’s store fields (
inputTokens,outputTokens,totalTokens,contextTokens). Clients do not parse JSONL transcripts to “fix up” totals.
Where state lives¶
- On the gateway host:
- Store file:
~/.openclaw/agents/<agentId>/sessions/sessions.json(per agent). - Transcripts:
~/.openclaw/agents/<agentId>/sessions/<SessionId>.jsonl(Telegram topic sessions use.../<SessionId>-topic-<threadId>.jsonl). - The store is a map
sessionKey -> { sessionId, updatedAt, ... }. Deleting entries is safe; they are recreated on demand. - Group entries may include
displayName,channel,subject,room, andspaceto label sessions in UIs. - Session entries include
originmetadata (label + routing hints) so UIs can explain where a session came from. - OpenClaw does not read legacy Pi/Tau session folders.
Session pruning¶
- OpenClaw sukut bo‘yicha LLM chaqiruvlaridan oldin xotira kontekstidan eski asbob natijalarini qisqartiradi.
- Bu JSONL tarixini qayta yozmaydi. 3. Qarang: /concepts/session-pruning.
4. Oldindan kompaktlash xotira tozalashi¶
- Sessiya avtomatik kompaktlashga yaqinlashganda, OpenClaw jim xotira tozalash bosqichini ishga tushirishi mumkin,
modelga barqaror eslatmalarni diskka yozishni eslatadi. 6. Bu faqat ish maydoni yozish uchun ruxsat etilganida ishlaydi. To‘g‘ridan-to‘g‘ri xabarlar qanday guruhlanishini boshqarish uchun
session.dmScopedan foydalaning:
8. Transportlarni → sessiya kalitlariga moslash¶
-
- To‘g‘ridan-to‘g‘ri chatlar
session.dmScopega amal qiladi (sukut bo‘yichamain).
- To‘g‘ridan-to‘g‘ri chatlar
-
main:agent:<agentId>:<mainKey>(qurilmalar/kanallar bo‘ylab uzluksizlik).-
- Bir nechta telefon raqamlari va kanallar bir xil agentning asosiy kalitiga mos kelishi mumkin; ular bitta suhbatga kirish transportlari sifatida ishlaydi.
-
per-peer:agent:<agentId>:dm:<peerId>.
-
per-channel-peer:agent:<agentId>:<channel>:dm:<peerId>.
-
per-account-channel-peer:agent:<agentId>:<channel>:<accountId>:dm:<peerId>(accountIdsukut bo‘yichadefault).
-
- Agar
session.identityLinksprovayder prefiksi bilan berilgan peer id ga mos kelsa (masalantelegram:123), kanonik kalit<peerId>ni almashtiradi, shunda bir xil odam kanallar bo‘ylab bitta sessiyani ulashadi.
- Agar
-
- Guruh chatlari holatni izolyatsiya qiladi:
agent:<agentId>:<channel>:group:<id>(xona/kanallaragent:<agentId>:<channel>:channel:<id>dan foydalanadi).
- Guruh chatlari holatni izolyatsiya qiladi:
- Qarang: Memory va Compaction.
-
- Meros
group:<id>kalitlari migratsiya uchun hanuz tan olinadi.
- Meros
-
- Kiruvchi kontekstlar hanuz
group:<id>dan foydalanishi mumkin; kanalProviderdan aniqlanadi va kanonikagent:<agentId>:<channel>:group:<id>shakliga normallashtiriladi.
- Kiruvchi kontekstlar hanuz
-
- Boshqa manbalar:
-
- Cron vazifalari:
cron:<job.id>
- Cron vazifalari:
-
- Webhooklar:
hook:<uuid>(agar hook tomonidan aniq belgilab qo‘yilmagan bo‘lsa)
- Webhooklar:
-
- Node ishga tushirishlari:
node-<nodeId>
- Node ishga tushirishlari:
24. Hayotiy sikl¶
-
- Qayta o‘rnatish siyosati: sessiyalar muddati tugaguncha qayta ishlatiladi va muddati keyingi kiruvchi xabarda baholanadi.
-
- Kunlik qayta o‘rnatish: sukut bo‘yicha gateway xostidagi mahalliy vaqt bilan 4:00 AM. 27. Sessiya oxirgi yangilanishi eng so‘nggi kunlik qayta o‘rnatish vaqtidan oldin bo‘lsa, u eskirgan hisoblanadi.
-
- Bo‘sh turish bo‘yicha qayta o‘rnatish (ixtiyoriy):
idleMinutessirpanma bo‘sh turish oynasini qo‘shadi. 29. Kunlik va bo‘sh turish bo‘yicha qayta o‘rnatishlar birgalikda sozlanganida, qaysi biri avval tugasa, yangi sessiyani majbur qiladi.
- Bo‘sh turish bo‘yicha qayta o‘rnatish (ixtiyoriy):
-
- Meros faqat bo‘sh turish rejimi: agar
session.idleMinutesni hech qandaysession.reset/resetByTypekonfiguratsiyasisiz o‘rnatsangiz, OpenClaw orqaga moslik uchun faqat bo‘sh turish rejimida qoladi.
- Meros faqat bo‘sh turish rejimi: agar
-
- // ~/.openclaw/openclaw.json { session: { scope: "per-sender", // guruh kalitlarini alohida saqlash dmScope: "main", // DM uzluksizligi (umumiy inboxlar uchun per-channel-peer/per-account-channel-peer qilib o‘rnating) identityLinks: { alice: ["telegram:123456789", "discord:987654321012345678"], }, reset: { // Sukut bo‘yicha: mode=daily, atHour=4 (gateway xosti mahalliy vaqti). // Agar idleMinutes ham o‘rnatilsa, qaysi biri tezroq tugasa, o‘sha yutadi. mode: "daily", atHour: 4, idleMinutes: 120, }, resetByType: { thread: { mode: "daily", atHour: 4 }, direct: { mode: "idle", idleMinutes: 240 }, group: { mode: "idle", idleMinutes: 120 }, }, resetByChannel: { discord: { mode: "idle", idleMinutes: 10080 }, }, resetTriggers: ["/new", "/reset"], store: "~/.openclaw/agents/{agentId}/sessions/sessions.json", mainKey: "main", }, }
-
- Kanal bo‘yicha istisnolar (ixtiyoriy):
resetByChannelkanal uchun qayta o‘rnatish siyosatini bekor qiladi (shu kanal uchun barcha sessiya turlariga qo‘llanadi vareset/resetByTypedan ustun turadi).
- Kanal bo‘yicha istisnolar (ixtiyoriy):
-
- Qayta o‘rnatish triggerlari: aniq
/newyoki/reset(varesetTriggersdagi qo‘shimchalar) yangi sessiya id ni boshlaydi va xabarning qolgan qismini o‘tkazadi. 33./new <model>yangi sessiya modelini o‘rnatish uchun model aliasini,provider/modelni yoki provayder nomini (noaniq moslash) qabul qiladi. 34. Agar/newyoki/resetyolg‘iz yuborilsa, OpenClaw qayta o‘rnatishni tasdiqlash uchun qisqa “salom” tabrigini bajaradi.
- Qayta o‘rnatish triggerlari: aniq
-
- Qo‘lda qayta o‘rnatish: do‘kondan aniq kalitlarni o‘chiring yoki JSONL transkriptini olib tashlang; keyingi xabar ularni qayta yaratadi.
-
- Izolyatsiyalangan cron vazifalari har bir ishga tushishda doimo yangi
sessionIdyaratadi (bo‘sh turish bo‘yicha qayta foydalanish yo‘q).
- Izolyatsiyalangan cron vazifalari har bir ishga tushishda doimo yangi
37. Yuborish siyosati (ixtiyoriy)¶
- Muayyan sessiya turlari uchun yetkazib berishni alohida id larni sanamasdan bloklash.
39. {
session: {
sendPolicy: {
rules: [
{ action: "deny", match: { channel: "discord", chatType: "group" } },
{ action: "deny", match: { keyPrefix: "cron:" } },
],
default: "allow",
},
},
}
- Ish vaqtidagi bekor qilish (faqat egasi):
-
/send on→ ushbu sessiya uchun ruxsat berish
-
/send off→ ushbu sessiya uchun rad etish
-
/send inherit→ bekor qilishni tozalash va konfiguratsiya qoidalaridan foydalanish Bular ro‘yxatdan o‘tishi uchun alohida xabarlar sifatida yuboring.
44. Konfiguratsiya (ixtiyoriy nomni o‘zgartirish misoli)¶
48. `match.peer` (ixtiyoriy; `{ kind: direct|group|channel, id }`)
45. Tekshirish¶
-
openclaw status— do‘kon yo‘lini va so‘nggi sessiyalarni ko‘rsatadi.
-
openclaw sessions --json— barcha yozuvlarni chiqaradi (--active <minutes>bilan filtrlash).
-
openclaw gateway call sessions.list --params '{}'— ishlayotgan gateway dan sessiyalarni oladi (masofaviy gateway ga kirish uchun--url/--tokendan foydalaning).
-
- Agentga ulanilgan-ulanmaganini, sessiya kontekstidan qanchasi ishlatilayotganini, joriy fikrlash/verbose sozlamalarini va WhatsApp web hisob ma’lumotlaringiz oxirgi marta qachon yangilangani (qayta ulash ehtiyojini aniqlashga yordam beradi) ko‘rish uchun chatda
/statusni alohida xabar sifatida yuboring.
- Agentga ulanilgan-ulanmaganini, sessiya kontekstidan qanchasi ishlatilayotganini, joriy fikrlash/verbose sozlamalarini va WhatsApp web hisob ma’lumotlaringiz oxirgi marta qachon yangilangani (qayta ulash ehtiyojini aniqlashga yordam beradi) ko‘rish uchun chatda
-
- Tizim promptida va kiritilgan ish maydoni fayllarida nimalar borligini (va eng katta kontekst hissachilarini) ko‘rish uchun
/context listyoki/context detailni yuboring.
- Tizim promptida va kiritilgan ish maydoni fayllarida nimalar borligini (va eng katta kontekst hissachilarini) ko‘rish uchun
-
- Joriy ishni bekor qilish, ushbu sessiya uchun navbatdagi kuzatuvlarni tozalash va undan ishga tushirilgan barcha sub-agent ishlarini to‘xtatish uchun
/stopni alohida xabar sifatida yuboring (javobda to‘xtatilganlar soni ko‘rsatiladi).
- Joriy ishni bekor qilish, ushbu sessiya uchun navbatdagi kuzatuvlarni tozalash va undan ishga tushirilgan barcha sub-agent ishlarini to‘xtatish uchun
-
- Eski kontekstni qisqartirib xulosa qilish va oynada joy bo‘shatish uchun
/compact(ixtiyoriy ko‘rsatmalar bilan) ni alohida xabar sifatida yuboring. 3. /concepts/compaction ni ko‘ring.
- Eski kontekstni qisqartirib xulosa qilish va oynada joy bo‘shatish uchun
-
- To‘liq navbatlarni ko‘rib chiqish uchun JSONL transkriptlarini bevosita ochish mumkin.
5. Maslahatlar¶
-
- Asosiy kalitni 1:1 trafik uchun ajratib qo‘ying; guruhlar o‘z kalitlariga ega bo‘lsin.
-
- Tozalashni avtomatlashtirganda, boshqa joylardagi kontekstni saqlab qolish uchun butun omborni emas, balki alohida kalitlarni o‘chiring.
8. Sessiya kelib chiqishi metama’lumotlari¶
- Har bir sessiya yozuvi qayerdan kelganini (imkon qadar)
originda qayd etadi:
-
label: inson uchun tushunarli yorliq (suhbat yorlig‘i + guruh mavzusi/kanalidan aniqlanadi)
-
provider: normallashtirilgan kanal identifikatori (kengaytmalarni ham o‘z ichiga oladi)
-
from/to: kiruvchi konvertdagi xom marshrutlash identifikatorlari
-
accountId: provayder hisob identifikatori (ko‘p hisobli bo‘lsa)
-
threadId: kanal qo‘llab-quvvatlaganda mavzu/ip identifikatori Kelib chiqish maydonlari to‘g‘ridan-to‘g‘ri xabarlar, kanallar va guruhlar uchun to‘ldiriladi. 15. Agar ulagich faqat yetkazib berish marshrutlashini yangilasa (masalan, DM asosiy sessiyasini yangilab turish uchun), sessiya o‘zining tushuntiruvchi metama’lumotlarini saqlab qolishi uchun baribir kiruvchi kontekstni taqdim etishi kerak. 16. Kengaytmalar buni kiruvchi kontekstdaConversationLabel,GroupSubject,GroupChannel,GroupSpacevaSenderNameyuborish hamdarecordSessionMetaFromInboundni chaqirish (yoki xuddi shu kontekstniupdateLastRoutega uzatish) orqali bajarishi mumkin.