Communitygithub.com

Varnan-Tech/opendirectory

Surveille les subreddits à la recherche de personnes décrivant exactement le problème que vous résolvez, évalue leur pertinence par rapport à votre profil client idéal (ICP) et rédige une réponse utile et non-spam pour chaque publication à fort signal.

Qu'est-ce que opendirectory ?

Cette compétence permet aux agents IA (comme Claude Code, Cursor, Codex) de surveiller automatiquement Reddit pour identifier des prospects correspondant à votre profil client idéal (ICP). Elle interroge les subreddits pertinents avec des expressions de points de douleur, évalue chaque publication avec Gemini (score de 1 à 5), et rédige des réponses utiles sans mentionner votre produit (sauf si explicitement demandé). La compétence utilise soit les endpoints publics de Reddit (limite de 10 requêtes par minute), soit l'API OAuth (60 requêtes par minute) si les identifiants sont fournis. Tout le processus est guidé par des règles anti-spam strictes : les réponses doivent sonner authentiques, ne jamais utiliser de jargon marketing, et ne pas inventer de publications ou d'URLs. Les résultats sont sauvegardés dans des fichiers horodatés pour un suivi continu.

Compatible avec✓Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/Varnan-Tech/opendirectory/tree/main/skills/reddit-icp-monitor

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Moniteur Reddit ICP

Surveillez les subreddits à la recherche de personnes décrivant le problème que vous résolvez. Évaluez leur pertinence. Rédigez une réponse utile pour chaque correspondance.


Règle critique : N'inventez jamais d'URLs, de titres ou de contenu de publication. Chaque publication dans la sortie doit provenir d'un résultat de recherche Reddit. Marquez toute section sans résultat par « Aucune correspondance trouvée. » Ne rédigez jamais de réponse à une publication qui n'a pas été retournée par la recherche.

Règle anti-spam : Les réponses rédigées ne doivent jamais mentionner votre produit ou le nom de votre entreprise, sauf si la publication demande explicitement des recommandations d'outils. Sonnez comme un praticien, pas comme un marketeur.


Étape 1 : Vérification de configuration

echo "GEMINI_API_KEY: ${GEMINI_API_KEY:+défini}"
echo "REDDIT_CLIENT_ID: ${REDDIT_CLIENT_ID:-non défini, utilisation des endpoints publics (10 requêtes/min)}"

Si GEMINI_API_KEY est manquant : Arrêtez. Dites à l'utilisateur : « GEMINI_API_KEY est requis. Obtenez-le sur aistudio.google.com. Ajoutez-le à votre fichier .env. »

Si les identifiants Reddit sont manquants : Continuez. Utilisez les endpoints JSON publics de Reddit (aucune authentification requise, limite de 10 requêtes/min). Pour la plupart des sessions de surveillance de 3 à 6 recherches de subreddits, cela est suffisant.

Si REDDIT_CLIENT_ID est défini : Utilisez OAuth pour 60 requêtes/min. Récupérez d'abord un jeton :

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'])")

Utilisez Authorization: Bearer $TOKEN et l'URL de base https://oauth.reddit.com pour toutes les requêtes suivantes.


Étape 2 : Chargement de l'ICP

Vérifiez l'existence d'un fichier ICP :

ls docs/icp.md 2>/dev/null && echo "icp trouvé" || echo "icp manquant"

Si docs/icp.md existe : Lisez-le. Extrayez :

  • product : description du produit en une phrase
  • pain_points : liste d'expressions de points de douleur (langage exact de l'acheteur)
  • anti_keywords : mots-clés qui disqualifient une publication
  • subreddits : liste des subreddits à surveiller

Si docs/icp.md n'existe pas : Posez ces 3 questions. Ne continuez pas tant que les 3 n'ont pas été répondues :

  1. Que fait votre produit ? (une phrase)
  2. Dans quels subreddits votre ICP publie-t-il ? (séparés par des virgules, ex. devops, startups, SaaS)
  3. Quelles expressions de points de douleur devraient déclencher une correspondance ? (3 à 5 expressions dans les mots de votre acheteur, ex. « l'onboarding prend une éternité », « je ne vois pas pourquoi les utilisateurs se désabonnent »)

Après avoir recueilli les réponses, sauvegardez dans docs/icp.md au format canonique de references/icp-format.md. Confirmez : « ICP sauvegardé dans docs/icp.md. Il sera utilisé automatiquement lors des prochains lancements. »

Lisez references/icp-format.md pour le format canonique et des exemples de bonnes et mauvaises expressions de points de douleur.


Étape 3 : Recherche sur Reddit

Pour chaque combinaison de subreddit et d'expression de point de douleur, lancez une recherche. Utilisez les endpoints publics sauf si les identifiants OAuth sont définis.

Sans OAuth (endpoint public) :

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']
    }))
