Done-for-you buildA specialist builds your first campaign · 6 build slots left · closes in Claim a build slot

The LinkedIn Prospecting Guide to Claude: 8 Systems, Multiple MCPs, 80 Skills

MCP 1: LinkupAPI (LinkedIn automation, connection/DM/enrich/feed)

Try Prosp Free3 working days to live · 6 slots left this week
5/5 rated on Capterra·Used by 800+ agencies and sales teams
Skills13 sections
Section 1

MCP Setup: 8 Full Connections

MCP 1: LinkupAPI (LinkedIn automation, connection/DM/enrich/feed)

Claude Desktop / Claude.ai: Settings > Connectors > Add custom connector
URL: https://mcp.linkupapi.com/mcp
Click Connect, approve on the LinkupAPI consent page.
Sign up on the consent page if you don't have an account yet.

MCP 2: SE Ranking (SEO/content data for lead magnet and content skills)

claude mcp add --transport http se-ranking https://api.seranking.com/mcp
/mcp
# sign in via OAuth, no API token needed

MCP 3: HubSpot (CRM operations)

npx skills add HubSpot/agent-cli-skills
# Official HubSpot CLI skills, configure HUBSPOT_API_KEY in .env

MCP 4: Firecrawl (raw HTML, JS-rendered pages, full-site crawl)

bash extensions/firecrawl/install.sh
# Prompts for FIRECRAWL_API_KEY, free tier 500 credits/month at firecrawl.dev
# Merges MCP entry into ~/.claude/settings.json

MCP 5: Google Workspace (Gmail, Calendar, Drive for follow-up and reporting)

# Native integration, no separate install
Settings > Connectors > Gmail / Google Calendar / Google Drive > Connect
# OAuth flow, authorise access

MCP 6: Notion (pipeline database, campaign logs)

Settings > Connectors > Notion > Connect
# OAuth flow
# Once connected: "Write qualified leads to [NOTION DATABASE URL]"

MCP 7: Apify (scraping, LinkedIn post/profile data at scale)

# Add APIFY_TOKEN=apify_api_... to .env
# Free tier: $5/month credit
# Actors used: supreme_coder/linkedin-post ($1/1000),
# apimaestro/linkedin-post-comments-replies-engagements-scraper-no-cookies ($5/1000),
# apimaestro/linkedin-profile-comments ($5/1000),
# scraping_solutions/linkedin-posts-engagers-likers-and-commenters-no-cookies ($5/1000)

MCP 8: Publora (auto-posting to LinkedIn/X/Threads/Instagram)

# Sign up free (15 posts/month free tier)
# Channels > Add Channel > LinkedIn > authorize
# Channels > click LinkedIn account > copy Platform ID
# Settings > API > Create Key

# .env file:
PUBLORA_API_KEY=sk_paste_your_key_here
LINKEDIN_PLATFORM_ID=linkedin-paste_your_id_here

pip install requests python-dotenv --break-system-packages
Section 2

System 1: ICP and List Building (10 Skills)

mkdir -p .claude/skills/icp-prompt-builder

---
name: icp-prompt-builder
description: When building a search filter for prospecting, load this skill.
---

Load my client-profile.yaml.
Produce: exact titles (primary + fallback), seniority levels, company
size range, industry filters, geography filters, tech/tool filters,
the one disqualifier that rules someone out immediately, and the exact
Sales Navigator or Prospeo filter string to use.
mkdir -p .claude/skills/raw-list-source

Build a raw lead list at minimum cost: domain and name only, no email lookups.
Source: [Google Maps scraper / Prospeo / Apollo / Clay / Outscraper]
Search parameters: business type or title, location, volume.
Restrict output fields to: company name, domain, contact first/last name.
No email or phone lookup at this step.
Output as raw-leads.csv.
mkdir -p .claude/skills/icp-filter-pass

Filter this raw lead list against my ICP before any email lookup happens.
List file: raw-leads.csv
ICP criteria: company type, size, industry, geography, disqualifiers.
For each row: visit the company website, check against ICP, mark KEEP
or DROP with a one-line reason.
Model: Haiku, not a frontier model.
Output: filtered-leads.csv + dropped-leads.csv.
Use sub-agents in parallel batches if list exceeds 500 rows.
mkdir -p .claude/skills/linkedin-icp-list-builder

---
name: linkedin-icp-list-builder
description: When building a fresh LinkedIn prospect list from ICP
criteria with no existing post or creator to work from, load this skill.
---

Input: ICP from CLAUDE.md. Target list size: [N]
Process: search using ICP filters, verify against disqualifiers, check
last 30 days of campaign logs (exclude contacted), prioritise profiles
with activity in last 14 days.
Output: prospects.csv (name, title, company, profile URL, last active,
priority). Stop at target size or daily search cap. Flag if criteria
return fewer than half target size.
mkdir -p .claude/skills/disco-like

Find lookalike companies for my ICP.
Seed: [5-10 domains of best-fit customers]
Find [N] similar companies. For each: name, domain, why it matches,
size estimate, geography, already contacted (Y/N).
Exclude companies already in leads database.
Output as lookalike-companies.csv.
mkdir -p .claude/skills/competitor-engagers

Find people engaging with competitor content on LinkedIn.
Competitor profiles to monitor: [URLs]
Posts to scrape: [recent product/pricing/feature posts]
For each post: scrape commenters/reactors, filter for ICP matches,
find verified email per match.
Output: name, title, company, email, LinkedIn URL, which post engaged.
Output as competitor-engagers.csv.
mkdir -p .claude/skills/job-posting-trigger-list

Find companies posting [JOB TITLE] roles in the last 14 days.
Filter: [INDUSTRY, GEO, SIZE]
Return: company, posting date, website, employee count.
Output as trigger-list.csv.
mkdir -p .claude/skills/funding-signal-list

Find companies that raised funding in the last 90 days matching:
[ICP CRITERIA]
Return: company, round, amount, date, one sentence on why this signals
buying intent for our offer.
Output as funding-signals.csv.
mkdir -p .claude/skills/tam-sanity-check

Given ICP criteria: [PASTE], estimate total addressable market size.
If under [THRESHOLD], recommend how to widen criteria without losing fit.
mkdir -p .claude/skills/sales-prospect-list

---
name: sales-prospect-list
description: When maintaining the single running target list this
system operates against, load this skill.
---

Maintain one canonical prospect list across all sourcing methods.
Every new lead checked against this list before being added, so the
same person is never sourced twice from two methods unnoticed.
Section 3

System 2: Enrichment and Verification (10 Skills)

mkdir -p .claude/skills/email-finder

Find or infer the verified email address for each contact.
List file: filtered-leads.csv
Fields: company domain, first name, last name.
1. Check domain for publicly visible emails (team/about/press pages)
2. If no pattern visible, generate candidates: first.last@ / firstlast@
   / first@ / f.last@ / flast@
3. Note confidence (high/medium/low) per candidate
4. Select highest-confidence candidate per contact
Output: prospect-list-with-emails.csv (company, domain, name, guessed
email, confidence, pattern used). Flag low-confidence for manual check.
Model: Haiku, pattern-matching not reasoning.
mkdir -p .claude/skills/verify-and-segment

Process this list through email verification and segment by result.
List file: prospect-list-with-emails.csv
Verification tool: [YOUR VERIFIER API]
1. Submit all emails for verification
2. Categorise: valid, catch-all, unknown, invalid
3. Split: valid-leads.csv, catch-all-leads.csv, unknown-leads.csv,
   invalid-leads.csv
4. For invalid: attempt one additional pattern before discarding
Return summary: total processed, count/% per category, final
safe-to-send count.
mkdir -p .claude/skills/list-quality-scorecard

Grade this lead list before I upload it.
List file: valid-leads.csv
ICP criteria: [load from client-profile.yaml]
Score across 8 dimensions: email validity, title match, company size
fit, geography match, duplicate rate, missing fields, role seniority,
domain health.
Return: score per dimension (0-100), overall grade (A-F), top 3 issues
to fix, safe-to-use verdict.
Only B grade or above moves to live sending.
mkdir -p .claude/skills/linkedin-enrich

---
name: linkedin-enrich
description: When enriching LinkedIn profile URLs for role, company,
location, or email data, load this skill.
---

