Sessionshantering
OpenClaw behandlar en direktchatt per agent som primär. Direktchattar kollapsar tillagent:<agentId>:<mainKey> (standard main), medan grupp/kanalchattar får sina egna nycklar. session.mainKey är hedrad.
Använd session.dmScope för att styra hur direktmeddelanden grupperas:
main(standard): alla DM delar huvudsessionskontinuitet.per-peer: isolera per avsändar-id över kanaler.per-channel-peer: isolera per kanal + avsändare (rekommenderas för inkorgar med flera användare).per-account-channel-peer: isolera från konto + kanal + avsändare (rekommenderas för multi-account inkorgar). Användsession. dentityLinksför att kartlägga leverantörs-prefixed kamrat-ids till en kanonisk identitet så att samma person delar en DM-session över kanaler när man använderper-peer,per-channel-peer, ellerper-account-channel-peer.
Säker DM-läge (rekommenderas för uppsättningar med flera användare)
Säkerhetsvarning: Om din agent kan ta emot DMs från flera personer, bör du starkt överväga att aktivera säkert DM-läge. Utan det delar alla användare samma kontext som kan läcka privat information mellan användare.Exempel på problemet med standardinställningar:
- Alice (
<SENDER_A>) meddelar din agent om ett privat ämne (till exempel ett läkarbesök) - Bob (
<SENDER_B>) meddelar din agent och frågar ”Vad pratade vi om?” - Eftersom båda DM delar samma session kan modellen svara Bob med hjälp av Alices tidigare kontext.
dmScope för att isolera sessioner per användare:
- Du har parningsgodkännanden för mer än en avsändare
- Du använder en DM-tillåtelselista med flera poster
- Du sätter
dmPolicy: "open" - Flera telefonnummer eller konton kan kontakta din agent
- Standard är
dmScope: "main"för kontinuitet (alla DMs delar huvudsessionen). Detta är bra för enanvändares inställningar. - För inkorgar med flera konton på samma kanal, föredra
per-account-channel-peer. - Om samma person kontaktar dig via flera kanaler, använd
session.identityLinksför att slå samman deras DM-sessioner till en kanonisk identitet. - Du kan verifiera dina DM-inställningar med
openclaw security audit(se security).
Gateway är sanningskällan
Alla sessionsstater är ägda av gateway (“master” OpenClaw). UI-klienter (macOS app, WebChat, etc.) måste fråga gateway för sessionslistor och token räknas istället för att läsa lokala filer.- I fjärrläge finns den sessionslagring du bryr dig om på den fjärranslutna gateway-värden, inte på din Mac.
- Tokenantal som visas i UIs kommer från gatewayens butiksfält (
inputTokens,outputTokens,totalTokens,contextTokens). Klienter tolkar inte JSONL avskrifter för att “fixa upp” summor.
Var tillstånd lagras
- På gateway-värden:
- Lagringsfil:
~/.openclaw/agents/<agentId>/sessions/sessions.json(per agent).
- Lagringsfil:
- Transkript:
~/.openclaw/agents/<agentId>/sessions/<SessionId>.jsonl(Telegram-ämnessessioner använder.../<SessionId>-topic-<threadId>.jsonl). - Butiken är en karta
sessionKey -> { sessionId, updatedAt, ... }. Att ta bort poster är säkert; de återskapas på begäran. - Grupposter kan innehålla
displayName,channel,subject,roomochspaceför att märka sessioner i UI:n. - Sessionsposter innehåller
origin-metadata (etikett + routningstips) så att UI:n kan förklara var en session kommer ifrån. - OpenClaw läser inte äldre Pi/Tau-sessionsmappar.
Sessionsrensning
OpenClaw trims gamla verktygsresultat från kontexten i minnet precis innan LLM-samtal som standard. Detta skriver inte om JSONL-historik. Se /concepts/session-pruning.Förkompaktering: minnesrensning
När en session närmar sig automatisk komprimering kan OpenClaw köra en tyst minnesfärg sväng som påminner modellen om att skriva hållbara anteckningar till disken. Detta körs bara när arbetsytan är skrivbar. Se Memory och Compaction.Mappning av transporter → sessionsnycklar
- Direktchattar följer
session.dmScope(standardmain).main:agent:<agentId>:<mainKey>(kontinuitet över enheter/kanaler).- Flera telefonnummer och kanaler kan mappas till samma agent-huvudnyckel; de fungerar som transporter in i en konversation.
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 är som standarddefault).- Om
session.identityLinksmatchar ett leverantörsprefixat peer-id (till exempeltelegram:123), ersätter den kanoniska nyckeln<peerId>så att samma person delar en session över kanaler.
- Gruppchattar isolerar tillstånd:
agent:<agentId>:<channel>:group:<id>(rum/kanaler använderagent:<agentId>:<channel>:channel:<id>).- Telegram-forumämnen lägger till
:topic:<threadId>till grupp-id:t för isolering. - Äldre
group:<id>-nycklar känns fortfarande igen för migrering.
- Telegram-forumämnen lägger till
- Inkommande kontexter kan fortfarande använda
group:<id>; kanalen härleds frånProvideroch normaliseras till den kanoniskaagent:<agentId>:<channel>:group:<id>-formen. - Andra källor:
- Cron-jobb:
cron:<job.id> - Webhooks:
hook:<uuid>(om inte uttryckligen satt av hooken) - Node-körningar:
node-<nodeId>
- Cron-jobb:
Livscykel
- Återställningspolicy: sessioner återanvänds tills de löper ut, och utgång utvärderas vid nästa inkommande meddelande.
- Daglig återställning: Standard är 4:00 AM lokal tid på gateway-värden. En session är föråldrad när dess senaste uppdatering är tidigare än den senaste dagliga återställningstiden.
- Idle reset (valfritt):
idleMinuteslägger till ett glidande inaktiv fönster. När både dagliga och inaktiva återställningar är konfigurerade, tvingar oavsett vilken som går ut först en ny session. - Äldre endast-inaktivitet: om du sätter
session.idleMinutesutan någonsession.reset/resetByType-konfiguration förblir OpenClaw i endast-inaktivitetsläge för bakåtkompatibilitet. - Åsidosättningar per typ (valfritt):
resetByTypelåter dig åsidosätta policyn fördirect-,group- ochthread-sessioner (thread = Slack/Discord-trådar, Telegram-ämnen, Matrix-trådar när de tillhandahålls av anslutningen). - Överstyrning per kanal (valfritt):
resetByChannelåsidosätter återställningspolicyn för en kanal (gäller alla sessionstyper för den kanalen och har företräde framförreset/resetByType). - Återställ utlösare: exakt
/neweller/reset(plus eventuella extramaterial iresetTriggers) starta ett nytt sessions-id och skicka resten av meddelandet genom./new <model>accepterar ett modellalias,provider/model, eller leverantörsnamn (luddig match) för att ställa in den nya sessionsmodellen. Om/neweller/resetskickas ensam, kör OpenClaw en kort “hej” hälsning sväng för att bekräfta återställningen. - Manuell återställning: ta bort specifika nycklar från lagringen eller ta bort JSONL-transkriptet; nästa meddelande återskapar dem.
- Isolerade cron-jobb skapar alltid en ny
sessionIdper körning (ingen inaktivitetsåteranvändning).
Sändpolicy (valfritt)
Blockera leverans för specifika sessionstyper utan att lista enskilda id:n./send on→ tillåt för denna session/send off→ neka för denna session/send inherit→ rensa överstyrning och använd konfigregler Skicka dessa som fristående meddelanden så att de registreras.
Konfiguration (valfritt exempel på namnbyte)
Inspektering
openclaw status— visar lagringsväg och senaste sessioner.openclaw sessions --json— dumpar varje post (filtrera med--active <minutes>).openclaw gateway call sessions.list --params '{}'— hämtar sessioner från den körande gatewayn (använd--url/--tokenför åtkomst till fjärr-gateway).- Skicka
/statussom ett fristående meddelande i chatten för att se om agenten är nåbar, hur mycket av sessionskontexten som används, aktuella thinking/verbose-växlar och när dina WhatsApp-webbuppgifter senast uppdaterades (hjälper att upptäcka behov av omkoppling). - Skicka
/context listeller/context detailför att se vad som finns i systemprompten och injicerade arbetsytefiler (och de största kontextbidragen). - Skicka
/stopsom ett fristående meddelande för att avbryta den pågående körningen, rensa köade uppföljningar för den sessionen och stoppa eventuella subagent-körningar som startats från den (svaret inkluderar antalet stoppade). - Skicka
/compact(valfria instruktioner) som ett fristående meddelande för att sammanfatta äldre sammanhang och frigöra fönsterutrymme. Se /concepts/compaction. - JSONL-transkript kan öppnas direkt för att granska fullständiga turer.
Tips
- Håll den primära nyckeln dedikerad till 1:1-trafik; låt grupper behålla sina egna nycklar.
- Vid automatiserad städning, ta bort enskilda nycklar i stället för hela lagringen för att bevara kontext på andra ställen.
Sessionsursprungsmetadata
Varje sessionspost registrerar var den kom ifrån (bästa möjliga) iorigin:
label: mänsklig etikett (löst från konversationsetikett + gruppämne/kanal)provider: normaliserat kanal-id (inklusive tillägg)from/to: råa routnings-id:n från det inkommande kuvertetaccountId: leverantörskonto-id (vid flera konton)threadId: tråd/tråd-id när kanalen stöder den Ursprungsfälten är befolkade för direkta meddelanden, kanaler och grupper. Om en connector endast uppdaterar leveransvägen (till exempel för att hålla en DM huvudsession färsk), det bör fortfarande ge inkommande sammanhang så sessionen håller sin förklarare metadata. Tillägg kan göra detta genom att skickaConversationLabel,GroupSubject,GroupChannel,GroupSpace, ochSenderNamei det inkommande sammanhanget och ringerrecordSessionMetaFromInbound(eller skickar samma kontext tillupdateLastRoute).