Skip to content
Content
Skill

/sent-mail-outcome-tracker

Read the user's recent cold-outreach sent mail, look up which messages got replies, classify reply sentiment, and produce an outcome report that surfaces what the responders had in common. Use when the user says "did my cold emails get replies," "what's my reply rate,"

From plugin
winning-writing
1731 skills

Claude Code

$ npx -y skills add kalyvask/winning-writing --skill sent-mail-outcome-tracker --agent claude-code

SKILL.md

sent-mail-outcome-tracker.SKILL.md
name: sent-mail-outcome-tracker
description: Read the user's recent cold-outreach sent mail, look up which messages got replies, classify reply sentiment, and produce an outcome report that surfaces what the responders had in common. Use when the user says "did my cold emails get replies," "what's my reply rate," "sent-mail outcomes," "track outcomes," or "/sent-mail-outcome-tracker." Requires a connected Gmail MCP. Read-only. Never contacts recipients.

Sent-mail outcome tracker

The rest of the toolkit asks "is this email well-written?" This skill asks the only question that actually matters: "did the email get a reply, and what did the messages that replied have in common?"

Composes with `voice-update --source sent-mail` (which audits voice files against sent mail). This skill produces outcome data; voice-update proposes voice updates if patterns emerge.

Why this exists

Two gaps the existing toolkit does not close:

1. **The critic measures rule recall, not response rate.** The eval harness asserts the inline critic catches em-dashes and vague asks. None of that proves the resulting emails get replies. Reply rate is the only metric the recipient cares about, and it is the only one that compounds. 2. **You learn from outcomes, not from the draft.** A draft that passes every rule and gets ignored teaches you something the rules cannot. A draft that breaks a rule and gets a same-day intro teaches you something the rules will never catch. Both signals live in the sent folder and the inbox, not in the rule library.

Auto-tracking every email is out of scope. The user invokes this on demand, the skill reads, the skill reports. The user judges what to change.

Inputs

Optional arguments:

  • **Time window**: default `last 30 days`. Accept "last week," "last 3 months," "since [date]."
  • **Count cap**: default `25 messages`. Cap at 50 to keep token cost bounded.
  • **Mode filter**: default `cold outreach only`. The skill applies heuristics to exclude:
  • Replies (any message with `In-Reply-To` header or whose thread already has an inbound message from the same recipient before the sent date)
  • Automated mail (auto-replies, calendar invites, no-reply addresses)
  • One-liners under 30 words
  • Messages to recipients already in the user's recent inbound mail (these are warm threads, not cold outreach)
  • **Ask-type tag**: optional. "Only meeting requests / intro requests / job inquiries / advice asks." Different ask types have different baseline reply rates and should not be averaged together.

If the user just says "/sent-mail-outcome-tracker" with no args, use defaults and ask whether to narrow the filter before fetching.

Process

1. **Confirm scope before fetching.** "I'll pull your last 25 cold-outreach messages from the past 30 days, excluding replies, automated mail, and threads where the recipient had already written to you. Sound right?" Adjust if they want different scope.

2. **Fetch via the Gmail MCP.** Query `from:me` in the sent folder for the window, fetch the full thread for each candidate, apply the cold-outreach filters above. For each kept message:

  • Sent date and time
  • Subject
  • Body (skip quoted threads)
  • Recipient role inferred from the email domain and any signature in prior threads (anonymize by role; never quote the name into the report)

3. **For each sent message, look up the reply state from the same thread.**

  • **No reply** if the thread has only the user's outbound message after the sent date, or replies are auto-generated.
  • **Replied** if the recipient sent a message after the user's sent message.
  • For replied messages, capture: days to reply (rounded), reply word count, and a one-sentence sentiment classification.

4. **Classify each reply by outcome category, not by tone.** The categories are user-meaningful, not sentiment-mining.

  • **Meeting accepted**: recipient proposed or agreed to a call/coffee/Zoom.
  • **Intro provided**: recipient forwarded to someone else or named a person to contact.
  • **Substantive engagement**: recipient answered the substantive question or offered information, without proposing a meeting.
  • **Polite decline**: recipient declined but acknowledged the email.
  • **Deferral**: recipient said "let me get back to you" or "later this quarter" with no concrete action.
  • **No reply**: no inbound message in the thread within the window.

5. **Read the current rule library.** Open `points/cold-email-rules.md`, `points/named-failure-modes.md`, `context/voice-and-style.md`, and `context/about-me.md`. Patterns in the outcome data only matter against the current rules.

6. **Compute the headline stats.** Always include:

  • N cold outreach messages in the window
  • M replied, R reply rate as %
  • Outcome distribution by category (count and %)
  • Median and 75th-percentile days to reply, on the replied subset only
  • Reply rate by ask type if the user filtered by ask-type, otherwise show the breakdown
  • **Sample-size caveat:** if N < 10 print "Sample is small, treat the patterns below as suggestive, not conclusive." If N < 5, refuse to compute pattern stats at all and tell the user to wait for more data.

7. **Surface the patterns that correlate with replies.** Compare the replied set against the non-replied set on:

  • **Subject line length** (median word count, replied vs not)
  • **Subject line type** (specific claim, question, name-drop, role-only): count how many of each in each set
  • **Body word count** (median, replied vs not)
  • **Opening move** (time/place reference, question, observation, ask-first): count and reply rate per type
  • **Named connection in body** (yes/no, reply rate per side)
  • **Specific ask** (precise time, place, deliverable) vs vague ask ("would love to chat"): reply rate per side
  • **Days-of-week sent** (reply rate per weekday)
  • **Time-of-day sent** (rounded to morning / midday / afternoon / evening, reply rate per bucket)

F

Read more
@kalyvask
Ships withwinning-writing

31 Claude skills for cold outreach, op-eds, pitches, press inquiries, bios, exec memos, performance reviews, spoken-delivery talks, fact-checking, and reply-rate tracking.

Stars on GitHub

Momentum

stars in total
17
Star history of kalyvask/winning-writing on GitHub, a chart by star-history.com

Other skills on winning-writing.

bluf-rewriter

bluf-rewriter

Reorganizes a memo, email, status update, or report so the bottom line is up front. Implements Kramon's BLUF (Bottom Line Up…

compression

compression

Cuts a draft to a target word count without losing substance. Two modes behind one skill. target-count hits a specific number…

fun-angle

fun-angle

Finds the unexpected, dry, or self-deprecating angle that makes an email memorable. Turns "professional and polite" into "this…

More skills from other plugins.

prompt-lookup

prompt-lookup

Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use…

@gh-f@gh-fInstall Skill
ppt-master

ppt-master

AI-driven presentation workflow for generating editable PPTX decks and slides, reconstructing page visuals, creating reusable…

@hugohe3@hugohe3Install Skill
morph-ppt

morph-ppt

Use this skill when the user wants a .pptx with smooth cross-slide animation — PowerPoint Morph transitions, Keynote-style…

@iofficeai@iofficeaiInstall Skill

Questions about sent-mail-outcome-tracker.

Which coding agents can use sent-mail-outcome-tracker?
sent-mail-outcome-tracker installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.