From sales-plugin
Draft a post-meeting follow-up email with broader context — multi-meeting synthesis, prior email thread awareness, engagement history, and the rep's own writing voice. Output renders in Claude for the rep to copy into Gmail. v2 of email-followup, running in parallel for A/B comparison.
How this skill is triggered — by the user, by Claude, or both
Slash command
/sales-plugin:email-followup-v2The summary Claude sees in its skill listing — used to decide when to auto-load this skill
The user has invoked the email follow-up v2 skill. The argument (if provided) is: $ARGUMENTS
The user has invoked the email follow-up v2 skill. The argument (if provided) is: $ARGUMENTS
Guard check: If $ARGUMENTS is empty or the literal string $ARGUMENTS, ask the user: "Which meeting or contact should I draft a follow-up for?" — then wait for their response and use that as the search term throughout.
Do this BEFORE fetching any Fireflies or HubSpot data, so meeting-host names and deal-owner names cannot contaminate the identity. Resolve the sender's name + email and store it as SENDER — this is the person who will sign the draft in Step 6.
Priority (stop at the first that succeeds):
get_me call if available) → take name and emailFrom header of the user's 3–5 most recent sent emails[email protected] → "John Smith")Hard rules — never break these, no matter how tempting the signal looks:
SENDER is NOT the Fireflies meeting host, organizer, or recorderSENDER is NOT any internal participant name found in the Fireflies transcriptSENDER is NOT the HubSpot deal or contact owner (hubspot_owner_id / search_owners result)SENDER is NOT inferred from any name that appears in the transcript, engagement history, or HubSpot recordSENDER only comes from the sources in the priority list above. If the priority list fails, you must ask the user — never guess.
Search Fireflies for recent meeting transcripts matching $ARGUMENTS:
fireflies_search / fireflies_list_transcripts to find matching transcriptsfireflies_get_transcript and extract: meeting date, participants (name + email), summary, structured action_items, key topicsAlso detect the transcript language (from Fireflies metadata if available, else infer from the transcript text). Record it for Step 7.
From the most recent transcript, collect external attendee emails (exclude the rep's own domain).
For each attendee email:
search_crm_objects with objectType: "Contact" and filter on email equals the attendee's address — this returns a unique contact (no name ambiguity)firstname, lastname, email, jobtitle, hubspot_owner_id, associated companyhubspot_owner_id to a name via search_ownersIf a transcript attendee has no email, fall back to a name search for that one attendee only.
Also look up the associated deal:
search_crm_objects with objectType: "Object" on the company or dealname derived from $ARGUMENTS / the contact's companydealname, name_of_deal_stage, pipeline, hubspot_owner_idIf neither a Contact nor Deal is found AND no Fireflies transcript was found in Step 1: stop and say "I couldn't find a Fireflies transcript or a HubSpot record for '$ARGUMENTS'. Please paste your meeting notes or provide a HubSpot contact/deal name."
If HubSpot has no matches but Fireflies does, proceed — the recipient emails come from the transcript.
Fetch engagements on the deal / primary contact with these filters to keep token cost low:
Note and Call engagements first; include Email only if there's room under the capIf no engagements exist (new relationship), skip silently.
Search Gmail for the most recent thread with the primary recipient's email (or their company domain), limited to the last 30 days:
This is context-only — we are not pushing a reply draft to Gmail. Output stays in Claude.
Read the user's last 5 sent emails from their Gmail Sent folder (or equivalent). Extract lightweight style signals:
Store these as a short voice profile for Step 6. This step only affects tone/phrasing — it does not determine the sender's name. The sender was already locked in the PREREQUISITE step as SENDER. Do not overwrite SENDER here.
If the user has no prior sent emails: skip silently and fall back to the professional baseline only. No prompt.
Write a follow-up email using the data gathered in Steps 1–5.
Tone:
Structure:
action_items from Fireflies. If none exist, write: - No action items captured — add manually. Do not infer action items from transcript prose.SENDER.name from the PREREQUISITE step. Do NOT use any name from the Fireflies transcript (host, organizer, recorder, or any participant). Do NOT use the HubSpot deal/contact owner. Do NOT use any name that appears in the engagement history. SENDER.name is the only valid source for the sign-off name. It will always be resolved, because the PREREQUISITE step either found it in Gmail or asked the user directly.Subject line: Follow-up: [Company Name] x Pliant
$ARGUMENTS value.Recipients:
To: primary contact (the main attendee from the most recent transcript, resolved in Step 2)CC: other external attendees from the transcript who have emailsDraft the email in the language detected in Step 1 (Fireflies transcript language). If detection failed, use the language the rep has been using in the current Claude session. Apply the voice overlay from Step 5 regardless of language (the stylistic signals translate).
Display the email to the user in this format:
**Context used:**
- Fireflies: [N transcript(s): title + date each, oldest → newest] / [Manual notes provided]
- HubSpot: [Contact name(s), job title(s), company] / [Deal name, stage] / [Not found]
- Engagement memo: [5 bullets from Step 3, or "none"]
- Prior Gmail thread: [subject + date] / [none]
- Voice profile: [brief — e.g. "Hi + short sentences + 'Cheers,' sign-off"] / [baseline only — no prior sent emails]
- Signing as: `SENDER.name <SENDER.email>` — resolved in the PREREQUISITE step
- Language: [detected language]
---
**Draft:**
To: [primary email]
Cc: [other attendee emails, or "none"]
Subject: [subject line]
[email body]
Then say: "Let me know if you'd like any changes, or copy this into Gmail when you're happy with it."
If the user requests edits, apply them and re-render. Repeat until approved. Do not push to Gmail — v2 outputs the email in Claude only; the rep copies it over themselves.
npx claudepluginhub bendikas12/sales_plugin --plugin sales-pluginGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.