Why email search fails you — and what answering a question with citations actually takes
You remember the message perfectly well. It was the contractor who quoted for the deck. You search “deck” and get nothing, because the email says “Estimate #2291 — rear timber decking” and the word you’re searching for was never in it.
That’s not a bad search box. That’s the fundamental mismatch: keyword search indexes the sender’s vocabulary, and you’re searching with your own memory. Then, having made you guess the right words, it hands back a list of twenty threads and leaves the reading to you.
Two things have to change to fix that. Search has to match on meaning, and something has to read the results and answer the actual question. Here’s how both work in MorningZero, including the parts that degrade.
Tier one: keyword and meaning, together
Every message MorningZero mirrors locally is turned into a vector embedding — a numeric representation of what the message is about, rather than which words it used. A search then runs two passes over your connected accounts:
- Keyword — a text match over the mirror, the thing you already expect
- Semantic — a nearest-neighbour vector search, ranked by distance from your query’s embedding
The results merge, so a thread can surface because it shared your words, because it shared your meaning, or both. “Deck quote” finds “rear timber decking” without you knowing that phrase existed.
Some specifics worth knowing, because they change what you get back:
- It spans every connected account by default. One query, all mailboxes, unless you narrow it with an account filter.
- Archived mail is hidden unless you ask for it. Inbox-scoped by default; there’s an explicit opt-in for the archive.
- If embeddings are unavailable, it falls back to keyword-only. The embedding provider going down degrades the search instead of breaking it — you get fewer meaning-matches, not an error page.
Tier two: when the mirror isn’t enough
The local mirror is fast and cheap but deliberately bounded — it isn’t your entire Gmail history. So search has a second scope, All mail, which hands the query to Gmail itself and searches everything you’ve ever received.
The trade-off is exactly what you’d expect: the instant tier answers in milliseconds off local Postgres; the deep tier is slower and goes to the provider. Default to instant, escalate when something old isn’t there.
Ask Zero: from a list to an answer
Search finding the right thread still leaves you reading it. Ask Zero closes that loop — you ask a question in plain English, it works out what to search for, reads the messages that come back, and writes an answer.
The load-bearing part isn’t the answer, it’s the citation. Every answer carries the source emails as clickable chips that open the original thread. That matters for a reason that has nothing to do with convenience: a language model summarising your mail can be confidently wrong, and a citation is the difference between a claim you can check in one click and one you have to take on faith.
Questions this shape works well for:
- “What needs my reply today?” — the highest-leverage query, because it uses the same needs-reply signal the classifier assigns on arrival
- “What was the final price the agency quoted for the rebrand, and who sent it?” — a figure and a sender, with the source email attached
- “I ordered something last month — where from, and when?” — the order confirmation, dug out without you remembering the retailer
- “Pull every invoice from last quarter” — gathered with senders and dates
What’s scoped where
This tripped up an earlier version of this post, so let’s be precise:
| Scope | |
|---|---|
| Search (instant + all-mail) | Every connected account, narrowable by account filter |
| Ask Zero conversation | The mailbox you currently have selected |
| Chat history | Stored per mailbox, so switching mailboxes switches conversation |
So a question about work mail asked in your work mailbox won’t dredge up personal threads. The flip side is that Ask Zero doesn’t answer across accounts in one turn — switch mailbox and ask again.
What it costs
Answering is on-demand reasoning, so Ask Zero queries spend credits. Incoming-mail labeling doesn’t — that runs on a small model MorningZero absorbs, with the arithmetic here.
That split is deliberate. The always-on janitorial work should scale with your inbox for free; the expensive thinking should cost something only when you ask for it.
Where this is still weak
- The mirror is bounded. Anything outside it needs the All-mail scope, which is slower.
- Semantic search depends on embedding coverage. A message that hasn’t been embedded yet is findable by keyword only.
- Answers inherit the model’s mistakes. The citations exist because we assume the answer might be wrong — follow them on anything that matters. If an answer has no citation, treat it as a guess.
- Attachments are shallower than message bodies. Text in the body is the strongest signal.
The habit worth forming
Ask a full question rather than a keyword. “What did the landlord say about the deposit?” beats “deposit” — the extra words are signal, not noise, and they’re what makes the semantic pass work.
Then click a citation. Not because you distrust the tool, but because verifying takes one click and that’s the whole point of building it this way. Try it on your own mail — the first question worth asking is what’s waiting on you today.
Frequently asked
Why can't I find emails I know exist?
Keyword search matches the sender's words, not your memory of the message. You remember "the contractor who quoted for the deck"; the email says "Estimate #2291 — rear timber decking". No shared keyword, no result. Semantic search compares meaning instead, which is why it finds messages whose wording you never knew.
How does semantic email search work in MorningZero?
Messages in the local mirror are turned into vector embeddings that capture meaning rather than wording. A search then runs two passes over your connected accounts — a keyword match and a nearest-neighbour vector match — and merges them. If embeddings are unavailable the search degrades to keyword-only rather than failing.
Does Ask Zero search all my accounts at once?
Search does: the instant tier queries every connected account unless you narrow it with an account filter. The Ask Zero conversation itself is scoped to the mailbox you have selected, and its chat history is stored per mailbox — so switching mailbox gives you a different conversation.
Do Ask Zero answers cost credits?
Yes. Answering a question is on-demand reasoning, so it draws on your AI credits. Background auto-labeling of incoming mail does not.