Takes a buying signal and generates a personalized multi-channel outreach sequence across email, LinkedIn, and phone. Outputs 4-6 ready-to-send touchpoints over 10-14 days. Optionally drafts email touchpoints via Composio Gmail. Use when asked to write an outreach sequence, build a sales cadence, create a follow-up sequence, personalize outreach for a signal, or generate cold outreach messages. Trigger when a user says "build an outreach sequence for", "write a sales cadence for", "create outreach based on this signal", "they just raised a round write me a sequence", or "generate personalized outreach for".
npx skills add https://github.com/Varnan-Tech/opendirectory --skill outreach-sequence-builder
Take a buying signal. Generate a personalized multi-channel outreach sequence. Output ready-to-send messages across email, LinkedIn, and phone.
Critical rule: Every message must be filled in completely from the context you load. Only {{first_name}} is allowed as a variable. No [Company Name] brackets, no [INSERT PAIN POINT] placeholders. If you do not have the information to fill something in, ask before writing. Never send a message with an unfilled placeholder.
Confirm required env vars:
echo "GEMINI_API_KEY: ${GEMINI_API_KEY:+set}"
echo "COMPOSIO_API_KEY: ${COMPOSIO_API_KEY:-not set, Gmail drafting will be skipped}"
If GEMINI_API_KEY is missing:
Stop. Tell the user: "GEMINI_API_KEY is required. Get it at aistudio.google.com. Add it to your .env file."
If COMPOSIO_API_KEY is missing:
Continue. Sequences will be output as formatted text for copy-paste. Gmail draft creation is skipped.
Check for an existing ICP file and account files:
ls docs/icp.md 2>/dev/null && echo "icp found" || echo "icp missing"
ls docs/accounts/ 2>/dev/null && echo "accounts found" || echo "accounts missing"
If docs/icp.md exists: Read it. Extract:
If docs/accounts/{company}.md exists: Read the relevant file. Extract:
If neither exists: Ask the user these 4 questions. Do not proceed until all 4 are answered:
Determine which of the 7 signal types applies. Read references/signal-playbook.md for the full Insight, Bridge, Opener, and Ask for each signal type.
7 signal types:
| Signal | Definition |
|--------|-----------|
| Post-Fundraise | Company raised a funding round in the last 30 days |
| Hiring Signal | Company posted 5 or more roles in a function you serve |
| Competitor Displacement | Contact is using a competitor and showing frustration |
| Product Launch | Company launched a new product or major feature |
| Content Engagement | Contact liked, commented, or shared your content |
| Event Follow-up | You met or were in the same session at a conference or webinar |
| Job Change | Contact moved to a new company in the last 60 days |
If the user provided a signal in their prompt: Confirm the type and extract the specific details (round size, role titles, product name, event name, etc.).
If no signal is clear: Ask: "What triggered this outreach? (e.g. they raised a round, they're hiring engineers, you met at an event)"
State the detected signal type and the specific detail before proceeding.
Using the signal type and context loaded in Steps 2-3, define the four angle elements. Read references/signal-playbook.md for the formula for this signal type.
Write out explicitly before generating any messages:
Signal: [specific signal + concrete detail]
Insight: [what this signal reveals about their situation]
Bridge: [how your product connects to what the signal reveals]
Opener: [one sentence referencing the specific signal detail]
Ask: [minimum viable CTA, under 10 words]
The opener must name the specific trigger. Vague openers are rejected.
Good: "Congrats on the $18M Series B — scaling the sales team fast usually creates an onboarding gap."
Bad: "I saw your company recently raised funding."
Design 4-6 touchpoints across email, LinkedIn, and phone. Rules:
Default cadence for most signals:
Day 1: Email (first touch, signal-led opener)
Day 3: LinkedIn (connection note or short DM)
Day 7: Email (new angle or case study)
Day 9: Phone (talk track + voicemail script)
Day 12: Email (different framing or objection addressed)
Day 14: Email (short breakup message)
Adjust for signal type:
State the planned day and channel for each touchpoint before writing messages.
Read references/sequence-format.md in full. Read references/output-template.md and select the template for this signal type.
Write the Gemini request to a temp file:
cat > /tmp/outreach-sequence-request.json << 'ENDJSON'
{
"system_instruction": {
"parts": [{
"text": "You are a B2B sales copywriter who writes cold outreach that gets replies. Rules: The first sentence of every message is about THEM, not your company. Reference the specific buying signal by name and detail in the opening message. Use contractions naturally. Short sentences. No corporate jargon. No banned words: synergy, leverage, touch base, circle back, ping, loop in, alignment, innovative, cutting-edge, best-in-class, world-class, game-changing, disruptive, bandwidth, deep dive, low-hanging fruit, move the needle. No pleasantries: no 'I hope this email finds you well', no 'Happy Monday', no 'Just wanted to'. Each follow-up adds new value — never 'just following up'. Hard limits: email body under 100 words, LinkedIn note under 300 characters, phone opener under 20 words. Only {{first_name}} is allowed as a variable — fill in all other details from the context provided. The breakup message is short (3-4 sentences), friendly, and leaves the door open."
}]
},
"contents": [{
"parts": [{
"text": "CONTEXT_AND_INSTRUCTIONS_HERE"
}]
}],
"generationConfig": {
"temperature": 0.7,
"maxOutputTokens": 4096
}
}
ENDJSON
curl -s -X POST \
"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
-H "Content-Type: application/json" \
-d @/tmp/outreach-sequence-request.json \
| python3 -c "import sys,json; d=json.load(sys.stdin); print(d['candidates'][0]['content']['parts'][0]['text'])"
Replace CONTEXT_AND_INSTRUCTIONS_HERE with:
For each email touchpoint, require two subject line variants (A/B test).
After generating the sequence, identify the 2-4 most likely objections for this signal type. Pre-empt each one naturally within an existing touchpoint. Do not add separate objection-handling messages. Weave the pre-emption into the sequence.
Read the objection playbook in references/sequence-format.md. Map which touchpoint handles each objection.
4 standard objections to pre-empt:
| Objection | Pre-emption approach |
|-----------|---------------------|
| "We already have a solution" | Acknowledge their current tool, position yours as complementary or next step |
| "Not the right time" | Tie the signal directly to why now is the right time |
| "Too expensive" | Frame ROI, anchor to a number they care about |
| "Need to involve more people" | Offer a shareable resource (one-pager, recorded walkthrough) |
State which touchpoint handles each objection before presenting the final sequence.
Run every check and fix violations before presenting:
{{first_name}}Fix any violation before presenting.
Present the full sequence in a code block.
Save to file:
mkdir -p docs/sequences
cat > docs/sequences/SIGNAL-TYPE.md << 'EOF'
SEQUENCE_CONTENT_HERE
EOF
echo "Sequence saved to docs/sequences/SIGNAL-TYPE.md"
If COMPOSIO_API_KEY is set: Ask: "Draft the email touchpoints in Gmail via Composio?"
On confirmation, for each email touchpoint:
# The agent calls the GMAIL_CREATE_EMAIL_DRAFT Composio action
# with subject = [subject line], body = [email body], recipient = [contact email if known]
After drafting: "Email drafts created in Gmail. Check your Drafts folder."
LinkedIn notes: Present as separate copy-paste blocks with a clear label per touchpoint. LinkedIn does not support programmatic messaging.
Phone scripts: Present as a formatted talk track with bullet points, not a rigid script.
Analyzes your recent Claude Code chat history to identify coding patterns, development gaps, and areas for improvement, curates relevant learning resources from HackerNews, and automatically sends a personalized growth report to your Slack DMs.
Automate Brevo (Sendinblue) tasks via Rube MCP (Composio): manage email campaigns, create/edit templates, track senders, and monitor campaign performance. Always search tools first for current schemas.
Automate Klaviyo tasks via Rube MCP (Composio): manage email/SMS campaigns, inspect campaign messages, track tags, and monitor send jobs. Always search tools first for current schemas.
Research a prospect then draft personalized outreach. Uses web research by default, supercharged with enrichment and CRM. Trigger with "draft outreach to [person/company]", "write cold email to [prospect]", "reach out to [name]".
You are an expert in email marketing and automation. Your goal is to create email sequences that nurture relationships, drive action, and move people toward conversion.
Email has the highest ROI of any marketing channel. $36 for every $1 spent. Yet most startups treat it as an afterthought - bulk blasts, no personalization, landing in spam folders.
Write personalized trade show booth invitation emails, pre-show outreach sequences, and exhibition meeting requests. Use this skill when the user needs to invite prospects, customers, partners, or VIPs to visit their booth at a trade show or exhibition, write pre-show emails, create multi-touch invitation sequences, draft meeting requests for an upcoming event, or write any outreach related to an exhibition or expo they're attending. Triggers on requests like 'write an email inviting people to our booth', 'I need a pre-show outreach sequence for MEDICA', 'draft an invitation for our CES booth', 'help me get meetings before the trade show', 'booth traffic email', 'pre-show marketing email', 'trade show outreach template', 'exhibition invitation letter', or casual phrasing like 'we're exhibiting next month, need to get people to come by'. If the user mentions an upcoming show and wants to write emails to drive booth traffic or schedule meetings, this is the right skill.
Email has the highest ROI of any marketing channel. $36 for every $1 spent. Yet most startups treat it as an afterthought - bulk blasts, no personalization, landing in spam folders. This skill covers transactional email that works, marketing automation that converts, deliverability that reaches inboxes, and the infrastructure decisions that scale. Use when: keywords, file_patterns, code_patterns.
Take varnan-tech/outreach-sequence-builder from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.