skills/sales-request-skill/SKILL.md
Requests or contribute a new sales/marketing/GTM skill that doesn't exist yet, or share learnings discovered during skill usage back to the community. Use when no existing skill covers the user's need — helps them build the skill and submit a PR, or file an issue requesting it. Also use when the user says 'there should be a skill for this', 'can we make a skill', 'I want to contribute a skill', 'none of the sales skills cover my use case', 'share my learnings', 'contribute learnings', 'share what I learned', or 'push learnings upstream'.
npx skillsauth add sales-skills/sales sales-request-skillInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
The user needs a sales, marketing, or GTM capability that doesn't have a skill yet. Help them contribute it or request it.
This skill always ends with a concrete action on GitHub:
sales-skills/salessales-skills/sales describing what's neededDo not stop at "here's what the PR/issue would look like" — actually create it using gh pr create or gh issue create.
If $ARGUMENTS is provided, use it. Otherwise ask: "What sales, marketing, or GTM capability do you need that isn't covered by an existing skill?"
Verify the request fits the sales/marketing/GTM domain. If it's outside scope entirely (e.g., "build a database migration tool"), say so and suggest appropriate tools instead.
Check the existing skills by reviewing the routing table in skills/sales-do/SKILL.md and listing installed skills in ~/.claude/skills/ to make sure there isn't already a skill that covers this. If there's a close match, suggest it instead.
Summarize back to the user:
Ask the user:
Would you like to:
- Build the skill — I'll help you create it with proper structure and prepare a PR
- Request the skill — I'll file a GitHub issue so the maintainers know it's needed
- Share learnings — I'll scan your installed skills for discoveries, scrub personal details, and share them back to the repo
Check whether the /skill-creator skill is available. If available, delegate to it for the full create-test-iterate workflow.
When delegating to /skill-creator, provide this sales-specific context:
Repo conventions for this skill:
- Naming:
sales-<problem>for sales skills, descriptive names for marketing/GTM skills (e.g.,cold-email,launch-strategy)- Descriptions should use phrases salespeople and marketers actually say — "write a cold email", "prep for a discovery call", "handle this objection"
- Description must end with negative triggers:
Do NOT use for X (use /alternative)- SKILL.md is the only required file — keep it focused and actionable
- Skills should ask clarifying questions before acting (audience, stage, constraints)
- Skills route through
/sales-do— the description field determines when the router matchesSkill structure:
skills/<skill-name>/ ├── SKILL.md # Main instructions (required) ├── scripts/ # Deterministic operations (data fetching, validation, formatting) ├── references/ # Large reference material (>500 words — API docs, data models) ├── assets/ # Templates, examples, configuration files └── evals/ └── evals.json # Test cases (optional, generated by skill-creator or manually)SKILL.md body pattern (follow what other skills in this repo do):
- Step to gather context (ask 2-4 questions about the user's specific situation)
- Implementation steps with actionable output
- Templates or frameworks relevant to the problem domain
- Gotchas section with 3-5 common Claude failure points for this domain
- Output formatting guidance
- Next steps pointing to related skills
Key principles:
- Don't state the obvious: Focus on info Claude wouldn't know — internal conventions, domain gotchas, non-obvious patterns
- Avoid railroading: Use "typically" instead of "always". Give Claude flexibility to adapt to the situation.
- Scripts: If the skill involves deterministic operations (data fetching, formatting, validation), include scripts in
scripts/- Progressive disclosure: Move reference material >500 words to
references/directory
Then let skill-creator run its workflow.
Build the skill manually following the conventions above.
---
name: <skill-name>
description: "<What problem it solves>. Use when <trigger phrases the user would say>. Do NOT use for <X> (use /alternative)."
argument-hint: "[brief hint about expected arguments]"
license: MIT
metadata:
author: sales-skills
version: 1.0.0
---
Read 2-3 existing skills in skills/ to match the tone and structure. Key things to get right:
Description field — This is how the /sales-do router and Claude decide whether to use the skill. Be specific about trigger phrases. Include both what the skill does AND when to use it:
# Bad: too vague
description: "Help with sales emails"
# Good: specific triggers, covers edge cases
description: "Write and optimize cold outbound email sequences. Use when writing first-touch cold emails, building multi-step outreach sequences, A/B testing subject lines, or improving reply rates on existing campaigns."
Body — Should follow the question-first pattern: gather context about the user's situation before producing output. Include templates, frameworks, or examples that make the output immediately useful.
Generate an evals/evals.json file inside the new skill directory with 2-3 realistic test cases. Each eval should represent a prompt a salesperson or marketer would actually say, with assertions describing what a good response looks like.
{
"skill_name": "<skill-name>",
"evals": [
{
"id": 0,
"prompt": "realistic user prompt a salesperson or marketer would say",
"expected_output": "description of what a successful response looks like",
"assertions": [
{"name": "assertion_name", "description": "specific thing to check in the output"}
]
}
]
}
Run the eval prompts with the skill active and verify the outputs pass the assertions. This matches the schema that /skill-creator uses, so evals work the same regardless of which build path created the skill.
After creating the skill files, submit a pull request. Do all of these steps — don't stop at "here's what to do":
skills/sales-do/SKILL.md — add a row to the appropriate routing tableREADME.md — add a row to the appropriate catalog tablegit checkout -b add-<skill-name>git add skills/<skill-name>/ evals/ skills/sales-do/SKILL.md README.md && git commit -m "Add <skill-name> skill"git push -u origin add-<skill-name>gh pr create \
--repo sales-skills/sales \
--title "Add <skill-name> skill" \
--body "$(cat <<'EOF'
## Summary
- **Problem**: <what the user is solving>
- **Category**: <which section it belongs in>
- **Example invocation**: `/<skill-name> <example prompt>`
## Files
- `skills/<skill-name>/SKILL.md` — main instructions
- `skills/sales-do/SKILL.md` — routing table updated
- `README.md` — catalog table updated
EOF
)"
Return the PR URL to the user when done.
File a GitHub issue on the repo. Do not just draft it — actually submit it:
gh issue create \
--repo sales-skills/sales \
--title "Skill request: <skill-name>" \
--body "$(cat <<'EOF'
## Problem
<What the user is trying to do, in their words>
## Category
<Which section this fits in: Prospecting, Active Deals, Strategy, Marketing, Research, Creative, etc.>
## Example use case
<A concrete scenario where this skill would help>
## Suggested trigger phrases
<2-3 phrases a salesperson or marketer might say that should route to this skill>
EOF
)"
Return the issue URL to the user when done.
Learnings accumulate in references/learnings.md files inside each installed skill as users discover API quirks, pricing changes, workarounds, and gotchas. This path scans those files, scrubs PII, and opens GitHub issues so individual discoveries can improve the skills for everyone.
Find all learnings files:
find ~/.claude/skills/*/references/learnings.md 2>/dev/null
Read each file. Skip:
<!-- shared:YYYY-MM-DD -->) or declined (<!-- declined:YYYY-MM-DD -->)If the user mentioned a specific skill or platform (e.g., "I found some Apollo gotchas"), acknowledge it and note that the scan will surface that skill's learnings alongside any others found.
If no unshared learnings are found across any installed skill, tell the user:
No unshared learnings found. Learnings accumulate automatically as you use skills — when you discover API quirks, workarounds, or gotchas, they get appended to each skill's
references/learnings.md. Come back after you've used some skills for a while.
Stop here if nothing is found.
For each skill that has unshared learnings, present a table:
| # | Learning | Generalizable? | Reason | |---|----------|---------------|--------| | 1 | ... | Yes/No | ... |
Generalizable (share these):
Not generalizable (skip these):
Ask the user to confirm or override the classifications before proceeding.
For each generalizable learning, find and replace personally identifiable information:
| Find | Replace with |
|------|-------------|
| Company or domain names | [Company], [domain] |
| People names | [Name] |
| Email addresses | [email] |
| GitHub/social handles | [handle] |
| Account, API, or workspace IDs | [account-id] |
| Internal URLs or IP addresses | [internal-url] |
| Negotiated or non-public pricing | Remove entirely (keep only publicly documented pricing) |
| Customer names | [customer] |
| Specific team names | [team] (keep generic ones like "Sales", "Marketing", "Engineering") |
Show before/after for each scrubbed learning and ask the user to confirm the scrubbed versions look correct before proceeding.
Create one issue per skill (focused, independently mergeable). Do not auto-submit — open the pre-filled issue in the browser for user review.
For each skill with shareable learnings, build a GitHub issue URL:
Learnings: sales-{skill-name}learningsURL-encode the title, body, and labels into a GitHub new-issue URL:
https://github.com/sales-skills/sales/issues/new?title=...&body=...&labels=learnings
Open each URL in the browser:
import subprocess
subprocess.run(['open', '-na', 'Google Chrome', '--args', '--profile-directory=Profile 6', url])
Never auto-submit via gh issue create for learnings — the user must review the scrubbed content before it goes public.
After the user confirms they've submitted the issue(s), mark every learning that was reviewed:
<!-- shared:YYYY-MM-DD --> to learnings the user submitted<!-- declined:YYYY-MM-DD --> to learnings the user classified as not generalizable or chose not to shareThis prevents re-prompting the same learnings on future runs.
Before submitting a new skill (via PR or skill-creator), verify:
sales-<problem> for sales, descriptive for marketing/GTM)license: MIT and metadata: { author, version }## Gotchas section with 3-5 common Claude failure points for this domainreferences/ directoryscripts/sales-do/SKILL.md updated with new rowevals/evals.json generated with 2-3 realistic test cases matching the skill-creator schema/sales-do — Not sure which skill to use? The router matches any sales objective to the right skill. Install: npx skills add sales-skills/sales --skill sales-dotools
UpViral platform help — viral referral marketing and list-building platform (by Emarky) for viral sweepstakes, giveaway/reward campaigns, pre-launch waiting lists, and milestone referral programs, with REST API (app.upviral.com/api/v1/), callback-URL webhooks, PHP SDK, fraud detection (IP-based suspicious-referral flagging), A/B testing, smart leaderboards, unlockable incentives, and 30+ native ESP/CRM integrations (Mailchimp, ActiveCampaign, ConvertKit, AWeber, HubSpot, Klaviyo, Intercom) plus Zapier/Make/Pipedream/Integrately/Pabbly. Use when UpViral campaigns aren't tracking referral points correctly, deciding between Starter $79/mo annual (10K leads, 1 brand, NO API) vs Business $119/mo (25K, 2 brands, API + webhooks unlocked) vs Premium $319/mo (100K, 5 brands, dedicated account manager), the API returns errors because you're on the Starter tier where API/webhooks are gated, building an UpViral→CRM or UpViral→data-warehouse pipeline with add_contact / get_leads / get_leads_points / add_points / get_custom_fields / lists methods (uvapikey + uvmethod form-encoded POST), interpreting fraud flags where same-IP referrals get marked suspicious and you must manually activate/delete/blacklist, setting up the Callback URL (webhook) to fire on reward-unlock events, Zapier New Lead / New Reward Unlocked triggers not firing, ClickFunnels/Shopify/funnel-builder integration breaking, the drag-and-drop page builder showing broken widgets or limited customization, the setup feeling long and complicated for your first campaign, or picking UpViral over Viral Loops / KickoffLabs / Vyper / Prefinery / Gleam / KingSumo / ShortStack for a viral campaign. Do NOT use for general newsletter audience growth strategy across all platforms (use /sales-audience-growth), newsletter monetization (use /sales-newsletter), KickoffLabs-specific help (use /sales-kickofflabs), no-code merge-tag newsletter referrals (use /sales-referralkit), SparkLoop paid recommendations (use /sales-sparkloop), or full-stack multi-level Level-1/2/3 referral/affiliate tracking (use /sales-referralhero).
development
ReferralHero platform help — full-stack referral, affiliate, waitlist, contest, and NPS platform with subscriber API, webhooks, Zapier, Mailchimp/Kit/AWeber/Klaviyo/ActiveCampaign/SendLane connectors, coupon codes, multi-level referral tracking (Level 1/2/3), anti-fraud, and 5,000 calls/hour rate limit. Use when ReferralHero campaigns aren't tracking referrals correctly, deciding between PRO $199/mo (10K members, includes API + webhooks) and PREMIUM $399/mo (50K members, adds ReCaptcha + SMS verification), authentication is failing with no_token or X-API-Key header is being ignored, multi-level referral counts (Level 2/3) aren't appearing for downline subscribers, coupon group endpoints return 404 or coupon arrays max out, hitting the 5,000 calls/hour soft limit and getting too_many_calls 429s, the Mailchimp/Kit native integration is double-adding subscribers, webhook payloads aren't firing on confirmation events, importing Stripe customer IDs through transaction tracking, generating reward fulfillment when subscribers cross milestone thresholds (promote/unlock_promoted_reward), comparing ReferralHero against SparkLoop/ReferralKit/Viral Loops/GrowSurf/KickoffLabs for referral marketing, or routing referral data via add_bulk_transactions (500-transaction batch limit). Do NOT use for general newsletter audience growth strategy (use /sales-audience-growth), general newsletter monetization (use /sales-newsletter), no-code newsletter-only referral with merge-tag insertion (use /sales-referralkit), SparkLoop's paid recommendations or partner network (use /sales-sparkloop), or affiliate program strategy across many platforms (use /sales-affiliate-program).
tools
KickoffLabs platform help — viral marketing platform for pre-launch waitlists, bonus-entry giveaways, milestone-reward referral programs, leaderboard giveaways, and email opt-in bribes with REST API v1 + v2, server-side webhooks (in/out), KOL.js JavaScript library, AnyForm script for custom pages, fraud detection (duplicate_ip / bounced / duplidate_email flags), SMS verification add-on, native ESP integrations (Klaviyo, Mailchimp, ActiveCampaign, Brevo), website builders (Webflow, Wix, Squarespace, Weebly), Shopify, Facebook Audiences, Slack, Zapier. Use when KickoffLabs viral campaigns aren't tracking referrals correctly, deciding between Hobby $13/mo annual (500 leads/mo no A/B no reward emails) vs Premium $48/mo (2.5K + A/B + reward emails + tracking pixels) vs Business $99/mo (10K + custom email templates + custom domains + advanced reporting + 3 team) vs Enterprise $202/mo (25K + 5 team + SMS included), API key getting rejected because you embedded it in client-side JavaScript instead of server-side, can't decide whether to use v1 /subscribe vs v2 /tags/:TAG_ID/lead for lead creation, webhook payloads firing with `__fraudulent` flag and you need to interpret the duplicate_ip/bounced/duplidate_email reason codes (yes, duplidate is spelled that way in their docs), AnyForm script not posting to KickoffLabs vs native API endpoint, leaderboard endpoint returning more than 50 leads is not allowed, social_id (kid in share URLs) attribution chain breaking between v1 and v2, contest score vs lead count metrics in the webhook payload are confusing, SMS Verification only available on Premium+ as $50/mo add-on (Enterprise includes), per-month lead cap auto-upgrades at $8 per 1000 overage leads, picking between KickoffLabs and Viral Loops / UpViral / Prefinery / ReferralCandy / Voucherify for viral campaign type fit, or rate limit per tier (10-100 calls/minute) is hitting on bulk imports. Do NOT use for general newsletter audience growth strategy (use /sales-audience-growth), general newsletter monetization (use /sales-newsletter), no-code merge-tag-only newsletter referrals (use /sales-referralkit), SparkLoop paid recommendations + partner network (use /sales-sparkloop), or full-stack referral/affiliate with multi-level Level-1/2/3 tracking (use /sales-referralhero).
development
Routes any sales, marketing, ad, or GTM objective to the right specialized skill and outputs the install command for that skill plus a ready-to-paste prompt packed with the user's context. Asks clarifying questions when the objective is ambiguous, then hands back a copy-paste-runnable next step. Covers prospecting, outbound cadences, deals, proposals, forecasting, deliverability, enrichment, intent, content, coaching, CRO, SEO, launch directories, newsletters, email/SMS/push marketing, chatbots, influencer marketing, social media, employee advocacy, media relations, reviews, data hygiene, B2B advertising, retargeting, affiliate, loyalty, digital products, memberships, webinars, checkout, and platform-specific help. Use when the user has a sales or marketing question and isn't sure which skill to use, or wants a multi-skill sequence with a batch install command. Do NOT use to solve problems directly — this skill only routes.