Enrich these LinkedIn profiles.
Profile URLs: [paste URLs, one per line]
Output format: [markdown table / CSV / JSON]
Fields: current role/title, current company, location, professional
email if findable, relevant skills.
Check ./enrichments/ from last 30 days before any lookup. Skip if
already enriched, note it was skipped.
Log to ./enrichments/{today}-enrich.md. Check daily profile cap
(100/day) at Stage 0. Report skip count.
mkdir -p .claude/skills/decision-maker-mapper

---
name: decision-maker-mapper
description: When identifying the right decision-maker at a target
company, load this skill.
---

Input: target company, function needed (Marketing, Engineering, Ops).
Map function to titles likely holding decision authority at this
company's size/type.
Search matching profiles. For each: confidence score (high/medium/low)
based on title match, tenure, visible authority signals.
Output: ranked candidate list with confidence, not a single guess.
mkdir -p .claude/skills/waterfall-enrichment

Enrich this list. Try [PROVIDER 1] first. If no email found, try
[PROVIDER 2]. If still none, try [PROVIDER 3].
Mark source provider per row that succeeded.
Output: enriched-waterfall.csv with source_provider column.
mkdir -p .claude/skills/duplicate-detector

Compare these two lists: [LIST A] and [LIST B].
Flag: exact duplicates, probable duplicates (same company, different
contact), unique entries in each.
Output: duplicates.csv, unique-a.csv, unique-b.csv.
mkdir -p .claude/skills/email-pattern-finder

For [DOMAIN], determine the company's email pattern from any publicly
visible email addresses.
Check: team page, about page, press contacts, footer, privacy policy.
Return: confirmed pattern, or top 3 probable patterns ranked by
likelihood if none confirmed.
mkdir -p .claude/skills/bulk-profile-enrichment

Enrich this batch of [N] LinkedIn URLs in parallel.
Use sub-agents to process in batches of 50.
Fields per profile: role, company, location, tenure, email if findable.
Output: bulk-enriched.csv. Report total processed, total skipped
(already enriched), total failed.
mkdir -p .claude/skills/contact-hygiene-check

Audit this contact list for hygiene issues: [PASTE]
Flag: missing name, missing title, missing company, malformed email,
placeholder/test data, obviously outdated (role no longer exists at
company per LinkedIn).
Output: clean-list.csv, flagged-for-review.csv with reason per flag.
Section 4

System 3: Content Warmup (10 Skills)

mkdir -p .claude/skills/content-engine

---
name: content-engine
description: When I paste a video/podcast transcript and ask for social
posts, LinkedIn posts, threads, or an article, load this skill.
---

Mine the source, do not summarise it. Extract: 3 most shareable claims,
1 specific story/result, the speaker's vocabulary, any hook-worthy
numbers/names.
Produce: 3 LinkedIn posts (different hook mechanisms), 2 X threads
(list format + story format), 1 SEO article outline (Answer Block in
first 100 words).
Never repeat a hook mechanism in the same set. Never invent a stat not
in the source. Apply brand-voice skill.
mkdir -p .claude/skills/linkedin-post-writer

---
name: linkedin-post-writer
description: When I say write a LinkedIn post about [TOPIC], load this
skill. Always load brand-voice and audience-profile alongside it.
---

Select hook: specific number / contrarian claim / story opener / ICP
direct address / stakes escalation / progressive milestone. Name it.
Content moat check: is there a detail only I could include? If not,
add [SPECIFIC DETAIL NEEDED] placeholder.
Output: hook type used, post (under 200 words), one CTA, one A/B hook
variant. No em dashes, no hashtags, one idea per line.
mkdir -p .claude/skills/hook-last-and-humanize

Step 1: Read the full draft. Find the sharpest, most specific line
already inside it. Move it to the top as the hook. Do not invent a new
hook. If nothing is strong enough, say so.
Step 2: List every phrase reading as AI-generated: em dashes, "it's
not just X, it's Y", rhetorical question openers, triple-adjective
stacks, generic superlatives with no number. Rewrite flagged sections
only.
mkdir -p .claude/skills/editorial-calendar

Build a 7-day plan from pillars: [LIST]
For each day: topic, hook type, format, posting time.
Anti-repetition: no hook type twice in one week, no pillar twice
(unless only one exists), no two consecutive posts same format, one
lead magnet CTA post per two weeks.
Second output: the 3 posts most likely to perform well and why.
mkdir -p .claude/skills/borrowed-reach-formatter

Take this topic: [TOPIC]. Draft in 5 formats: brand-jacking,
newsjacking, referencing a known figure, hot take, trend-riding.
Return all 5 with the specific brand/event/figure/trend named per
format, and flag if the window is time-sensitive.
Never fabricate a news event. No em dashes.
mkdir -p .claude/skills/total-addressable-content-finder

Given ICP: [PASTE], research what this audience is currently watching,
reading, and reacting to on LinkedIn right now. Return specific posts,
topics, creators currently getting traction with this exact audience.
mkdir -p .claude/skills/content-bucket-planner

Take this week/month of planned topics and sort into: 40% growth, 30%
authority, 20% conversion, 10% personal.
Flag any week overweighted toward one bucket.
mkdir -p .claude/skills/point-of-view-extractor

Interview me about what I believe that contradicts my industry's
consensus. Turn answers into a bank of contrarian angles for hot-take
and authority content.
mkdir -p .claude/skills/linkedin-carousel-builder

Use the exported HTML template at [PATH]. Topic: [TOPIC]
Produce: finished carousel using title/numbered-point/big-stat/
screenshot/closing-CTA layouts, 5 caption options (different angles),
one first-comment CTA.
Export each card as individual PNG, card only, no background. No em
dashes, no hashtags.
mkdir -p .claude/skills/voice-note-transcriber

Input: raw voice note transcript.
1. Clean for readability only: remove filler words, fix transcription
   errors. Do not rephrase or polish content.
2. Mark natural topic-shift break points
3. Flag if the transcript contains more than one post's worth of idea
Output: cleaned-transcript.md with [TOPIC SHIFT] markers.
Never add content not said. Preserve awkward-but-specific phrasing.
Section 5

System 4: Connection and Outreach (10 Skills)

mkdir -p .claude/skills/linkedin-outreach

Load CLAUDE.md for ICP and offer.
8-stage flow: intent-first ICP discovery, draft ICP proposal, filter
editing before running, company search, decision maker extraction,
false positive filtering, multi-account dedup selection, connection
sends with campaign log.
Connection note: reference something specific about company/role.
Under 200 characters. No pitch.
Check daily cap before starting, report remaining budget. Log every
send to ./campaigns/{today}-outreach.md.
mkdir -p .claude/skills/linkedin-high-intent

Run a high-intent campaign from a post.
Post URL: [paste]
Scrape all commenters/reactors. Filter visible signal first before
enriching. Only enrich passing matches. Only send to confirmed ICP matches.
Connection note references the post they engaged with. Sound human, no pitch.
Log to ./campaigns/{today}-high-intent.md.
mkdir -p .claude/skills/linkedin-feed-engage

Comment mode: [auto / templated / HITL-approved]
Rules: 2-3 sentences, must add something the post did not say, no
product mention, no "great post", no em dashes, sound like a peer.
Pacing: 30-60 seconds between comments. Stop at 15 comments maximum.
Log to ./campaigns/{today}-feed-engage.md. Check daily cap at Stage 0.
mkdir -p .claude/skills/linkedin-connection-note-writer

---
name: linkedin-connection-note-writer
description: When writing a LinkedIn connection request note for a
specific prospect, load this skill.
---

Priority order: 1. specific post/comment they made 2. recent job
change/milestone 3. shared connection 4. specific real profile detail
(never generic).
Under 200 characters. No pitch. No em dashes. Return 2 variants using
different angles.
mkdir -p .claude/skills/linkedin-post-engager-scorer

Input: raw engager list (name, title, company, engagement type,
comment text), plus ICP.
Engagement depth (1-3): 3=substantive comment, 2=short/repost, 1=liked.
ICP fit (1-3): 3=exact, 2=adjacent, 1=no match.
Combined priority = depth x fit (max 9).
Output: ranked list with recommended action (connect now / feed-engage
first / skip).
mkdir -p .claude/skills/cold-email-personaliser

---
name: cold-email-personaliser
description: When given a LinkedIn URL or prospect profile and asked
for a cold email or outreach angle, load this skill.
---

