Email Drafting logo

Email Drafting

Community
mgonto
email-drafting

Draft email replies for Gonto's Gmail accounts (m@gon.to, gonto@hypergrowthpartners.com). Handles intro acceptances, scheduling intent, thanks/ack, and positive short replies. Use when user asks to draft or reply to an email, or when Gmail webhook triggers arrive for auto-draft classification. Draft-only mode — never sends automatically.

Overview

Publishermgonto
Repositoryexecutive-assistant-skills
Skill nameemail-drafting
Stars
121
Forks
14
Bundled files
Instructions only
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by mgonto on GitHub. Read the source before you install it.

Installation

Install the Email Drafting AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/mgonto/executive-assistant-skills/tree/main/email-drafting
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/mgonto/executive-assistant-skills.git /tmp/executive-assistant-skills
mkdir -p .claude/skills
cp -r /tmp/executive-assistant-skills/email-drafting .claude/skills/email-drafting
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Email Drafting in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Email Drafting on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Email Drafting is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Email Drafting Skill

Config — read before starting

Read ../config/user.json (resolves to ~/executive-assistant-skills/config/user.json). Extract and use throughout:

  • primary_email, work_email — Gmail accounts
  • scheduling_cc — scheduling assistant email (CC on all scheduling emails, mention in body)
  • scheduling_silent_cc — silent CC for scheduling visibility (do NOT mention in email body)
  • signature — sign-off for all drafts (e.g. "--gonto")
  • name — short name for context

Do not proceed until you have these values.

Debug Logging (MANDATORY)

Read ../config/DEBUG_LOGGING.md for the full convention. Use python3 {user.workspace}/scripts/skill_log.py email-drafting <level> "<message>" ['<details>'] at every key step. Log BEFORE and AFTER every external call (gog gmail, mcporter, todoist-cli). On any error, log the full command and stderr before continuing.

Overview

Auto-draft and manually-requested email drafts for {user.primary_email} and {user.work_email}.

When to Use

  • Gmail hook detects a trigger (intro, scheduling, thanks/ack, positive reply)
  • User asks to draft/reply/send an email
  • Action items cron identifies email follow-ups needed

Architecture

  • Detects triggers and creates Gmail drafts
  • Handles all scheduling (slot-finding, conflict checking, calendar ops)
  • NEVER proposes specific dates/times or creates calendar events

Execution

  • "Reply" always means Reply All — include all original To + CC recipients. Only exclude if user explicitly says to reply to one person. Exception: intro handling moves the introducer to BCC per the intro sequence below.
  • After sending any email/draft, check if it fulfills an open Todoist task (send deck, intro, follow-up, etc.). If yes → complete the task immediately and confirm.
  • Hook/cron triggers: Always run via isolated sub-agent (prevents memory/context contamination)
  • Direct user requests ("draft a reply to X"): Main agent may execute directly, but must still follow all style rules and must NOT read MEMORY.md or daily memory files

Rules (non-negotiable)

Core

  1. Draft-only mode — never send automatically
  2. Mirror inbound language — match the language of the most recent non-automated message in the thread. If the thread has mixed languages, default to the language of the message you're replying to.
  3. Always sign — end every draft with {user.signature}
  4. Low confidence — don't draft; ask user for guidance
  5. No dash punctuation — no em-dash/en-dash in bodies. Use commas/periods.
  6. Humanize — before finalizing any draft, review it against ~/executive-assistant-skills/humanizer/SKILL.md. Remove AI-writing markers: inflated symbolism, promotional tone, em-dash overuse, "delve"/"leverage"/"foster" vocabulary, rule-of-three patterns. Email-specific rules (no dashes, signature, brevity) take precedence over humanizer suggestions if they conflict.

Intro Handling (required sequence)

  1. Thank introducer first
  2. Move introducer to BCC
  3. Reply to introduced contact directly
  4. CC {user.scheduling_cc} and {user.scheduling_silent_cc} for scheduling
  5. Include one line like: "Connecting {user.scheduling_cc_name} to find a time."
  6. Do NOT mention {user.scheduling_silent_cc} in the email body — silent CC only

