app-store-review-arbit…
Fetches low-star App Store and Google Play reviews, clusters them into broken-promise patterns, and generates a ranked copy brief…
Watches subreddits for people describing the exact problem you solve, scores their relevance to your ICP, and drafts a helpful non-spammy reply for each high-signal post. Use when asked to monitor Reddit for ICP signals, find prospects on Reddit, surface pain point posts, draft
Claude Code
$ npx -y skills add Varnan-Tech/opendirectory --skill reddit-icp-monitor --agent claude-code
Codex
$ npx skills add Varnan-Tech/opendirectory --skill reddit-icp-monitor -a codex -y
Cursor
$ npx skills add Varnan-Tech/opendirectory --skill reddit-icp-monitor -a cursor -y
Gemini CLI
$ npx skills add Varnan-Tech/opendirectory --skill reddit-icp-monitor -a gemini-cli -y
GitHub Copilot
$ npx skills add Varnan-Tech/opendirectory --skill reddit-icp-monitor -a github-copilot -y
OpenCode
$ npx skills add Varnan-Tech/opendirectory --skill reddit-icp-monitor -a opencode -y
Windsurf
$ npx skills add Varnan-Tech/opendirectory --skill reddit-icp-monitor -a windsurf -y
name: reddit-icp-monitor description: Watches subreddits for people describing the exact problem you solve, scores their relevance to your ICP, and drafts a helpful non-spammy reply for each high-signal post. Use when asked to monitor Reddit for ICP signals, find prospects on Reddit, surface pain point posts, draft helpful Reddit replies, or scan subreddits for buying signals. Trigger when a user says "monitor Reddit for my ICP", "find people on Reddit who need my product", "scan subreddits for pain points", "draft Reddit replies for prospects", or "check Reddit for buying signals". author: OpenDirectory version: 1.0.0
Watch subreddits for people describing the problem you solve. Score their relevance. Draft a helpful reply for each match.
---
**Critical rule:** Never invent post URLs, titles, or content. Every post in the output must come from a Reddit search result. Mark any section with no results as "No matches found." Never draft a reply to a post that was not returned by the search.
**Anti-spam rule:** Drafted replies must never mention your product or company name unless the post explicitly asks for tool recommendations. Sound like a practitioner, not a marketer.
---
echo "GEMINI_API_KEY: ${GEMINI_API_KEY:+set}"
echo "REDDIT_CLIENT_ID: ${REDDIT_CLIENT_ID:-not set, using public endpoints (10 RPM)}"**If GEMINI_API_KEY is missing:** Stop. Tell the user: "GEMINI_API_KEY is required. Get it at aistudio.google.com. Add it to your .env file."
**If Reddit credentials are missing:** Continue. Use Reddit's public JSON endpoints (no auth required, 10 RPM limit). For most monitoring sessions of 3-6 subreddit searches, this is sufficient.
**If REDDIT_CLIENT_ID is set:** Use OAuth for 60 RPM. Fetch a token first:
TOKEN=$(curl -s -X POST \ -d "grant_type=password&username=$REDDIT_USERNAME&password=$REDDIT_PASSWORD" \ --user "$REDDIT_CLIENT_ID:$REDDIT_CLIENT_SECRET" \ -H "User-Agent: varnan-skills/1.0" \ https://www.reddit.com/api/v1/access_token \ | python3 -c "import sys,json; print(json.load(sys.stdin)['access_token'])")
Use `Authorization: Bearer $TOKEN` and `https://oauth.reddit.com` base URL for all subsequent requests.
---
Check for an existing ICP file:
ls docs/icp.md 2>/dev/null && echo "icp found" || echo "icp missing"
**If docs/icp.md exists:** Read it. Extract:
**If docs/icp.md does not exist:** Ask these 3 questions. Do not proceed until all 3 are answered: 1. What does your product do? (one sentence) 2. What subreddits does your ICP post in? (comma-separated, e.g. devops, startups, SaaS) 3. What pain point phrases should trigger a match? (3-5 phrases in your buyer's own words, e.g. "onboarding takes forever", "can't see why users churn")
After answers are collected, save to docs/icp.md in the canonical format from `references/icp-format.md`. Confirm: "ICP saved to docs/icp.md. It will be used automatically in future runs."
Read `references/icp-format.md` for the canonical format and examples of good vs bad pain point phrases.
---
For each combination of subreddit and pain point phrase, run one search. Use public endpoints unless OAuth credentials are set.
**Without OAuth (public endpoint):**
curl -s \
-H "User-Agent: varnan-skills/1.0" \
"https://www.reddit.com/r/{SUBREDDIT}/search.json?q={PHRASE}&sort=new&t=week&limit=25&restrict_sr=true" \
| python3 -c "
import sys, json
d = json.load(sys.stdin)
posts = d.get('data', {}).get('children', [])
for p in posts:
data = p['data']
print(json.dumps({
'id': data['id'],
'title': data['title'],
'body': data.get('selftext', '')[:600],
'url': 'https://reddit.com' + data['permalink'],
'score': data['score'],
'comments': data['num_comments'],
'subreddit': data['subreddit'],
'created_utc': data['created_utc']
}))
"**With OAuth:** Replace `https://www.reddit.com` with `https://oauth.reddit.com` and add `-H "Authorization: Bearer $TOKEN"`.
**URL-encode the phrase** before inserting into the query string:
ENCODED=$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "{PHRASE}")**Time window defaults:**
**After all searches:**
State the total candidate count before scoring: "Found X candidate posts across Y subreddits."
---
Write all candidate posts and the ICP context to a temp file, then score:
cat > /tmp/reddit-score-request.json << 'ENDJSON'
{
"system_instruction": {
"parts": [{
"text": "You are a GTM analyst identifying Reddit posts where someone is experiencing the exact pain point that a specific product solves. For each post provided, output a JSON object with these fields: id (the post id), score (integer 1-5), reason (one sentence explaining the score). Scoring rubric: 5 = person clearly has the problem AND is actively seeking help or venting frustration about it; 4 = strong signal, problem is present but less explicit; 3 = possible match, uncertain; 2 = tangentially related but not the core pain; 1 = unrelated. Output only a JSON array of score objects. No commentary before or after the array."
}]
},
"contents": [{
"parts": [{
"text": "POSTS_AND_ICP_CONTEXT_HERE"
}]
}],
"generationConfig": {
"temperature": 0.2,
"maxOuFetches low-star App Store and Google Play reviews, clusters them into broken-promise patterns, and generates a ranked copy brief…
Use when the user asks to generate a blog cover image, thumbnail, or article header. Automatically uses modern typography, brand…
World-class brand strategist and naming expert. Uses an interrogation-led discovery phase to extract your brand's DNA, then…
Use when the user asks to generate or update a project's CLAUDE or AGENTS context file from a codebase scan. Writes a focused…
Use when the user wants to verify cold emails, enrich a lead list, or autonomously guess email addresses from a CSV using…
Competitive intelligence orchestrator tracking companies across 8+ platforms (GitHub, Twitter, Reddit, HN, PH, YC Jobs) with heat…
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use…
Comprehensive SEO analysis for any website or business type. Full site audits, single-page analysis, technical SEO (crawlability,…
Turn the current project website into a short, polished, shareable launch video using Hyperframes. Use when someone says "/brag",…
Full website GEO+SEO audit with parallel subagent delegation. Orchestrates a comprehensive Generative Engine Optimization audit…