/onboard
Mandatory first-run setup for subscope. One conversation, three plain questions, one confirmation, optional integrations, first scan. Paste URLs, answer what-you-sell / who-buys-it / what's-the-pain, confirm the targeting card, pick integrations to connect (DataForSEO,
$ npx -y skills add dancolta/subscope --skill onboard --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.
- You can call itInvoke it directly when you want it.
- Slash command
/onboard
Context preview
The summary Claude sees to decide when to auto-load this skill.
Mandatory first-run setup for subscope. One conversation, three plain questions, one confirmation, optional integrations, first scan. Paste URLs, answer what-you-sell / who-buys-it / what's-the-pain, confirm the targeting card, pick integrations to connect (DataForSEO,
SKILL.md
onboard.SKILL.mdname: subscope-onboard
description: Mandatory first-run setup for subscope. One conversation, three plain questions, one confirmation, optional integrations, first scan. Paste URLs, answer what-you-sell / who-buys-it / what's-the-pain, confirm the targeting card, pick integrations to connect (DataForSEO, Firecrawl, Notion, Slack, Obsidian), scan. No fast path. Every install passes through this. Triggers on "onboard", "/subscope-onboard", "set up subscope", "first time setup", "configure subscope", "get started with subscope", "install subscope".
allowed-tools: Bash, Read, Write, Edit, WebFetch
/subscope-onboard
First-run setup. Seven turns, plain questions, one confirmation, optional integrations, first scan.
Operating principles
1. **Ask, do not infer-and-confirm.** The user tells you what they sell, who buys it, what the pain is. Do not show an 8-field form for them to audit. 2. **One thing per turn.** Each chat message asks for exactly one input or shows exactly one summary. 3. **WebFetch silently in the background.** While the user answers turn 2, 3, 4 you are scraping their URLs. Never narrate this. 4. **Integrations are optional, not deferred.** T6 offers DataForSEO, Firecrawl, Notion, Slack, Obsidian as a single menu. Skip is a first-class choice. 5. **Verify creds inline.** If a paste fails, re-ask once. Twice failed, log and move on. The scan still runs. 6. **No filler.** No "welcome", "let's get started", "great", "perfect". No exclamation marks. No em dashes anywhere.
Turn 1: collect URLs
Print verbatim:
SUBSCOPE ONBOARDING · 1 / 7
─────────────────────────────
I'll use these URLs to seed your Reddit targeting profile.
Paste the following:
→ Homepage URL
→ Case studies (optional)
→ Blog / pricing (optional)
One per line.
Wait for input. Accept 1 to N URLs. Warn if more than 8.
Kick off WebFetch on all provided URLs **in parallel and in the background**. Extract:
- H1 / sub-headline / positioning line
- Linked case studies and pricing pages
- Visible competitor names ("alternative to X", "replace Y")
- Pain phrasing from problem statements
- Buyer titles quoted in case studies
Save raw fetch output to `~/.config/subscope/.onboard-draft.json` as you go.
**Background warmup.** As soon as the user pastes URLs, kick off the enrichment warmup in parallel with WebFetch so the DataForSEO competitor list + Firecrawl homepage scrape are cached by the time we reach T5 discovery. Silent no-op if DFS/Firecrawl keys are absent. Substitute `$HOMEPAGE_URL` with the first pasted URL:
cd "$CLAUDE_PLUGIN_ROOT" && PYTHONPATH=engine python3 -c "
from subscope.lib import enrich, store
with store.connect() as conn:
enrich.warmup_for_onboarding('$HOMEPAGE_URL', conn)
" &Do not block on this. Do not show any status, recap, or summary. Move straight to T2.
Turn 2: what do you sell
Print verbatim:
SUBSCOPE ONBOARDING · 2 / 7
─────────────────────────────
What do you sell?
→ One line is enough.
→ Example: "Reddit lead-gen for B2B SaaS."
Wait for input. Save to scratchpad. No echo, no confirmation. Move to T3.
Turn 3: who buys it
Print verbatim:
SUBSCOPE ONBOARDING · 3 / 7
─────────────────────────────
Who buys it?
→ A job title works.
→ Example: "Head of Ops at a SaaS startup."
→ Or just: "RevOps leads."
Wait for input. Save to scratchpad. Move to T4.
Turn 4: what is the pain
Print verbatim:
SUBSCOPE ONBOARDING · 4 / 7
─────────────────────────────
What do they complain about right before they find you?
→ A real customer quote is gold.
→ Paraphrase is fine.
Wait for input. Save to scratchpad.
**Run live subreddit discovery before T5.** This calls the engine to find subs where the user's pain phrasing is actively discussed on Reddit. Replaces the old templatish archetype-map seed.
Pipe the answers JSON via stdin so apostrophes / quotes in user input don't break shell quoting. Pass any competitor brands you found in the WebFetch (T1) via `--competitors` as a comma-separated list. These are critical: they generate "replacing X" and "X alternative" queries which dramatically improve sub relevance for Reddit discovery.
cd "$CLAUDE_PLUGIN_ROOT" && python3 -c "
import json
print(json.dumps({
'what_offering': '''<T2_VALUE>''',
'who_to_reach': '''<T3_VALUE>''',
'pain_quote': '''<T4_VALUE>''',
}))" | PYTHONPATH=engine python3 -m subscope.cli discover \
--homepage "$HOMEPAGE_URL" \
--competitors "<COMMA_SEPARATED_COMPETITOR_BRANDS>" \
--skip-validation \
--answers-json -`--skip-validation` keeps onboarding light: it returns the candidate subs plus a relative `relevance` score (0-100) WITHOUT the per-sub freshness fetches. Onboarding's job is to confirm the sub NAMES; the real `/subscope-run` scan at T7 validates by actually surfacing. This also means fewer Reddit calls during setup.
Substitute:
- `<T2_VALUE>`, `<T3_VALUE>`, `<T4_VALUE>` with the exact answers from the scratchpad
- `<COMMA_SEPARATED_COMPETITOR_BRANDS>` with whatever brands Claude extracted from the user's homepage/case-studies during T1 WebFetch (e.g. `"Zapier,n8n,Make,Bill.com,Apollo.io"`). If no brands were found, pass an empty string.
The triple-quoted strings handle embedded apostrophes safely; `--answers-json -` reads the piped JSON from stdin.
The engine (run with `--skip-validation`) returns JSON with these fields:
- `subs`: ranked candidate subs. Each entry has `name`, `relevance` (0-100, relative match-strength to the offer), `why` (plain-English why-chosen line), `relevance_path` ("competitor"/"noun"), `thread_count`, `sources`, `noise_downranked`, `validation_skipped: true`. (No per-sub freshness fields: validation is deferred to the first scan at T7.)
- `needs_clarification`, `clarifier_reason` (`no_candidates`), `clarifier_prompt`, `discovery_unreachable`, `phase_a_count`, `validation_skipped`
The `relevance` score is a topical match estimate (how strongly the sub's
Read more
name: subscope-onboard description: Mandatory first-run setup for subscope. One conversation, three plain questions, one confirmation, optional integrations, first scan. Paste URLs, answer what-you-sell / who-buys-it / what's-the-pain, confirm the targeting card, pick integrations to connect (DataForSEO, Firecrawl, Notion, Slack, Obsidian), scan. No fast path. Every install passes through this. Triggers on "onboard", "/subscope-onboard", "set up subscope", "first time setup", "configure subscope", "get started with subscope", "install subscope". allowed-tools: Bash, Read, Write, Edit, WebFetch
/subscope-onboard
First-run setup. Seven turns, plain questions, one confirmation, optional integrations, first scan.
Operating principles
1. **Ask, do not infer-and-confirm.** The user tells you what they sell, who buys it, what the pain is. Do not show an 8-field form for them to audit. 2. **One thing per turn.** Each chat message asks for exactly one input or shows exactly one summary. 3. **WebFetch silently in the background.** While the user answers turn 2, 3, 4 you are scraping their URLs. Never narrate this. 4. **Integrations are optional, not deferred.** T6 offers DataForSEO, Firecrawl, Notion, Slack, Obsidian as a single menu. Skip is a first-class choice. 5. **Verify creds inline.** If a paste fails, re-ask once. Twice failed, log and move on. The scan still runs. 6. **No filler.** No "welcome", "let's get started", "great", "perfect". No exclamation marks. No em dashes anywhere.
Turn 1: collect URLs
Print verbatim:
SUBSCOPE ONBOARDING · 1 / 7 ───────────────────────────── I'll use these URLs to seed your Reddit targeting profile. Paste the following: → Homepage URL → Case studies (optional) → Blog / pricing (optional) One per line.
Wait for input. Accept 1 to N URLs. Warn if more than 8.
Kick off WebFetch on all provided URLs **in parallel and in the background**. Extract:
- H1 / sub-headline / positioning line
- Linked case studies and pricing pages
- Visible competitor names ("alternative to X", "replace Y")
- Pain phrasing from problem statements
- Buyer titles quoted in case studies
Save raw fetch output to `~/.config/subscope/.onboard-draft.json` as you go.
**Background warmup.** As soon as the user pastes URLs, kick off the enrichment warmup in parallel with WebFetch so the DataForSEO competitor list + Firecrawl homepage scrape are cached by the time we reach T5 discovery. Silent no-op if DFS/Firecrawl keys are absent. Substitute `$HOMEPAGE_URL` with the first pasted URL:
cd "$CLAUDE_PLUGIN_ROOT" && PYTHONPATH=engine python3 -c "
from subscope.lib import enrich, store
with store.connect() as conn:
enrich.warmup_for_onboarding('$HOMEPAGE_URL', conn)
" &Do not block on this. Do not show any status, recap, or summary. Move straight to T2.
Turn 2: what do you sell
Print verbatim:
SUBSCOPE ONBOARDING · 2 / 7 ───────────────────────────── What do you sell? → One line is enough. → Example: "Reddit lead-gen for B2B SaaS."
Wait for input. Save to scratchpad. No echo, no confirmation. Move to T3.
Turn 3: who buys it
Print verbatim:
SUBSCOPE ONBOARDING · 3 / 7 ───────────────────────────── Who buys it? → A job title works. → Example: "Head of Ops at a SaaS startup." → Or just: "RevOps leads."
Wait for input. Save to scratchpad. Move to T4.
Turn 4: what is the pain
Print verbatim:
SUBSCOPE ONBOARDING · 4 / 7 ───────────────────────────── What do they complain about right before they find you? → A real customer quote is gold. → Paraphrase is fine.
Wait for input. Save to scratchpad.
**Run live subreddit discovery before T5.** This calls the engine to find subs where the user's pain phrasing is actively discussed on Reddit. Replaces the old templatish archetype-map seed.
Pipe the answers JSON via stdin so apostrophes / quotes in user input don't break shell quoting. Pass any competitor brands you found in the WebFetch (T1) via `--competitors` as a comma-separated list. These are critical: they generate "replacing X" and "X alternative" queries which dramatically improve sub relevance for Reddit discovery.
cd "$CLAUDE_PLUGIN_ROOT" && python3 -c "
import json
print(json.dumps({
'what_offering': '''<T2_VALUE>''',
'who_to_reach': '''<T3_VALUE>''',
'pain_quote': '''<T4_VALUE>''',
}))" | PYTHONPATH=engine python3 -m subscope.cli discover \
--homepage "$HOMEPAGE_URL" \
--competitors "<COMMA_SEPARATED_COMPETITOR_BRANDS>" \
--skip-validation \
--answers-json -`--skip-validation` keeps onboarding light: it returns the candidate subs plus a relative `relevance` score (0-100) WITHOUT the per-sub freshness fetches. Onboarding's job is to confirm the sub NAMES; the real `/subscope-run` scan at T7 validates by actually surfacing. This also means fewer Reddit calls during setup.
Substitute:
- `<T2_VALUE>`, `<T3_VALUE>`, `<T4_VALUE>` with the exact answers from the scratchpad
- `<COMMA_SEPARATED_COMPETITOR_BRANDS>` with whatever brands Claude extracted from the user's homepage/case-studies during T1 WebFetch (e.g. `"Zapier,n8n,Make,Bill.com,Apollo.io"`). If no brands were found, pass an empty string.
The triple-quoted strings handle embedded apostrophes safely; `--answers-json -` reads the piped JSON from stdin.
The engine (run with `--skip-validation`) returns JSON with these fields:
- `subs`: ranked candidate subs. Each entry has `name`, `relevance` (0-100, relative match-strength to the offer), `why` (plain-English why-chosen line), `relevance_path` ("competitor"/"noun"), `thread_count`, `sources`, `noise_downranked`, `validation_skipped: true`. (No per-sub freshness fields: validation is deferred to the first scan at T7.)
- `needs_clarification`, `clarifier_reason` (`no_candidates`), `clarifier_prompt`, `discovery_unreachable`, `phase_a_count`, `validation_skipped`
The `relevance` score is a topical match estimate (how strongly the sub's
Showing the first part of this file.
subscope reads Reddit for you and hands you the threads worth replying to: the people shopping for what you sell, and the questions you can answer to build authority. Run it whenever you want.
Other skills on subscope.
- /build-vs-buy
Surface explicit build-vs-buy debate threads with numeric arguments (engineering hours, TCO, payback). OP is rationalizing the decision publicly — your worldview is the answer. Triggers on "build vs buy", "/subscope-build-vs-buy", "find build-vs-buy debates", "in-house vs SaaS",
Open skill - /churn
Surface high-intent Reddit posts where someone explicitly says they are canceling, switching from, or fed up with a named SaaS vendor. Pure buying intent. Triggers on "churn signals", "/subscope-churn", "find churn posts", "who's canceling", "switching from posts",
Open skill - /judge
Interactive classifier for a single Reddit surface. Reads one post by surface ID (or pasted URL/title/body), runs the bulk-classifier prompt against it, and returns a verdict + reply angle. Uses your Claude Code subscription, NOT a separate API key — costs nothing extra beyond
Open skill - /op-vet
Score a Reddit user's profile before replying. Returns karma, account age, sub-activity breakdown, and a GO / HOLD / SKIP verdict. Useful when you spot a thread that looks promising but want to confirm OP is a real operator (not a throwaway, karma farmer, or hustle-bro).
Open skill - /pricing-rage
Surface Reddit price-hike rage threads (Salesforce/HubSpot/Gong cyclical Q1/Q3 spikes). Time-sensitive — cooling queue auto-disabled. Triggers on "pricing rage", "/subscope-pricing-rage", "find price hike threads", "renewal complaints", "predatory pricing posts", "tier change
Open skill - /profile
Per-section deep dive for refining an existing subscope targeting profile. Not a full re-interview, just the section that's drifted. Pick one section (competitors, pain language, subreddit tiers, keywords, buyer titles, customers, content map, positioning), answer 1-3 focused
Open skill

