---
name: email-compose
description: Draft, reply to, and send email — always grounded in the actual thread, never with placeholders
allowed-tools: read_inbox read_email save_draft send_email
title: Email Composition
category: core
status: active
metadata:
  triggers:
  - draft a reply
  - draft an answer
  - draft email
  - draft a response
  - answer the email
  - answer the first
  - answer this
  - reply to
  - respond to
  - write back
  - write a reply
  - save to drafts
  - save as draft
  - put it in drafts
  - send email
  - send an email
  - email to
  priority: 7
---
## Instructions

Compose email replies and new messages that are grounded in real thread context and saved to the right place. You have email tools — use them. Never claim you lack email access: if you are reading this skill, the user has a connected account and the tools work.

### Available Tools

| Tool | Purpose |
|------|---------|
| `read_inbox` | List recent emails (sender, subject, uid, preview). Use to find the email the user is referring to. |
| `read_email` | Read the full body of one email by UID. Use before composing any reply — drafts must be grounded in the actual message. |
| `save_draft` | Save a draft to the user's Gmail/IMAP Drafts folder. This is the default action for "draft", "save to drafts", "put in drafts". |
| `send_email` | Send an email immediately. Only use when the user explicitly says "send" AND the draft content is already grounded. |

### Canonical Flow — Replies

When the user says "draft a reply to X", "answer the first one", "respond to this", "write back to Sarah":

1. **Identify the target message.** If the user said "the first one" / "this email" / "their message" / "the HubSpot one", call `read_inbox` to see the list. Pick the matching UID. Do not guess.
2. **Read the full body.** Call `read_email` with the UID. The reply must reference real content — sender's name, their actual subject line, specific points they raised. Never draft from the subject line alone.
3. **Compose grounded.** Use real values from the email:
   - `to`: the sender's address from the email
   - `subject`: `Re: <original subject>` (strip duplicated `Re:` prefixes)
   - `body`: address the sender by their real name, reference at least one specific point they wrote, answer the question they asked
4. **Save to drafts by default.** Call `save_draft` unless the user explicitly said "send". "Draft", "save to drafts", "put it in drafts", "write a reply" all mean `save_draft`, not printing text in chat.
5. **Report the outcome.** Tell the user the draft is in their Drafts folder and name the recipient + subject. Do not paste the full body back — it is already saved.

### Canonical Flow — New Emails

When the user says "email X about Y", "send a note to Z":

1. Confirm you have `to`, `subject`, and enough detail for `body`. If any is missing or vague, ask **one** sharp question.
2. Compose the email. Keep it concise unless the user asked for detail.
3. `save_draft` unless "send" was explicit. Even then, prefer `save_draft` + confirmation for anything longer than a one-liner to a familiar recipient.

### Answering Mode

If the channel is WhatsApp/Telegram in dedicated answering mode, email composition is still done through these tools. The draft lands in the user's Drafts folder regardless of which channel the request came in on.

## Rules

- **NEVER write placeholder tokens.** No `[Your Name]`, `[Subject]`, `[HubSpot Contact's Name]`, `[specific topic]`, `[date]`. Every field must be filled with a real value derived from the email thread, the user's profile (USER.md), or a direct user answer. If you cannot ground a field, ask one precise question — do not guess and do not write a bracketed placeholder.
- **NEVER claim you cannot create drafts.** You have `save_draft`. If it fails, the tool will return an error; report the error verbatim, do not pre-emptively refuse.
- **NEVER send without explicit "send".** "Draft", "write", "reply", "respond", "save" all mean `save_draft`. Only `send_email` when the user typed "send" or similar ("fire it off", "ship it", "go ahead and send").
- **NEVER print the full draft body in chat after saving it.** The draft is in Drafts; the user can open it there. A one-sentence confirmation is enough. Do paste the body if the user explicitly asks to see it before saving.
- **NEVER compose from the subject line alone.** Always `read_email` first to see what the sender actually wrote.
- **Read once, compose once.** Do not re-read the same email unless the user asks for a revision.
- **Sign off with the user's real name.** Pull from USER.md — the agent's system prompt already contains it. Do not use `[Your Name]` or invent one.

## Examples

### Example 1 — grounded reply (good)

**User:** "draft a reply to the hubspot email"

**Agent actions:**
1. `read_inbox(limit=10)` → finds message from `partnerships@hubspot.com`, subject "Partnership opportunity — Q2 pilot", uid=4821
2. `read_email(uid=4821)` → body asks whether the user has time for a 20-min call next week about a co-marketing pilot, proposes Tue/Wed 2-4pm CET
3. `save_draft(to="partnerships@hubspot.com", subject="Re: Partnership opportunity — Q2 pilot", body=<see below>)`

**Draft body (grounded, no placeholders):**
```
Hi Jamie,

Thanks for reaching out about the co-marketing pilot. Tuesday 2pm CET works for me — I'll send a calendar invite with a Google Meet link shortly. If anything comes up and Wednesday is easier on your side, let me know and I'll shift it.

A quick note before the call: could you share the two or three audience segments you're thinking of for the pilot? That way I can come prepared with our fit on each.

Best,
Romanas
```

**Agent reply to user:** "Saved a draft reply to Jamie at HubSpot accepting the Tuesday 2pm slot and asking for the audience segments. It's in your Drafts folder."

### Example 2 — placeholder-laden draft (bad — DO NOT DO THIS)

**Draft body:**
```
Hi [HubSpot Contact's Name],

Thank you for reaching out and for the update. Could you please elaborate more on [specific topic or question you have]?

Best regards,
[Your Name]
```

This is forbidden. Every bracketed field is fabrication. If the agent reaches a field it cannot ground, it asks one question instead of writing a placeholder.

### Example 3 — missing grounding, asks one sharp question

**User:** "email my accountant about the invoice"

**Agent:** Inbox has no recent thread with the accountant, USER.md does not list the accountant's email.

**Agent reply:** "What's your accountant's email address, and which invoice — the March one you mentioned last week, or a different one?"

Do not invent an address. Do not draft with `[accountant@example.com]`. Ask, then compose.

## Tone

Match the register of the original thread. Business partnership emails get a professional-but-warm tone. Casual personal emails get a casual tone. Mirror the sender's formality, length, and language (reply in Swedish if they wrote in Swedish, etc.). Never pad short replies with filler — if two sentences answer the question, send two sentences.