Scheduling Drafts

  • ALWAYS CC {user.scheduling_cc} AND {user.scheduling_silent_cc}
  • NEVER propose specific dates or times
  • Just confirm willingness to meet + mention scheduling assistant will coordinate
  • Example: "Connecting Alfred to find a time that works"
  • Do NOT mention {user.scheduling_silent_cc} in the email body — she's CC'd silently for visibility

Allowed Auto-Draft Classes

  • Thanks/ack
  • Scheduling intent
  • Positive short replies
  • Intro acceptance

Notification Format

  • account + one-line intent + draft link
  • Example: 📧 Draft ({user.primary_email} → John): intro acceptance. https://mail.google.com/...

Draft Links

After creating a draft via gog, extract the draft ID from the response. Gmail draft URL format: https://mail.google.com/mail/u/?authuser={account_email}#drafts?compose={message_id} Use authuser=m@gon.to or authuser=gonto@hypergrowthpartners.com as appropriate.

Trigger Detection

A) Intro

  • Cues: intro, introduction, meet, connecting you, looping in, cc'ing
  • At least 2 external participants + clear handoff language
  • Apply intro sequence exactly

B) Scheduling Intent

  • Cues: find a time, schedule, availability, next week, calendar
  • Spanish cues: agendar, agenda una, tenés unos minutos
  • CC scheduling contacts, don't propose times

C) Thanks/Ack

  • Cues: thanks, got it, appreciate it, status updates
  • Short acknowledgment + optional one-line next step

D) Positive Short Reply

  • Cues: works for me, sounds good, perfect, great
  • Short affirmative + close

Skip Conditions (do NOT auto-draft)

  • Confidence low / intent ambiguous
  • User already replied in the thread (SENT message exists)
  • Legal, financial, security, hiring-final, sensitive conflict topics
  • Multi-question strategic asks
  • Automated/system/calendar notifications
  • Messages requiring attachments, deep verification, or policy commitments
  • Language unclear or unmirrorable
  • Scheduling confirmations — NEVER auto-draft emails that simply confirm a scheduled time or acknowledge a calendar invite. The scheduling assistant (Alfred/Howie) handles all scheduling coordination. Auto-drafting "confirming our call at X" creates noise and duplicates the scheduler's work. This includes: confirming times proposed by the scheduler, acknowledging calendar invites, and "looking forward to our call" type replies to scheduling threads.

Confidence Gate

Only auto-draft when ALL are true:

  • Trigger class is one of the 4 allowed
  • Language confidently detected and mirrorable
  • Clear recipient intent and next step
  • No skip condition present

Otherwise: ask user.

Drafting Principles

  • Keep it SHORT — drafts are always brief. 2-3 short paragraphs max.
  • No over-explaining — state the point, don't elaborate unless necessary
  • When promising intros: before drafting the intro, search sent emails for previous intros to that person/company, copy the format and tone, and use the same email address
  • When recommending a person/company: use your own words from past emails about them rather than inventing new descriptions
  • Deck/one-pager: say "Hypergrowth Partners deck" (not "our one-pager" or "our deck"). When attaching, frame WHY it's useful (e.g. "where we explain what Hypergrowth is and how we help companies")
  • Future availability: frame as an opportunity, not a brush-off. Position it warmly: "I'd love to reconnect then to explore working together if the timing still makes sense" rather than blunt "let's connect closer to June"
  • Offers of help should use meeting context: read Granola notes from the call and reference specific things discussed. The draft should feel like it came from someone who was in the meeting.
  • No generic "Great meeting today" unless it's explicitly a first meeting (first VC call or first dealflow call).
  • Proposal-first rule: if the commitment is to build/provide a proposal first, do not draft outbound email yet; create TODO only.

Use Grain as primary source for meeting-based drafts

