AgentStack
SKILL verified MIT Self-run

Sent Mail Outcome Tracker

skill-kalyvask-winning-writing-sent-mail-outcome-tracker · by kalyvask

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 contact…

No reviews yet
0 installs
12 views
0.0% view→install

Install

$ agentstack add skill-kalyvask-winning-writing-sent-mail-outcome-tracker

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Sent Mail Outcome Tracker? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

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.
  1. 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)
  1. 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.
  1. 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.
  1. 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.
  1. 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

Headline

  • N: cold-outreach messages
  • Replied: (%)
  • Outcomes: meeting , intro , substantive , decline , deferral
  • Median days to reply:
  • Sample-size note:

Patterns that correlate with replies

  • Subject length: …
  • Subject type: …
  • Body word count: …
  • Opening move: …
  • Named connection: …
  • Specific ask: …
  • Day/time sent: …

Failure modes in the no-reply set

  • : in no-reply set, in replied set. Example (anonymized): ""

Per-message table

| sent | recipient role | subject (truncated) | outcome | days | |---|---|---|---|---| | … | … | … | … | … |

Proposed rule updates (require approval)

  • :

Next experiment


## What you do NOT do

- Do NOT quote any recipient's name or any private content from their replies. Anonymize recipients by role ("a senior partner at a Series B firm," "a Stanford professor"). Summarize the reply outcome category; do not paste the recipient's words.
- Do NOT auto-write to any file. All proposed rule updates go through diff + approval, same as `voice-update --source sent-mail`. The actual write happens via `voice-update --source manual`.
- Do NOT contact recipients. This skill is strictly read-only over Gmail.
- Do NOT generalize from a sample under 10 messages. If N  3x reply rate.
- Specific ask: precise (named time, deliverable) 8/15, vague ("would love to chat") 1/9.
- Day/time sent: Tue-Thu mornings 7/13, weekends 0/4. Send on weekday mornings.

## Failure modes in the no-reply set
- credentials-dump: 4 in no-reply, 0 in replied. Example: "I am an MBA2 at Stanford GSB previously at [redacted]…"
- vague-ask: 6 in no-reply, 1 in replied. Example: "would love to chat sometime if you're open"
- generic-personalization: 3 in no-reply, 0 in replied. Example: "I really admire your work at [redacted]"

## Per-message table
| 04-12 | partner, AI VC | "Re: AI infra at GSB" | no reply | n/a |
| 04-14 | head of PM, frontier lab | "5 min on PM hiring?" | meeting | 1 |
| ... |

## Proposed rule updates (require approval)
- points/cold-email-rules.md: add explicit rule "Subject lines: cap at 6 words for cold outreach. Replied set median was 5; no-reply was 9." (waiting for approval)
- points/named-failure-modes.md: bump credentials-dump severity from medium to high. Current data: 4/4 with this pattern got no reply.

## Next experiment
Cut subject lines to 5 words or fewer for the next 10 cold emails. Re-run this skill in 4 weeks. Target: lift reply rate from 38% to 50% on the next cohort.
  1. Per proposed update: "Want me to apply (a) the subject-length rule and (b) the credentials-dump severity bump?"
  2. For each yes, hand off to voice-update --source manual to write the file. Echo back what changed.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.