Browse archived sessions
How to open and move between a project's archived sessions: the Archived sub-section, the read-only archived view, swipe and J / K navigation, where an opened session lands, and the separate navigation list that makes prev and next work.
What it is
Archived sessions live in a collapsible Archived sub-section near the bottom of every project's session list (and a per-project sub-section under the Search virtual project). Open one and Omniscio opens the session in the main panel, read-only-friendly. From there you can navigate forward and backward through your other archived sessions in the same project — using mobile swipe, the prev/next chevron buttons at the top of the panel, or J / K on the keyboard.
This is purely a viewing flow — archived sessions don't accept new replies until you unarchive. The point is to scroll through past work without having to click each row in the sidebar.
Each archived session still offers two quick actions without leaving the Archive view: Restore (unarchive it back to your active list) and Snooze (hide it until a time you pick, then have it un-archive itself back into your inbox as "needs you"). Both appear on the archived row and in the open-session detail header, on desktop and mobile. Snooze is the only way to reach a snooze from an archived session, since archived rows are hidden from the main sidebar — see snooze-a-session.md.
Once an archived session is snoozed, its row shows a small amber "snoozed until…" indicator (with the full wake time in the tooltip), and the Snooze button becomes Unsnooze — cancel the snooze right there and the session stays archived (it just won't auto-return anymore). The indicator and the Snooze/Unsnooze toggle update on their own as the snooze is set or cleared.
Opening an archived session lands you at the top of the final agent message — the agent's concluding answer, read from its first line, rather than dropped at the very end of a long reply where you'd have to scroll up (user request 2026-07-11). This holds in BOTH surfaces — the main panel (via a project's Archived sub-section) and the standalone Archive view (the Archive sidebar / search) — and it's always fresh: every time you open an archived session it snaps back to the top of that final message, even if you'd scrolled through it before (unlike your active sessions, which remember where you left off). The two surfaces run on independent scroll code but land the same way. See archive-transcript-scroll-contract.md and session-scroll-contract.md.
Where to find it
How to use it
- Find the Archived sub-section. Open any real project. Scroll the sessions list to the bottom — there's a chevron labeled Archived (N), where N is the true total. Click to expand. The section loads the most recent 50 first; if you have more, load additional rows from the bottom of the list. On desktop the button reads Show all archived (N more) and loads the rest in one go (fine over the in-app data channel). On mobile it reads Show 50 more and appends one 50-row page per tap — repeat until it's all loaded, then the button disappears. Mobile pages deliberately: the phone/web connection refuses any single response over ~8 MB, so on a big archive the old one-shot "load everything" fetch (~22 MB) was rejected and the button did nothing; paging keeps every response small. (The Search virtual project shows the same sub-section, with cross-project results.)
- Click any archived row to open it. The main panel switches to that session's chat history.
- Swipe (mobile) or press J / K (desktop, anywhere outside an input) to move to the next or previous archived session in the same project. The prev / next chevron buttons in the panel header do the same thing. The list moves through the archived sessions in the same order they appear in the sidebar.
- Boundaries: at the first archived session, going backward is a no-op on mobile; on desktop K stays put / nudges back to the next item rather than wrapping. Same at the last archived session going forward. There is no wrap from last back to first — this matches the live-session sidebar nav exactly.
- Cross-project search edge case: if you opened the archived session from the Search virtual project, swipe / J / K walks the cross-project archived results in the order Search returned them — not just one project's archive.
- Inbox edge case: if you archive a session while viewing it from the inbox, swipe / J / K disables until you switch to a real project. The session itself stays open; only the navigation gestures pause. Pick the project from the sidebar to resume browsing its archive.
To stop browsing the archive, click any non-archived session in the sidebar — or the project header — to leave the archived view. Swipe / J / K immediately switches back to walking the regular visible sidebar.
How it behaves
Why this is a separate list
The visible sidebar list excludes archived rows (and snoozed, scheduled, and blank-ended ones) so triage stays clean. Without a dedicated nav list, opening an archived session would set the active id to something the visible list doesn't contain — currentSessionIndex would be -1 and prev / next would be dead. The fix surfaces a parallel "navigable archived list" only while the active session is archived. The moment you leave (open a live session, unarchive, switch projects), nav reverts to the regular visible list.
For agents
How it works
- The session store tracks two parallel slices:
sessions(live, drawn into the visible sidebar) andarchivedSessions(fetched on demand by the Archived sub-section). Every row inarchivedSessionshasstatus === 'archived', enforced both by theSESSION_LIST_ARCHIVEDIPC and the optimistic-archive setter. The initial expand loadsARCHIVED_INITIAL_LIMIT(50) rows; mobile's Show 50 more pager (fetchMoreArchivedSessions) then APPENDS the next page via theSESSION_LIST_ARCHIVEDoffsetparam (limitfixed at 50), keeping each response small enough for the mobile WS 8 MB outbound cap — the fix for the dead "Show all archived" button on large archives. Desktop keeps the one-shot unlimited fetch (no such cap over in-process IPC). - Mobile swipe + chevron buttons in src/renderer/src/features/dashboard/Dashboard.tsx compute
navigableSessionsvia a memo. When the active session id is found inarchivedSessions, the memo switches togetArchivedNavigableSessions(activeProjectId, archivedSessions)from src/renderer/src/stores/session-navigation.ts — otherwise it falls back to the existinggetVisibleProjectSessionsInOrderpath. - Desktop J / K uses src/renderer/src/hooks/useKeyboardShortcuts.ts
navigateSession. Same archived-detection: if the active id lives inarchivedSessions, build a single-group list withsessionToItemand callfindNextItemagainst it. The same-group bounce-back path means at the last archived row, J nudges back to the previous one rather than wrapping to the top. - The Search virtual project bypasses the project-id filter inside
getArchivedNavigableSessions— it returns the fullarchivedSessionsarray untouched, because Search's archive list is intentionally cross-project. - The inbox + null-project corner case returns
[]from the helper, which makescurrentSessionIndex === -1and disables the swipe gestures.
Related
- bulk-select-sidebar.md — Shift+J / Shift+K extend a multi-select range; this page covers single-cursor J / K nav
- snooze-a-session.md — the snoozed list also lives in a sub-section, but is separately filtered out of nav
- session-search.md — the Search virtual project that hosts cross-project archived results
Last verified 2026-10-05