Sessionshåndtering¶
OpenClaw behandler en direkte chat session per agent som primært. Direkte chats kollaps til agent:<agentId>:<mainKey> (standard main), mens gruppe/kanal chats får deres egne nøgler. session.mainKey er hædret.
Brug session.dmScope til at styre, hvordan direkte beskeder grupperes:
main(standard): alle DM’er deler hovedsessionen for kontinuitet.per-peer: isolér efter afsender-id på tværs af kanaler.per-channel-peer: isolér efter kanal + afsender (anbefalet til indbakker med flere brugere).per-account-channel-peer: isolere efter konto + kanal + afsender (anbefales til multi-konto indbakker). Brugsession. dentityLinksfor at kortlægge udbyder-prefixed peer ids til en kanonisk identitet, så den samme person deler en DM-session på tværs af kanaler, når du brugerper-peer,per-channel-peer, ellerper-account-channel-peer.
Sikker DM-tilstand (anbefalet til opsætninger med flere brugere)¶
Sikkerhedsadvarsel: Hvis din agent kan modtage DM'er fra flere personer, bør du på det kraftigste overveje at aktivere sikker DM-tilstand. Uden det deler alle brugere den samme kontekst, som kan lække private oplysninger mellem brugerne.
Eksempel på problemet med standardindstillinger:
- Alice (
<SENDER_A>) skriver til din agent om et privat emne (for eksempel en lægeaftale) - Bob (
<SENDER_B>) skriver til din agent og spørger: “Hvad talte vi om?” - Fordi begge DM’er deler den samme session, kan modellen svare Bob ved at bruge Alices tidligere kontekst.
Løsningen: Sæt dmScope til at isolere sessioner pr. bruger:
// ~/.openclaw/openclaw.json
{
session: {
// Secure DM mode: isolate DM context per channel + sender.
dmScope: "per-channel-peer",
},
}
Hvornår bør dette aktiveres:
- Du har parringsgodkendelser for mere end én afsender
- Du bruger en DM-tilladelsesliste med flere poster
- Du sætter
dmPolicy: "open" - Flere telefonnumre eller konti kan skrive til din agent
Noter:
- Standard er
dmScope: "main"for kontinuitet (alle DMs deler hovedsessionen). Dette er fint for enkelt-bruger opsætninger. - Til indbakker med flere konti på samme kanal bør du foretrække
per-account-channel-peer. - Hvis den samme person kontakter dig på flere kanaler, brug
session.identityLinkstil at samle deres DM-sessioner i én kanonisk identitet. - Du kan verificere dine DM-indstillinger med
openclaw security audit(se security).
Gateway er sandhedskilden¶
Alle sessionstilstande er ** ejet af porten ** (“master” OpenClaw). UI klienter (macOS app, WebChat osv.) skal forespørge gatewayen for sessionslister og token tæller i stedet for at læse lokale filer.
- I remote-tilstand ligger det sessionlager, du skal bruge, på den eksterne gateway-vært – ikke på din Mac.
- Token tæller vist i UI'er kommer fra gatewayens butiksfelter (
inputTokens,outputTokens,totalTokens,contextTokens). Kunderne fortolker ikke JSONL transkripter til “fix up” totaler.
Hvor tilstanden ligger¶
- På gateway-værten:
- Lagerfil:
~/.openclaw/agents/<agentId>/sessions/sessions.json(pr. agent). - Transskripter:
~/.openclaw/agents/<agentId>/sessions/<SessionId>.jsonl(Telegram-emnesessioner bruger.../<SessionId>-topic-<threadId>.jsonl). - Butikken er et kort 'sessionKey -> { sessionId, updatedAt, ... }`. Sletning af poster er sikker, de er genskabt efter efterspørgsel.
- Gruppeposter kan inkludere
displayName,channel,subject,roomogspacetil at mærke sessioner i UI’er. - Sessionsposter inkluderer
origin-metadata (label + routing-hints), så UI’er kan forklare, hvor en session stammer fra. - OpenClaw læser ikke ældre Pi/Tau-sessionsmapper.
Sessionbeskæring¶
OpenClaw trimmer ** gamle værktøjs resultater** fra in-memory konteksten lige før LLM opkald som standard. Dette gør ikke omskrive JSONL historik. Se /concepts/session-pruning.
Pre-komprimering af hukommelsesflush¶
Når en session nærmer sig automatisk komprimering, kan OpenClaw køre en ** tavs hukommelse flush** drev, der minder modellen om at skrive holdbare noter til disken. Dette kører kun, når arbejdsområdet er skrivbart. Se Memory og Compaction.
Mapping af transports → sessionsnøgler¶
- Direkte chats følger
session.dmScope(standardmain). main:agent:<agentId>:<mainKey>(kontinuitet på tværs af enheder/kanaler).- Flere telefonnumre og kanaler kan mappe til den samme primære agentnøgle; de fungerer som transports ind i én samtale.
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 har standardværdiendefault).- Hvis
session.identityLinksmatcher et udbyder-præfikset peer-id (for eksempeltelegram:123), erstatter den kanoniske nøgle<peerId>, så den samme person deler en session på tværs af kanaler. - Gruppechats isolerer tilstand:
agent:<agentId>:<channel>:group:<id>(rum/kanaler brugeragent:<agentId>:<channel>:channel:<id>). - Telegram-forumemner tilføjer
:topic:<threadId>til gruppe-id’et for isolation. - Ældre
group:<id>-nøgler genkendes stadig til migrering. - Indgående kontekster kan stadig bruge
group:<id>; kanalen udledes fraProviderog normaliseres til den kanoniskeagent:<agentId>:<channel>:group:<id>-form. - Andre kilder:
- Cron-jobs:
cron:<job.id> - Webhooks:
hook:<uuid>(medmindre den eksplicit sættes af hooken) - Node-kørsler:
node-<nodeId>
Livscyklus¶
- Nulstillingspolitik: sessioner genbruges, indtil de udløber, og udløb evalueres ved den næste indgående besked.
- Daglig nulstilling: standard 4:00 AM lokal tid på gateway vært. En session er forsvundet, når dens sidste opdatering er tidligere end den seneste daglige nulstillingstid.
- Idle reset (valgfri):
idleMinutestilføjer et glidende tomgangsvindue. Når både daglig og inaktiv nulstilling er konfigureret, afhængigt af hvad der udløber først tvinger en ny session. - Ældre kun-inaktiv: hvis du sætter
session.idleMinutesuden nogensession.reset/resetByType-konfiguration, forbliver OpenClaw i kun-inaktiv-tilstand af hensyn til bagudkompatibilitet. - Overrides pr. type (valgfrit):
resetByTypelader dig tilsidesætte politikken fordirect,groupogthread-sessioner (thread = Slack/Discord-tråde, Telegram-emner, Matrix-tråde når leveret af connectoren). - Tilsidesættelser pr. kanal (valgfrit):
resetByChanneltilsidesætter nulstillingspolitikken for en kanal (gælder for alle sessionstyper for den kanal og har forrang overreset/resetByType). - Nulstil udløsere: eksakt
/neweller/reset(plus eventuelle ekstras iresetTriggers) starte en ny session id og videregive resten af meddelelsen gennem./new <model>accept a model alias,provider/model, or provider name (fuzzy match) to set the new session model. Hvis/neweller/reseter sendt alene, OpenClaw kører en kort “hello” hilsen tur for at bekræfte nulstillingen. - Manuel nulstilling: slet specifikke nøgler fra lageret eller fjern JSONL-transskriptet; den næste besked genskaber dem.
- Isolerede cron-jobs udsteder altid et nyt
sessionIdpr. kørsel (ingen inaktiv genbrug).
Afsendelsespolitik (valgfrit)¶
Blokér levering for specifikke sessionstyper uden at liste individuelle id’er.
{
session: {
sendPolicy: {
rules: [
{ action: "deny", match: { channel: "discord", chatType: "group" } },
{ action: "deny", match: { keyPrefix: "cron:" } },
],
default: "allow",
},
},
}
Runtime-tilsidesættelse (kun ejer):
/send on→ tillad for denne session/send off→ afvis for denne session/send inherit→ ryd tilsidesættelse og brug konfigurationsregler Send disse som selvstændige beskeder, så de registreres.
Konfiguration (valgfrit omdøbnings-eksempel)¶
// ~/.openclaw/openclaw.json
{
session: {
scope: "per-sender", // hold gruppenøgler adskilt
dmScope: "main", // DM-kontinuitet (sæt per-channel-peer/per-account-channel-peer for delte indbakker)
identityLinks: {
alice: ["telegram:123456789", "discord:987654321012345678"],
},
reset: {
// Standarder: mode=daily, atHour=4 (gateway-værtens lokale tid).
// Hvis du også sætter idleMinutes, vinder den, der udløber først.
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",
},
}
Inspektion¶
openclaw status— viser lagersti og nylige sessioner.openclaw sessions --json— dumper alle poster (filtrér med--active <minutes>).openclaw gateway call sessions.list --params '{}'— henter sessioner fra den kørende gateway (brug--url/--tokenfor adgang til remote gateway).- Send
/statussom en selvstændig besked i chatten for at se, om agenten er tilgængelig, hvor meget af sessionskonteksten der bruges, aktuelle thinking/verbose-toggles, og hvornår dine WhatsApp web-legitimationsoplysninger sidst blev opdateret (hjælper med at opdage behov for genlink). - Send
/context listeller/context detailfor at se, hvad der er i systemprompten og de injicerede arbejdsområdefiler (og de største kontekstbidrag). - Send
/stopsom en selvstændig besked for at afbryde den aktuelle kørsel, rydde køede opfølgninger for den session og stoppe eventuelle underagent-kørsler, der er startet fra den (svaret inkluderer antallet, der blev stoppet). - Send
/compact(valgfri instruktioner) som en standalone besked til at opsummere ældre kontekst og frigøre vinduesplads. Se /concepts/compaction. - JSONL-transskripter kan åbnes direkte for at gennemgå fulde ture.
Tips¶
- Hold den primære nøgle dedikeret til 1:1-trafik; lad grupper beholde deres egne nøgler.
- Ved automatiseret oprydning skal du slette individuelle nøgler i stedet for hele lageret for at bevare kontekst andre steder.
Metadata om sessionsoprindelse¶
Hver sessionspost registrerer, hvor den stammer fra (best-effort), i origin:
label: menneskeligt label (løst fra samtalelabel + gruppeemne/kanal)provider: normaliseret kanal-id (inklusive udvidelser)from/to: rå routing-id’er fra den indgående konvolutaccountId: udbyder-konto-id (ved flere konti)threadId: thread/topic id når kanalen understøtter det Oprindelsesfelterne er befolket for direkte beskeder, kanaler og grupper. Hvis et -stik kun opdaterer leveringsrouting (for eksempel for at holde en DM hovedsession frisk), det bør stadig give indgående kontekst, så sessionen holder sin explainer metadata. Udvidelser kan gøre dette ved at sendeConversationLabel,GroupSubject,GroupChannel,GroupSpace, andSenderNamein the inbound -context and callingrecordSessionMetaFromInbound(eller pass the same context toupdateLastRoute).