My offer: [ONE SENTENCE]. My ICP: [TITLE, TYPE, SIZE, FUNCTION]
Waterfall (first verifiable signal): hiring signal / tech stack /
content-positioning / company milestone / fallback (flagged).
Structure (under 100 words): line 1 opener (25 words), line 2 problem
connect (20 words), line 3 offer with proof, line 4 soft CTA.
3 subject variants under 33 characters. QA: word count, no em dashes,
no fabricated facts, signal confidence noted.
mkdir -p .claude/skills/reciprocity-tracker

Log every comment left: creator/prospect, date, angle taken.
Before each new session: check log so the same person is not
commented on twice within a short window, angles stay varied.
Output: reciprocity-log.md, flag any over-targeted creator/prospect.
mkdir -p .claude/skills/comment-quality-checker

Take a drafted comment and check against 3 rules: adds value the post
didn't say, disagrees with real nuance rather than reflex, or tells a
relevant story.
Flag if it just restates the post in different words. Return PASS or
FAIL with the specific reason.
mkdir -p .claude/skills/feed-engagement-session

Find recent posts from ICP-matching profiles: [DESCRIBE ICP]
For each: draft a 2-3 sentence comment adding value, never mentioning
our product.
Run comment-quality-checker on each draft before returning.
Output: session-comments.csv (post URL, author, draft comment, QA status).
mkdir -p .claude/skills/connection-request-batcher

Input: prospects.csv, connection notes already drafted.
Check daily cap (20/day default). Queue sends respecting the cap,
split across multiple accounts if configured (round-robin).
Log every send with timestamp to ./campaigns/{today}-connections.md.
Stop and report remaining budget if cap reached mid-batch.
Section 6

System 5: DM Sequencing and Reply Handling (10 Skills)

mkdir -p .claude/skills/linkedin-warm-dm-sequencer

---
name: linkedin-warm-dm-sequencer
description: When writing a warm DM sequence for a newly accepted
connection or engaged prospect, load this skill. Output hands to Prosp
for scheduled sending.
---

Input: prospect name/title/company, relationship start context, offer.
Touch 1 (within 24h): reference specific context, human question, no
offer, under 150 characters.
Touch 2 (3 days later): different angle, no pitch, under 200 characters.
Touch 3 (7 days after touch 2): honest check-in, can introduce offer
briefly, no guilt, under 150 characters.
If touch 1 gets a reply, do not send touch 2, hand to reply-classifier.
Output: {name, touch_1_text, touch_1_date, touch_2_text, touch_2_date,
touch_3_text, touch_3_date, source_context}
mkdir -p .claude/skills/linkedin-reply-classifier

---
name: linkedin-reply-classifier
description: When a LinkedIn DM reply comes in and needs classifying
for next action, load this skill.
---

Classify: POSITIVE_INTEREST / POSITIVE_BUT_BUSY / NEUTRAL_QUESTION /
OBJECTION / NOT_INTERESTED / OUT_OF_OFFICE_OR_AUTOMATED /
ESCALATE_TO_HUMAN.
For each: classification, confidence. If POSITIVE_INTEREST or
NEUTRAL_QUESTION: suggested next message. If POSITIVE_BUT_BUSY: extract
follow-up date. If OBJECTION: which specific one. If ESCALATE: one-line
reason.
When in doubt, classify toward ESCALATE_TO_HUMAN. Never auto-draft a
reply for OBJECTION or ESCALATE without human review.
mkdir -p .claude/skills/warm-signal-tracker

Monitor engagement against ICP. Flag anyone who crossed the threshold
for a proactive DM: 3+ comments across different posts, or repeated
profile views from within the exact ICP.
Output: warm-signals.csv (name, signal type, signal count, date last
seen, recommended action).
mkdir -p .claude/skills/dm-reply-time-monitor

Track every inbound DM timestamp against current time.
Escalate anything approaching 24 hours unanswered.
Output: overdue-replies.csv (name, message received, hours elapsed,
priority).
mkdir -p .claude/skills/dm-self-check

Count uses of I/we/our/my against you/your in this DM: [PASTE]
If the first count is higher, rewrite to be about them.
Return the corrected version with the before/after count.
mkdir -p .claude/skills/one-question-filter

Check this drafted DM for more than one question.
If more than one exists, rewrite down to a single binary, clarifying,
or permission-based question.
Return the corrected DM.
mkdir -p .claude/skills/mirror-style-analyzer

Read this prospect's last few messages: [PASTE]
Return their communication style: fast/casual or slow/formal.
Adjust the next reply draft to mirror that pace and register.
mkdir -p .claude/skills/next-step-closer

Check this drafted DM ends with a specific, low-friction next step
(a deliverable, a deadline, a proposed time), not an open-ended
"let's stay in touch."
If it fails, rewrite the closing line only.
mkdir -p .claude/skills/voice-calibration

Input: 5-10 real messages/posts/comments the user has written and
considers on-voice.
Analyse: sentence length pattern, vocabulary, directness, what they
never say, opening/closing patterns.
Write or update brand-voice.md as concrete rules, not vague adjectives.
On later runs with feedback: update the specific correction, do not
rewrite the whole file.
mkdir -p .claude/skills/objection-handler

1. "We already have something": ask what gap exists in their current solution.
2. "Not ready right now": ask if it's timing or priority.
3. "Price too high": ask if it's the number or the value-relative-to-cost.
4. "Need to talk to my team": offer to help build the internal case.
5. "Budget freeze": ask if it's across the board or specific lines.
Push when the objection is a reason not a decision. Let go after three
reasons with zero curiosity about your response.
Section 7

System 6: CRM and Pipeline Logging (10 Skills)

mkdir -p .claude/skills/crm-activity-logger

Input: outreach-batch.csv (what was sent today). Call notes/transcripts.
1. For each row: log activity (contact, channel, date, content sent, status)
2. For each call: log contact, duration, outcome, next step, notes
3. Flag any contact at 3rd+ touch with no reply, for review
Output: CRM-ready activity log + summary (total logged, needs review count).
Never mark complete without a real timestamp. Flag likely duplicates.
mkdir -p .claude/skills/lead-qualifier

Qualify: Director/Founder/Owner/Manager/C-suite. Company type: SaaS,
B2B, agency. Function: owns or influences outbound, lead gen, or GTM.
Skip: open to work badge, pure IC with no GTM responsibility.
Tier 1 (contact immediately): exact title, ICP-range company, active signal.
Tier 2 (within 3 days): adjacent title, unclear size, no signal but ICP.
Tier 3 (if capacity): partial match, unclear influence.
mkdir -p .claude/skills/sales-call-prep

Pull together everything known: original sourcing signal, every
comment/DM exchange, profile context.
Produce one-page brief: who they are, why they engaged, what they
likely want to know, specific outcome to aim for.
mkdir -p .claude/skills/meeting-notes

Classify meeting type: client / internal / sales discovery / strategy.
Extract: decisions made (agreed only, with who), action items (task,
owner, due date, flag if none), open questions (who raised, status),
80-word summary.
For discovery calls also: pain in their words, decision process,
timeline, next step with date, ICP fit hot/warm/cold.
Never invent a decision not explicitly made. Flag missing due dates.
mkdir -p .claude/skills/hubspot-deal-sync

Sync this qualified lead into HubSpot as a new deal.
Stage: [initial stage based on qualification tier]
Associate contact and company records. Log the source signal as a
deal note. Set next step task with a due date.
Confirm the deal ID created before ending.
mkdir -p .claude/skills/pipeline-stage-mover

Given this list of contacts and their latest interaction: [PASTE],
determine which pipeline stage each belongs in now.
Flag any contact that has been stalled in the same stage for 14+ days.
Output: stage-moves.csv (contact, old stage, new stage, reason).
mkdir -p .claude/skills/notion-pipeline-writer

Write qualified leads to [NOTION DATABASE URL].
Fields: Name, LinkedIn URL, Company, Score, Heat, Status = New Lead,
Date Added, Source Signal.
Check for existing record by LinkedIn URL before creating a duplicate.
Update in place if a record already exists.
mkdir -p .claude/skills/duplicate-record-check

Scan the CRM or pipeline database for duplicate contact records.
Match on: exact email, exact LinkedIn URL, or name+company combination.
Output: duplicates.csv with a recommended merge (keep the record with
more complete data and more recent activity).
mkdir -p .claude/skills/contact-tagging

