---
title: Bulk Select Sidebar Items
---

# Bulk Select Sidebar Items

## What it is

Multi-select sidebar items (sessions or unified inbox entries) with the keyboard or the inbox's **Select** mode, then run bulk actions from the hotkeys or the right-click menu.

## Where to find it

There is no menu to open and no mode to enter: selection happens directly on the left sidebar's session list, and in the unified inbox's list, using the same keystrokes and clicks you already use to move around them. A row that is part of the selection is drawn highlighted, so you can see the extent of it before you act.

## How it behaves

### Select mode (the inbox, desktop)

The inbox header carries a **Select** toggle (beside the source filter and collapse controls). While it is ON, a plain left-click **picks** a row instead of opening it, and each row shows a tick box; while it is OFF nothing changes — rows render and behave exactly as before.

**Why it exists.** Two inbox row types are *bounce-outs*: `supermail` and `plugin` rows open their own panel via `activateVirtualProject`, so a plain click navigates you OUT of the inbox and the next row is no longer on screen to Shift+Click. Before Select mode there was no mouse-only way to build a multi-selection over emails — modifier-click worked (it returns before the open step) but was undiscoverable.

- **Desktop only.** Mobile enters multi-select by long-press; a second entry point there would collide with it.
- **No keyboard shortcut**, by design — a set-once toggle does not earn a scarce key ([DESIGN_LANGUAGE.md](../DESIGN_LANGUAGE.md) "Does this action need a hotkey?"). It carries a label and tooltip instead.
- **Leaving the inbox exits the mode** and clears the selection, so you never return to a screen where clicks silently tick rows.
- **Shift+Click still extends a range** while Select mode is on — the modifier branch runs first.

Selection is a plain highlight over the list you are already looking at — nothing is copied, moved or changed by selecting. It exists so that an action you would normally take on one row can be taken on twenty at once, which matters most when you are clearing out a backlog of finished or dismissed items.

### Extending selection

- **Shift+J** — extend selection down one item
- **Shift+K** — extend selection up one item
- **Click** a row — replace selection with that single item
- **Shift+Click** a row — extend range from the last single-clicked row (anchor)
- **Ctrl+Click** a row — toggle that row in/out of selection
- **Esc** — clear the whole selection (sessions and inbox rows alike), as long as no dialog is open.

Shift+J/K anchors on the last single-clicked row and extends the range toward the active cursor. If there's no prior anchor — or the prior anchor is no longer in the current list (e.g., you switched projects) — the currently-active row becomes the fresh anchor on the first Shift+J/K press.

Selection stays within one project (or one unified-inbox group). At the last item, Shift+J/K stops — it does not wrap or cross into the next project.

**Why not Shift+ArrowUp / Shift+ArrowDown?** Those bindings are reserved for `prevMessage` / `nextMessage` (chat scroll), so sidebar multi-select uses Shift+J/K instead.

### Acting on the selection

With items selected, a key always acts on **every** selected row — never on just the row you happen to be looking at. If some selected rows can't take the action (an alert has no process to pause), a short note says how many were left alone.

