---
title: Browse archived sessions
---

# Browse archived sessions

## 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](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](../../.claude/memory/contracts/archive-transcript-scroll-contract.md) and [session-scroll-contract.md](../../.claude/memory/contracts/session-scroll-contract.md).

## Where to find it

### How to use it

1. **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.)
2. **Click any archived row** to open it. The main panel switches to that session's chat history.
3. **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.
4. **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.
5. **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.
6. **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

1. The session store tracks two parallel slices: `sessions` (live, drawn into the visible sidebar) and `archivedSessions` (fetched on demand by the **Archived** sub-section). Every row in `archivedSessions` has `status === 'archived'`, enforced both by the `SESSION_LIST_ARCHIVED` IPC and the optimistic-archive setter. The initial expand loads `ARCHIVED_INITIAL_LIMIT` (50) rows; mobile's **Show 50 more** pager (`fetchMoreArchivedSessions`) then APPENDS the next page via the `SESSION_LIST_ARCHIVED` `offset` param (`limit` fixed 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).
2. Mobile swipe + chevron buttons in [src/renderer/src/features/dashboard/Dashboard.tsx](/src/renderer/src/features/dashboard/Dashboard.tsx) compute `navigableSessions` via a memo. When the active session id is found in `archivedSessions`, the memo switches to `getArchivedNavigableSessions(activeProjectId, archivedSessions)` from [src/renderer/src/stores/session-navigation.ts](/src/renderer/src/stores/session-navigation.ts) — otherwise it falls back to the existing `getVisibleProjectSessionsInOrder` path.
3. Desktop **J / K** uses [src/renderer/src/hooks/useKeyboardShortcuts.ts](/src/renderer/src/hooks/useKeyboardShortcuts.ts) `navigateSession`. Same archived-detection: if the active id lives in `archivedSessions`, build a single-group list with `sessionToItem` and call `findNextItem` against 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.
4. The Search virtual project bypasses the project-id filter inside `getArchivedNavigableSessions` — it returns the full `archivedSessions` array untouched, because Search's archive list is intentionally cross-project.
5. The inbox + null-project corner case returns `[]` from the helper, which makes `currentSessionIndex === -1` and disables the swipe gestures.

## Related

- [bulk-select-sidebar.md](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](snooze-a-session.md) — the snoozed list also lives in a sub-section, but is separately filtered out of nav
- [session-search.md](session-search.md) — the Search virtual project that hosts cross-project archived results