Tag each contact in this list based on: source (cold/high-intent/
feed-engage/referral), ICP tier, and current sequence stage.
Apply tags consistently using this exact taxonomy: [PASTE TAG LIST].
Flag any contact missing a required tag.
mkdir -p .claude/skills/follow-up-scheduler

Given this list of contacts and their next-touch dates: [PASTE],
build tomorrow's follow-up queue.
Prioritise by: overdue first, then by heat tier (hot before warm),
then by days since last contact.
Output: tomorrows-followups.csv.
Section 8

System 7: Reporting and Diagnostics (10 Skills)

mkdir -p .claude/skills/linkedin-campaign-reporter

---
name: linkedin-campaign-reporter
description: When summarising LinkedIn outreach campaign performance
from raw metrics, load this skill.
---

Input: connections sent, accepted, DMs sent, replies, meetings booked,
per campaign/week.
Calculate: acceptance rate, reply rate, meeting conversion, week-over-
week change.
Output: This Week in One Sentence, Performance table, What the Numbers
Suggest, Recommended Action for Next Week.
If acceptance below 15%: flag the connection note. If acceptance
healthy but reply rate low: flag the DM sequence. Never call a change
significant without enough volume.
mkdir -p .claude/skills/campaign-diagnostic

Input: campaign metrics, sample of actual messages sent.
Diagnose: targeting broken (low acceptance despite decent note), voice
broken (decent acceptance, low reply rate), reply handling broken
(good replies, few meetings booked).
Output: precise diagnosis, specific fix list, note to run
voice-calibration if voice is the issue.
mkdir -p .claude/skills/client-report

Step 1 intake: which client, input available, primary focus, wins to
lead with, anything not to include.
Step 2 language filter: translate internal jargon to client language
(e.g. "bounce rate exceeded threshold" -> "we cleaned the contact list
to protect domain health").
Step 3 format: This Week in One Sentence, Performance table, What We
Learned, What We Are Doing Next Week.
Never hide a problem. Under 250 words.
mkdir -p .claude/skills/weekly-gtm-digest

Pull: campaign performance signals (deliverability alerts, bounces
over 4%, paused sequences), new unread positive replies, client
messages after 6pm/before 7am.
Post format: Campaigns / Needs Response Today / Deliverability Flags /
New ICP Signals / Client Messages After Hours.
Never flag urgent unless action is needed before noon. Omit empty
sections. Maximum 25 lines.
mkdir -p .claude/skills/acceptance-rate-diagnostic

Current connection acceptance rate: [X]%.
Is this healthy for our ICP and channel? If not, diagnose whether ICP
targeting, the connection note, or the profile itself is the likely
cause.
Give the single most likely cause, not a list of possibilities.
mkdir -p .claude/skills/reply-rate-diagnostic

Current DM reply rate: [X]%. Sample messages: [PASTE]
Diagnose whether the opener, the offer, or the overall tone is the
issue.
Give one specific rewrite recommendation, not a general critique.
mkdir -p .claude/skills/competitive-brief

Research [COMPETITOR] from website, G2 (last 90 days), LinkedIn (last
30 days), job postings.
Return: positioning in their words, top 5 customer complaints, hiring
signal analysis, one claim we can make they cannot, what to say when
their name comes up, one honest thing they do well.
Verify pricing/feature claims. Never invent a G2 complaint.
mkdir -p .claude/skills/gtm-day-planner

Ask: active campaigns and status, what happened overnight, what I'm
worried about, deadlines before noon.
Produce: Tier 1 fix first (max 2), Tier 2 move forward now (max 3),
Tier 3 defer, Claude Code sessions to queue, the one question to
answer first, the time block to protect.
Flag any campaign stalled 3+ days regardless of tier.
mkdir -p .claude/skills/decide

Three passes: Structurer (options, assumptions, pros/cons), Contrarian
(holes, hidden assumptions, second-order effects), Synthesizer
(recommendation, reversibility, kill criteria).
Interview: what's the decision, options, why now, gut lean, what would
prove the gut wrong, who's affected, reversible in 90 days.
Never recommend a tool change for a copy/ICP problem. No em dashes.
mkdir -p .claude/skills/monthly-system-health-review

Review this month's full funnel: content reach, comment activity,
connections sent, DMs sent, replies, meetings booked, closed deals.
Identify the biggest drop-off point in the funnel.
Output: one specific fix for that drop-off, not a general improvement list.
Section 9

System 8: Prosp Handoff and Scaling (10 Skills)

mkdir -p .claude/skills/prosp-handoff-brief

For this contact who just accepted a connection or replied warm:
[PASTE CONTEXT]
Produce the handoff object for Prosp: name, source signal, engagement
history summary, recommended sequence type (post-engagement /
cold-connect-warmup / high-intent), first-touch draft already written.
Flag if this contact is a duplicate of anyone already in an active
Prosp sequence.
mkdir -p .claude/skills/sequence-router

Given this batch of warm contacts: [PASTE], route each into the
correct Prosp sequence type based on how the relationship started:
comment-origin, cold-accept-origin, or high-intent-origin.
Output: routed-contacts.csv with sequence_type column.
mkdir -p .claude/skills/multi-account-round-robin

Given [N] connected LinkedIn accounts and a batch of [M] connection
requests to send, distribute the sends evenly across accounts
respecting each account's individual daily cap.
Output: send-assignment.csv (prospect, assigned account, send order).
mkdir -p .claude/skills/daily-cap-checker

Query current usage against daily caps: 20 connection requests, 100
profile lookups, 15 searches, 15 feed comments.
Return remaining budget per category.
If any cap is already exhausted, flag which skills should not run
again today.
mkdir -p .claude/skills/campaign-fatigue-detector

We have run the same outreach angle for [N] weeks. Reply rate trend:
[PASTE].
Determine if fatigue has set in (declining reply rate with no other
explanation). If yes, recommend the specific new angle to rotate to.
mkdir -p .claude/skills/icp-expansion-decision

Current ICP is producing [N] qualified leads per week.
Argue whether we should widen ICP criteria or whether the volume
ceiling is actually a targeting precision issue.
Give the actual recommendation, not just both sides.
mkdir -p .claude/skills/team-onboarding-brief

A new team member is joining this LinkedIn lead gen system.
Write the onboarding brief: which skills they'll use and in what
order, the daily routine, the rules that must never be broken (daily
caps, comment quality bar, no fabricated claims).
mkdir -p .claude/skills/skill-library-audit

Given this list of skills in the system: [PASTE], check campaign logs
to determine which are being run regularly, which are underused, and
which need updating based on recent diagnostic results.
Output: audit report with a specific recommendation per skill.
mkdir -p .claude/skills/amplify-connector-setup

Check 3 components before considering the LinkedIn automation setup
complete:
1. Persistent memory: campaign history and voice examples accumulate
   across sessions
2. API connection: LinkupAPI or equivalent, confirmed connected
3. Sub-agent delegation: research, drafting, and reply handling split
   across dedicated skills rather than one general prompt
Output: checklist confirming all 3, or specific gaps to fix.
mkdir -p .claude/skills/campaign-kill-continue

This campaign has run for [N] weeks with these results: [PASTE].
Give the actual recommendation: continue, adjust, or kill.
If adjust: the single specific change to make before the next run.
Section 10

The Exact Prompts: Full Daily Routine

# Build the ICP
"Interview me one question at a time: title/seniority, company type,
size, revenue stage, the specific problem in their words, where they
spend time on LinkedIn, the one disqualifier. Save as icp.md."

# Build the cold list
"Build a list of [COMPANY TYPE] matching [ICP]. Domain and name only,
no email lookup. Target: [N]. Output raw-leads.csv."

# Filter before enriching
"Filter raw-leads.csv against my ICP. Visit each company website, mark
KEEP or DROP with reason. Output filtered-leads.csv."

# Find the email
"For each row in filtered-leads.csv, check for a visible email pattern
or generate the top candidate. Confidence per row. Output
prospect-list-with-emails.csv."

# Verify
"Submit prospect-list-with-emails.csv for verification. Split into
valid/catch-all/unknown/invalid. Report the final safe-to-send count."

# Grade the list
"Grade valid-leads.csv across 8 dimensions. Return overall grade. Only
B or above moves to sending."

# Write the connection note
"Prospect: [NAME/TITLE]. Signal: [SIGNAL]. Write a connection note
under 200 characters referencing it. No pitch."

# Run the feed warmup
"Find recent posts from ICP-matching profiles. Comment 2-3 sentences,
adding value, no product mention. Pace 30-60 seconds apart, stop at 15."

# Send connections
"Run linkedin-outreach for [ICP]. Check daily cap first, report
remaining budget. Log every send."

# Score post engagers
"Score these post engagers by ICP fit and engagement depth. Combined
priority = depth x fit. Rank highest first, recommend action per row."

# Write the warm DM sequence
"Relationship started via [comment/accept]. Write touch 1 (24h,
references the start), touch 2 (3 days, different angle), touch 3
(7 days, honest check-in). Hand off to Prosp format."

