/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,
Claude Code
$ npx -y skills add dancolta/subscope --skill onboard --agent claude-code
Codex
$ npx skills add dancolta/subscope --skill onboard -a codex -y
Cursor
$ npx skills add dancolta/subscope --skill onboard -a cursor -y
Gemini CLI
$ npx skills add dancolta/subscope --skill onboard -a gemini-cli -y
GitHub Copilot
$ npx skills add dancolta/subscope --skill onboard -a github-copilot -y
OpenCode
$ npx skills add dancolta/subscope --skill onboard -a opencode -y
Windsurf
$ npx skills add dancolta/subscope --skill onboard -a windsurf -y
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
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.
More skills from other plugins.
ab-testing
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use…
seo
Comprehensive SEO analysis for any website or business type. Full site audits, single-page analysis, technical SEO (crawlability,…
brag
Turn the current project website into a short, polished, shareable launch video using Hyperframes. Use when someone says "/brag",…
geo-audit
Full website GEO+SEO audit with parallel subagent delegation. Orchestrates a comprehensive Generative Engine Optimization audit…
Questions about onboard.
- Which coding agents can use onboard?
- onboard installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

