---
title: Repeated-phrase quick-reply nudge (save a phrase you keep typing)
---

# Repeated-phrase quick-reply nudge (save a phrase you keep typing)

## What it is

When you type the same short phrase many times across your sessions, Omniscio notices and drops **one** dismissible inbox card offering to save it as a **quick reply** — with the exact phrase already filled in, ready for you to approve. It runs entirely on your machine, uses **no AI** (so it costs nothing and is instant), and never nudges you about the same phrase twice.

This replaces the old "Save your repeat phrase as a quick reply" tip that used to appear inside the [Weekly Summary](weekly-summary.md). That suggestion was removed from the digest on **2026-07-06** and became this standalone, always-on nudge — so you get told the moment a habit forms, instead of once a week.

Prefer to see them all at once? The [Eligible phrases](eligible-phrases.md) tab in the Quick Replies sidebar lists every phrase you repeat (a lower bar than the nudge) so you can browse and save the good ones yourself.

## Where to find it

The nudge arrives as a dismissible card in the **Inbox**. Clicking **"Save as a quick reply"** on that card opens the **Quick Replies** screen with the phrase already filled into a new-quick-reply form. The switches that govern the nudge — whether it runs at all, and how many repeats it takes to fire — live in **Settings → Features**.

## How it behaves

### How to use it

1. **Just keep working.** A quiet background check (a few minutes after launch, then about every 6 hours) counts the phrases you actually send.
2. **A card appears** in the Inbox when a phrase crosses your threshold (default **10** times) — e.g. _"Save a phrase you repeat as a quick reply — You've typed 'What's the next phase?' 40 times all-time — 12 in the last 30 days, 3 this week."_
3. **Click "Save as a quick reply."** The [Quick Replies](quick-replies.md) screen opens with the phrase already filled into a new-quick-reply form. Review the name and text, then click **Save** — nothing is stored until you do. Cancel and the draft is simply discarded.
4. **Not interested?** Archive the card. You won't be nudged about that phrase again.

### Settings

**Settings → Features:**

- **Suggest saving repeated phrases as quick replies** (`repeatedPhraseQuickReplyNudgeEnabled`, default **on**). **Tips & Guidance** also gates it — turn that off and every inbox nudge, including this one, is silenced.
- **Repeat threshold** (`repeatedPhraseQuickReplyNudgeThreshold`, default **10**, range 2–100) — how many times a phrase must repeat before the nudge appears.

### How it works

- A background scan (registered as a leaf startup task) counts **your own** sent messages only — `source = 'operator'`, excluding Omniscio's auto-injected replies (auto-continue "Please continue.", scheduled wakeups, crash-recovery replays) — and groups near-identical phrases by a normalized signature. Only phrases of **≥2 words** and **≤200 characters** are considered (a long paste isn't a quick-reply candidate).
- **Tapped question answers don't count.** When you answer one of Omniscio's in-chat question cards by tapping its option buttons, that reply is saved like a normal message — but you _tapped_ it, you didn't type it. The scan recognizes Omniscio's own answer format and skips it, so the repeated question wording (which the agent reuses across sessions) is never mistaken for a phrase you type a lot.
- **Prompts Omniscio wrote for you don't count either — only what you actually type does.** The scan counts a phrase only when its session started somewhere _you_ type the first message (the chat composer, Quick Launch, the mobile composer, the search box, a "+ New" session, a Team Chat or email "start a session"). Everything Omniscio spawns or writes for you is skipped: prompts it auto-generates to fix an alert (**auto-remediation**), the auto-lander's own notices, scheduled reminders, digests, and the opening prompt when you tap **Start session** on any inbox card (you tapped a button; you didn't type that text). This matters because those are byte-identical every time — e.g. a recurring _"run npm run ops:deploy…"_ remediation would otherwise look like a phrase you type over and over. It's an **allowlist** (only the places you type count), so a brand-new kind of Omniscio-generated prompt is skipped automatically instead of slipping through. The scan keys off the session's launch source, so past ones are excluded too — not just new ones.
- **The card shows three windows — all-time, the last 30 days, and this week — not one number.** It leads with the **all-time** total (your typed messages are kept forever, so it's a true total), then the **last 30 days**, then a **"this week"** (last 7 days) count. So a phrase you typed a lot but have since dropped reads as _"142 times all-time — 28 in the last 30 days, none this week"_ and is visibly stale, instead of looking hot from one big number. The session breadth moved off the card to keep it readable (it's still tracked). (Display only — it doesn't change _when_ a nudge fires.)
- It uses your **raw** text — NOT the privacy-scrubbed form the Weekly Summary sends to the AI — so the prefill is exactly what you typed. It can do this safely because the feature is 100% local: nothing ever leaves your machine.
- It raises at most **one** nudge per scan (the highest-repeat phrase you haven't been nudged about yet), so a big backlog surfaces as a gentle drip rather than a flood of cards.
- A small local ledger (`quick_reply_nudges`) remembers every phrase it has already nudged, so it never repeats itself — and it skips any phrase you can **already send in one tap**: a saved quick reply, your one-tap **Zap** reply (the lightning-bolt Quick Reply button — the `quickReplyText` setting), or the **"Please continue"** button. Suggesting one of those would be pointless, since you already have it as a button.
- That skip is typo-tolerant for common one-word misspellings: if you repeatedly type _"yes contine"_ and your saved one-tap phrase is _"yes continue"_, Omniscio treats it as already covered instead of suggesting you save the typo. Zap Coach uses the same shared relation to point you back to the existing shortcut when it is enabled.
- Clicking the card marks the nudge handled and hands the draft to the Quick Replies editor; archiving the card dismisses it.

## For agents

### Where it lives

`src/main/services/quick-reply-nudge/` (scan + accept + `existing-reply-texts.ts`, the one-tap exclusion set shared with the Eligible-phrases list), `src/main/db/queries-quick-reply-nudges.ts` (the ledger), `src/shared/quick-reply-nudge.ts` (shared helpers), the card carve-out in `src/renderer/src/features/alerts/AlertInboxViewer.tsx`, and the settings in `src/renderer/src/features/settings/sections/features/FeaturesSettings.tsx`. Invariants are locked in `.claude/memory/contracts/quick-reply-nudge-contract.md`.

## Related

Its mirror image is [quick-reply-declutter-nudge.md](quick-reply-declutter-nudge.md), which offers to prune a saved reply you have stopped using rather than to save a phrase you keep typing. If you would rather browse than be nudged, the lower-bar list of everything you repeat is in [eligible-phrases.md](eligible-phrases.md), and [quick-replies.md](quick-replies.md) is the library the saved results land in. This nudge replaced a tip that used to live in the [Weekly Summary](weekly-summary.md), and [inbox-alerts.md](inbox-alerts.md) covers the Inbox these cards arrive in.