# Classify a reply
"Classify this reply: [PASTE]. Category, confidence, suggested next
message if applicable. Escalate to human if ambiguous."

# Diagnose a stalled campaign
"Campaign has run [N] weeks with these results: [PASTE]. Continue,
adjust, or kill. If adjust: the one specific change."

# Weekly report
"Turn these campaign metrics into a client-facing weekly update.
Translate jargon into plain language. Under 250 words."

# Route to Prosp
"For this warm contact: [PASTE CONTEXT]. Produce the Prosp handoff
object: source signal, engagement summary, sequence type, first-touch
draft."

# Check daily caps before running anything
"Query current usage against daily caps: connections, lookups,
searches, comments. Return remaining budget per category."

# Full daily routine, one command
"Run today's full sequence: check daily caps, pull todays-prospect-
list, run feed-engage warmup, send outreach batch, log everything to
CRM, flag anything needing my review before I finish."
Section 11

Install Everything: All 80 Skills, One Block

mkdir -p .claude/skills/{icp-prompt-builder,raw-list-source,icp-filter-pass,linkedin-icp-list-builder,disco-like,competitor-engagers,job-posting-trigger-list,funding-signal-list,tam-sanity-check,sales-prospect-list,email-finder,verify-and-segment,list-quality-scorecard,linkedin-enrich,decision-maker-mapper,waterfall-enrichment,duplicate-detector,email-pattern-finder,bulk-profile-enrichment,contact-hygiene-check,content-engine,linkedin-post-writer,hook-last-and-humanize,editorial-calendar,borrowed-reach-formatter,total-addressable-content-finder,content-bucket-planner,point-of-view-extractor,linkedin-carousel-builder,voice-note-transcriber,linkedin-outreach,linkedin-high-intent,linkedin-feed-engage,linkedin-connection-note-writer,linkedin-post-engager-scorer,cold-email-personaliser,reciprocity-tracker,comment-quality-checker,feed-engagement-session,connection-request-batcher,linkedin-warm-dm-sequencer,linkedin-reply-classifier,warm-signal-tracker,dm-reply-time-monitor,dm-self-check,one-question-filter,mirror-style-analyzer,next-step-closer,voice-calibration,objection-handler,crm-activity-logger,lead-qualifier,sales-call-prep,meeting-notes,hubspot-deal-sync,pipeline-stage-mover,notion-pipeline-writer,duplicate-record-check,contact-tagging,follow-up-scheduler,linkedin-campaign-reporter,campaign-diagnostic,client-report,weekly-gtm-digest,acceptance-rate-diagnostic,reply-rate-diagnostic,competitive-brief,gtm-day-planner,decide,monthly-system-health-review,prosp-handoff-brief,sequence-router,multi-account-round-robin,daily-cap-checker,campaign-fatigue-detector,icp-expansion-decision,team-onboarding-brief,skill-library-audit,amplify-connector-setup,campaign-kill-continue}

mkdir -p campaigns enrichments content/drafts content/published reports

SYSTEM 1: ICP AND LIST BUILDING

mkdir -p .claude/skills/icp-prompt-builder

---
name: icp-prompt-builder
description: When building a search filter for prospecting, load this skill.
---

Load my client-profile.yaml.
Produce: exact titles (primary + fallback), seniority levels, company
size range, industry filters, geography filters, tech/tool filters,
the one disqualifier that rules someone out immediately, and the exact
Sales Navigator or Prospeo filter string to use.
mkdir -p .claude/skills/raw-list-source

Build a raw lead list at minimum cost: domain and name only, no email lookups.
Source: [Google Maps scraper / Prospeo / Apollo / Clay / Outscraper]
Search parameters: business type or title, location, volume.
Restrict output fields to: company name, domain, contact first/last name.
No email or phone lookup at this step.
Output as raw-leads.csv.
mkdir -p .claude/skills/icp-filter-pass

Filter this raw lead list against my ICP before any email lookup happens.
List file: raw-leads.csv
ICP criteria: company type, size, industry, geography, disqualifiers.
For each row: visit the company website, check against ICP, mark KEEP
or DROP with a one-line reason.
Model: Haiku, not a frontier model.
Output: filtered-leads.csv + dropped-leads.csv.
Use sub-agents in parallel batches if list exceeds 500 rows.
mkdir -p .claude/skills/linkedin-icp-list-builder

---
name: linkedin-icp-list-builder
description: When building a fresh LinkedIn prospect list from ICP
criteria with no existing post or creator to work from, load this skill.
---

Input: ICP from CLAUDE.md. Target list size: [N]
Process: search using ICP filters, verify against disqualifiers, check
last 30 days of campaign logs (exclude contacted), prioritise profiles
with activity in last 14 days.
Output: prospects.csv (name, title, company, profile URL, last active,
priority). Stop at target size or daily search cap. Flag if criteria
return fewer than half target size.
mkdir -p .claude/skills/disco-like

Find lookalike companies for my ICP.
Seed: [5-10 domains of best-fit customers]
Find [N] similar companies. For each: name, domain, why it matches,
size estimate, geography, already contacted (Y/N).
Exclude companies already in leads database.
Output as lookalike-companies.csv.
mkdir -p .claude/skills/competitor-engagers

Find people engaging with competitor content on LinkedIn.
Competitor profiles to monitor: [URLs]
Posts to scrape: [recent product/pricing/feature posts]
For each post: scrape commenters/reactors, filter for ICP matches,
find verified email per match.
Output: name, title, company, email, LinkedIn URL, which post engaged.
Output as competitor-engagers.csv.
mkdir -p .claude/skills/job-posting-trigger-list

Find companies posting [JOB TITLE] roles in the last 14 days.
Filter: [INDUSTRY, GEO, SIZE]
Return: company, posting date, website, employee count.
Output as trigger-list.csv.
mkdir -p .claude/skills/funding-signal-list

Find companies that raised funding in the last 90 days matching:
[ICP CRITERIA]
Return: company, round, amount, date, one sentence on why this signals
buying intent for our offer.
Output as funding-signals.csv.
mkdir -p .claude/skills/tam-sanity-check

Given ICP criteria: [PASTE], estimate total addressable market size.
If under [THRESHOLD], recommend how to widen criteria without losing fit.
mkdir -p .claude/skills/sales-prospect-list

---
name: sales-prospect-list
description: When maintaining the single running target list this
system operates against, load this skill.
---

Maintain one canonical prospect list across all sourcing methods.
Every new lead checked against this list before being added, so the
same person is never sourced twice from two methods unnoticed.

SYSTEM 2: ENRICHMENT AND VERIFICATION

mkdir -p .claude/skills/email-finder

Find or infer the verified email address for each contact.
List file: filtered-leads.csv
Fields: company domain, first name, last name.
1. Check domain for publicly visible emails (team/about/press pages)
2. If no pattern visible, generate candidates: first.last@ / firstlast@
   / first@ / f.last@ / flast@
3. Note confidence (high/medium/low) per candidate
4. Select highest-confidence candidate per contact
Output: prospect-list-with-emails.csv (company, domain, name, guessed
email, confidence, pattern used). Flag low-confidence for manual check.
Model: Haiku, pattern-matching not reasoning.
mkdir -p .claude/skills/verify-and-segment

Process this list through email verification and segment by result.
List file: prospect-list-with-emails.csv
Verification tool: [YOUR VERIFIER API]
1. Submit all emails for verification
2. Categorise: valid, catch-all, unknown, invalid
3. Split: valid-leads.csv, catch-all-leads.csv, unknown-leads.csv,
   invalid-leads.csv
4. For invalid: attempt one additional pattern before discarding
Return summary: total processed, count/% per category, final
safe-to-send count.
mkdir -p .claude/skills/list-quality-scorecard

