---
title: Keep recently-opened panels loaded (instant switching)
---

# Keep recently-opened panels loaded (instant switching)

## What it is

### What it does

Some of Omniscio's bigger panels are slow to open the first time — they build a canvas,
an editor, or fetch a list from the internet. Normally, the moment you switch to
something else, that panel is thrown away, so coming back rebuilds it from scratch
(a spinner, a flash, a rebuilt canvas).

**Keep recently-opened panels loaded** stops that. Once you've opened one of the
covered panels, Omniscio keeps it alive in the background — hidden, but fully built — so
switching back is an **instant flip** instead of a cold rebuild. You only pay the
build cost once, the first time you open it.

It is a performance convenience, not a workflow change: what you see and do is
identical; the only difference is that returning to a panel you'd already opened is
instant.

**It is on by default (opt-out), desktop only.** It is a fully reversible layer:
turn it off (or use the kill switch) and Omniscio behaves exactly as before — each panel
mounts when you open it and is thrown away when you leave, byte-for-byte the old
behavior.

## Where to find it

**Settings → Performance → "Keep recently-opened panels loaded"**. It is on by default, and a developer kill switch can turn the whole layer off without changing the setting.

## How it behaves

### Which panels it covers

- **AI Coaching**
- **Calendar**
- **Drive**
- **Sheets**
- **Supermail**
- **Team Chat**
- **Mind Map** and **Whiteboard** (the docked editors — the expensive React Flow /
  Excalidraw canvases)

Each is only kept loaded **after** you've opened it at least once this session — a
panel you never visit costs nothing.

**Supermail is the exception:** when it's enabled it's kept loaded from app launch (warmed quietly
in the background a few seconds after start), so even the *first* time you open it in a session it
appears instantly with fresh mail instead of pausing to load. Turning Supermail off, or turning this
"keep panels loaded" setting off, removes the pre-warm and returns it to load-on-first-open.

**KMS** and **Tasks** already have their own "Keep … loaded" toggles (same idea,
separate switches). **Gmail** needs no setting — its message list is already kept in
memory and refreshes in the background, so returning to Gmail is already instant.

### Turning it off

It is already on — nothing to enable. To go back to rebuilding each panel every
time: **Settings → Performance → "Keep recently-opened panels loaded for instant
switching"** and turn it off.

The toggle's own description reads: _"Keeps recently-opened panels — AI Coaching,
Calendar, Drive, Sheets, Supermail, and Team Chat — loaded in the background once
you've opened them, so switching back into one is an instant flip instead of
rebuilding and re-fetching it every time. Each panel is held in memory only after
its first open. Desktop only. On by default; turn off to load each panel fresh every
time (the old behavior)."_

No restart required.

### What you might notice

- Returning to a panel you'd already opened is **instant** — no spinner, no rebuilt
  canvas, your place preserved.
- The trade-off is memory: each panel you've opened holds its spot in memory until
  you close Omniscio (there's no automatic eviction). It's bounded to the panels above,
  desktop-only, and the toggle turns it off if you'd rather keep memory lean — the
  same deal KMS and Tasks already run on.
- **Mobile is unaffected** — this is desktop-only; a phone always mounts each panel
  fresh.

### How it relates to the other "responsiveness" features

- The **keep-alive pool** and **frozen-panel retention** keep your _chat sessions_
  warm for instant switch-back.
- **Lean hidden panels** makes the hidden _chat_ panels you can't see cheap.
- **This feature** does the same "stay warm" trick for the bigger non-chat panels
  (Calendar, Drive, the Mind Map canvas, …). KMS and Tasks are the two panels
  that got this treatment first, on their own toggles.

## For agents

### The kill switch

There are **two** independent off-switches, and the kill switch always wins:

1. The **Settings toggle** above (`panelKeepWarmEnabled`, default on).
2. An environment kill switch: launch Omniscio with **`AMC_DISABLE_PANEL_KEEP_WARM=1`**
   and the feature is forced off **even if the setting is on** — the field escape
   hatch. A missing or malformed switch is treated as "not killed," so the setting
   alone governs in the normal case.

### Where it lives in code

- [src/renderer/src/lib/panel-keep-warm-flag.ts](../../src/renderer/src/lib/panel-keep-warm-flag.ts)
  — `isPanelKeepWarmEnabled(setting)`: the setting first, then the
  `AMC_DISABLE_PANEL_KEEP_WARM` kill switch wins.
- [src/renderer/src/features/dashboard/KeepWarmLayer.tsx](../../src/renderer/src/features/dashboard/KeepWarmLayer.tsx)
  — the shared display-toggled layer each warm panel renders in.
- [src/renderer/src/features/dashboard/compute-keep-warm-state.ts](../../src/renderer/src/features/dashboard/compute-keep-warm-state.ts)
  — the pure `{mounted, visible}` derivation (unit-tested).
- [src/preload/index.ts](../../src/preload/index.ts) — bridges the kill switch to the
  renderer before first paint.

The full engineering contract (test-locked invariants + safe-change checklist) is
[.claude/memory/contracts/panel-keep-warm-contract.md](../../.claude/memory/contracts/panel-keep-warm-contract.md).

## Related

- [lean-hidden-panels.md](lean-hidden-panels.md) — makes hidden _chat_ panels cheap.
- [frozen-panel-retention.md](frozen-panel-retention.md) — keeps recent sessions fully built for instant switch-back.
- [kms.md](kms.md) · [tasks-v2.md](tasks-v2.md) — the two panels that got their own keep-warm toggles first.
