Pulls replies from a Smartlead campaign, classifies each as positive/neutral/negative/OOO/bounce/unsubscribe using Claude, and reports the positive reply rate — the north-star metric for cold email.

MITAuto-check passedSales & Support

Install Positive Reply Scoring

skills CLI
$ npx skills add growthenginenowoslawski/coldoutboundskills --skill positive-reply-scoring -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install growthenginenowoslawski/coldoutboundskills positive-reply-scoring --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/growthenginenowoslawski/coldoutboundskills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/positive-reply-scoring .claude/skills/positive-reply-scoring && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
positive-reply-scoring
GitHub stars
753
Token cost
~2k tokens
SKILL.md length
702 words
Files
3 (incl. scripts)
Skills in repo
49
Repo updated
First seen
Licence
MIT

At a glance

Pulls replies from a Smartlead campaign, classifies each as positive/neutral/negative/OOO/bounce/unsubscribe using Claude, and reports the positive reply rate — the north-star metric for cold email.

  • Works in 5 steps: Fetch all leads + replies from the… → Classify replies in the Claude Code… → Aggregate + compute rates → …
  • The user wants to know if a campaign is actually working (not just getting replies
  • SKILL.md covers Why this exists, Classification schema, Inputs and Steps, plus 5 more sections
  • Runs TypeScript scripts from its folder; calls npx; needs SMARTLEAD_API_KEY

What it does

Positive Reply Scoring is an agent skill from growthenginenowoslawski/coldoutboundskills. Pulls replies from a Smartlead campaign, classifies each as positive/neutral/negative/OOO/bounce/unsubscribe using Claude, and reports the positive reply rate — the north-star metric for cold email. Use when the user wants to know if a campaign is actually working (not just getting replies, but getting the RIGHT replies). Triggers on "score my replies", "how's campaign X doing", "positive reply rate", "is this campaign working".

Its SKILL.md is about 2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including scripts (for example `scripts/aggregate-scores.ts` and `scripts/fetch-campaign-replies.ts`).

It sits in Sales & Support, covering Cold outreach and Product metrics. The repository describes itself as: Open-source Claude Code skills for cold email and outbound sales. Grade campaigns, export Prospeo searches, scrape Google Maps — all from Claude Code. The licence is MIT.

When your agent uses it

  • The user wants to know if a campaign is actually working (not just getting replies
  • But getting the RIGHT replies)
  • Score my replies
  • Hows campaign X doing

Example prompts

  • “score my replies”
  • “s campaign X doing”
  • “positive reply rate”
  • “/positive-reply-scoring”

Requirements

  • Node.js
  • A credential in SMARTLEAD_API_KEY

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Fetch all leads + replies from the campaign
  2. Classify replies in the Claude Code conversation
  3. Aggregate + compute rates
  4. Save to disk
  5. Flag action items

What it can do on your machine

Read from SKILL.md and the folder at commit 25c5d85. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 2 files in scripts/ (TypeScript), which the agent can run.

    Shell commands in SKILL.md call:

    • npx

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use npx, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • SMARTLEAD_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Positive Reply Scoring loads about 2k tokens when it runs. Until then it costs about 114 tokens; SKILL.md has 702 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~114
When it runs · the whole SKILL.md, loaded when a task matches
~2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from growthenginenowoslawski/coldoutboundskills at commit 25c5d85, republished under its MIT licence (© growthenginenowoslawski). 702 words, ~1,957 tokens.

Download SKILL.mdSave it as .claude/skills/positive-reply-scoring/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
positive-reply-scoring
description
Pulls replies from a Smartlead campaign, classifies each as positive/neutral/negative/OOO/bounce/unsubscribe using Claude, and reports the positive reply rate — the north-star metric for cold email. Use when the user wants to know if a campaign is actually working (not just getting replies, but getting the RIGHT replies). Triggers on "score my replies", "how's campaign X doing", "positive reply rate", "is this campaign working".

Positive Reply Scoring

Reply rate tells you if people are paying attention. Positive reply rate tells you if they want what you're selling. This skill computes the second.

Why this exists

A campaign can get 5% reply rate and still be a disaster. If 90% of those replies are "unsubscribe" and "not a fit," you're burning your domains for nothing.

The metric that matters is:

positive_reply_rate = positive_replies / total_sent

Compared side-by-side:

  • Campaign A: 1% reply rate, 70% positive → 0.7% positive reply rate
  • Campaign B: 5% reply rate, 10% positive → 0.5% positive reply rate
  • Campaign A wins.

Classification schema

Every reply is classified into exactly one bucket:

LabelMeaningCount as "positive"?
positive_interested"Yes, tell me more" or booked a meeting✅
positive_soft"Send more info" / "reach out in Q3" / info request✅
positive_referral"Not me, but talk to X"✅ (referral is high-value)
neutral_questionClarifying question, no commitment yet❌ (optional — some score as half)
negative_notnow"Not right now, maybe later"❌
negative_notfit"Not a fit" / "we don't need this"❌
negative_hostileAngry reply, complaint, report❌ (and track separately as risk signal)
unsubscribeExplicit opt-out❌
oooOut-of-office auto-reply❌ (exclude from denominators)
bounceTechnical bounce❌ (exclude from denominators)
otherCan't tell❌

Positive reply rate = (positive_interested + positive_soft + positive_referral) / total_sent

Inputs

  • Smartlead API key (env: SMARTLEAD_API_KEY)
  • Campaign ID to score
  • Optional: client_id (if using a sub-client setup)
  • Optional: date range (defaults to full campaign)

Steps

1. Fetch all leads + replies from the campaign

Run the fetch script:

bash
npx tsx scripts/fetch-campaign-replies.ts --campaign-id=12345 --out=/tmp/replies.json

This walks /campaigns/{id}/leads paginated, identifies leads with replies (has_reply = true), then fetches /campaigns/{id}/leads/{lead_id}/message-history for each, and writes them to a JSON file with one object per reply.

Output schema per reply:

json
{
  "lead_id": "...",
  "email": "...",
  "lead_first_name": "...",
  "company": "...",
  "reply_time": "ISO timestamp",
  "reply_subject": "...",
  "reply_body": "... full text ...",
  "sequence_step": 1
}
2. Classify replies in the Claude Code conversation

Once the JSON is written, Claude (the one running this skill) reads the file and classifies each reply. For speed, fan out in batches of 20-30 via the Task tool (see personalization-subagent-pattern skill for fan-out mechanics).

Classification prompt (per batch):

Classify each reply as one of:
- positive_interested, positive_soft, positive_referral
- neutral_question
- negative_notnow, negative_notfit, negative_hostile
- unsubscribe, ooo, bounce, other

For each reply, output: { lead_id, label, confidence: 0.0-1.0, one_line_reason }

Rules:
- OOO auto-replies ("I'm out of office") → ooo
- Bounces (delivery failure messages) → bounce
- "Take me off your list", "unsubscribe", "STOP" → unsubscribe
- "Not interested", "not a fit" → negative_notfit
- "Not right now, circle back in Q3" → negative_notnow
- "Try [other person]" → positive_referral
- "Send more info" or "Tell me more" → positive_soft
- "Yes, let's book a call", "what times work" → positive_interested
- Insults, reports, legal threats → negative_hostile

If confidence < 0.7, label as `other`.
3. Aggregate + compute rates

Run the aggregator:

bash
npx tsx scripts/aggregate-scores.ts --replies=/tmp/classified-replies.json --campaign-id=12345

Output (to stdout + optional --out):

Campaign 12345 — Positive Reply Scoring

Total sent:              5,284
Total replies:              212 (4.01%)
  ooo/bounce (excluded):    34
  Net replies:             178

Breakdown:
  positive_interested:    22
  positive_soft:          31
  positive_referral:       8
  neutral_question:       14
  negative_notnow:        28
  negative_notfit:        52
  negative_hostile:        3
  unsubscribe:            20
  other:                   0

Positive reply rate:     1.15% (61 / 5,284)
Positive % of replies:   34.3% (61 / 178)
Negative hostile risk:    0.06% (3 / 5,284)
Unsub rate:              0.38% (20 / 5,284)

Benchmarks (B2B cold email):
  Good positive reply rate: ≥1%
  Great: ≥2%
  Hostile >0.3% or unsub >2% → deliverability risk, pause campaign
4. Save to disk

Write aggregate results to:

~/cold-email-ai-skills/profiles/<business-slug>/scores/<campaign-id>-<YYYY-MM-DD>.json

This builds a history so you can trend positive reply rate over campaigns.

5. Flag action items

At the end, surface:

  • Positive replies that need a human response — list the top 10 positive_interested leads and their reply bodies. The user should reply to these within 30 seconds of seeing this report.
  • Referrals that need follow-up — positive_referral labels. Add the referred contacts to a new outreach list.
  • Hostile flags — any negative_hostile replies. Read them manually; consider pausing the inbox if someone is genuinely angry.
  • Unsubscribes — confirm they're globally suppressed (Smartlead does this automatically, but double-check).
Show full SKILL.md (275 more words)Show less

When to use this skill

  • After a campaign has run for at least 14 days (otherwise sample is too small)
  • When comparing two campaigns in an experiment (use the same cutoff date for both)
  • Weekly as a quality check on running campaigns
  • Before deciding to kill or scale a campaign

Common gotchas

  • Don't trust reply rate alone. A 5% reply rate from spam-trap replies and unsubscribes is worse than a 2% reply rate from real buyers.
  • Exclude OOO + bounce from denominators. They're not real replies. The script does this automatically.
  • Smartlead's built-in AI categorization exists but is less controllable. This skill uses Claude directly for transparency and prompt-tunable classification.
  • Small samples lie. Below ~500 sent, the positive reply rate has too much noise. Wait for more volume before declaring winners/losers.
  • Classify only FIRST reply per lead. If a lead replied, you replied, they replied again — only the first reply is the signal. Later messages are the conversation, not the scoring.

What to do next

Respond to every positive_interested reply within 30 seconds of seeing it. Then /experiment-design to plan the next iteration based on what worked.

If positive reply rate is <1% after 200+ sends: the 1% rule failed. Run /email-deliverability-audit (are you reaching the inbox?) (check for vague CTAs, generic first lines, em dashes).

Or wait: this skill is the Wednesday task in /cold-email-weekly-rhythm. Run it weekly going forward.

  • /experiment-design — uses positive reply rate as the success metric
  • /email-deliverability-audit — if hostile + unsub are elevated, run this next
  • /cold-email-starter-kit → 10-reply-handling.md for what to do with the positive replies once flagged

Scripts

  • scripts/fetch-campaign-replies.ts — pulls replies via Smartlead API
  • scripts/aggregate-scores.ts — computes rates from classified JSON

© growthenginenowoslawski, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 2 other files (scripts) in skills/positive-reply-scoring of growthenginenowoslawski/coldoutboundskills.

  • SKILL.md
  • scripts/aggregate-scores.ts
  • scripts/fetch-campaign-replies.ts

Open the folder on GitHubat commit 25c5d85

Compare with similar skills

Positive Reply Scoring next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Positive Reply Scoring compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Positive Reply Scoring this skillgrowthenginenowoslawski/coldoutboundskills753—~2kAutomated safety check: PassMIT
Cold Outbound Optimizerericosiu/ai-marketing-skills3.6k1 repos~1.7kAutomated safety check: PassMIT
Prospectingcoreyhaines31/marketingskills54k—~5kAutomated safety check: PassMIT
Sales OsromangojiberryAI/gojiberryai-sales-os139—~2kAutomated safety check: PassMIT
ProspectingCesarjoquin/Marketing-Skills2021 repos~3.8kAutomated safety check: PassMIT
Cold Outreach Personalizeraiskilloftheweek/claude-ai-skill-of-the-week149—~2.6kAutomated safety check: PassNone

Similar skills

  • Cold Outbound Optimizer

    ericosiu/ai-marketing-skills

    Design, analyze, and optimize cold outbound email campaigns for Instantly.

    3.6k GitHub starsUsed in 1 repo~1.7k tokens
    Sales & SupportAuto-check passed
  • Prospecting

    coreyhaines31/marketingskills

    When the user wants to find, qualify, and build a list of prospects to reach out to, across B2B SaaS, general B2B, or local small businesses.

    54k GitHub stars~5k tokensUpdated 2 days ago
    Sales & SupportAuto-check passed
  • Sales Os

    romangojiberryAI/gojiberryai-sales-os

    A complete outbound sales department in one skill. An agent skill from romangojiberryAI/gojiberryai-sales-os.

    139 GitHub stars~2k tokensUpdated 1 mo ago
    Sales & SupportAuto-check passed
  • Prospecting

    Cesarjoquin/Marketing-Skills

    When the user wants to find, qualify, and build a list of prospects to reach out to — across B2B SaaS, general B2B, or local small businesses.

    202 GitHub starsUsed in 1 repo~3.8k tokens
    Sales & SupportAuto-check passed
  • Cold Outreach Personalizer

    aiskilloftheweek/claude-ai-skill-of-the-week

    Generates hyper-personalized cold outreach messages (email, LinkedIn DM, connection request) from raw prospect research.

    149 GitHub stars~2.6k tokensUpdated 4 mo ago
    Sales & SupportAuto-check passed
  • Business Email Extractor

    gmapsscraper/google-maps-agent-skills

    Extract verified business email addresses from Google Maps listings.

    132 GitHub stars~1.1k tokensUpdated 4 mo ago
    Sales & SupportAuto-check passed

More from growthenginenowoslawski/coldoutboundskills

All 49 skills in this repo
  • Email Deliverability Audit

    growthenginenowoslawski/coldoutboundskills

    Diagnostic audit for a running cold email program. An agent skill from growthenginenowoslawski/coldoutboundskills.

    753 GitHub stars~3.4k tokensUpdated 5 days ago
    Auto-check passed
  • Icp Onboarding

    growthenginenowoslawski/coldoutboundskills

    Conversational intake for cold email campaigns. An agent skill from growthenginenowoslawski/coldoutboundskills.

    753 GitHub stars~1.9k tokensUpdated 5 days ago
    Auto-check passed
  • List Builder

    growthenginenowoslawski/coldoutboundskills

    META skill — build the largest possible qualified lead list for any request, end to end.

    753 GitHub stars~4.7k tokensUpdated 5 days ago
    Auto-check: notes
  • Auto Research Public

    growthenginenowoslawski/coldoutboundskills

    Autonomous cold email campaign launcher. An agent skill from growthenginenowoslawski/coldoutboundskills.

    753 GitHub stars~2.9k tokensUpdated 5 days ago
    Auto-check passed
  • Blitz List Builder

    growthenginenowoslawski/coldoutboundskills

    Use the Blitz API to find decision-makers at specific companies when you already have a list of company domains.

    753 GitHub stars~2k tokensUpdated 5 days ago
    Auto-check passed
  • Deliverability Test Public

    growthenginenowoslawski/coldoutboundskills

    Compare reply rates, bounce rates, and positive reply rates broken down by inbox type (SMTP / Gmail / Outlook) for a Smartlead account.

    753 GitHub stars~1k tokensUpdated 5 days ago
    Auto-check passed

Questions about Positive Reply Scoring

What does Positive Reply Scoring do?

Pulls replies from a Smartlead campaign, classifies each as positive/neutral/negative/OOO/bounce/unsubscribe using Claude, and reports the positive reply rate — the north-star metric for cold email. Positive Reply Scoring is an agent skill from growthenginenowoslawski/coldoutboundskills. Pulls replies from a Smartlead campaign, classifies each as positive/neutral/negative/OOO/bounce/unsubscribe using Claude, and reports the positive reply rate — the north-star metric for cold email.

When should I use Positive Reply Scoring?

Positive Reply Scoring fits situations like: the user wants to know if a campaign is actually working (not just getting replies; but getting the RIGHT replies); score my replies; hows campaign X doing.

How do I install Positive Reply Scoring in Claude Code?

Run `npx skills add growthenginenowoslawski/coldoutboundskills --skill positive-reply-scoring -a claude-code`. Or copy the skill folder (skills/positive-reply-scoring in growthenginenowoslawski/coldoutboundskills) into .claude/skills/positive-reply-scoring in your project. Claude Code loads it when a task matches its description.

How do I install Positive Reply Scoring in Codex?

Run `npx skills add growthenginenowoslawski/coldoutboundskills --skill positive-reply-scoring -a codex`. Or copy the skill folder (skills/positive-reply-scoring in growthenginenowoslawski/coldoutboundskills) into .agents/skills/positive-reply-scoring in your project. Codex loads it when a task matches its description.

Can I use Positive Reply Scoring in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add growthenginenowoslawski/coldoutboundskills --skill positive-reply-scoring -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/positive-reply-scoring, .gemini/skills/positive-reply-scoring, .github/skills/positive-reply-scoring and .opencode/skills/positive-reply-scoring in your project.

What does Positive Reply Scoring need to run?

Going by SKILL.md and its folder, Positive Reply Scoring needs TypeScript for the scripts in its folder, the command-line tools its instructions call (npx) and credentials named SMARTLEAD_API_KEY. Our summary lists: Node.js; A credential in SMARTLEAD_API_KEY.

Does Positive Reply Scoring access the network?

SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Positive Reply Scoring safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Positive Reply Scoring use?

Positive Reply Scoring is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Positive Reply Scoring use?

About 2k tokens (SKILL.md is roughly 7.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Positive Reply Scoring?

Skills that share tags, products or a category with Positive Reply Scoring: Cold Outbound Optimizer (ericosiu/ai-marketing-skills, 3.6k stars), Prospecting (coreyhaines31/marketingskills, 54k stars), Sales Os (romangojiberryAI/gojiberryai-sales-os, 139 stars) and Prospecting (Cesarjoquin/Marketing-Skills, 202 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Positive Reply Scoring?

growthenginenowoslawski (a GitHub user) maintains it in growthenginenowoslawski/coldoutboundskills, which has 753 GitHub stars. The repository holds 49 skills in this directory. The repository was last updated on October 5, 2026.

Source: growthenginenowoslawski/coldoutboundskills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.