"

Avec OAuth : Remplacez https://www.reddit.com par https://oauth.reddit.com et ajoutez -H "Authorization: Bearer $TOKEN".

Encodez l'expression dans l'URL avant de l'insérer dans la chaîne de requête :

ENCODED=$(python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1]))" "{PHRASE}")

Fenêtre de temps par défaut :

  • Par défaut : t=week (7 derniers jours)
  • L'utilisateur dit « aujourd'hui » ou « dernières 24 heures » : t=day
  • L'utilisateur dit « ce mois-ci » : t=month

Après toutes les recherches :

  • Rassemblez toutes les publications en une seule liste
  • Dédupliquez par ID de publication. Si la même publication correspond à plusieurs expressions, gardez-la une fois et notez toutes les expressions correspondantes.
  • Si une recherche retourne 0 publication : notez-le et continuez. Ne vous arrêtez pas.

Indiquez le nombre total de candidats avant l'évaluation : « X publications candidates trouvées dans Y subreddits. »


Étape 4 : Évaluation de pertinence avec Gemini

Écrivez toutes les publications candidates et le contexte ICP dans un fichier temporaire, puis évaluez :

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,
    "maxOutputTokens": 2048
  }
}
ENDJSON
curl -s -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d @/tmp/reddit-score-request.json \
  | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['candidates'][0]['content']['parts'][0]['text'])"

Remplacez POSTS_AND_ICP_CONTEXT_HERE par :

  • La description du produit et les expressions de points de douleur de l'Étape 2
  • Chaque publication candidate : ID, titre, extrait du corps
  • Les anti-keywords de l'ICP (Gemini doit attribuer un score plus bas à celles-ci)

Ne conservez que les publications avec un score >= 4 pour la rédaction de réponses.

Indiquez : « X publications ont obtenu un score de 4 ou 5. Rédaction des réponses. »

Si 0 publication a un score >= 4 : affichez le message de résultats nuls de l'Étape 7 et arrêtez. Ne rédigez pas de réponses vides.


Étape 5 : Rédaction des réponses avec Gemini

Lisez references/reply-rules.md avant de rédiger. Déterminez le type de publication pour chaque publication à fort score (Mode 1, 2 ou 3) et transmettez le mode à Gemini.

Pour chaque publication avec un score >= 4, rédigez une réponse (maximum 5 réponses par session) :

cat > /tmp/reddit-reply-request.json << 'ENDJSON'
{
  "system_instruction": {
    "parts": [{
      "text": "You are a practitioner who has personally solved the exact problem being described in this Reddit post. Write a helpful reply that: (1) directly addresses what the person asked or is frustrated about, (2) shares a specific, useful insight from real experience, (3) does NOT mention any product, tool, or company by name unless the post explicitly asks for tool recommendations, (4) is 2-5 sentences, written in plain conversational prose with no headers or bullet lists, (5) optionally ends with a low-pressure invitation to continue the conversation. Do not use marketing language. Do not use these words: game-changer, best-in-class, streamline, transform, revolutionize, leverage, seamless, robust, comprehensive, innovative. Sound like a real person."
    }]
  },
  "contents": [{
    "parts": [{
      "text": "POST_CONTENT_AND_MODE_HERE"
    }]
  }],
  "generationConfig": {
    "temperature": 0.7,
    "maxOutputTokens": 512
  }
}
ENDJSON
curl -s -X POST \
  "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
  -H "Content-Type: application/json" \
  -d @/tmp/reddit-reply-request.json \
  | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['candidates'][0]['content']['parts'][0]['text'])"

