---
title: Snooze a session
---
# Snooze a session

## What it is

Snooze temporarily hides a session from the sidebar and attention lists until a time you pick — useful for "I'll deal with this later." When that time arrives (or you unsnooze early), the session returns to your **inbox** as "needs you" so you actually see it again — even if it was paused, ended, or archived when you snoozed it. It is different from **pause**: snooze only hides the session in the UI, while pause actually freezes (kills) the underlying Claude CLI process. A snoozed session keeps running in the background; a paused one does not.

Snoozing also leaves a visible breadcrumb inside the session's chat — an amber divider line above the most recent agent message that says "Snoozed until ...". When the snooze ends (whether by expiry, manual unsnooze, or a reply you send yourself), that same divider mutates in place to "Returned from snooze" so you can see at a glance where you left off. If you wrote a note when snoozing, it stays attached to the divider through that mutation.

### What you see in chat

When you snooze a session, an amber-colored divider line is inserted into the conversation transcript. It spans the full chat width and shows, from left to right: an alarm-clock icon, the text "Snoozed until <human-readable time>" (e.g. "Snoozed until Wed, Apr 30, 9:00 AM"), and a small timestamp showing when you hit snooze. If you typed a note, it renders centered directly beneath the divider as `Note: <your text>` in the same amber tint, with whitespace and newlines preserved exactly as you typed them.

On the **active** marker — while the session is still snoozed — two small amber text links appear right after the timestamp, separated by a `·` dot: **Edit** and **Unsnooze**. **Edit** reopens the Snooze Palette for this session (the same palette the header badge opens) so you can pick a new time. **Unsnooze** ends the snooze immediately, right from the chat, and shows a brief confirmation toast with an **Undo** button that re-snoozes to the original time and note if you clicked by mistake. These links let you manage the snooze without leaving the conversation or hunting for the header badge — handy on mobile, where the marker is the easiest target to reach. They appear **only** on the active "Snoozed until…" marker: once it has mutated to "Returned from snooze" (see below) the snooze is over, so there is nothing left to edit or end and neither link is shown.

