Turn a product URL or idea into a short, evidence-backed list of plausible FIRST customers. Every prospect must link to a public pain/demand/timing signal — a company that merely matches the industry is NOT a prospect. Output is a research hypothesis, not a customer database.
Difference from /community-outreach: that skill finds threads to reply in; this one finds named prospects (companies, projects, public professionals) with scores and outreach openers.
MCP Tools (use if available)
web_search(query, engines, include_raw_content)— SearXNG with engine routing (Reddit, HN, GitHub)web_extract(url, size, page)— one page as clean markdown, paginated for long docskb_search(query)— prior research in KBproject_info(name)— project details
Fallback: WebSearch/WebFetch.
Steps
- Product brief. Parse
$ARGUMENTS(project slug, URL, or idea + optional mode). Readdocs/prd.mdanddocs/research.mdif present — reuse ICP, pain points, competitors instead of re-deriving. Define: product + promised outcome, primary user vs economic buyer, urgent job-to-be-done, current workaround, adoption trigger, geography/language, disqualifiers. One primary ICP + one adjacent. Don't start searching until the brief is specific enough to REJECT weak matches. Ask one question via AskUserQuestion only if ambiguity would change the search.
-
Query buckets. Search several angles, not one query repeated (adapt wording to the audience's language):
- Explicit demand: "looking for", "recommend a tool", "alternative to", "does anything exist"
- Pain: "takes hours", "manual", "frustrating", "keeps breaking"
- Workaround: spreadsheets, copy-paste, scripts, VAs, repeated manual steps
- Switching: cancellation, migration, missing feature, pricing complaints
- Timing: launch, hiring, expansion, new regulation/integration relevant to the product
-
Search public sources (parallel): forums/Reddit, HN, product & marketplace reviews, GitHub issues and feature requests, public company pages / job posts / changelogs, "looking for a tool" posts. Open the original page — never qualify from a search snippet. Record: source URL, type, visible date (or "date unavailable"), exact evidence quote (minimal) or paraphrase.
-
Qualify and score each prospect 0-5 per dimension:
score = pain_strength/5*25 + product_fit/5*25 + timing/5*20 + reachability/5*15 + evidence_quality/5*1580-100 strong candidate · 65-79 promising, validate fast · 50-64 missing a material signal · <50 drop from shortlist.
Stage labels: high-intent (publicly requesting/switching) · problem-aware (describes the pain) · trigger-present (business event makes product relevant) · potential-fit (ICP match, thin evidence — keep OUT of primary shortlist). Old signals: keep if explicit, but cut timing score and label the date. Dedupe.
-
Draft openers — never send. Per prospect, one opener ≤90 words on the channel already associated with the source: (1) mention the public context naturally, (2) connect to the exact problem, (3) product in one sentence, (4) one low-friction question. No fake familiarity, no unrelated personal details. Do not send, follow, comment, or create CRM records — drafts only.
-
Write report to
docs/customers.md:# First Customers: {Project} **Generated:** {YYYY-MM-DD} · **Mode:** {mode} ## Verdict {Are there reachable early-customer signals? 2-3 sentences.} ## ICP Buyer / job / trigger / disqualifiers. Adjacent ICP one line. ## Top Prospect {Strongest evidence-backed candidate and why NOW.} ## Shortlist | # | Prospect | Score | Stage | Signal (quote/paraphrase) | Source + date | Channel | |---|----------|-------|-------|---------------------------|---------------|---------| ### Openers {per prospect, ≤90 words each} ## Repeated Patterns {pains/triggers seen across prospects — feeds /launch and /landing-gen} ## 7-Day Manual Outreach Plan {low-volume sequence: which prospect, which day, which channel} ## Limits {missing evidence; what only real conversations can confirm} --- *Prospects are hypotheses from public signals — not confirmed buyers. Review before any outreach.* -
Summary — verdict, top-3 prospects with scores, next action.
Modes
- quick — up to 5 strong prospects
- standard (default) — up to 10 across several source types
- deep — up to 20 + repeated-pattern analysis
- design-partners — feedback-willing users over immediate buyers
- b2b — companies, public business triggers, decision roles
- community — explicit requests and public discussions
Critical Rules
- Public signals only — intentionally shared professional/business info. No login walls, paywalls, robots bypass, data brokers, leaked datasets, private groups, personal email/phone enrichment.
- No sensitive traits — never target via health, finances, politics, religion, sexuality.
- Never claim interest or consent — label everything "potential customer based on public signals".
- Never send — outreach stays manual; skill produces drafts only.
- Evidence or out — no cited pain/demand/timing signal → not in the primary shortlist.
- 10 strong > 50 generic.
Gotchas
- LinkedIn is login-walled — don't research there; use public company pages, blogs, job boards instead.
- Snippet ≠ evidence — search snippets truncate and misattribute; always open the page before scoring.
- GitHub issues are the best B2B-dev signal — "feature request" + "workaround" labels on competitor repos = high-intent switching prospects.
- Stale threads — >12 months old: keep only explicit requests, cut timing to 1, show the date in the report.
- Same author ≠ same buyer — a dev complaining on Reddit may not be the economic buyer; score reachability against the actual decision role (b2b mode).
Common Issues
Web search not available
Fix: WebSearch/WebFetch as primary. Better engine routing (Reddit/HN/GitHub) via self-hosted SearXNG + solograph MCP.
Everything scores <50
Cause: ICP too broad or product too early for public demand signals.
Fix: Rerun in design-partners mode (feedback-seekers score differently), or go back to /research — the niche may lack evidenced pain.
Prospects are all companies with no reachable human
Fix: b2b mode — search job posts and changelogs for the team that owns the pain; the posting itself names the role to contact.