Grade this lead list before I upload it.
List file: valid-leads.csv
ICP criteria: [load from client-profile.yaml]
Score across 8 dimensions: email validity, title match, company size
fit, geography match, duplicate rate, missing fields, role seniority,
domain health.
Return: score per dimension (0-100), overall grade (A-F), top 3 issues
to fix, safe-to-use verdict.
Only B grade or above moves to live sending.
mkdir -p .claude/skills/linkedin-enrich

---
name: linkedin-enrich
description: When enriching LinkedIn profile URLs for role, company,
location, or email data, load this skill.
---

Enrich these LinkedIn profiles.
Profile URLs: [paste URLs, one per line]
Output format: [markdown table / CSV / JSON]
Fields: current role/title, current company, location, professional
email if findable, relevant skills.
Check ./enrichments/ from last 30 days before any lookup. Skip if
already enriched, note it was skipped.
Log to ./enrichments/{today}-enrich.md. Check daily profile cap
(100/day) at Stage 0. Report skip count.
mkdir -p .claude/skills/decision-maker-mapper

---
name: decision-maker-mapper
description: When identifying the right decision-maker at a target
company, load this skill.
---

Input: target company, function needed (Marketing, Engineering, Ops).
Map function to titles likely holding decision authority at this
company's size/type.
Search matching profiles. For each: confidence score (high/medium/low)
based on title match, tenure, visible authority signals.
Output: ranked candidate list with confidence, not a single guess.
mkdir -p .claude/skills/waterfall-enrichment

Enrich this list. Try [PROVIDER 1] first. If no email found, try
[PROVIDER 2]. If still none, try [PROVIDER 3].
Mark source provider per row that succeeded.
Output: enriched-waterfall.csv with source_provider column.
mkdir -p .claude/skills/duplicate-detector

Compare these two lists: [LIST A] and [LIST B].
Flag: exact duplicates, probable duplicates (same company, different
contact), unique entries in each.
Output: duplicates.csv, unique-a.csv, unique-b.csv.
mkdir -p .claude/skills/email-pattern-finder

For [DOMAIN], determine the company's email pattern from any publicly
visible email addresses.
Check: team page, about page, press contacts, footer, privacy policy.
Return: confirmed pattern, or top 3 probable patterns ranked by
likelihood if none confirmed.
mkdir -p .claude/skills/bulk-profile-enrichment

Enrich this batch of [N] LinkedIn URLs in parallel.
Use sub-agents to process in batches of 50.
Fields per profile: role, company, location, tenure, email if findable.
Output: bulk-enriched.csv. Report total processed, total skipped
(already enriched), total failed.
mkdir -p .claude/skills/contact-hygiene-check

Audit this contact list for hygiene issues: [PASTE]
Flag: missing name, missing title, missing company, malformed email,
placeholder/test data, obviously outdated (role no longer exists at
company per LinkedIn).
Output: clean-list.csv, flagged-for-review.csv with reason per flag.
Section 12

Continued: Systems 3-4 (Content Below)

SYSTEM 3: CONTENT WARMUP

mkdir -p .claude/skills/content-engine

---
name: content-engine
description: When I paste a video/podcast transcript and ask for social
posts, LinkedIn posts, threads, or an article, load this skill.
---

Mine the source, do not summarise it. Extract: 3 most shareable claims,
1 specific story/result, the speaker's vocabulary, any hook-worthy
numbers/names.
Produce: 3 LinkedIn posts (different hook mechanisms), 2 X threads
(list format + story format), 1 SEO article outline (Answer Block in
first 100 words).
Never repeat a hook mechanism in the same set. Never invent a stat not
in the source. Apply brand-voice skill.
mkdir -p .claude/skills/linkedin-post-writer

---
name: linkedin-post-writer
description: When I say write a LinkedIn post about [TOPIC], load this
skill. Always load brand-voice and audience-profile alongside it.
---

Select hook: specific number / contrarian claim / story opener / ICP
direct address / stakes escalation / progressive milestone. Name it.
Content moat check: is there a detail only I could include? If not,
add [SPECIFIC DETAIL NEEDED] placeholder.
Output: hook type used, post (under 200 words), one CTA, one A/B hook
variant. No em dashes, no hashtags, one idea per line.
mkdir -p .claude/skills/hook-last-and-humanize

Step 1: Read the full draft. Find the sharpest, most specific line
already inside it. Move it to the top as the hook. Do not invent a new
hook. If nothing is strong enough, say so.
Step 2: List every phrase reading as AI-generated: em dashes, "it's
not just X, it's Y", rhetorical question openers, triple-adjective
stacks, generic superlatives with no number. Rewrite flagged sections
only.
mkdir -p .claude/skills/editorial-calendar

Build a 7-day plan from pillars: [LIST]
For each day: topic, hook type, format, posting time.
Anti-repetition: no hook type twice in one week, no pillar twice
(unless only one exists), no two consecutive posts same format, one
lead magnet CTA post per two weeks.
Second output: the 3 posts most likely to perform well and why.
mkdir -p .claude/skills/borrowed-reach-formatter

Take this topic: [TOPIC]. Draft in 5 formats: brand-jacking,
newsjacking, referencing a known figure, hot take, trend-riding.
Return all 5 with the specific brand/event/figure/trend named per
format, and flag if the window is time-sensitive.
Never fabricate a news event. No em dashes.
mkdir -p .claude/skills/total-addressable-content-finder

Given ICP: [PASTE], research what this audience is currently watching,
reading, and reacting to on LinkedIn right now. Return specific posts,
topics, creators currently getting traction with this exact audience.
mkdir -p .claude/skills/content-bucket-planner

Take this week/month of planned topics and sort into: 40% growth, 30%
authority, 20% conversion, 10% personal.
Flag any week overweighted toward one bucket.
mkdir -p .claude/skills/point-of-view-extractor

Interview me about what I believe that contradicts my industry's
consensus. Turn answers into a bank of contrarian angles for hot-take
and authority content.
mkdir -p .claude/skills/linkedin-carousel-builder

Use the exported HTML template at [PATH]. Topic: [TOPIC]
Produce: finished carousel using title/numbered-point/big-stat/
screenshot/closing-CTA layouts, 5 caption options (different angles),
one first-comment CTA.
Export each card as individual PNG, card only, no background. No em
dashes, no hashtags.
mkdir -p .claude/skills/voice-note-transcriber

Input: raw voice note transcript.
1. Clean for readability only: remove filler words, fix transcription
   errors. Do not rephrase or polish content.
2. Mark natural topic-shift break points
3. Flag if the transcript contains more than one post's worth of idea
Output: cleaned-transcript.md with [TOPIC SHIFT] markers.
Never add content not said. Preserve awkward-but-specific phrasing.

SYSTEM 4: CONNECTION AND OUTREACH

mkdir -p .claude/skills/linkedin-outreach

Load CLAUDE.md for ICP and offer.
8-stage flow: intent-first ICP discovery, draft ICP proposal, filter
editing before running, company search, decision maker extraction,
false positive filtering, multi-account dedup selection, connection
sends with campaign log.
Connection note: reference something specific about company/role.
Under 200 characters. No pitch.
Check daily cap before starting, report remaining budget. Log every
send to ./campaigns/{today}-outreach.md.
mkdir -p .claude/skills/linkedin-high-intent

Run a high-intent campaign from a post.
Post URL: [paste]
Scrape all commenters/reactors. Filter visible signal first before
enriching. Only enrich passing matches. Only send to confirmed ICP matches.
Connection note references the post they engaged with. Sound human, no pitch.
Log to ./campaigns/{today}-high-intent.md.
mkdir -p .claude/skills/linkedin-feed-engage

Comment mode: [auto / templated / HITL-approved]
Rules: 2-3 sentences, must add something the post did not say, no
product mention, no "great post", no em dashes, sound like a peer.
Pacing: 30-60 seconds between comments. Stop at 15 comments maximum.
Log to ./campaigns/{today}-feed-engage.md. Check daily cap at Stage 0.
mkdir -p .claude/skills/linkedin-connection-note-writer

---
name: linkedin-connection-note-writer
description: When writing a LinkedIn connection request note for a
specific prospect, load this skill.
---

