--- summary: "How OpenClaw manages conversation sessions" read_when: - You want to understand session routing and isolation - You want to configure DM scope for multi-user setups title: "Session Management" --- # Session Management OpenClaw organizes conversations into **sessions**. Each message is routed to a session based on where it came from -- DMs, group chats, cron jobs, etc. ## How messages are routed | Source | Behavior | | --------------- | ------------------------- | | Direct messages | Shared session by default | | Group chats | Isolated per group | | Rooms/channels | Isolated per room | | Cron jobs | Fresh session per run | | Webhooks | Isolated per hook | ## DM isolation By default, all DMs share one session for continuity. This is fine for single-user setups. If multiple people can message your agent, enable DM isolation. Without it, all users share the same conversation context -- Alice's private messages would be visible to Bob. **The fix:** ```json5 { session: { dmScope: "per-channel-peer", // isolate by channel + sender }, } ``` Other options: - `main` (default) -- all DMs share one session. - `per-peer` -- isolate by sender (across channels). - `per-channel-peer` -- isolate by channel + sender (recommended). - `per-account-channel-peer` -- isolate by account + channel + sender. If the same person contacts you from multiple channels, use `session.identityLinks` to link their identities so they share one session. Verify your setup with `openclaw security audit`. ## Session lifecycle Sessions are reused until they expire: - **Daily reset** (default) -- new session at 4:00 AM local time on the gateway host. - **Idle reset** (optional) -- new session after a period of inactivity. Set `session.reset.idleMinutes`. - **Manual reset** -- type `/new` or `/reset` in chat. `/new ` also switches the model. When both daily and idle resets are configured, whichever expires first wins. ## Where state lives All session state is owned by the **gateway**. UI clients query the gateway for session data. - **Store:** `~/.openclaw/agents//sessions/sessions.json` - **Transcripts:** `~/.openclaw/agents//sessions/.jsonl` ## Session maintenance OpenClaw automatically bounds session storage over time. By default, it runs in `warn` mode (reports what would be cleaned). Set `session.maintenance.mode` to `"enforce"` for automatic cleanup: ```json5 { session: { maintenance: { mode: "enforce", pruneAfter: "30d", maxEntries: 500, }, }, } ``` Preview with `openclaw sessions cleanup --dry-run`. ## Inspecting sessions - `openclaw status` -- session store path and recent activity. - `openclaw sessions --json` -- all sessions (filter with `--active `). - `/status` in chat -- context usage, model, and toggles. - `/context list` -- what is in the system prompt. ## Further reading - [Session Pruning](/concepts/session-pruning) -- trimming tool results - [Compaction](/concepts/compaction) -- summarizing long conversations - [Session Tools](/concepts/session-tool) -- agent tools for cross-session work - [Session Management Deep Dive](/reference/session-management-compaction) -- store schema, transcripts, send policy, origin metadata, and advanced config