Crucially, the marker is **hoisted** to render directly above the most recent agent message at the moment of snoozing — regardless of where it lives chronologically in the message stream. The intent is "this is the message we're returning to". When you reopen a snoozed session, the chat **scrolls to land on the marker itself** rather than the agent message below it: the amber divider sits at the top of the viewport (or at the top of the agent reply, for short sessions that don't need to scroll), so the visual cue and any note you wrote are the first thing you see. This applies to both active "Snoozed until..." markers and "Returned from snooze" markers — re-opening a returned-snooze session lands you on the same breadcrumb you would have seen during the snooze. If a newer agent message arrived AFTER the snooze marker (e.g. the session re-fired during the snooze window), the marker no longer anchors to the latest agent — and the scroll falls back to the latest agent message instead, so you don't miss the new reply.

When the snooze ends — whether automatically at the snoozed-until time, manually via the Unsnooze menu action, by a reply you send yourself, or by re-snoozing to a new time — the **same divider mutates in place**. The label flips from "Snoozed until ..." to "Returned from snooze", the alarm-clock icon flips to a plain clock icon, and `returnedAt` gets stamped with the time the snooze ended. The note (if any) remains visible underneath. You do **not** see two separate rows ("Snoozed" + "Returned") — there is exactly one chat-marker row per snooze episode.

For sessions that were snoozed before this feature shipped (a "legacy" snooze that has no marker row), the system falls back gracefully: when the snooze ends, a fresh "Returned from snooze" system message is inserted at its chronological position. New snoozes always get the modern marker.

## Where to find it

Open the session and use the three-dot menu in its header, or press the snooze keyboard shortcut. Archived sessions can be snoozed from the Archive view as well.

## How it behaves

### How to use it

1. Open the session, click the three-dot menu (`MoreHorizontal`) in the session header, and choose **Snooze** (alarm clock icon). You can also press the `snoozeSession` keyboard shortcut shown next to the menu item.

   **Already-archived sessions can be snoozed too — from the [Archive view](browse-archived-sessions.md).** A **Snooze** button sits on each archived row and in the open-session detail header (desktop and mobile). Snoozing an archived session keeps it archived until the time you pick, then un-archives it back to your inbox as "needs you" (the return behavior described above). This is the only place to reach Snooze for an archived session, since archived sessions are hidden from the main sidebar; it opens the same Snooze Palette as everywhere else, and confirmation arrives via the usual "Snoozed until…" toast. Once it's snoozed, that archived row shows a "snoozed until…" indicator and the Snooze button becomes **Unsnooze** (cancel the snooze while keeping it archived).

2. The Snooze Palette opens with preset durations: 2 Hours From Now, This Morning (only between 12 AM and 6 AM — resolves to 8 AM the same day), This Afternoon (only before 10 AM — resolves to 1 PM the same day), This Evening, Tomorrow Morning, Tomorrow Afternoon, Day After Tomorrow, This Weekend, Next Week, End of Week, Next Weekend, Next Month. The palette only shows the first 4 contextually relevant presets, so during the early-morning window "This Morning" slots in as the second option (right after "2 Hours From Now"); from 6 AM onward it disappears and "This Afternoon" takes the second slot until 10 AM, when "This Evening" takes it until 6 PM. You can also type a custom time like "in 2 hours", "friday 9am", or compact shorthand like "805p" / "8p" / "1230a" — the parser resolves it, and the live preview labels it back in plain words, keeping your day word and tidying the clock instead of echoing what you typed: "friday 9am" reads back as "Friday at 9 AM", "tomorrow 5pm" as "Tomorrow at 5 PM", and bare "805p" as "8:05 PM". A bare weekday typed on its own fills out to its full day name — "sat" reads back as "Saturday" — instead of echoing the stub you typed (the resolved date shown beside it already carries the abbreviation). The parser is also forgiving of accidental "fancy" digits: if a soft-keyboard long-press slips in a superscript (`³`), subscript, or full-width digit, it is read as the ordinary digit (so `³0m` is treated as `30m`) rather than silently failing to parse. Typing a plain number expands into multiple interpretations: for `1`–`11` (a valid 12-hour clock reading) BOTH the AM and PM clock times appear first — the sensible default leads (so `2` still snoozes to `2:00 PM` on Enter, then lists `2:00 AM` as a second pickable row), then `N minutes` / `N hours` / `N days`. For `12`–`23` the durations come first and the 24-hour clock reading (e.g. `15` → `3:00 PM`) is demoted to the bottom — US users typically mean a duration, not a 24-hour time, when typing a bare number. A **2-digit number of `24` or more is now also read as a dropped-trailing-zero clock** (the first digit is the hour, the second is the tens of minutes) — `93` reads as `9:30`, `63` as `6:30`, `45` as `4:50` — offering BOTH the AM and PM readings soonest-first AFTER the durations, so pressing Enter still snoozes for the duration (`30` stays `30 minutes`, `90` stays `90 minutes`) and the clock is an added pick one arrow-down away. Only a real time qualifies: the second digit must be `0`–`5`, so `96` (which would be `9:60`) shows no clock — just its durations; the `1`–`11` and `12`–`23` readings above are unchanged. A **3–4 digit number is read as a clock time AND a calendar date**, both offered ABOVE the durations (a bare `930` almost always means 9:30 or Sep 30, not 930 minutes): `930` lists `9:30 PM` / `9:30 AM` (an ambiguous hour `7`–`11` offers both readings, soonest first) then `Sep 30` (the `9/30` date) then `930 minutes`; `1231` lists `12:31 PM` then `Dec 31` then `1231 minutes`. The clock and date are each validated independently — an invalid clock (`365` = 3:65) or an impossible date (`931` = Sep 31 — rejected, never silently rolled) is simply skipped, and `1530` (a 24-hour time with no valid `15/30` date) reads as a single `3:00 PM`-style clock. This also means a valid HHMM like `1441` (14:41) now offers `2:41 PM` where it previously showed nothing.

   **Smart AM/PM handling (no sleep hours).** When you type a clock time without AM/PM — bare (`6:00`, `2`, `530`) or after a day word (`tomorrow 6:00`, `monday 1`, `march 25 9`, `3/25 6:00`) — the parser will never assume sleep hours (12 AM – 6 AM). The rule:
   - Hours **1 through 6** always resolve to PM. So `tomorrow 1:00` is `1 PM tomorrow`, not 1 AM; `monday 6` is `6 PM Monday`.
   - Hours **7 through 12 after a day or date** are genuinely ambiguous (`thursday 8` could be morning or evening), so the palette offers **both** readings as two pickable rows — `thursday 8` lists `Thursday at 8 AM` and `Thursday at 8 PM`; `tomorrow 9` lists 9 AM and 9 PM; `march 25 8` lists both. Hour `12` lists noon (`12 PM`) first, then midnight (`12 AM`). Pick the one you meant.
   - A **standalone** clock typed with a separator and an ambiguous hour `7`–`11` (`8:15`, `9:30`, `11:05`) also offers **both** readings — soonest first: in the afternoon `8:15` lists `8:15 PM` (tonight) then `8:15 AM` (tomorrow); in the morning the AM reading leads. (`12` stays noon, and a plain bare number like `2` or `8` uses the number expansion above — BOTH clock readings, default first, plus `N minutes`/`hours`/`days`.)
   - Hours **13 through 23** are read as 24-hour as-is (`15` is 3 PM, `20` is 8 PM).
   - The word **`tonight`** forces the evening reading to a single time: `tonight 9` is `9 PM today`, `tonight 11` is `11 PM today`. Hours 1–11 after `tonight` always resolve to PM.
   - Explicit AM/PM always wins — `tomorrow 6am` is unambiguously `6 AM tomorrow` regardless of the rule above.

   So a quick `tomorrow 8` now lets you pick morning OR evening instead of silently assuming AM, and a `6:00` or `tomorrow 6:00` never lands on 6 AM to surprise you the next morning. If you genuinely want an early-morning time, type the meridiem (`6am`, `tomorrow 6am`).

   **AM vs PM are color-coded.** Wherever the palette shows a clock label, the `AM` / `PM` token is tinted — **AM a cool sky tone, PM a warm amber** — so the two readings of an ambiguous time (`Thursday at 8 AM` vs `Thursday at 8 PM`) are tellable at a glance instead of differing by two easy-to-miss letters. The coloring is additive: the `AM` / `PM` text stays (so it's readable without relying on color — colorblind-safe), and it applies to single labels too (`9:30 AM`, `5 PM (End of day)`). The same treatment shows up everywhere these parser labels render — the session/inbox Snooze Palette, the custom-shortcut live tester, and the Supermail snooze picker. Colors come from theme-aware `--meridiem-am` / `--meridiem-pm` CSS vars (light + dark), applied via a small shared renderer helper [/src/renderer/src/lib/meridiem-label.tsx](/src/renderer/src/lib/meridiem-label.tsx) (`renderMeridiemLabel`); Supermail mirrors it in its own bundle.

   **A much wider vocabulary is understood (2026-07-04).** Beyond the day+clock combos above, the box now also understands: **today** and **today 5pm** (never silently rolls to tomorrow if the time already passed); the clock **before** the day — `5pm tomorrow`, `9am monday`, `noon friday`, `eod friday`; relative anchors — `2 hours from now`, `a week from friday`, `two Mondays from now` (the Nth upcoming weekday — counts occurrences, so it skips ahead N: the 2nd upcoming Monday, "from today" also works), `week after next`, `fortnight`; business days — `3 business days`, `next business day` (skips weekends); ordinal days — `the 15th`, `25th of march`; holidays — `christmas`, `thanksgiving`, `nye`, `christmas 9am`, and their common misspellings (`christmass`, `hallowen`, `valntines` — a curated list, not fuzzy matching); bare months — `june`, `early august`, `mid month`; week parts — `next week friday`, `monday week`; **same time** — `same time tomorrow`, `same time next week` (keeps your current clock time); vague waits — `soon` (1h), `shortly` (30m), `in a while` (2h); end-of-period phrases — `eom`, `eoy`, `eoq`, `cob`; mealtimes and routines — `lunch`, `dinner`, `after work`, `before bed`, `first thing`; compound durations — `an hour and a half`, `1h30`; seconds — `30 seconds`, `a sec` (reads as a colloquial half-minute, not literally one second); leading filler words — `on friday`, `until monday`, `remind me in 2 hours`, `wake me at 7` all strip the filler and resolve the rest; typo tolerance for common misspellings — weekdays (`thrusday`, `wensday`, `satuday`) and number words (`tow`/`twp` → two), where the number typos are corrected only when they sit directly before a time unit or weekday, so an ordinary word is never silently reinterpreted; and forgiving punctuation/quotes/spacing (`tomorrow.`, `"tomorrow"`, `next  week`). Recurrence words (`every monday`, `daily`) are deliberately **not** understood here — snooze is always one-shot.

   **The vocabulary widened again (2026-08-08) — the "never disappointed" pass.** Polite or emphatic tails are ignored — `tomorrow pls`, `5pm sharp`, `friday at the latest`, `next week sometime`, a trailing `:)` or emoji, and curly "smart" quotes from phone keyboards all parse as if clean. Minutes without a unit: `in 5` / `for 20` now mean minutes (with a proper "in 5 minutes" preview). More duration shapes: `in an hour and a half`, `1 hour 30`, `an hour and a quarter`, `three quarters of an hour`, `30 minutes from now`, `in a week's time` / `in 2 months' time`, `.5h`, `1/2 hour`, `another hour`, `30 more minutes`, and ranges keep their first number (`2 to 3 hours` → 2 hours, same keep-first reading as `3 or so`). More clock idioms: `10 past 3`, `20 to 5`, `quarter till/of 5`, military `0800 hrs` / `1300 hours` (four digits + hrs; `0800` is always 8 AM), and British `half 8` (= 8:30). More dates: day-first `21 june`, `january 2027`, glued `jan1`, `15th of next month`, `the first of the month` (word ordinals work in date contexts — `march the third`), `start of september` / `end of january` (last day, 5 PM), seasons (`summer`, `next spring` — meteorological starts: Mar/Jun/Sep/Dec 1), and quarters (`q1`–`q4`, `in q3`, `q2 2027`). More day-part words: `early morning` (6), `mid morning` (10), `late morning` (11), `early/mid/late afternoon` (1/3/4 PM), `early evening` (5 PM), `late evening` (9 PM), `late night` (11 PM), `dawn` (6), `sunrise` (6:30), `dusk` (7 PM), `sunset` (7:30 PM — fixed representative times, not seasonal), `before lunch` (11:30), `before noon` (11), `after breakfast` (8:30), `eob`/`end of business` (5 PM), Aussie `arvo` (1 PM), and bare `tomorrow am` (8 AM) / `monday pm` (1 PM) — though a calendar DATE plus bare `am`/`pm` (`march 8 am`) deliberately stays unparsed so `march 8` always reads as the date. More phrases: `after the weekend` (Monday 8 AM), `over the weekend` (Saturday), `top of the hour` / `on the hour` (next :00), `next hour`, `not today` (tomorrow 8 AM), `not now` (+3h), `in a few` (30m), `next few days` (+3 days), `later this month`, `end of tomorrow` (5 PM), `late next week` (Friday 5 PM), `start of the week`, `midweek` (Wednesday), `when i wake up` (8 AM), `same time next month` / `this time next year`, `next weekday` (skips weekends), and British week anchors — `a week tomorrow`, `2 weeks today`, `a week on monday`. More strippable lead-ins: `follow up friday`, `circle back monday`, `check back in 2 hours`, `come back to me tomorrow`, `bug me` / `poke me` / `nudge me` / `hit me up` / `ask me again` / `try again` / `revisit` / `resurface`, and `not until friday`. An either-or picks the FIRST option (`monday or tuesday` → Monday). Typo coverage grew too (`thusday`, `firday`, `wendsday`, `tusday`, `mondy`, `tmrow`, `tomarrow`, `2moro`, `midnite`, glued `nextweek`/`nextmonth`), plus texting shorthand `b4 noon` and `first thing tomorrow morning`. Everything above is locked by exact-instant tests in [/tests/unit/shared/snooze-time-parser-expansion.test.ts](/tests/unit/shared/snooze-time-parser-expansion.test.ts); the deliberate refusals (recurrence words, `8.30` with no AM/PM, international `21/6`, timezone suffixes like `5pm EST`) are unchanged.

   **Even more (2026-08-09) — parity with the Supermail snooze box.** Three additions. **Easter** — `easter`, `easter 9am` (computed for the year, no lookup table needed). The **middle and end of a season** — `middle of summer`, `mid of spring`, `end of winter` — extending the season *starts* above with the mid-point (the 15th of the season's middle month) and last day of each meteorological season (so `end of summer` is Aug 31). And **numeric dates now follow your language's date convention** — a bare `1/2` reads **month-first** for US English (Jan 2) and **day-first** for the UK, Europe, and most other locales (Feb 1), while fully-spelled dates (`march 25`) and ISO dates (`2027-01-02`) read the same everywhere; if you're in the US nothing changes.

   **Two-letter day and month abbreviations now resolve (2026-08-14).** Just the first two letters of a weekday works — `sa` → Saturday, `mo` → Monday, `we` → Wednesday, and so on for all seven days (each has a unique two-letter start), including in combinations like `sa 5pm`, `next sa`, or `by sa`. The same applies to months whose first two letters are unique — `de 25` → December 25, `no 20` → November 20, `ja`/`fe`/`ap`/`au`/`se`/`oc` likewise — while the genuinely ambiguous two-letter month starts stay unread (`ma` could be March or May, `ju` June or July). A single letter is still too ambiguous to resolve (`s` could be Sunday or Saturday, and `m`/`w`/`d` collide with the minute/week/day shorthands).

   **Two more ambiguous inputs now offer both readings.** Typing `next monday` when the nearest Monday is only 1-2 days away is genuinely ambiguous (did you mean the close one or the one after?) — the palette lists **This Monday** and **The following Monday**, nearest first; more than 2 days out, "next Monday" is unambiguous and shows the single reading as before. Typing `by friday` (or `by tomorrow`, `by christmas`, any bare day) is also ambiguous between an end-of-day deadline and a morning one — the palette lists **Friday 5 PM (End of day)** and **Friday 8 AM (Morning)**. `by 5pm` (an exact clock, not a day) isn't ambiguous and stays a single reading.

   **A bare `Nm` offers both minutes AND months.** The single letter `m` is the shorthand for minutes, but it's just one letter off from months (`mo`). So typing `2m` (or `3m`, `1.5m`, etc.) now lists **two** pickable rows — `2 minutes` and `2 months` — instead of silently assuming minutes. Minutes stays first, so pressing Enter still snoozes for minutes exactly as before; the months reading is simply now reachable with one arrow-down. This applies only to the ambiguous bare `m`: `2mo` / `2 months` are already unambiguously months, `2min` / `2 minutes` are already unambiguously minutes, and `2h` / `2d` / a plain number are unaffected.

   **Parsed something wrong? Report it.** If the box misreads what you typed — it shows nothing, or the wrong time — a subtle **"Parsed this wrong? Report it"** link appears just below the suggestions once you've typed anything (it's most useful on the "No matches" state). Clicking it opens a one-line **"What did you mean?"** field and a **Send report** button; sending flags the exact text you typed and the times the palette offered (plus your optional note) through the same in-app feedback pipeline the Feedback button uses, so the parser can be improved. It never changes what gets snoozed — it's purely a bug report — and a short cooldown stops a double-tap from sending the same thing twice. Implemented renderer-only in [/src/renderer/src/lib/snooze-parse-report.ts](/src/renderer/src/lib/snooze-parse-report.ts) (reuses `FEEDBACK_SEND`; no new IPC).

3. **(Optional) Add a note for future-you.** Below the suggestion list, a 2-row textarea labeled "Optional note for future-you (Shift+Enter for new line)" is rendered for snooze-mode session targets only — it is hidden when scheduling a Send Later response (the response text is the "note") and for digest or email targets. To reach it without a mouse, press **Tab** from the time input; **Shift+Tab** returns focus to the time input. **Enter** from either the time input or the textarea submits the snooze with the trimmed note. Inside the textarea, **Shift+Enter** inserts a newline instead of submitting. The textarea has a 500-character browser-enforced max length. An empty or whitespace-only note stores no note metadata at all — it is not "stored as empty string", it is simply absent. Bulk snooze (when you Shift-select multiple sessions in the sidebar before opening the palette) does **not** offer a note field in v1 — the note is single-session-only.
4. Pick an option (click or Enter). The session disappears from the sidebar and inbox "needs you" lists, an amber "snoozed until..." badge appears in the session header, an amber chat marker is inserted into the conversation (see next section), and the palette closes. On desktop an undo toast appears ("Session snoozed" / "Email snoozed"); on mobile the toast is suppressed — the session vanishing from the list is feedback enough, so the screen stays uncluttered.
5. **To change the snooze time later**, tap the amber snooze badge in the session header — it reopens the Snooze Palette pre-targeted at this session, and picking a new time overwrites the existing `snoozedUntil`. This is one of two edit-snooze affordances once a session is already snoozed — the other is the **Edit** link on the in-chat snooze marker itself (see "What you see in chat" below), which opens the same palette. (The overflow menu's "Snooze" entry hides while `snoozedUntil` is set, and is replaced by an "Unsnooze" entry.) The header badge is especially useful on mobile where the overflow menu is fiddlier to reach. Re-snoozing flips the previous chat marker to "Returned from snooze" and inserts a fresh marker for the new snooze window — you end up with one breadcrumb per snooze episode rather than a separate "Returned" + "Snoozed" pair.
6. To unsnooze early, reopen the session — a reply you send yourself auto-clears the snooze — or use the overflow menu's Unsnooze action, or click **Unsnooze** directly on the in-chat snooze marker (see "What you see in chat" below). Snoozes also expire automatically: a background checker runs every 60 seconds, clears `snoozedUntil`, and updates the chat marker.

### A snooze survives the session coming back some other way

Only **you** can end a snooze early. Omniscio revives sessions on its own for several reasons — the automatic inbox check-in nudge, the auto-wait wake-up re-drive, an inbound reply to your agent email address, and the rate-limit resume sweep that re-nudges a session parked on a provider limit. All of those reach the session through the same send path a person does.

Those automated revivals **leave your snooze in place**. The session keeps working, but it stays hidden until the time you picked, and the amber "Snoozed until…" marker stays active. Before this, any one of them silently cleared `snoozedUntil` and dumped the session straight back into your inbox — the deferral was gone with nothing to show it had ever existed.

A snooze still ends the three ways you'd expect: it expires on its own, you send a reply yourself, or you un-snooze it explicitly.

## Related

- [Snooze a session (part 2)](snooze-a-session-part-2.md) — the continuation of this page.

- [snooze-an-inbox-item.md](snooze-an-inbox-item.md) — every other inbox kind (SMS, Telegram, alarms, all five approval kinds, RSS, drips, recipes, etc.) is also snoozable via right-click → Snooze; the same SnoozePalette UI and the same `isInboxItemSnoozed` gate, but no chat marker (no shared conversation to mark).
- [daily-digest.md](daily-digest.md) — the daily digest is also snoozable from the inbox via the same SnoozePalette and `snooze-entity` event.
- [automations-and-auto-replies.md](automations-and-auto-replies.md) — auto-reply rules that fire while you're not actively at the keyboard.
