---
title: Pin session commands to the session bar (Snooze, Pause, etc.)
---

# Pin session commands to the session bar

## What it is

Every session has a small toolbar at the top-right of its header — the little row where the **⋯ (more)** button, the close **✕**, and the running **cost figure** live. That cost is always shown — from `$0.00` onward, for every session and whatever bills it, your own API key, a metered provider, or a flat plan — and on a phone it appears just under the session title rather than in this row, so it's fully visible on every device. Most session actions (Snooze, Pause, Send Later, and so on) are tucked inside that **⋯** menu.

**Session-bar pinning** lets you promote the actions you use most out of the **⋯** menu and onto that toolbar as one-tap icon buttons — so, for example, Snooze becomes a single click instead of "open the menu, find Snooze, click." A pinned command **leaves the ⋯ menu** and appears on the bar; unpin it and it goes straight back. **Archive is pinned by default**, so the Archive/Unarchive button shows on the desktop session header out of the box — you can unpin it (or pin any of the others) whenever you like.

## Where to find it

### How to pin and unpin

Open **Settings → Sessions → "Session bar"**. You'll see a checklist of the six commands, each with a checkbox. **Tick** a command to pin it to the bar; **untick** to send it back to the menu. Changes take effect immediately.

For discoverability there's also a **"Customize session bar…"** entry at the bottom of every session's **⋯** menu — clicking it jumps straight to that Settings checklist.

## How it behaves

### Which commands can be pinned

Six everyday, one-tap commands:

- **Snooze** — hide the session until later (only offered when it isn't already snoozed).
- **Pause / Unpause** — one button that shows **Pause** while the session is running and **Unpause** while it's paused.
- **Send Later** — schedule your typed reply to send later.
- **Copy app link** — copy an in-app deep link that reopens the session inside Omniscio (for a public, browser-openable link, use **Publish & copy web link** in the session's right-click menu).
- **Aside Mode** — toggle side-question mode (the button lights up when it's on).
- **Archive / Unarchive** — one button that shows **Archive** for any non-archived session and **Unarchive** for an archived one. It's **pinned by default**, so it shows on the desktop bar out of the box.

Pause/Unpause and Archive/Unarchive each count as **one** pinnable item that changes its label and icon with the session's state. A pinned command only appears on the bar when it actually applies right now — e.g. Snooze won't show on a session that's already snoozed; Pause isn't offered on an archived session. When it doesn't apply, it simply stays available in the ⋯ menu.

### Where it shows (and where it doesn't)

- **Desktop:** pinned commands render as icon buttons on the session header bar, just left of the **⋯** button. Each has a tooltip (and its keyboard shortcut where it has one).
- **Phone / mobile:** the pinned buttons are **not** shown on the mobile header (it's too narrow for full-size touch targets) — every command stays in the **⋯** menu there. The Settings checklist still works on mobile; it just governs the desktop bar for now.

A command is only removed from the ⋯ menu when it's _actually showing on the bar_, so nothing ever becomes unreachable: on a phone, or when a command doesn't apply to the current state, it's still right there in the menu.

## For agents

### Under the hood (for agents with repo access)

- **Registry (single source of truth):** `src/renderer/src/features/sessions/session-bar-commands.tsx` — `SESSION_BAR_COMMANDS` defines each command's icon/label/availability/run via `resolve(ctx)`; `resolveShownBarCommands(ctx, pinnedIds, { isMobile })` computes what the bar shows (pinned ∩ available ∩ desktop); `useSessionCommandHandlers` holds the shared pause/unpause/copy-link handlers (with the undo-toast registration) so the bar and menu never diverge; `togglePinnedCommandId` is the pure pin/unpin used by the checklist.
- **Setting:** `pinnedSessionCommandIds: string[]` (flat `AppSettings` field, default `['archive']`; mirrors `pinnedToolbarItems`) — wired through `app-settings.ts` / `update-settings.ts` / `default-settings.ts`, searchable via `SessionsSettings-search.ts`. Existing users are backfilled to the new default by the one-time `session-archive-pin-migration.ts` (flag `sessionArchivePinMigrationCompleted`, in `INTERNAL_ONLY_SETTING_KEYS`).
- **Bar render:** `SessionPanelHeader.tsx` (maps the resolved commands to `IconButton`s just before `<SessionOverflowMenu>`).
- **Menu:** `SessionOverflowMenu.tsx` hides any command in the header-computed `shownBarCommandIds` set (never merely "pinned", so it stays reachable) and adds the "Customize session bar…" entry (`navigateToSettingsProject({ section: 'sessions' })`, cli-parity-exempt navigation).
- **Settings UI:** the "Session bar" card in `src/renderer/src/features/settings/sections/session/SessionSettings.tsx`.
- **Contract with test-locked invariants:** `.claude/memory/contracts/session-bar-commands-contract.md`.

## Related

This page links no sibling page of its own, so go to the library map: [INDEX.md](INDEX.md) lists every page and area, including the settings and header-appearance pages that sit beside this one.
