Install
$ agentstack add skill-vivekkhimani-gtm-tools-template-email-personalization ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo 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.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Email personalization
Generate a personalized Email-1 cold outreach draft for a [COMPANY] ICP target, matching the v1 sequence pattern in outreach/sequence-v1.md.
When to use
- Drafting first-touch emails for the top tier (T1/T2) of
pipeline/leads/leads_scored.csv. - Re-drafting after a signal changes (new buying signal, leadership change, compliance event).
- NOT for follow-up emails (2, 3, 4) — those are thread replies with simpler templates already in the sequence doc.
Inputs
| Input | Required | Source | |---|---|---| | Company row | Yes | A single row from pipeline/leads/leads_scored.csv or leads_enriched.csv. At minimum: Company Name, Short Description, Keywords, Company Country, # Employees. | | Recipient name + title | Yes | First name, title, ideally verified via Findymail/Hunter | | Buying signal | Optional but recommended | One-sentence specific fact: | | Angle | Optional | One of: [ANGLE_A], [ANGLE_B], [ANGLE_C]. Default: pick the one best-matched to the signal. |
Process
- Read
positioning/messaging.md,positioning/ICP.md, andoutreach/sequence-v1.md. The skill must conform to the voice and structural conventions already defined there. Do not invent claims that aren't in messaging.md.
- Classify segment for the company (A/B/C per
ICP.md). If unclear, infer from Short Description + Keywords, but prefer to ASK rather than guess on segment.
- Choose angle. Pick the angle that maps to:
- The provided signal.
- The segment (Segment A favors
[ANGLE_A]; Segment B favors[ANGLE_B]; Segment C favors[ANGLE_C]).
- Generate signal sentence. This is the most important sentence — first line of the email. It must reference a specific, verifiable fact about the company. Source it from:
- The provided signal input (preferred).
- The Short Description column (less specific but better than nothing).
- A recent news snippet if web search is available.
- DO NOT make up a signal. If you don't have one, return an explicit "needs signal research" output instead of a fabricated email.
- Draft. Follow the structure in
outreach/sequence-v1.mdEmail 1. Constraints:
- 80–95 words in the body.
- First sentence is the signal reference + the pain hook.
- One proof point (citing the canonical traction: "[METRICDEPLOYMENTS] / [METRICUSERS]" — or "replaced [INCUMBENT] at [ANCHOR_CUSTOMER]" if a switch-out proof lands harder for the segment).
- One soft CTA ("worth a 15-min call?").
- Plain text, no HTML, no formatting.
- Lowercase, no exclamation marks, no "Hope this finds you well" or similar dead opens.
- Subject line. Generate 3 candidate subject lines following the patterns in
outreach/sequence-v1.md. ≤8 words. Lowercase. No question marks at the end unless it's a real question. Reference a specific token (a product/category term, company name, role) — don't go generic.
- Output as YAML so it slots cleanly into Smartlead/Instantly imports:
to: {recipient_email}
recipient_name: {FirstName} {LastName}
recipient_title: {Title}
company: {Company}
segment: {A|B|C}
angle: {[ANGLE_A]|[ANGLE_B]|[ANGLE_C]}
signal_used: "{one-sentence signal}"
subject_options:
- {subject 1}
- {subject 2}
- {subject 3}
body: |
Hi {FirstName},
{body 80–95 words}
— [FOUNDER]
[DOMAIN] · [CALENDLY]
qc_checks:
word_count: {N}
has_signal: true|false
has_one_cta: true|false
no_banned_phrases: true|false # checks "hope this finds you", "circling back", "just checking in", "synergy", "leverage", "solution", "platform"
Banned phrases (never use)
- "Hope this finds you well"
- "Just checking in"
- "Circling back"
- "Touching base"
- "Synergy", "leverage", "solution" (as nouns), "platform" (generic)
- "10x", "best-in-class", "world-class"
- "I noticed you on LinkedIn..." (we are not on LinkedIn for this audience)
- Any subject line that's only "{Company}" with no other context
Voice constraints
- Use specific [INDUSTRY] terms when they fit.
- The reader is a [INDUSTRY] operator, not a SaaS buyer. Match their register.
- Honest claims only — canonical traction is [METRICDEPLOYMENTS], [METRICUSERS], [METRICCOMPLETION], anchor customer [ANCHORCUSTOMER] with the incumbent replaced (name them only if cleared for external use). Don't inflate beyond these. Keep the wedge framing in cold email (the budgeted entry pain) — do NOT cold-open with "[PRODUCT_ONELINER]"; "platform" stays a banned generic noun here.
Failure modes (return explicitly rather than fake it)
- No signal available: return
status: needs-signal-researchwith a list of 3–5 specific signal queries to run. - Segment ambiguous: return
status: needs-segment-decisionwith two interpretations and your recommendation. - Recipient title doesn't match [COMPANY]'s buyer personas: return
status: wrong-personawith a recommended persona to find instead.
Example invocation
> Draft an Email-1 for [TARGETCOMPANY] (row in leadsscored.csv) targeting their [BUYER_TITLE]. Signal:
Expected output: a YAML block as specified above, with the angle matched to the signal, 3 subject candidates, and a body that opens with the signal reference.
Integration
This skill is invoked manually per email during the first weeks (we want human review of every draft). Once you've shipped ~50 drafts and feel confident the voice is right, wrap it in scripts/draft_emails.py to batch-process the top 20 weekly.
Track each draft in outreach/drafts/_template/{company-slug}.yaml (copy _TEMPLATE.yaml per prospect). Drafts are .gitignored if they include recipient emails; the templates without recipient emails are fine to commit for voice tuning.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: vivekkhimani
- Source: vivekkhimani/gtm-tools-template
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.