---
title: Trickle back (staggered snooze — bring a pile back a few at a time)
---

# Trickle back (staggered snooze — bring a pile back a few at a time)

## What it is

**Trickle back** lets you take a pile of things you've selected — inbox items or
email threads — and have them come back **a few at a time on a cadence** instead of
all at once. It is a variant of [snooze](snooze-an-inbox-item.md): a normal snooze
hides everything and returns it all at the SAME moment; a trickle hides everything
and returns it in **waves**, so you're never buried again when they come back.

Two surfaces have it:

- **The Omniscio Inbox** — select 2+ inbox rows (finished sessions, alerts, SMS,
  drips, etc.) and trickle them back. Single-instance rows (the daily digest, the
  weekly summary) are excluded — there's only one of each, so there's nothing to
  stagger.
- **Supermail** — select 2+ email threads in the mail inbox and trickle them back
  into your mailbox in waves.

You choose two things:

- **How many come back at a time** — 1, 2, 3, or 5.
- **The pace** — either a **simple interval** ("every 30 minutes", "every 2 hours")
  or a **clock schedule** ("every hour", "weekdays at 9am", "daily at 6pm").

Example: 10 alerts, "2 at a time, every 30 minutes" → 2 come back in 30 min, 2 more
at 60 min, and so on, five waves total. The dialog shows you when the **last** wave
returns before you confirm, so a slow pace can't hide a days-long tail.

## Where to find it

**In the Omniscio Inbox:** select 2 or more rows and open **Trickle back…** from the right-click menu on a selected row (just below Snooze), or on mobile press the **Trickle** button in the selection action bar at the top. **In Supermail:** select 2 or more threads and press the **Trickle back** button (the hourglass icon) in the selection toolbar. Both appear only when 2 or more are selected.

## How it behaves

### How to use it

**In the Omniscio Inbox:**

1. **Select 2 or more inbox rows** (Shift+click / Ctrl+click on desktop, or
   long-press to multi-select on mobile).
2. **Open "Trickle back…"** — on desktop it's in the **right-click menu** on a
   selected row (just below Snooze); on mobile it's the **Trickle** button in the
   selection action bar at the top. Both appear only when 2+ rows are selected.
3. **Pick the batch size and pace** in the dialog, glance at the "last item comes
   back…" preview, and press **Trickle back** (or Ctrl+Enter).
4. The rows **leave the inbox immediately** and return in waves. An **Undo** toast
   lets you reverse the whole thing (it un-snoozes every item). The trickled items
   also show up in the normal Snoozed view, where you can un-snooze any single one
   early.

**In Supermail:**

1. **Select 2 or more email threads** in the inbox.
2. Press the **Trickle back** button in the selection toolbar (the hourglass icon,
   shown when 2+ threads are selected).
3. Pick the batch size and pace and confirm. The threads leave the inbox and return
   in waves. To bring one back early, un-snooze it from the Snoozed view.

### How it works

**A trickle is just a snooze with staggered return times.** There is **no new
background service and no new database table** — the feature reuses each surface's
existing snooze machinery and the timers that already bring snoozed things back:

1. **Wave math** (pure, shared — [trickle-waves.ts](/src/shared/trickle/trickle-waves.ts)):
   given the item count, the batch size, and the cadence, it works out how many
   waves there are and assigns each item its own return time. The first wave is
   always one full interval out (nothing returns instantly). For a clock-schedule
   pace it uses Omniscio's normal cron engine to get the next N fire times.
2. **Apply, in the main process:** each selected item is snoozed to its assigned
   wave time through the **same per-item snooze** a single snooze uses —
   [inbox-trickle-service.ts](/src/main/services/inbox/inbox-trickle-service.ts) for
   the inbox (sessions via the session snooze service, everything else via the
   universal inbox snooze), and
   [supermail-trickle-service.ts](/src/main/services/supermail/supermail-trickle-service.ts)
   for email (mode-aware — Omniscio's shared Google connection OR the Supermail
   backend). A single item that can't be snoozed (a vanished session, a reserved
   kind) is skipped, never aborting the batch; at most 100 items per trickle.
3. **Return, automatically:** the timers that already return snoozed items do the
   rest — the 60-second inbox-snooze sweep, the session snooze return path, and the
   60-second Gmail-snooze checker / the Supermail backend's own wake. Because each
   item has a different return time, they reappear wave by wave.

`POST /inbox/trickle` CLI route); Supermail uses `SUPERMAIL_TRICKLE_SNOOZE`, reached
from the vendored mail sub-app through the `trickleSnooze` bridge method. Both take
`{ entries/threadIds, batchSize, cadence }` and return how many were trickled plus
when the last one returns.

**Bad cadence is refused, not half-applied.** If a clock schedule can't be parsed,
the service refuses the whole trickle before snoozing anything — you get a friendly
"couldn't read that schedule" message and nothing is hidden.

**Offline catch-up.** If the app is closed across several return times, those overdue
waves come back together on the next launch — exactly like any snooze that came due
while the app was closed.

**Managing an in-progress trickle (v1).** There's no separate "trickle group" screen
in v1. A trickled item lives in its surface's **Snoozed view** with its return time,
and you cancel it by un-snoozing it there (the inbox also offers a whole-batch Undo
right after you start it). A single "see the whole trickle as one unit / pause it
all" control is a planned follow-up.

## For agents

### IPC

The inbox uses the `INBOX_TRICKLE_SNOOZE` channel (also a headless

## Related

- [snooze-an-inbox-item.md](snooze-an-inbox-item.md) — the plain snooze this builds
  on; a trickle is a snooze whose items return in waves instead of all at once.
- [snooze-a-session.md](snooze-a-session.md) — session snooze specifics (the chat
  marker), which the inbox trickle reuses for session rows.
- Contract: [trickle-snooze-contract.md](/.claude/memory/contracts/trickle-snooze-contract.md).