Priority order: 1. specific post/comment they made 2. recent job
change/milestone 3. shared connection 4. specific real profile detail
(never generic).
Under 200 characters. No pitch. No em dashes. Return 2 variants using
different angles.
mkdir -p .claude/skills/linkedin-post-engager-scorer

Input: raw engager list (name, title, company, engagement type,
comment text), plus ICP.
Engagement depth (1-3): 3=substantive comment, 2=short/repost, 1=liked.
ICP fit (1-3): 3=exact, 2=adjacent, 1=no match.
Combined priority = depth x fit (max 9).
Output: ranked list with recommended action (connect now / feed-engage
first / skip).
mkdir -p .claude/skills/cold-email-personaliser

---
name: cold-email-personaliser
description: When given a LinkedIn URL or prospect profile and asked
for a cold email or outreach angle, load this skill.
---

My offer: [ONE SENTENCE]. My ICP: [TITLE, TYPE, SIZE, FUNCTION]
Waterfall (first verifiable signal): hiring signal / tech stack /
content-positioning / company milestone / fallback (flagged).
Structure (under 100 words): line 1 opener (25 words), line 2 problem
connect (20 words), line 3 offer with proof, line 4 soft CTA.
3 subject variants under 33 characters. QA: word count, no em dashes,
no fabricated facts, signal confidence noted.
mkdir -p .claude/skills/reciprocity-tracker

Log every comment left: creator/prospect, date, angle taken.
Before each new session: check log so the same person is not
commented on twice within a short window, angles stay varied.
Output: reciprocity-log.md, flag any over-targeted creator/prospect.
mkdir -p .claude/skills/comment-quality-checker

Take a drafted comment and check against 3 rules: adds value the post
didn't say, disagrees with real nuance rather than reflex, or tells a
relevant story.
Flag if it just restates the post in different words. Return PASS or
FAIL with the specific reason.
mkdir -p .claude/skills/feed-engagement-session

Find recent posts from ICP-matching profiles: [DESCRIBE ICP]
For each: draft a 2-3 sentence comment adding value, never mentioning
our product.
Run comment-quality-checker on each draft before returning.
Output: session-comments.csv (post URL, author, draft comment, QA status).
mkdir -p .claude/skills/connection-request-batcher

Input: prospects.csv, connection notes already drafted.
Check daily cap (20/day default). Queue sends respecting the cap,
split across multiple accounts if configured (round-robin).
Log every send with timestamp to ./campaigns/{today}-connections.md.
Stop and report remaining budget if cap reached mid-batch.
Section 13

Continued: Systems 5-8 (Content Below)

SYSTEM 5: DM SEQUENCING AND REPLY HANDLING

mkdir -p .claude/skills/linkedin-warm-dm-sequencer

---
name: linkedin-warm-dm-sequencer
description: When writing a warm DM sequence for a newly accepted
connection or engaged prospect, load this skill. Output hands to Prosp
for scheduled sending.
---

Input: prospect name/title/company, relationship start context, offer.
Touch 1 (within 24h): reference specific context, human question, no
offer, under 150 characters.
Touch 2 (3 days later): different angle, no pitch, under 200 characters.
Touch 3 (7 days after touch 2): honest check-in, can introduce offer
briefly, no guilt, under 150 characters.
If touch 1 gets a reply, do not send touch 2, hand to reply-classifier.
Output: {name, touch_1_text, touch_1_date, touch_2_text, touch_2_date,
touch_3_text, touch_3_date, source_context}
mkdir -p .claude/skills/linkedin-reply-classifier

---
name: linkedin-reply-classifier
description: When a LinkedIn DM reply comes in and needs classifying
for next action, load this skill.
---

Classify: POSITIVE_INTEREST / POSITIVE_BUT_BUSY / NEUTRAL_QUESTION /
OBJECTION / NOT_INTERESTED / OUT_OF_OFFICE_OR_AUTOMATED /
ESCALATE_TO_HUMAN.
For each: classification, confidence. If POSITIVE_INTEREST or
NEUTRAL_QUESTION: suggested next message. If POSITIVE_BUT_BUSY: extract
follow-up date. If OBJECTION: which specific one. If ESCALATE: one-line
reason.
When in doubt, classify toward ESCALATE_TO_HUMAN. Never auto-draft a
reply for OBJECTION or ESCALATE without human review.
mkdir -p .claude/skills/warm-signal-tracker

Monitor engagement against ICP. Flag anyone who crossed the threshold
for a proactive DM: 3+ comments across different posts, or repeated
profile views from within the exact ICP.
Output: warm-signals.csv (name, signal type, signal count, date last
seen, recommended action).
mkdir -p .claude/skills/dm-reply-time-monitor

Track every inbound DM timestamp against current time.
Escalate anything approaching 24 hours unanswered.
Output: overdue-replies.csv (name, message received, hours elapsed,
priority).
mkdir -p .claude/skills/dm-self-check

Count uses of I/we/our/my against you/your in this DM: [PASTE]
If the first count is higher, rewrite to be about them.
Return the corrected version with the before/after count.
mkdir -p .claude/skills/one-question-filter

Check this drafted DM for more than one question.
If more than one exists, rewrite down to a single binary, clarifying,
or permission-based question.
Return the corrected DM.
mkdir -p .claude/skills/mirror-style-analyzer

Read this prospect's last few messages: [PASTE]
Return their communication style: fast/casual or slow/formal.
Adjust the next reply draft to mirror that pace and register.
mkdir -p .claude/skills/next-step-closer

Check this drafted DM ends with a specific, low-friction next step
(a deliverable, a deadline, a proposed time), not an open-ended
"let's stay in touch."
If it fails, rewrite the closing line only.
mkdir -p .claude/skills/voice-calibration

Input: 5-10 real messages/posts/comments the user has written and
considers on-voice.
Analyse: sentence length pattern, vocabulary, directness, what they
never say, opening/closing patterns.
Write or update brand-voice.md as concrete rules, not vague adjectives.
On later runs with feedback: update the specific correction, do not
rewrite the whole file.
mkdir -p .claude/skills/objection-handler

1. "We already have something": ask what gap exists in their current solution.
2. "Not ready right now": ask if it's timing or priority.
3. "Price too high": ask if it's the number or the value-relative-to-cost.
4. "Need to talk to my team": offer to help build the internal case.
5. "Budget freeze": ask if it's across the board or specific lines.
Push when the objection is a reason not a decision. Let go after three
reasons with zero curiosity about your response.

SYSTEM 6: CRM AND PIPELINE LOGGING

mkdir -p .claude/skills/crm-activity-logger

Input: outreach-batch.csv (what was sent today). Call notes/transcripts.
1. For each row: log activity (contact, channel, date, content sent, status)
2. For each call: log contact, duration, outcome, next step, notes
3. Flag any contact at 3rd+ touch with no reply, for review
Output: CRM-ready activity log + summary (total logged, needs review count).
Never mark complete without a real timestamp. Flag likely duplicates.
mkdir -p .claude/skills/lead-qualifier

Qualify: Director/Founder/Owner/Manager/C-suite. Company type: SaaS,
B2B, agency. Function: owns or influences outbound, lead gen, or GTM.
Skip: open to work badge, pure IC with no GTM responsibility.
Tier 1 (contact immediately): exact title, ICP-range company, active signal.
Tier 2 (within 3 days): adjacent title, unclear size, no signal but ICP.
Tier 3 (if capacity): partial match, unclear influence.
mkdir -p .claude/skills/sales-call-prep

Pull together everything known: original sourcing signal, every
comment/DM exchange, profile context.
Produce one-page brief: who they are, why they engaged, what they
likely want to know, specific outcome to aim for.
mkdir -p .claude/skills/meeting-notes

Classify meeting type: client / internal / sales discovery / strategy.
Extract: decisions made (agreed only, with who), action items (task,
owner, due date, flag if none), open questions (who raised, status),
80-word summary.
For discovery calls also: pain in their words, decision process,
timeline, next step with date, ICP fit hot/warm/cold.
Never invent a decision not explicitly made. Flag missing due dates.
mkdir -p .claude/skills/hubspot-deal-sync

Sync this qualified lead into HubSpot as a new deal.
Stage: [initial stage based on qualification tier]
Associate contact and company records. Log the source signal as a
deal note. Set next step task with a due date.
Confirm the deal ID created before ending.
mkdir -p .claude/skills/pipeline-stage-mover

