Instant SMS taps in the inbox (preload)
On the phone / web view, tapping an SMS conversation in your inbox used to show grey "loading" placeholders (a shimmer) for about half a second to a second before the messages appeared. That wait is a real network round-trip: your phone reaches Omniscio over the Tailscale tunnel, so every tap fetches the conversation across the network.
What it is
What it does
On the phone / web view, tapping an SMS conversation in your inbox used to show grey "loading" placeholders (a shimmer) for about half a second to a second before the messages appeared. That wait is a real network round-trip: your phone reaches Omniscio over the Tailscale tunnel, so every tap fetches the conversation across the network. (On the desktop app the messages come straight from the local database, so it was always instant.)
To kill that shimmer, Omniscio now preloads the most-recent inbox SMS conversations in the background while you're looking at your inbox — quietly, over idle moments — and keeps a copy of each one once loaded. When you then tap a conversation, its messages are already there and paint instantly; no shimmer.
It's the SMS cousin of the session pre-render inbox sessions and lazy content load features, and of the drip-image prefetch — same idea (warm the visible inbox into a cache so opening is instant instead of a cold fetch).
Where to find it
Nothing to open or configure: this is what tapping an SMS conversation in the inbox does on the phone and web view.
How it behaves
When it applies
- Phone / web only. The desktop app is already instant (the database is local), so nothing runs there — no wasted background work or mobile data.
- Only the conversations in your Inbox — the SMS threads flagged as needing your attention. It reuses the exact same rule the Inbox itself uses, so the preloaded set is precisely what you see in the Inbox — never your whole message history. Archived, snoozed, and dismissed threads are not preloaded.
- Only the most-recent 10 of those, fetched a bit apart (staggered) so a full inbox never fires a burst of requests at once. In practice your Inbox usually holds a handful of SMS, so 10 covers them all.
- Only while you're in the inbox or the SMS panel — the two places you'd tap an inbox SMS from. It doesn't preload while you're elsewhere in the app.
When it does NOT apply
- On the desktop app (already instant).
- If you tap a conversation before its preload finished — it simply falls back to the old behavior (a brief shimmer while it fetches). No regression, only upside.
- Threads beyond the most-recent 10, or ones that aren't in your Inbox.
Freshness and safety
- Always fresh. A preloaded copy still refreshes in the background when you open it, new incoming texts land in the copy even before you open it, and your just-sent replies are written into it — so you never see a stale thread.
- No cross-account leak. The copies are wiped when you switch or log out of accounts, and a preload that finishes after a switch is discarded — so one account can never briefly show another's messages.
No setting
This is a transparent speed-up — there is no toggle. It only runs on the
web/mobile client, only for inbox threads, and is bounded to 10, so it stays cheap
by design. (An internal AMC_DISABLE-style guard exists for developers, but there
is nothing for you to configure.)
For agents
Where it lives in code
- src/renderer/src/features/dashboard/sms-prefetch.ts
—
selectSmsPrefetchTargets(...)(the most-recent-10 inbox picker,MAX_SMS_INBOX_PREFETCH) andshouldRunSmsPrefetch(...)(the web/mobile + inbox-only + configured gate). - src/renderer/src/features/sms/useSmsConversationPrefetch.ts — the idle-scheduled, staggered prefetch hook.
- src/renderer/src/stores/sms-store.ts
— the per-conversation
messageCache, the cache-hit-paints-instantlyselectConversation(with background revalidate),prefetchConversation, and the account-switch cache clear inresetSmsStore. - src/renderer/src/features/dashboard/Dashboard.tsx — mounts the hook next to the session attention-prefetch.
The full engineering contract (test-locked invariants + safe-change checklist) is .claude/memory/contracts/sms-inbox-preload-contract.md.
Related
- set-up-sms-integration.md — how the SMS integration works.
- inbox-prerender.md — the session equivalent (instant switch into needs-you sessions).
- lazy-content-load.md — instant first cold-mount of a long session.
Last verified 2026-09-23