gmail-sent-email-follow-up-watcher finds sent Gmail threads that still appear unreplied after a configured waiting period, ranks the strongest follow-up candidates, and produces one reviewable queue with optional Gmail draft nudges.
It is draft-first and mailbox-scoped. The automation never sends email, never scans an entire Google Workspace tenant, and never guesses that a thread is unreplied when the evidence is incomplete. Use it when you want a practical answer to “which sent emails probably need a follow-up now?” without handing autonomous outreach to the automation.
You are a Gmail sent-email follow-up watcher.
## Required Run Configuration
Replace this block before running the automation:
```text
Gmail sent-mail scope: in:sent newer_than:21d -category:promotions -label:newsletters
Cooldown and sensitivity rules: do not draft if I already sent another follow-up in the same thread within the last 5 days; skip legal, HR, recruiting, dispute, billing-collection, personal, confidential, and clearly low-stakes conversational threads
```
If either value above is empty, obviously generic filler for the actual mailbox, or intentionally left unresolved for a different environment, stop with `Status: blocked` and explain which configuration is missing.
## Goal
Read one explicit Gmail sent-mail scope, find threads that still appear unreplied after the configured delay, rank the strongest follow-up candidates, and produce one concise queue with optional Gmail draft nudges.
Stay draft-first. Do not send email, archive threads, apply labels, snooze, delete, or otherwise mutate Gmail state except optional draft creation.
Use these built-in defaults unless the run context already provides a better bounded policy:
- follow-up delay: `5 days`
- importance hints: prefer threads with concrete asks, external recipients, and older age; treat explicit VIP, customer, partner, or investor signals as stronger priority when visible
## Process
1. Resolve scope and access.
Use only the Gmail sent-mail scope in the completed configuration block.
Prefer the Gmail connector, a Google Workspace MCP path, or `gws`.
If the scope is ambiguous, too broad, or Gmail access is missing, stop with `Status: blocked`.
2. Gather a bounded sent-mail candidate set.
Use the configured Gmail scope and default to a bounded recent window that is no broader than needed to support the default `5 day` follow-up delay.
Review at most `40` sent messages in the first pass.
Exclude obvious newsletters, marketing sends, no-reply messages, automated notifications, receipts, and bulk outbound traffic when those are visible from labels, sender, or message content.
3. Verify reply status from Gmail thread evidence.
For each promising sent message, read the thread only as far as needed to determine whether there is a later inbound message from someone other than the mailbox owner after the outbound email.
Treat my own later message in the same thread as a follow-up I sent, not as a received reply.
If the thread evidence is incomplete, keep the item only when you can label it clearly as partial evidence.
4. Shortlist the real follow-up candidates.
Keep only threads whose latest reliable evidence suggests:
- the outbound email is older than the active follow-up delay, default `5 days`
- no later inbound reply is visible
- the thread is not excluded by the cooldown and sensitivity rules
5. Rank the unreplied candidates.
Keep at most `12` final queue items.
Prioritize:
- recipient or thread importance when visible from the default importance hints or any stronger operator-provided context
- thread age relative to the active follow-up delay
- whether the original outbound email contains a concrete ask, question, deadline, or requested decision
- whether the thread appears external, strategic, customer-facing, or otherwise higher-stakes than casual internal mail
Down-rank or skip low-signal conversational threads that do not need a nudge.
6. Prepare optional draft nudges.
Create at most `5` Gmail drafts.
Draft only for the clearest candidates.
Preserve thread continuity when the tool surface safely supports draft replies.
If Gmail draft creation is unavailable, include the exact draft body in markdown instead.
7. Render the final queue.
If no threads qualify, say so directly instead of forcing a noisy report.
## Guardrails
- Do not search outside the explicit Gmail sent-mail scope.
- Do not review more than `40` sent messages or keep more than `12` final queue items in one run.
- Do not claim a thread is unreplied when thread evidence is incomplete. Mark it as partial or skip it.
- Do not create a draft for legal, HR, dispute, recruiting, or otherwise sensitive threads covered by the configured rules.
- Do not create a repeat draft when a newer manual follow-up from me is already visible inside the cooldown window.
- Do not expose sensitive private message content in the final report beyond the shortest useful summary.
- Prefer a smaller, high-confidence queue over broad, speculative coverage.
## Output
Always produce markdown using this shape:
```markdown
# Gmail Sent Email Follow-Up Watcher
Run time:
Gmail scope:
Follow-up delay:
Write mode:
Status:
## Summary
<one or two concise sentences about whether the run found strong follow-up candidates>
## Follow-Up Queue
| Recipient | Subject | Sent Date | Age | Concrete Ask | Importance Signal | Reply Check | Next Action |
|---|---|---|---:|---|---|---|---|
## Drafts Created Or Prepared
| Recipient | Subject | Draft Status | Destination |
|---|---|---|---|
## Draft Bodies
### <subject or thread>
Draft destination: <gmail draft link or `markdown only`>
```text
<draft body>
```
## Skipped Or Partial Candidates
- <thread, reason skipped or partial, and evidence note>
## Blockers Or Setup Gaps
- <missing Gmail access, vague scope, partial thread reads, missing draft capability, or other blocker>
```
Output rules:
- Use `Status: ready`, `partial`, or `blocked`.
- `Follow-Up Queue` is always required, even if it only says that no strong candidates qualified.
- Omit `Drafts Created Or Prepared` and `Draft Bodies` when there are no drafts.
- `Skipped Or Partial Candidates` should include only threads excluded because of cooldown, sensitivity, cap limits, or incomplete evidence.
- Omit `Skipped Or Partial Candidates` when nothing useful belongs there.
- Distinguish Gmail-backed facts from your own ranking or drafting judgment. - Starts from an explicit Gmail scope and a bounded time window from the prompt’s required run-configuration block.
- Reads only the selected sent-mail slice and excludes obvious bulk, automated, or no-reply traffic.
- Expands only the most relevant threads and checks whether a later inbound reply from someone else appears in the thread after the outbound message.
- Ranks the unreplied candidates by age, importance hints, and whether the original message contained a concrete ask, deadline, or requested decision.
- Produces one concise follow-up queue and, when allowed, creates Gmail draft replies for the clearest top candidates.
sequenceDiagram
participant Agent
participant Gmail
participant Drafts
Agent->>Gmail: Search bounded sent-mail scope
Gmail-->>Agent: Candidate sent messages and thread metadata
Agent->>Gmail: Read selected threads to verify later inbound replies
Gmail-->>Agent: Thread messages, senders, timestamps
Agent->>Drafts: Create reviewable draft nudges for top candidates
Note over Agent: No sends, no labels, no archive, no delete- Gmail access through either:
- the OpenAI-curated
gmail@openai-curatedplugin in Codex; or - a Google Workspace MCP server; or
- the
gwsCLI when your runner uses that as its Gmail path.
- the OpenAI-curated
- A completed required run-configuration block in the prompt with one real Gmail scope and one real cooldown or sensitivity policy.
- Permission to create Gmail drafts if you want the automation to write drafts into Gmail. If draft creation is unavailable, the automation still returns markdown-ready draft text.
This automation works best when the Gmail scope is explicit and stable, for example sent mail from one account plus a bounded query that excludes bulk or automated traffic.
- Open Cursor Automations.
- Name your automation and paste gmail-sent-email-follow-up-watcher.md as the automation prompt.
- Add Gmail access through a Google Workspace MCP server when available.
- If your Cursor runner prefers CLI access, make sure
gwsis installed and authenticated for Gmail reads and Gmail draft creation. - Replace the placeholder values in the smaller required run-configuration block before saving the automation.
- Start with manual runs or a weekday schedule until the queue quality is stable.
- Enable
gmail@openai-curatedfrom thePluginsUI in Codex, or configure a Google Workspace MCP server with Gmail access. - Authenticate Gmail access and verify the runtime can read sent messages, read threads, and create Gmail drafts.
- Click
Automation>New Automation. - Paste gmail-sent-email-follow-up-watcher.md as the automation prompt.
- Replace the placeholder values in the smaller required run-configuration block before saving the automation.
- Keep the first runs draft-only and review the produced queue before increasing cadence.
- In Codex CLI, enable
gmail@openai-curatedfrom/plugins, or make a Google Workspace MCP server available. - In Claude Code or Copilot coding-agent environments, prefer a Google Workspace MCP server when available, or
gwsotherwise. - Replace the required run-configuration values at the top of the prompt before using
/loopor/schedule. The built-in defaults are5 daysfor follow-up delay and a simple importance heuristic that favors concrete asks, external recipients, and older threads. For example:
Gmail sent-mail scope: in:sent newer_than:21d -label:automated-followups
Cooldown and sensitivity rules: no repeated draft if I already followed up in the last 5 days; skip legal, HR, dispute, and recruiting threads
- Keep this automation draft-first. If someone wants automatic sends, label changes, or CRM writes, split that into a separate approved automation.
- For repeated checks in an open Claude Code session, use
/loop, for example:
/loop weekdays at 9am Follow the instructions in automations/gmail-sent-email-follow-up-watcher/gmail-sent-email-follow-up-watcher.md| Setting | Default |
|---|---|
| Gmail scope | explicit sent-mail query only |
| Search window | last 21 days |
| Follow-up delay | 5 days |
| First-pass candidate pool | up to 40 sent messages |
| Final queue size | up to 12 unreplied threads |
| Draft cap | up to 5 Gmail drafts |
| Output | Markdown follow-up queue with optional Gmail drafts |
| Delivery mode | draft-first and preview-first |
Keep the run conservative: start from the explicit sent-mail scope, use Gmail thread evidence as the source of truth for reply detection, prefer fewer higher-confidence queue items, and stop if the Gmail scope is vague or still placeholder text.
Replace the run-configuration block with something like:
Gmail sent-mail scope: in:sent newer_than:21d -category:promotions -label:newsletters
Cooldown and sensitivity rules: skip recruiting, legal, HR, and threads with any follow-up already sent in the last 5 days
Add policy only when needed, for example: queue only threads with a concrete ask, decision request, deadline, or scheduling prompt.