Given this list of contacts and their latest interaction: [PASTE],
determine which pipeline stage each belongs in now.
Flag any contact that has been stalled in the same stage for 14+ days.
Output: stage-moves.csv (contact, old stage, new stage, reason).
mkdir -p .claude/skills/notion-pipeline-writer

Write qualified leads to [NOTION DATABASE URL].
Fields: Name, LinkedIn URL, Company, Score, Heat, Status = New Lead,
Date Added, Source Signal.
Check for existing record by LinkedIn URL before creating a duplicate.
Update in place if a record already exists.
mkdir -p .claude/skills/duplicate-record-check

Scan the CRM or pipeline database for duplicate contact records.
Match on: exact email, exact LinkedIn URL, or name+company combination.
Output: duplicates.csv with a recommended merge (keep the record with
more complete data and more recent activity).
mkdir -p .claude/skills/contact-tagging

Tag each contact in this list based on: source (cold/high-intent/
feed-engage/referral), ICP tier, and current sequence stage.
Apply tags consistently using this exact taxonomy: [PASTE TAG LIST].
Flag any contact missing a required tag.
mkdir -p .claude/skills/follow-up-scheduler

Given this list of contacts and their next-touch dates: [PASTE],
build tomorrow's follow-up queue.
Prioritise by: overdue first, then by heat tier (hot before warm),
then by days since last contact.
Output: tomorrows-followups.csv.

SYSTEM 7: REPORTING AND DIAGNOSTICS

mkdir -p .claude/skills/linkedin-campaign-reporter

---
name: linkedin-campaign-reporter
description: When summarising LinkedIn outreach campaign performance
from raw metrics, load this skill.
---

Input: connections sent, accepted, DMs sent, replies, meetings booked,
per campaign/week.
Calculate: acceptance rate, reply rate, meeting conversion, week-over-
week change.
Output: This Week in One Sentence, Performance table, What the Numbers
Suggest, Recommended Action for Next Week.
If acceptance below 15%: flag the connection note. If acceptance
healthy but reply rate low: flag the DM sequence. Never call a change
significant without enough volume.
mkdir -p .claude/skills/campaign-diagnostic

Input: campaign metrics, sample of actual messages sent.
Diagnose: targeting broken (low acceptance despite decent note), voice
broken (decent acceptance, low reply rate), reply handling broken
(good replies, few meetings booked).
Output: precise diagnosis, specific fix list, note to run
voice-calibration if voice is the issue.
mkdir -p .claude/skills/client-report

Step 1 intake: which client, input available, primary focus, wins to
lead with, anything not to include.
Step 2 language filter: translate internal jargon to client language
(e.g. "bounce rate exceeded threshold" -> "we cleaned the contact list
to protect domain health").
Step 3 format: This Week in One Sentence, Performance table, What We
Learned, What We Are Doing Next Week.
Never hide a problem. Under 250 words.
mkdir -p .claude/skills/weekly-gtm-digest

Pull: campaign performance signals (deliverability alerts, bounces
over 4%, paused sequences), new unread positive replies, client
messages after 6pm/before 7am.
Post format: Campaigns / Needs Response Today / Deliverability Flags /
New ICP Signals / Client Messages After Hours.
Never flag urgent unless action is needed before noon. Omit empty
sections. Maximum 25 lines.
mkdir -p .claude/skills/acceptance-rate-diagnostic

Current connection acceptance rate: [X]%.
Is this healthy for our ICP and channel? If not, diagnose whether ICP
targeting, the connection note, or the profile itself is the likely
cause.
Give the single most likely cause, not a list of possibilities.
mkdir -p .claude/skills/reply-rate-diagnostic

Current DM reply rate: [X]%. Sample messages: [PASTE]
Diagnose whether the opener, the offer, or the overall tone is the
issue.
Give one specific rewrite recommendation, not a general critique.
mkdir -p .claude/skills/competitive-brief

Research [COMPETITOR] from website, G2 (last 90 days), LinkedIn (last
30 days), job postings.
Return: positioning in their words, top 5 customer complaints, hiring
signal analysis, one claim we can make they cannot, what to say when
their name comes up, one honest thing they do well.
Verify pricing/feature claims. Never invent a G2 complaint.
mkdir -p .claude/skills/gtm-day-planner

Ask: active campaigns and status, what happened overnight, what I'm
worried about, deadlines before noon.
Produce: Tier 1 fix first (max 2), Tier 2 move forward now (max 3),
Tier 3 defer, Claude Code sessions to queue, the one question to
answer first, the time block to protect.
Flag any campaign stalled 3+ days regardless of tier.
mkdir -p .claude/skills/decide

Three passes: Structurer (options, assumptions, pros/cons), Contrarian
(holes, hidden assumptions, second-order effects), Synthesizer
(recommendation, reversibility, kill criteria).
Interview: what's the decision, options, why now, gut lean, what would
prove the gut wrong, who's affected, reversible in 90 days.
Never recommend a tool change for a copy/ICP problem. No em dashes.
mkdir -p .claude/skills/monthly-system-health-review

Review this month's full funnel: content reach, comment activity,
connections sent, DMs sent, replies, meetings booked, closed deals.
Identify the biggest drop-off point in the funnel.
Output: one specific fix for that drop-off, not a general improvement list.

SYSTEM 8: PROSP HANDOFF AND SCALING

mkdir -p .claude/skills/prosp-handoff-brief

For this contact who just accepted a connection or replied warm:
[PASTE CONTEXT]
Produce the handoff object for Prosp: name, source signal, engagement
history summary, recommended sequence type (post-engagement /
cold-connect-warmup / high-intent), first-touch draft already written.
Flag if this contact is a duplicate of anyone already in an active
Prosp sequence.
mkdir -p .claude/skills/sequence-router

Given this batch of warm contacts: [PASTE], route each into the
correct Prosp sequence type based on how the relationship started:
comment-origin, cold-accept-origin, or high-intent-origin.
Output: routed-contacts.csv with sequence_type column.
mkdir -p .claude/skills/multi-account-round-robin

Given [N] connected LinkedIn accounts and a batch of [M] connection
requests to send, distribute the sends evenly across accounts
respecting each account's individual daily cap.
Output: send-assignment.csv (prospect, assigned account, send order).
mkdir -p .claude/skills/daily-cap-checker

Query current usage against daily caps: 20 connection requests, 100
profile lookups, 15 searches, 15 feed comments.
Return remaining budget per category.
If any cap is already exhausted, flag which skills should not run
again today.
mkdir -p .claude/skills/campaign-fatigue-detector

We have run the same outreach angle for [N] weeks. Reply rate trend:
[PASTE].
Determine if fatigue has set in (declining reply rate with no other
explanation). If yes, recommend the specific new angle to rotate to.
mkdir -p .claude/skills/icp-expansion-decision

Current ICP is producing [N] qualified leads per week.
Argue whether we should widen ICP criteria or whether the volume
ceiling is actually a targeting precision issue.
Give the actual recommendation, not just both sides.
mkdir -p .claude/skills/team-onboarding-brief

A new team member is joining this LinkedIn lead gen system.
Write the onboarding brief: which skills they'll use and in what
order, the daily routine, the rules that must never be broken (daily
caps, comment quality bar, no fabricated claims).
mkdir -p .claude/skills/skill-library-audit

Given this list of skills in the system: [PASTE], check campaign logs
to determine which are being run regularly, which are underused, and
which need updating based on recent diagnostic results.
Output: audit report with a specific recommendation per skill.
mkdir -p .claude/skills/amplify-connector-setup

Check 3 components before considering the LinkedIn automation setup
complete:
1. Persistent memory: campaign history and voice examples accumulate
   across sessions
2. API connection: LinkupAPI or equivalent, confirmed connected
3. Sub-agent delegation: research, drafting, and reply handling split
   across dedicated skills rather than one general prompt
Output: checklist confirming all 3, or specific gaps to fix.
mkdir -p .claude/skills/campaign-kill-continue

This campaign has run for [N] weeks with these results: [PASTE].
Give the actual recommendation: continue, adjust, or kill.
If adjust: the single specific change to make before the next run.
6 build slots left · closes in

Have your first campaign built for you

Send us your ICP and a Prosp specialist sources the list, writes the sequence and clones your voice. You review every draft before a single message sends.

5/5 rated on Capterra·800+ agencies and sales teams·Set up in 5 minutes
6 done-for-you build slots left this weekTry Prosp Free