Remplacez POST_CONTENT_AND_MODE_HERE par :

  • Le titre complet et le corps de la publication
  • Le mode de réponse (Mode 1 : frustration/ventilation, Mode 2 : comment gérez-vous X, Mode 3 : recommandation d'outil)
  • La description du produit (pour que Gemini sache quoi éviter de nommer en Mode 1/2)
  • Si Mode 3 : Gemini peut nommer le produit ET doit nommer une alternative

Étape 6 : Auto-Qualité

Exécutez chaque vérification et corrigez les violations avant de présenter :

  • Aucun nom de produit dans les réponses Mode 1 ou Mode 2
  • Aucun mot interdit dans les réponses : « game-changer », « best-in-class », « streamline », « transform », « revolutionize », « leverage », « seamless », « robust », « innovative »
  • Chaque réponse fait 2 à 5 phrases (comptez et indiquez)
  • Chaque réponse répond directement à la question ou frustration spécifique dans la publication
  • Toutes les URL dans la sortie sont de vraies URL Reddit provenant des résultats de recherche (pas construites ou devinées)
  • Pas plus de 5 réponses rédigées au total
  • Les réponses Mode 3 mentionnent au moins une alternative (pas seulement le produit)
  • Si un subreddit a retourné 0 résultat pour toutes les recherches de mots-clés, signalez-le dans la sortie

Corrigez toute violation avant de présenter.


Étape 7 : Sortie et sauvegarde

Présentez le rapport complet :

## Reddit ICP Monitor — [AAAA-MM-JJ]

**Subreddits surveillés :** r/[subreddit1], r/[subreddit2]
**Fenêtre de temps :** 7 derniers jours
**Mots-clés recherchés :** [phrase1], [phrase2], [phrase3]
**Candidats trouvés :** X publications
**Correspondances à fort signal (score 4-5) :** Y publications

---

### Correspondance 1 — Score [N]/5
**Publication :** [titre](url)
**Subreddit :** r/[subreddit] | [N] votes positifs | [N] commentaires
**Citation signal :** « [extrait pertinent du corps de la publication] »
**Mot-clé correspondant :** [phrase]
**Type de publication :** Mode [1/2/3]

**Réponse rédigée :**
[texte de la réponse]

**Nombre de mots de la réponse :** N mots

---

[répéter pour chaque correspondance]

---

**Subreddits sans résultat :** [liste de ceux qui n'ont rien retourné]

Si 0 publication a un score >= 4 : « Aucune correspondance à fort signal trouvée au cours des 7 derniers jours sur [subreddits]. Mots-clés recherchés : [liste]. Essayez d'élargir la fenêtre temporelle (relancez en disant 'le mois dernier') ou d'élargir vos expressions de points de douleur dans docs/icp.md. »

Sauvegardez dans un fichier :

mkdir -p docs/reddit-intel
OUTFILE="docs/reddit-intel/$(date +%Y-%m-%d).md"
cat > "$OUTFILE" << 'EOF'
REPORT_CONTENT_HERE
EOF
echo "Sauvegardé dans $OUTFILE"

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

Varnan-Tech/opendirectory

Use when the user asks to generate a blog cover image, thumbnail, or article header. Automatically uses modern typography, brand logos, and Google Search grounding to create beautiful 16:9 images with Gemini 3.1 Flash Image Preview.

Varnan-Tech/opendirectory

World-class brand strategist and naming expert. Uses an interrogation-led discovery phase to extract your brand's DNA, then applies scientific naming frameworks (Phonosemantics) and automated multi-TLD domain checking.

Varnan-Tech/opendirectory

Use when the user asks to generate or update a project's CLAUDE or AGENTS context file from a codebase scan. Writes a focused file under 100 lines containing only the non-obvious build commands, conventions, and gotchas Claude Code needs.

Varnan-Tech/opendirectory

Use when the user wants to verify cold emails, enrich a lead list, or autonomously guess email addresses from a CSV using ValidEmail.co or the open-source Reacher engine.

Varnan-Tech/opendirectory

Competitive intelligence orchestrator tracking companies across 8+ platforms (GitHub, Twitter, Reddit, HN, PH, YC Jobs) with heat scores and AI briefings.

Varnan-Tech/opendirectory

Give it your product URL or description. It finds your top 5 competitors, runs three-track PR research across all of them (editorial, podcasts, communities), identifies which channels appear most frequently, looks up the journalist or host for each, and returns a tiered outreach list with story angles and ready-to-send cold pitch drafts tailored to your product. Use when asked to find PR opportunities, discover where competitors got featured, build a media outreach list, find which journalists cover my space, or get pitch templates for press coverage.

Varnan-Tech/opendirectory

Generate high-converting, deep-dive growth case studies in MDX format. Use this skill when asked to write a case study or blog post about a company's growth, tech stack, or product-led strategy. It handles the full pipeline (researching the company via Tavily, generating a 16:9 cover image, quality checking the draft, uploading assets to cloud storage, and pushing directly to the target repository).

Varnan-Tech/opendirectory

Scans your project for outdated npm, pip, Cargo, Go, or Ruby packages. Runs a CVE security audit. Fetches changelogs, summarizes breaking changes with Gemini, and opens one PR per risk group (patch, minor, major). Includes Diagnosis Mode for install conflicts. Use when asked to update dependencies, check for outdated packages, open dependency PRs, scan for package updates, audit for CVEs, or flag breaking changes in upgrades. Trigger when a user says "check for outdated packages", "update my dependencies", "open PRs for dependency updates", "scan for CVEs", or "which packages need upgrading".

Varnan-Tech/opendirectory

Generates and updates README.md and API reference docs by reading your codebase's functions, routes, types, schemas, and architecture. Uses graphify to build a knowledge graph first, then writes accurate docs from it. Use when asked to write docs, generate a README, document an API, update stale docs, create an API reference from code, add an architecture section, or document a project in any language. Trigger when a user says their docs are missing, outdated, or wants to document their codebase without writing it manually.

Varnan-Tech/opendirectory

Evaluates expired domain candidates against a target niche, scores them by topical relevance, historical activity level, and history cleanliness, then outputs a ranked shortlist with explainable reasoning and risk flags.

Varnan-Tech/opendirectory

Brutally honest developer-experience audit for a GitHub repo. Scores 10 DX dimensions (time-to-first-success, README clarity, visual proof, install, quick-start, docs, examples, community, trust, marketing), writes a shareable roast in the requested tone (brutal/honest/kind), produces a prioritized action plan ranked by impact × effort, and sketches an ideal README. Trigger when user says "roast my repo", "audit my README", "dx audit", "developer experience review", "score my GitHub project", "before launch checklist", or "make my repo shareable".

Varnan-Tech/opendirectory

Drafts and designs a complete HTML email newsletter from a topic or content brief. Outputs paste-ready HTML for Loops, Mailchimp, Beehiiv, Resend, or any standard email platform. Includes subject line options and plain-text fallback. Trigger when a user says "write a newsletter", "draft an email newsletter", "create an HTML email", "design an email for my subscribers", or "write a newsletter about [topic]".

Varnan-Tech/opendirectory

Takes a GitHub PR URL or the current branch and writes a plain-English explanation of what it does and why, then posts it as a PR comment. Use when asked to explain a PR, summarize a pull request, write a plain-English description of a PR, add a summary comment to a PR, or understand what a PR changes. Trigger when a user says "explain this PR", "summarize this pull request", "what does this PR do", "add a comment explaining the PR", or shares a GitHub PR URL and asks what it does.

Varnan-Tech/opendirectory

Audit how often LLMs recommend your brand vs competitors and generate a GEO action plan.

Varnan-Tech/opendirectory

Takes a competitor's public GitHub repo URL, fetches their open issues via the GitHub REST API, filters noise locally, clusters issues into 6 demand categories, computes a demand score per issue and per cluster, and outputs a ranked demand gap report with a GTM messaging brief. Use when asked to scan a competitor's GitHub issues, find what their users are begging for, turn GitHub complaints into product positioning, identify competitor feature gaps, or generate messaging from real user demand. Trigger when a user says "scan competitor issues", "what are users asking for on X repo", "find demand gaps in Y", "turn GitHub issues into messaging", or "what should I build based on competitor complaints".

Varnan-Tech/opendirectory

Find recurring confusion in your repo's GitHub Discussions, rank it by urgency, and draft the actual docs fixes and content angles — with verbatim community quotes and source links as evidence.

Varnan-Tech/opendirectory

SEO keyword research workflow for blog generation using Google Trends data. Use when writing blog posts, planning content calendars, or optimizing articles for search engines. Finds breakout keywords, builds content structure, and generates SEO-optimized blog outlines targeting tech and developer audiences.

Varnan-Tech/opendirectory

Generates a professionally designed case study PDF for B2B SaaS sales and marketing. Supports 7 page layouts, 9 style presets, 1-4 page output. Trigger when user says "create a case study", "write a customer story", "make a case study PDF", "design a success story", "turn this customer win into a PDF".

Varnan-Tech/opendirectory

Generates data visualization charts (bar, line, area, pie, doughnut, scatter, radar, treemap) as PNG using Apache ECharts v6. 1080×1080px default, 5 style presets, highlight annotations. Trigger when user says "create a chart", "visualize data", "make a bar chart", "line graph", "pie chart", "data visualization", "chart this data", "plot", "graph", or "visualize these numbers".

Varnan-Tech/opendirectory

Fetches low-star App Store and Google Play reviews, clusters them into broken-promise patterns, and generates a ranked copy brief with positioning opportunities.

Skills associés