Skip to content

Triage

The Triage page is the "things to look at" hub — it has two tabs:

  • Gmail — pending findings from a Gmail inbox scan. You accept or dismiss each one.
  • Email-in — documents that arrived by forwarding to your private Maud address (forward+<token>@inbound.heymaud.com). These are already auto-filed in the topic and house the AI picked — the tab is a Review surface where you spot-check and confirm.

A red badge next to Triage in the nav sums both tabs; whichever tab has work shows its own count chip on the tab header.

The rest of this page explains the Gmail tab in detail (the older, larger workflow). The Email-in tab works by the same "one click per item" rhythm: each row has a Confirm ✓ button (saves it as reviewed and drops it off the tab) and an Edit link (opens the standard per-document edit screen if the AI got the topic or house wrong). There's no time-out — items sit there indefinitely until you act.

Gmail Triage

Most UK property documents arrive by email. Connecting Gmail lets Maud find what's already there and surface it for review — without you having to forward, save, or re-upload anything.

What we read, and what we don't

The OAuth scope is read-only access to messages with attachments. We never:

  • Send mail from your account.
  • Modify, label, archive, or delete anything in your inbox.
  • Read messages that have no attachments.
  • Look at messages older than the scan window — the first scan covers the last ~180 days (capped at 100 messages); ongoing scans only look at mail since the previous scan ran.

When you connect Gmail, what we keep server-side is your OAuth refresh token (encrypted at rest with Fernet AES-128 + HMAC) and the metadata of the candidate documents we surface — sender, subject, date, attachment filename. The original PDF/image bytes stay in Gmail until you accept a finding; at that point we download the attachment onto your filed Document so you can view and re-download it from Maud without going back to Gmail. Findings you dismiss are never downloaded.

You can disconnect at any time from the dashboard's Get documents in panel. Existing triage items stay; new scans stop.

Multiple members, multiple inboxes

A household can have several members, and each member's Gmail connection is independent. When a partner is invited to a household, the dashboard shows the Connect Gmail tile to them even if you (the owner) have already connected — clicking it links their inbox to the same shared triage queue.

Findings from every connected inbox land in the same household triage page. Either of you can accept or dismiss anything in there. Disconnecting only removes your own Gmail link; your partner's stays connected and continues to surface findings.

How a scan works

Once connected, Maud runs a background scan immediately. The pipeline is:

  1. Fetch the most recent ~100 messages with attachments.
  2. Heuristic pre-filter — score each attachment against the fingerprint of every document type Maud knows (~100 types: council tax bills, P60s, MOT certificates, NHS letters…) plus your household's own context tokens. The context is derived automatically from what you've registered — house names and postcodes, vehicle names and registration plates, family names — so adding a vehicle makes the very next scan recognise emails about its plate. Inline images are skipped; duplicates are collapsed (same Gmail thread, same file bytes, same recurring sender + subject); and anything you've dismissed twice before is dropped silently (see Learned suppression below).
  3. Classify the survivors with Claude — the same model that processes uploads. Claude sees the email subject + sender + body snippet, your registered houses/vehicles/people, and the file bytes for PDFs. It assigns one of the nine Maud topics — so medical letters, payslips and passports surface alongside property docs — or decides the email isn't a personal record at all, in which case it never reaches your queue.
  4. Bucket by lifecycle state and confidence.

You'll usually see 10–40 candidates from a year of typical UK family email. Some will be obvious wins (signed insurance schedules, council letters, HMRC). Some will be in-progress drafts that aren't ready to file. Some will be noise.

The four buckets

The Triage page groups findings by lifecycle state:

  • Signed and final — DocuSigned contracts, completed letters, any document where the prompt is sure it's the final version. Sweepable in one click via Accept all.
  • Needs your eye — anything ambiguous. Click each row to review the email + attachment side by side, then accept or dismiss.
  • Drafts — interim or unsigned versions, often superseded by something later in the same thread.
  • Low signal — auto-flagged junk (image001 inline images that slipped through, marketing newsletters, irrelevant attachments). Hidden by default; expand if you want to verify nothing important is in there. A Dismiss all button at the top of the bucket clears the whole pile in one click once you've sanity-checked the contents.

The scan-time heuristic also rejects phone-camera attachments outright — IMG_NNNN.* filenames and oversized bare image/heic / image/jpeg files never become candidates, so they don't even reach the low-signal bucket.

Accepting

Each accept files the document — the same flow as if you'd uploaded it directly.

The review screen shows a "Filed under" person chip — whose records this document lands in, switchable to any household member from its dropdown. When the AI's guess matches someone you've registered (a school report mentioning Marcus), the chip pre-selects them with a ✨ so you notice the steer before accepting. If the AI names someone you haven't registered, the hint is actionable in place: one click adds them as a person (pick child / partner / parent / other relative) and the chip selects them — then accept as normal. The one-click accept button never guesses — without an explicit choice, documents file under you. The classifier's proposed metadata becomes the default; click into the row to edit before confirming if anything looks off.

The review screen also has a tag picker with the same suggestions you'd see on the confirm form — ✨ chips for the AI's per-document proposals only; your existing tags stay in the input's autocomplete rather than appearing as chips just because they exist. Pick or type tags before clicking Save and keep — they're applied to the resulting Document on creation, no follow-up step.

If a document has a proposed_named_item (e.g. "16 High Street"), it auto-files against that property when you accept. Otherwise it lands in the Home topic's Unassigned block and the dashboard prompts you to auto-file or move manually.

Dismissing

Dismissed items stay marked dismissed forever — re-running the scan won't re-surface them. The Gmail message itself is untouched.

Learned suppression

Dismissing also teaches the scan. Each dismissal records a fingerprint of the email (sender domain, subject, attachment). Dismiss the same kind of email twice and future scans drop it silently — it never appears in your queue again, and we never pay the AI to look at it again. One accidental dismissal never blacklists a sender; it takes two.

Everything being auto-suppressed is listed at Triage → Auto-suppressed senders (/triage/suppression/), each rule with a Revoke button. Revoke a rule and matching emails surface again on the next scan.

Re-running

Maud re-scans your inbox automatically once a week. You don't have to do anything — when there's something new, the Triage badge in the nav bumps up and you'll find it next time you open the app.

If you can't wait for the weekly run, hit the Scan inbox now link on the right of the Triage page's banner. The banner flips to "Scanning your inbox…" with a small "(N s elapsed)" counter so you can see it's working — most scans finish in well under a minute. When it's done, the banner shows what came back: "Just scanned. Found 3 new findings." or "Just scanned. No new emails to triage." for about half a minute, and the button hides itself in the meantime so you can't accidentally fire a second scan while reading the result. After that the button comes back.

Each ongoing scan only looks at mail that arrived since the last scan ran (with three days of overlap to be safe). The first scan after you connect Gmail is still the full 180-day sweep — that one's the project-mode "let's sort everything out" run; the weekly ones are the "anything new?" check-ins.

Dismissed items never re-surface — the dedup tracks every message we've seen, and the learned-suppression rules ensure repeat senders you've dismissed twice don't reach the classifier again. Cost-wise: each weekly scan is a couple of pence at most after suppression kicks in.

If you want a clean slate — say you've changed property names or want to test the pipeline — your developer can reset the whole household to an empty sandbox via:

fly ssh console -a maud -C 'python manage.py wipe_household --user <username>'

This wipes documents, findings, named items, profiles, and activity history. The Gmail OAuth connection is kept so the next scan starts immediately.