brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
draft-emailDraft professional emails (MoM, status updates, decisions, stakeholder communication) and save as a draft in your email provider. Use this skill after a meeting, decision, spec update, or any event that needs email communication. Trigger phrases: "send MoM email", "draft meeting minutes email", "MoM email for [meeting]", "create MoM draft", "email the meeti…
Independent GitHub snapshot · Automated classification · Original documentation governs
Based on Smart Brevity (Axios), Minto Pyramid Principle (McKinsey), Writing That Works (Ogilvy), HBR Guide to Better Business Writing (Garner), On Writing Well (Zinsser), and Made to Stick (Heath Brothers).
The reader is busy. They will scan, not read. Every line must earn its space. If a line doesn't help the reader understand or act, cut it.
Headers like "What's new" and "Why it matters" are tools, not mandatory labels. Use them when they help the scanner — drop them when they feel forced. The rule: every email leads with the answer and ends with impact. How you get there depends on the email type.
Use "What's new" + "Why it matters" headers ONLY when there is a genuine decision or announcement. For MoMs that summarize observations, discussions, or session findings (no single decision to announce), skip these headers and open with a direct context line.
# When there IS a key decision/announcement:
1. WHAT'S NEW (1 strong sentence - the key decision or outcome)
2. WHY IT MATTERS (1 sentence - impact on project/timeline)
3. GO DEEPER (numbered sections with SCQA for decisions)
4. WHAT'S NEXT (action items with named owners)
5. REFERENCE (attendees, links)
# When summarizing observations/discussions:
1. OPENING LINE (direct context: who met, what was discussed, key takeaway)
2. FINDINGS (numbered sections grouped by theme)
3. WHAT'S NEXT (action items with named owners)
4. REFERENCE (attendees, links)
NO "What's new" — there is no news, it's a report. The data IS the message.
1. OPENING LINE (direct: "Here is the team-wise breakdown of X as of DD-MM-YYYY.")
2. CONTEXT LINE (why the reader should care)
3. DATA TABLE (the primary content - sortable, with filter links)
4. KEY OBSERVATIONS (numbered, bold labels - highlight blockers, risks, outliers)
5. WHAT'S NEXT (action items with named owners)
6. CLOSING LINE (impact - what this means for the project)
7. REFERENCE (master filter, label, links)
NO headers at all — context already exists. Jump straight into the response.
1. DIRECT RESPONSE (answer the question or share the update)
2. DETAILS if needed (numbered points)
3. WHAT'S NEXT if actions are needed
Use "What's new" only if there is genuinely something new. Otherwise open with a direct line.
1. WHAT'S NEW or OPENING LINE
2. WHY IT MATTERS (1 sentence)
3. DETAILS (numbered sections)
4. WHAT'S NEXT (action items)
5. REFERENCE (links)
NO "What's new" — you're telling people what to do, not announcing news.
1. OPENING LINE (what this email covers + why it matters in 1-2 sentences)
2. ROLE-BASED SECTIONS (numbered, one per role/team)
3. SUMMARY (1-line per role as a quick reference)
When in doubt: "What's new" is ONLY for emails where there is a single piece of news to announce. For everything else - meeting summaries, observations, data reports, process notes, instructions - skip the header and open with a direct context line.
<ul>. Always <ol>. People need to say "point 3" in meetings, not count bullets.a. b. c. as plain text with <br/> for sub-points<b>Section Name</b> for every section header<a href="url">[PROJECT-XXXXX]</a><a href="url">Page Title</a><table border="1" cellpadding="6" cellspacing="0" style="border-collapse:collapse; font-size:14px;">. Use tables when data has 3+ rows and 3+ columns. Header row: background-color:#f2f2f2; totals row: bold + same background.<a target="_blank" class="ze_mention" href="mailto:email@[your-domain]">Full Name</a>). Look up email from your team directory.<p>Hi all,</p>
<p><b>What's new:</b> [One sentence - the key decision or outcome]</p>
<p><b>Why it matters:</b> [One sentence - impact on project/timeline]</p>
<p><b>1. [Section title]</b></p>
<p>[1-2 sentences of context using SCQA]</p>
<p><b>2. [Section title]</b></p>
<p>a. [Point with why]<br/>
b. [Point with why]</p>
<p><b>3. What's next</b></p>
<p>a. [Owner @mention] - [specific action]<br/>
b. [Owner @mention] - [specific action]</p>
<p>[One line positioning - what this means for the project]</p>
<p><b>Reference:</b><br/>
Meeting ([purpose]): [attendee names]<br/>
Wiki: <a href="url">Page Title</a><br/>
Ticket: <a href="url">[PROJECT-XXXXX]</a></p>
<p>Regards,<br/>[your name]</p>
<p>Hi all,</p>
<p>Here is the [topic] breakdown as of [DD-MM-YYYY].</p>
<p>[One sentence - why the reader should care]</p>
<p><b>1. [Data section title]</b></p>
<table>
[Table with data, status columns, filter links, @mention leads]
[Total row with bold + background]
</table>
<p>[Callout for items outside filters, if any]</p>
<p><b>2. Key observations</b></p>
<p>a. [Observation with bold label and specific numbers]<br/>
b. [Observation]</p>
<p><b>3. What's next</b></p>
<p>a. [Owner @mention] - [specific action]</p>
<p>[One line - what this means for the project]</p>
<p><b>Reference:</b><br/>
Master filter: <a href="url">#XXXXX</a></p>
<p>Regards,<br/>[your name]</p>
<p>[Direct response - answer the question or share the update]</p>
<p>a. [Detail point]<br/>
b. [Detail point]</p>
<p>[Action items if needed]</p>
<p>Regards,<br/>[your name]</p>
<p>Hi all,</p>
<p>[Opening line - "What's new:" if genuine news, or direct context line]</p>
<p><b>Why it matters:</b> [One sentence - impact]</p>
<p><b>1. [Section title]</b></p>
<p>[Details]</p>
<p><b>2. What's next</b></p>
<p>a. [Owner @mention] - [specific action]</p>
<p>[One line positioning]</p>
<p><b>Reference:</b><br/>
[Links]</p>
<p>Regards,<br/>[your name]</p>
Score the draft on each point. Fix anything below 8 before saving.
| # | Criteria | Test |
|---|---|---|
| 1 | Can the reader understand the key message in 10 seconds? | Read only the first 3 lines |
| 2 | Is the answer before the context? (Minto) | First sentence = conclusion |
| 3 | Does every section earn its space? | Remove it - does the email still work? |
| 4 | Are all lists numbered (no bullets)? | Grep for <ul> - should be zero |
| 5 | Are all links clickable? | No plain-text URLs or ticket IDs |
| 6 | Is every action item named with an owner? | No "Engineering - estimation needed" without a person |
| 7 | Are em-dashes absent? | Grep - should be zero |
| 8 | Is it under 400 words? | wc -w |
| 9 | Does it end with impact/positioning? | Last line before sign-off = "so what?" |
| 10 | Are attendees at the bottom, not the top? | Reference section, not metadata block |
| 11 | Average sentence length under 20 words? | Count words in 3 longest sentences - none should exceed 30 |
| 12 | Is there one concrete example or specific number? | At least one "e.g." or specific figure |
Determine the email type FIRST, then follow the matching structure and template.
MoM - <Short Title> (<DD Mon>)[Project] | <Topic> - <Key Number> (<Summary>)Re: <existing thread>inReplyTo message ID for threading. Preserve To/CC from original thread.Re: <existing thread> or [Project] | Updates | <topic>Process - <Short Title>.local/meetings/processed/<monthname-yyyy>/<date>-<slug>.md.local/team/users.md - canonical name-to-email mapping (set up as a user convention)For MoM: Read the processed meeting file. Extract title, date, attendees, summary, decisions, action items. For Updates: Gather from conversation - what was decided, by whom, with what rationale. For Replies: Search the email provider for the thread, get the latest message ID, To/CC addresses. For Data-Driven: Fetch live data first (ticket filters, API queries). Gather all numbers before drafting.
Look up each attendee name in .local/team/users.md (match against Short Name or Full Name column).
If any name has no match, flag it and ask the user for the correct email before proceeding.
[your-email@your-domain] (from env var)Pipe the JSON directly to a provider-specific script via stdin — no intermediate files needed:
echo '<json_string>' | python3 scripts/save-draft.py -
Do NOT write to .local/scratch/ or any local file. The provider's draft is the only copy needed.
Always saves as draft - never sends.
The bundled scripts/save-draft.py is a Zoho Mail implementation. Adapt it to your provider (Gmail, Outlook, Fastmail, etc.) by replacing the API calls and auth flow. All provider credentials must come from env vars — no hardcoded URLs or account IDs.
Report: draft saved to [provider], any unresolved emails flagged.
<ul>) — violates the numbered-lists rule.<ol>, never <ul>