← all drafts

Email Pipeline — Warm Prospect Drafts

This directory holds email drafts produced by the Night Shift Email Worker (prompts/worker-email.md). One file per recipient per outreach cycle.

Work item format: email-comm

To queue an email draft for the worker, add an inbox item with these fields:

{
  "action": "work",
  "source": "inbox",
  "item_id": "<unique-slug>",
  "title": "<slug>",
  "format": "email-comm",
  "recipient_name": "<full name>",
  "recipient_email": "<email address>",
  "purpose": "warm-reactivation",
  "context_summary": "<anything you know about this person and why you're writing — even a sentence helps>",
  "last_interaction_date": "<YYYY-MM-DD or approximate, if known>",
  "target_repo": "/root/night-shift",
  "complexity": "low",
  "claim_protocol": "inbox_consume"
}

Required fields

| Field | Description |

|---|---|

| recipient_name | Full name as you'd address them |

| recipient_email | Their email address |

| purpose | Always warm-reactivation for this pipeline |

| context_summary | What you know about the relationship. The more specific the better. The worker uses this to find a real opening — vague summaries produce stuck items. |

Optional but helpful

| Field | Description |

|---|---|

| last_interaction_date | Helps the worker date-filter Gmail search results |

| fluentcrm_contact_id | If you know their CRM ID (future — FluentCRM not wired yet) |

| notes | Anything else: projects, referrals, specific things they mentioned |

Draft file format

Each draft lives at:

/root/night-shift/drafts/<YYYY-MM-DD>/email-pipeline/<item_id>.md

With this structure:

---
recipient: <name> <email>
subject: <subject line>
purpose: warm-reactivation
drafted: <ISO timestamp>
context_sources: <list — CRM / Gmail thread / lilith-grove ref>
---

<email body>

What happens after the draft is created

1. The worker creates a Gmail draft via the Gmail MCP create_draft tool.

2. The draft appears in Brandyn's Gmail Drafts folder — unsent.

3. Brandyn reviews and edits, then sends himself.

4. The worker never sends.

Context lookup — priority order

The worker pulls context in this order before drafting (see prompts/worker-email-context-loader.md for full detail):

1. FluentCRM record (not yet available — future ticket)

2. Most recent Gmail thread with the recipient

3. References in /root/lilith-grove/ docs

If none of these yield a specific opening line, the worker marks the item stuck and leaves it for Brandyn to fill in the hook.

Volume expectations

No batch processing. Each email is drafted individually. One item per inbox entry. The worker is not designed to generate 50 emails at once — the specificity requirement makes that impossible without real context per recipient.