Skip to content
Marketing
Skill

/reddit-icp-monitor

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

From plugin
opendirectory-gtm-skills
58364 skills
Install
$ npx -y skills add Varnan-Tech/opendirectory --skill reddit-icp-monitor --agent claude-code

How 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.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/reddit-icp-monitor

Context preview

The summary Claude sees to decide when to auto-load this skill.

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

SKILL.md

reddit-icp-monitor.SKILL.md
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".
compatibility: [claude-code, gemini-cli, github-copilot]
author: OpenDirectory
version: 1.0.0

Reddit ICP Monitor

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.

---

Step 1: Setup Check

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.

---

Step 2: Load ICP

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:

  • `product`: one-sentence product description
  • `pain_points`: list of pain point phrases (exact buyer language)
  • `anti_keywords`: phrases that disqualify a post
  • `subreddits`: list of subreddits to search

**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.

---

Step 3: Search Reddit

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:**

  • Default: `t=week` (last 7 days)
  • User says "today" or "last 24 hours": `t=day`
  • User says "this month": `t=month`

**After all searches:**

  • Collect all posts into one list
  • Deduplicate by post ID. If the same post matches multiple phrases, keep it once and note all matching phrases.
  • If a search returns 0 posts: note it and continue. Do not stop.

State the total candidate count before scoring: "Found X candidate posts across Y subreddits."

---

Step 4: Score Relevance with Gemini

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"
    }]
  }],
Read more
Ships withopendirectory-gtm-skills

AI Agent Skills built for Founders who hate Marketing

Get the whole plugin