- **E** or **Ctrl+W** — archive / dismiss every selected row (any type)
- **P** — pause or unpause the selected **sessions** (smart toggle; non-session rows have no process to pause)
- **H** — snooze every selected row (any type), at the time you pick in the palette
- **M** — move every selected session to another project
- **B** — save every selected session (or unsave them all, when every one is already saved)
- **Shift+B** — bookmark every selected session
- **T** (tag) and **Ctrl+Shift+G** (share) work on one session at a time, so while several rows are selected they show a note instead of acting — press **Esc** to clear the selection first
- An open approval or detail pane never takes a key away from your selection: with several rows selected, **H** snoozes the selection, and **Enter** / **X** do not approve or reject just the open item
- Right-click any selected row — context menu bulk actions, including **Pin / Unpin** (mirrors Archive's mixed-selection rule: Pin shows unless every selected row is already pinned; Unpin shows if any selected row is pinned) and the **Run-control** items **Pause / Unpause**, **Stop**, and **Restart**. Each Run-control item shows only when at least one selected session qualifies — **Stop** ends sessions that are running; **Restart** relaunches ones that errored, stalled, or were stopped with a conversation to pick up — and acts on just that eligible subset of your selection (the same rules the **Manage sessions** modal uses — see [bulk-stop-restart-sessions.md](bulk-stop-restart-sessions.md)). Stop never touches a live "Needs You" session, and neither Stop nor Restart is Ctrl+Z-undoable (relaunching costs tokens). The menu's **Organize** group is bulk too: **Move to** re-files every selected session under one project (one **Undo** puts them all back, each to its own original project), **Set color** applies one color to all of them (one **Undo** restores each row's *own* prior color; re-picking a color a row already has is a no-op), and **Copy app link** copies all the selected sessions' internal `omniscio://` deep links at once in a single clipboard write (they reopen the session *inside* Omniscio — the person needs the app installed — not in a browser). The single-session actions — **Publish & copy web link…** (publishes the session as a public, browser-openable link via the share dialog, then copies it — the public counterpart to the app-only Copy app link), **Rename**, and **Pop Out to Window** (a window holds one session; a name targets one) — are enabled when exactly one row is selected; with several selected they stay visible but **grayed out** (with an "only works on one session at a time" tooltip) instead of disappearing, so it is clear why they can't apply. Right-clicking a row while several are selected keeps your **whole** selection — the menu acts on every selected session and never silently narrows to the one row you clicked. When several rows are selected, the menu shows the count once as a small **"N sessions selected"** heading at the top; each action below stays a plain verb (Pin, Move to, Archive…) rather than repeating the count on every row.

Unified-inbox multi-select acts on **every selected row, whatever its type** — alerts, SMS, digests, approvals, sessions, and the rest. **E** / **Ctrl+W** archives or dismisses them all (sessions soft-archive with restore-undo; every other row is dismissed the same way it would be one at a time); **H** snoozes them all at the time you pick in the palette. **P**, **M**, **B** and **Shift+B** act on the sessions in the selection (a non-session row has no process to pause and no project to move to) and tell you how many other rows they left alone — they never fall back to the session on screen.

### Inbox right-click — Dismiss, Snooze, Pause and Mark as read

The inbox row's right-click menu is batch-aware, on the same gating shape Approve uses: when the row you right-clicked is part of a multi-selection of **two or more**, the action takes the whole selection; otherwise it takes just that row.

- **Dismiss** clears every selected row (the label reads **"Dismiss N selected"**). The open row is dismissed last so the inbox cursor advances exactly once. It acts on the **inbox** selection only — a stale sidebar session selection can never bleed in, so what is dismissed always matches the count on the label.
- **Snooze** hides every selected row until a time you pick (the label reads **"Snooze N selected..."**). One picker, one **Undo**, exactly like pressing **H** on the same selection — the menu and the keyboard now agree on what a selection means. The count is the rows that will *actually* go: a row you can no longer see, or one that cannot be snoozed at all, is left out of both the count and the action, so "Snooze 3 selected..." never quietly overwrites a snooze you already set on a fourth.
- **Pause** pauses every selected session that is genuinely running (**"Pause N selected"**), with one **Undo**. Only sessions can be paused, so a mixed pile of 2 running sessions and 3 alerts reads **"Pause 2 selected"** and the alerts are untouched — the label always names the real number. Rows that errored, ended, or are already paused are not counted, and on a row backed by no live session the item does not appear at all.
- **Mark as read** is offered **only on rows that have a real read state** — `supermail`, `digest`, `weekly-summary`, `telegram`, `sms`, `rss-digest`, `scheduled-message`, `support-chat`. On a mixed selection it acts on the eligible subset and the label counts only those. It is **absent** on rows where "read" is meaningless (sessions, approvals, the derived board rows).
  - **`rss` is deliberately excluded**: its only mechanism clears a whole feed's unread count, so a batch action there would wipe far more than the rows you picked.
  - A partly-failed batch reports the real split ("Marked 3 of 5 read…"), never a blanket success, and one failing row costs exactly one row.
  - **No undo** in this version — marking read is low-harm and reversible at the source.

**Dismiss and Mark as read are separate actions.** Dismissing a SuperMail email hides its row **without** marking the email read in the mail account; marking read is its own action. A marked-read SuperMail row disappears immediately even though the SuperMail plugin only re-pushes its unread list on its own sync — that hide is time-bounded, so an email you later mark unread can come back, and it rolls back if the call fails.

## Related

The **Manage sessions** modal is the other place bulk run-control lives, and its rules are the same ones the right-click menu applies — that is on the [bulk stop and restart sessions](bulk-stop-restart-sessions.md) page. What a single row's archive actually does, and how to get it back, is on [archive a session](archive-a-session.md), and the list this selection is drawn over is described on the [projects sidebar](projects-sidebar.md) page.
