/drop-off-rescue
Find contacts stalled at funnel stages (abandoned cart, signed-up-but-no-trial, trial-but-no-convert), draft stage-appropriate re-engagement emails, and schedule sends via your ESP — with dedupe so weekly reruns never double-send
$ npx -y skills add cognyai/claude-code-marketing-skills --skill drop-off-rescue --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/drop-off-rescue
Context preview
The summary Claude sees to decide when to auto-load this skill.
Find contacts stalled at funnel stages (abandoned cart, signed-up-but-no-trial, trial-but-no-convert), draft stage-appropriate re-engagement emails, and schedule sends via your ESP — with dedupe so weekly reruns never double-send
SKILL.md
drop-off-rescue.SKILL.mdname: drop-off-rescue
description: Find contacts stalled at funnel stages (abandoned cart, signed-up-but-no-trial, trial-but-no-convert), draft stage-appropriate re-engagement emails, and schedule sends via your ESP — with dedupe so weekly reruns never double-send
version: "1.0.0"
author: Cogny AI
platforms: [klaviyo, mailchimp, rule, get-a-newsletter]
user-invocable: true
argument-hint: "[weekly|audit|free]"
allowed-tools:
# Cogny Cloud (aggregated) namespace
- mcp__cogny__klaviyo__*
- mcp__cogny__mailchimp__*
- mcp__cogny__rule__*
- mcp__cogny__get_a_newsletter__*
- mcp__cogny__create_finding
- mcp__cogny__write_context_node
- mcp__cogny__read_context_node
# Cogny Solo / Lite (per-ESP direct) namespace
- mcp__klaviyo__*
- mcp__mailchimp__*
- mcp__rule__*
- mcp__get_a_newsletter__*
- WebFetch
- Bash
- Read
- Write
Drop-off Rescue
Push stalled funnel contacts to the next step. This skill finds people who signed up but didn't convert, drafts stage-appropriate re-engagement emails, and (with an ESP MCP connected) schedules the send after explicit confirmation. Re-runnable weekly without double-sending — the skill tracks what was already sent per stage and skips contacts still inside their cooldown window.
**Works in three modes:**
- `cloud` — Cogny MCP + ESP MCP: full automation, cross-ESP dedupe, findings
- `solo` — ESP MCP only: tag-based dedupe, per-ESP automation
- `free` — no MCP: pasted CSV of stalled contacts, draft-only output (you send manually)
Usage
/drop-off-rescue # weekly rerun — default
/drop-off-rescue weekly # same
/drop-off-rescue audit # read-only: report stalls + what would be sent, write nothing
/drop-off-rescue free # no MCP — paste CSV of stalled contacts
Designed to be scheduled weekly via `/loop` or `/schedule`. On reruns, already-nudged contacts are skipped; newly-stalled contacts are picked up; contacts that progressed get celebrated in the output.
Step 1 — Mode detection
Probe both MCP namespaces:
1. If `mcp__cogny__<svc>__*` tools are present for at least one ESP → **cloud** mode (and record that ESP as connected). 2. Else if `mcp__<svc>__*` tools are present for at least one ESP → **solo** mode. 3. Else → **free** mode.
If the argument is `free`, force free mode regardless of what's connected.
If multiple ESPs are connected, ask the user which one to run against (or offer to run all and cross-dedupe in cloud mode).
Step 2 — Canonical funnel stages
The skill works against a canonical stage taxonomy. The user can extend it, but these slugs drive tag names, campaign naming, and dedupe state — keep them stable across runs.
**E-commerce:** | Slug | Meaning | Typical stall | |------|---------|---------------| | `browse-abandoned` | Viewed product, never added to cart | 1–3 days | | `cart-abandoned` | Added to cart, never checked out | 1–2 days | | `checkout-abandoned` | Started checkout, didn't submit | hours–1 day | | `post-first-order-silent` | Made first order, no engagement since | 14–30 days |
**SaaS / trial funnel:** | Slug | Meaning | Typical stall | |------|---------|---------------| | `signup` | Created account, did nothing | 1–3 days | | `no-channel` | Signed up, no data source / integration connected | 3–7 days | | `no-trial` | Connected a channel, hasn't started the free trial | 7 days | | `no-client` | Trial active, hasn't connected the tool/client that uses it | 3 days | | `no-subscription` | Trial ended, didn't convert to paid | 0–3 days after trial | | `trial-started-inactive` | Started trial, no meaningful usage | 3–5 days | | `trial-ended-no-convert` | Trial ended, didn't subscribe | 7 days after end |
Cogny's own Solo funnel (signup → `no-channel` → `no-trial` → `no-client` → `no-subscription`) is a good reference implementation of this taxonomy.
If the user describes a funnel with stages that don't map to these slugs, add new kebab-case slugs — just keep them stable across reruns (the slug is the dedupe key).
Step 3 — Resolve current stage per contact
**Primary signal: ESP tags / segments.** Read contacts tagged `stage:<slug>` using the per-ESP tool:
| ESP | Read stage tag | Apply stage tag | Schedule/send | |-----|----------------|-----------------|---------------| | Klaviyo | `list_profiles` filtered by segment/property `stage` | `update_profile` (properties) | campaign create + schedule | | Mailchimp | `tool_list_members` filtered by tag | `tool_update_member` (tags) | campaign schedule | | Rule | `tool_list_subscribers` filtered by tag | `tool_add_tag_to_subscriber` | `tool_schedule_campaign` | | Get a Newsletter | `tool_list_contacts` filtered by tag | `tool_update_contact` (tag) | `tool_send_draft` with `time_to_send` |
**Klaviyo event-derived fallback (only when `stage:cart-abandoned` tag is absent):** query `list_events` with `metric="Added to Cart"` in the last 7 days, exclude profiles who have a subsequent `Placed Order`. Write the `stage:cart-abandoned` tag back via `update_profile` so the next run is consistent.
**Conversational fallback (any ESP, when no stage tags exist at all):**
1. Ask the user: "I don't see any `stage:*` tags on your contacts. Which of these funnel stages apply to your business?" — list the canonical slugs. 2. For each picked stage, ask: "Who is on this stage? Describe the condition — e.g. `joined list > 3 days ago AND no purchase`, or `clicked email X but never visited /signup`." 3. Translate each heuristic into the ESP's available filters (list membership, tags, date ranges, clicked links) and preview the matching count. 4. Offer (under the confirmation gate in Step 7) to apply `stage:<slug>` tags now, so future runs are fully automated.
Step 4 — Already-sent detection (the core mechanism)
Weekly reruns must not re-send the same stage email to the same contact. The skill uses a **three-layer hybrid**:
Layer 1 — contact tag (primary, all modes with an ESP connected)
On every success
Read more
name: drop-off-rescue description: Find contacts stalled at funnel stages (abandoned cart, signed-up-but-no-trial, trial-but-no-convert), draft stage-appropriate re-engagement emails, and schedule sends via your ESP — with dedupe so weekly reruns never double-send version: "1.0.0" author: Cogny AI platforms: [klaviyo, mailchimp, rule, get-a-newsletter] user-invocable: true argument-hint: "[weekly|audit|free]" allowed-tools: # Cogny Cloud (aggregated) namespace - mcp__cogny__klaviyo__* - mcp__cogny__mailchimp__* - mcp__cogny__rule__* - mcp__cogny__get_a_newsletter__* - mcp__cogny__create_finding - mcp__cogny__write_context_node - mcp__cogny__read_context_node # Cogny Solo / Lite (per-ESP direct) namespace - mcp__klaviyo__* - mcp__mailchimp__* - mcp__rule__* - mcp__get_a_newsletter__* - WebFetch - Bash - Read - Write
Drop-off Rescue
Push stalled funnel contacts to the next step. This skill finds people who signed up but didn't convert, drafts stage-appropriate re-engagement emails, and (with an ESP MCP connected) schedules the send after explicit confirmation. Re-runnable weekly without double-sending — the skill tracks what was already sent per stage and skips contacts still inside their cooldown window.
**Works in three modes:**
- `cloud` — Cogny MCP + ESP MCP: full automation, cross-ESP dedupe, findings
- `solo` — ESP MCP only: tag-based dedupe, per-ESP automation
- `free` — no MCP: pasted CSV of stalled contacts, draft-only output (you send manually)
Usage
/drop-off-rescue # weekly rerun — default /drop-off-rescue weekly # same /drop-off-rescue audit # read-only: report stalls + what would be sent, write nothing /drop-off-rescue free # no MCP — paste CSV of stalled contacts
Designed to be scheduled weekly via `/loop` or `/schedule`. On reruns, already-nudged contacts are skipped; newly-stalled contacts are picked up; contacts that progressed get celebrated in the output.
Step 1 — Mode detection
Probe both MCP namespaces:
1. If `mcp__cogny__<svc>__*` tools are present for at least one ESP → **cloud** mode (and record that ESP as connected). 2. Else if `mcp__<svc>__*` tools are present for at least one ESP → **solo** mode. 3. Else → **free** mode.
If the argument is `free`, force free mode regardless of what's connected.
If multiple ESPs are connected, ask the user which one to run against (or offer to run all and cross-dedupe in cloud mode).
Step 2 — Canonical funnel stages
The skill works against a canonical stage taxonomy. The user can extend it, but these slugs drive tag names, campaign naming, and dedupe state — keep them stable across runs.
**E-commerce:** | Slug | Meaning | Typical stall | |------|---------|---------------| | `browse-abandoned` | Viewed product, never added to cart | 1–3 days | | `cart-abandoned` | Added to cart, never checked out | 1–2 days | | `checkout-abandoned` | Started checkout, didn't submit | hours–1 day | | `post-first-order-silent` | Made first order, no engagement since | 14–30 days |
**SaaS / trial funnel:** | Slug | Meaning | Typical stall | |------|---------|---------------| | `signup` | Created account, did nothing | 1–3 days | | `no-channel` | Signed up, no data source / integration connected | 3–7 days | | `no-trial` | Connected a channel, hasn't started the free trial | 7 days | | `no-client` | Trial active, hasn't connected the tool/client that uses it | 3 days | | `no-subscription` | Trial ended, didn't convert to paid | 0–3 days after trial | | `trial-started-inactive` | Started trial, no meaningful usage | 3–5 days | | `trial-ended-no-convert` | Trial ended, didn't subscribe | 7 days after end |
Cogny's own Solo funnel (signup → `no-channel` → `no-trial` → `no-client` → `no-subscription`) is a good reference implementation of this taxonomy.
If the user describes a funnel with stages that don't map to these slugs, add new kebab-case slugs — just keep them stable across reruns (the slug is the dedupe key).
Step 3 — Resolve current stage per contact
**Primary signal: ESP tags / segments.** Read contacts tagged `stage:<slug>` using the per-ESP tool:
| ESP | Read stage tag | Apply stage tag | Schedule/send | |-----|----------------|-----------------|---------------| | Klaviyo | `list_profiles` filtered by segment/property `stage` | `update_profile` (properties) | campaign create + schedule | | Mailchimp | `tool_list_members` filtered by tag | `tool_update_member` (tags) | campaign schedule | | Rule | `tool_list_subscribers` filtered by tag | `tool_add_tag_to_subscriber` | `tool_schedule_campaign` | | Get a Newsletter | `tool_list_contacts` filtered by tag | `tool_update_contact` (tag) | `tool_send_draft` with `time_to_send` |
**Klaviyo event-derived fallback (only when `stage:cart-abandoned` tag is absent):** query `list_events` with `metric="Added to Cart"` in the last 7 days, exclude profiles who have a subsequent `Placed Order`. Write the `stage:cart-abandoned` tag back via `update_profile` so the next run is consistent.
**Conversational fallback (any ESP, when no stage tags exist at all):**
1. Ask the user: "I don't see any `stage:*` tags on your contacts. Which of these funnel stages apply to your business?" — list the canonical slugs. 2. For each picked stage, ask: "Who is on this stage? Describe the condition — e.g. `joined list > 3 days ago AND no purchase`, or `clicked email X but never visited /signup`." 3. Translate each heuristic into the ESP's available filters (list membership, tags, date ranges, clicked links) and preview the matching count. 4. Offer (under the confirmation gate in Step 7) to apply `stage:<slug>` tags now, so future runs are fully automated.
Step 4 — Already-sent detection (the core mechanism)
Weekly reruns must not re-send the same stage email to the same contact. The skill uses a **three-layer hybrid**:
Layer 1 — contact tag (primary, all modes with an ESP connected)
On every success
AI marketing skills for Claude Code, Cursor, Windsurf, and other AI coding tools. Audit SEO, analyze ads, research competitors, qualify leads — all from your terminal. Free skills need no account. Premium skills connect your real data for $9/mo.
Repo: cognyai/claude-code-marketing-skills
Other skills on claude-code-marketing-skills.
brand-kit
Build a portable brand-kit.json for the user's product — colors, typography, voice — that other skills (video, ad creative, landing page) can consume. Multiple…
cogny
Run Cogny marketing analysis tasks — fetch scheduled tasks, analyze ad accounts via MCP, report findings
community-pulse
Weekly read on Discord community health — joins, active channels, top contributors, themes, and unanswered questions
conversion-debug
Conversion Tracking Debugger — diagnose discrepancies across GTM, GA4, Google Ads & Meta Pixel with live API access, BigQuery validation queries, and…

