Install
$ agentstack add skill-sky-flux-skills-reddit ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Reddit Opportunity Hunter
Mission
Product Opportunity Hunting, NOT Lead Hunting.
- Input: Reddit discussions from high-purchasing-power markets
- Output: Actionable product opportunity reports with build assessments
- Goal: Surface 1-2 week MVP opportunities in USD/EUR/GBP markets
- You are scanning for patterns of unmet need, not individual sales leads
- Every recommendation must pass the Solo Dev Fit test before being highlighted
- Reference data lives in
references/— subreddits, keywords, seasonal patterns
Quick Start / First Run
- Install dependencies:
brew install curl jq - Run health check:
reddit.sh diagnose— verifies curl, jq, network connectivity - The script auto-creates
.reddit/withreports/,opportunities/,archive/ - Verify
.gitignoreincludes.reddit/— the script warns if missing - Review
references/subreddits.json— confirm subreddits match the user's domain - Review
references/intent_keywords.json— adjust if the user targets a specific niche - Configure preferences:
reddit.sh config show— set language, industries, currency - First scan:
``bash reddit.sh fetch --campaign global_english --sort new --pages 1 ``
- Inspect the enriched JSON output, then proceed to Phase 2 (Analysis)
Configuration
On first run, .reddit/config.json is auto-created with defaults. Check and customize it:
reddit.sh config show # view current config
reddit.sh config set # change a setting
reddit.sh config reset # restore defaults
| Setting | Description | Default | Example | |---------|-------------|---------|---------| | output_language | Language for reports and analysis | en | zh, ja, de | | focus_industries | Only surface opportunities in these industries | [] (all) | ["SaaS","DevTools"] | | excluded_subreddits | Skip these subreddits during scan | [] | ["Entrepreneur"] | | score_threshold | Minimum score to include in reports | 7 | 8 | | max_build_complexity | Filter out opportunities above this level | Heavy | Medium | | currency_display | Currency for revenue estimates | USD | CNY, EUR | | sub_quality_threshold | Minimum quality score for auto-adding discovered subs | 7.0 | 6.0 |
First-run prompt: If no config.json exists when the skill is triggered, ask the user:
> "This is your first time using Reddit Opportunity Hunter. Quick setup: > 1. What language should reports be in? (default: en) > 2. Any industries to focus on? (default: all) > 3. What currency for revenue estimates? (default: USD) > > Or say 'use defaults' to skip."
Save answers via reddit.sh config set.
Core Workflow
Two modes: broad scan (default loop) or focused investigation (user asks about a specific topic).
For focused investigation (e.g., "deep-dive QuickBooks pain points"):
- Identify the most relevant campaign(s) — match user's topic to campaigns in
subreddits.json - Fetch those campaigns +
global_englishfor cross-market signal - Run targeted searches:
reddit.sh search " frustrated" --global,reddit.sh search " alternative" --global - Skip straight to Phase 2-3 analysis on the focused data set
- Produce detailed opportunity reports for the specific vertical
For broad scan (loop cycle or general scan):
Phase 1: Data Collection
Run reddit.sh fetch for each campaign defined in references/subreddits.json, ordered by scan_priority:
reddit.sh fetch --campaign global_english --sort new --pages 2
reddit.sh fetch --campaign dach_german --sort new --pages 1
reddit.sh fetch --campaign nordic_scandi --sort new --pages 1
Key details:
- Multi-sub merge: the script combines subreddits as
r/A+B+C/new.jsonto reduce API calls - Output is enriched JSON — jq computes
_jq_enrichedfields (intent matches, sentiment, age) - Do NOT re-compute what jq already provides; read the enriched fields directly
- Rate limit budget: ~100 requests per ~260 seconds; a single fetch loop uses ~40-45
- Fetch Tier S campaigns every loop, Tier A daily, Tier B weekly
- Campaign selection: when the user specifies a domain (e.g., "DevTools and marketing"), fetch matching vertical campaigns +
global_english. Don't fetch all campaigns — respect the user's focus.
Phase 2: Analysis (Claude)
Before analyzing, read user config:
reddit.sh config show— checkoutput_language,focus_industries,score_threshold- CRITICAL: Write ALL reports, analysis, section headers, and commentary in the configured
output_language. Ifoutput_languageiszh, every line of output must be Chinese (keep only numbers, scores, URLs, subreddit names, product names, and technical terms in English). This applies to every loop cycle — not just the first one. - If
focus_industriesis set, prioritize opportunities matching those industries - If
excluded_subredditsis set, skip posts from those subreddits - Use
currency_displaywhen estimating revenue (convert from USD) - Only include opportunities with
final_score >= score_threshold - Only include opportunities with complexity ≤
max_build_complexity
Read the enriched JSON from Phase 1. For each batch:
- Pain point clustering — group similar complaints across posts and subreddits
- Frequency counting — how many posts mention this pain this week?
- Intensity assessment — use
intent_keywords_matchedandnegative_signalsfrom the enriched data - Market validation signals — look for: budget mentions, team size,
already_triedproducts, willingness to pay - Score each opportunity using the scoring algorithm below
- Deduplicate against
seen_postsin.reddit/.reddit.json
Phase 3: Deep Verification (score >= 8, or high-engagement posts)
Fetch comment trees for posts that meet any of these triggers:
- Opportunity score >= 8
- High engagement: >= 20 comments or >= 30 upvotes on a niche subreddit
- Tier 1-2 intent signals with specific budget mentions
For each triggered post:
- Fetch comment trees:
reddit.sh comments - Search competitive landscape:
reddit.sh search "competitor alternative" --global - Add post to
watched_threadsfor ongoing monitoring - Optional: use WebSearch for cross-platform validation (Twitter/X, HN, G2, Capterra)
Phase 3.5: Micro-Validation
Before promoting an opportunity to "validated":
- Suggest a landing page smoke test to the user
- Cross-platform search: Twitter/X, Hacker News, Indie Hackers for the same pain
- Search for failed attempts at similar products (important signal)
- Check Product Hunt / GitHub for recent launches in the space
Phase 4: Report
- Daily scan report ->
.reddit/reports/YYYY-MM-DD-scan.md - High-value opportunities ->
.reddit/opportunities/.md - Scoring breakdown -> include a
scoring-breakdown.mdwhen producing >= 3 opportunities, showing per-dimension scores so the user can see why each opportunity ranked where it did - Use the templates defined below
reddit.sh Reference
| Mode | Usage | Purpose | |------|-------|---------| | fetch | reddit.sh fetch --campaign X --sort new --pages 2 | Fetch & enrich posts | | comments | reddit.sh comments | Comment tree for deep-dive | | search | reddit.sh search "query" [--global] [--type post\|user\|subreddit] | Reddit search | | discover | reddit.sh discover [--deep\|--from-sub\|--industry] | Find new subreddits | | profile | reddit.sh profile [--enrich] | User history analysis | | crosspost | reddit.sh crosspost [--campaign X] | Cross-poster detection | | stickied | reddit.sh stickied [subreddit] | Stickied post mining | | firehose | reddit.sh firehose [sub1+sub2] | Real-time comment stream | | duplicates | reddit.sh duplicates | Link propagation tracking | | wiki | reddit.sh wiki [page] | Community wiki content | | stats | reddit.sh stats | Database / state statistics | | export | reddit.sh export [--format csv\|json] | CRM-ready export | | cleanup | reddit.sh cleanup | Purge expired data | | diagnose | reddit.sh diagnose | Health check (jq, dirs, state) | | config | reddit.sh config [show\|set \|reset] | User preferences | | expand | reddit.sh expand --campaign X | Targeted campaign expansion | | quality | reddit.sh quality [--report\|--history ] | Sub quality report + EMA history | | promote | reddit.sh promote --campaign X | Move discovered sub to tracked config |
Helper functions (called during loop cycles, not directly by user):
watch_check— check watched threads for new comments since last checkcompetitor_search— expand competitor query templates from configupdate_subreddit_quality [opportunities]— track hit rates per subreddit
Discovery → Promote Pipeline
When finding new subreddits for a campaign:
reddit.sh discover "" --deep— probes candidate subs (15-25 API calls per query)- Review discovery results — check painposts, avgcomments, competitor_posts
- Quality-score each candidate using the multi-dimension algorithm (pain density, engagement, competitor mentions, growth rate, etc.)
- For subs scoring >=
sub_quality_threshold:reddit.sh promote --campaign - For borderline subs (threshold - 1.0 to threshold): flag as "monitor" for re-evaluation next week
Rate limit caution: --deep discovery uses 15-25 requests per query. Run at most 2-3 discovery queries per session. If you hit 429 rate limits, stop discovery and resume in the next cycle.
Scoring Algorithm
raw_score = intensity * 0.20
+ competitive_gap * 0.20
+ build_feasibility * 0.20
+ market_value * 0.20
+ frequency * 0.15
+ timeliness * 0.05
Each dimension is scored 1-10 individually.
Adjustments:
adjusted = raw_score
+ cross_market_bonus (same pain in 3+ Tier S markets -> +1.5)
+ seasonal_bonus (matches upcoming seasonal pattern -> +1.0; just passed -> -1.0)
- false_positive_penalty (see below)
final_score = clamp(adjusted, 1, 10)
Weekly decay: if no new mentions this week: final_score *= 0.88
Market tier bonuses (applied to market_value dimension, not final score):
- Tier S (US, UK, DE, FR, NL, JP, AU, KR, Nordics): +3
- Tier A (IN, BR, SEA, LATAM, PL, CZ): +1
- Tier B (Africa, South Asia, rest): +0
Thresholds:
- >= 8: Deep verification (Phase 3) + highlight in report
- >= 7: Show in daily report under New Opportunities
- 5k GitHub stars): -2
- Requires enterprise sales process: mark as "not solo dev fit", do not penalize score but flag
Intent Tiers
Reference references/intent_keywords.json for the full keyword list. You classify intent tier from context — jq only provides raw keyword matches.
| Tier | Signal | Examples | |------|--------|---------| | 1 | Direct purchase intent | "willing to pay", "budget for", "take my money" | | 2 | Active solution seeking | "looking for a tool", "switching from", "need alternative" | | 3 | Pain expression | "frustrated with", "too expensive", "waste of time" | | 4 | Research | "what do you use for", "best practices", "recommendations" | | 5 | Indirect signals | Domain discussions implying unmet need |
Solo Dev Fit Assessment
Evaluate independently of opportunity score. All must be true for a pass:
- Build time = 7)
[Opportunity cards with score, pain summary, top source post]
Trending Pain Points
[Clusters below threshold but gaining frequency]
Time-Sensitive (= 8 → alert: OPPORTUNITY: [title] (score X.X)
update_subreddit_qualitywith hit rates
Scheduled reports:
- Weekly summary: trigger on Sundays (or first loop after Sunday midnight)
- Monthly summary: last day of month (or first loop after)
- If a scheduled report was missed, generate it on next run
State Management
.reddit/.reddit.json tracks:
| Key | Purpose | TTL | |-----|---------|-----| | seen_posts | Deduplication | 30 days | | watched_threads | Monitor for new comments | 7 days default | | opportunities | Lifecycle tracking | Permanent | | products_seen | Known tools/competitors | Permanent | | influencers | High-value Reddit users | Permanent | | community_overlap | Cross-sub posting patterns | 30 days | | subreddit_quality | Hit rate per subreddit | Permanent |
Opportunity lifecycle: discovered -> investigating -> validated -> building -> launched -> revenue -> archived
Safety
- Public data only — no PII beyond Reddit usernames
- Rate limit compliant — respect the ~100 req/260s budget
.reddit/must be in.gitignore— never commit user data- Reply drafts always marked [REVIEW BEFORE POSTING]
- Suggest max 5 replies per day to avoid spam patterns
Skill Integration
Related skills for downstream workflows:
- content-strategy — turn validated pain points into content calendars
- copywriting — turn opportunities into landing page copy
- competitor-alternatives — deep competitive analysis
- cold-email — draft outreach / DM templates
- social-content — repurpose Reddit insights for social posts
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: sky-flux
- Source: sky-flux/skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.