When drafting follow-up emails from meetings, Grain transcript is the primary source (not Granola):

  1. Find the meeting in Grain: mcporter call grain.list_attended_meetings --args '{"limit": 5}'
  2. Fetch transcript: mcporter call grain.fetch_meeting_transcript --args '{"meeting_id": "<id>"}'
  3. Search transcript for email commitments: "I'll send", "I'll email", "I'll share", "let me intro", "I'll follow up", "I'll connect you", etc.
  4. Draft from the transcript — use your actual words and the real conversation context, not Granola's summary.
  5. Fall back to Granola only if Grain has no recording for that meeting.

Style

Read {user.workspace}/style/EMAIL_STYLE.md for the full writing style guide (derived from 200+ real sent emails). Read {user.workspace}/style/FEEDBACK_LOG.md for user corrections — latest overrides win.

Key points:

  • Friendly, concise, action-oriented. Warm but not fluffy.
  • 1–4 short paragraphs, ~6–7 word sentences
  • Context-first openings, straight to point
  • Common opens: "Hey ,", "Thanks…", "Perfect…", "Great…"
  • Sign off: {user.signature}
  • No dash punctuation (no em-dash/en-dash)
  • Do: be brief, clear, warm, decisive, include draft link in notification
  • Don't: over-explain, corporate fluff, long formal prose

Templates

  • Primary: {user.workspace}/style/EMAIL_TEMPLATES.md — pattern templates (intros, follow-ups, VC, etc.)
  • Legacy (HGP v1): {user.workspace}/style/email-templates.md — HGP business templates. Use only for HGP-specific business contexts. Primary templates take precedence on conflicts.

Audit Logging (MANDATORY)

After every external action, log it:

  • Draft created: python3 {user.workspace}/scripts/audit_log.py log email_drafted "<recipient>" success '{"account": "<account>", "subject": "<subject>", "type": "<trigger_class>"}'
  • Email sent: python3 {user.workspace}/scripts/audit_log.py log email_sent "<recipient>" success '{"account": "<account>", "subject": "<subject>"}'
  • Draft skipped (low confidence): python3 {user.workspace}/scripts/audit_log.py log email_draft_skipped "<recipient>" skipped '{"reason": "<reason>"}'

Auto-Draft Constraints

  • NEVER create calendar events — only the scheduling assistant handles that
  • Only create email drafts
  • Include --to <sender> explicitly when creating drafts

Auto-Draft WhatsApp Notification (MANDATORY)

Every time a draft is created automatically (via Gmail hook or any automated trigger), you MUST send a WhatsApp notification to {user.whatsapp} with:

✏️ *Auto-draft created*

*To:* <recipient name> (<email>)
*Subject:* <subject>
*Account:* <account>
*Trigger:* <intro/scheduling/thanks/positive reply>

*Draft text:*
> <full draft body — include the complete text so user can review without opening Gmail>

🔗 <Gmail draft link>

Reply "send" to send, or edit in Gmail.

This is non-optional. The user must be able to read and approve the draft from WhatsApp without opening Gmail.

Notification Policy

  • No routine "no change" notifications
  • Alert on: meaningful changes, breakages, time-sensitive items, auto-drafted emails
  • Time-sensitive: approvals, meeting changes, 2FA codes, security, travel changes
  • Evaluate Promotions, suppress Spam/Junk/Trash

Frequently asked questions

What does the Email Drafting AI skill do?

Draft email replies for Gonto's Gmail accounts (m@gon.to, gonto@hypergrowthpartners.com). Handles intro acceptances, scheduling intent, thanks/ack, and positive short replies. Use when user asks to draft or reply to an email, or when Gmail webhook triggers arrive for auto-draft classification. Draft-only mode — never sends automatically.

Why use Email Drafting on TypingMind?

Because you install it once and use it with any model. Email Drafting is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Email Drafting in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/mgonto/executive-assistant-skills/tree/main/email-drafting. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Email Drafting?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Email Drafting?

As many as you like. As long as a model supports skills, you can use Email Drafting with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Email Drafting AI skill free?

It is published on GitHub by mgonto. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