Communitygithub.com

Varnan-Tech/opendirectory

Analysiert Reddit, Hacker News, GitHub Issues, G2 und Google Trends anhand einer Produktbeschreibung, Kategorie-Keywords oder Wettbewerbsnamen, um die tatsächlichen Schmerzpunkte Ihres Marktes zu finden und in ein Positionierungs-Framework zu überführen.

Was ist opendirectory?

Dieses Skill durchsucht mehrere öffentliche Datenquellen (Reddit, Hacker News, GitHub Issues, G2 und Google Trends), um echte Schmerzpunkte eines Zielmarktes zu identifizieren, zu bewerten und zu clustern. Es generiert ein vollständiges Positionierungs-Framework mit einer Ideal Customer Profile (ICP)-Definition, gewichteten Schmerzthemen mit wörtlichen Zitaten aus den Rohdaten, Marktgrößensignalen und messaging-Ansätzen, die auf der tatsächlich verwendeten Sprache der Nutzer basieren. Das Skill ist auf mehreren Plattformen einsetzbar (z.B. Claude Code, Cursor, Codex) und folgt einem strengen mehrstufigen Prozess: Datenerfassung, Schmerzpunktbewertung mit einem spezifischen Scoring-Formel, KI-gestütztes Clustering der Top-60-Ergebnisse, ICP-Erstellung, Marktgrößenanalyse und finale Synthese. Wichtig: Das Skill berücksichtigt keine erfundenen Zahlen oder Dollar-Schätzungen; alle Zitate müssen wörtlich aus den Rohdaten stammen und die Marktgrößenbeschreibung basiert ausschließlich auf gesammelten Signalen.

Funktioniert mit✓Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/Varnan-Tech/opendirectory/tree/main/skills/map-your-market

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Kartieren Sie Ihren Markt

Nehmen Sie eine Produktbeschreibung, Kategorie-Keywords oder Wettbewerbsnamen. Durchsuchen Sie Reddit, HN, GitHub Issues, G2 und Google Trends nach echten Schmerzsignalen. Bewerten und clustern Sie diese. Erstellen Sie ein vollständiges Positionierungs-Framework: ICP-Definition, gewichtete Schmerzthemen mit wörtlichen Zitaten, Marktgrößensignale und Messaging-Ansätze, die aus der tatsächlich verwendeten Sprache der Menschen abgeleitet sind.


Wichtige Regel: Jedes Schmerzzitat in der Ausgabe muss wörtlich in den vom Skript gesammelten Rohdaten existieren. Jeder Anbietername in der Marktkarte muss aus G2-Scraping-Ergebnissen oder GitHub-Suchergebnissen stammen. Die Marktgröße muss "Signale deuten darauf hin" sagen – schätzen Sie niemals einen Dollar-Betrag aus dünnen Proxy-Daten. Wenn eine Quelle 0 Ergebnisse liefert, melden Sie 0 – ergänzen Sie nicht mit erfundenen Beispielen.


Häufige Fehler

Der Agent wird wahrscheinlich...Warum das falsch ist
Schmerzpunkte oder Marktgrößenzahlen erfindenJedes Schmerzzitat muss wörtlich aus den Rohdaten stammen. Die Marktgröße muss gefundene Signale zitieren. Schätzen Sie niemals eine "typische" Marktgröße.
Nach Post-Anzahl statt nach pain_score bewertenEin Post mit 2.000 Upvotes über Preise ist stärker als 50 Posts mit je 10 Upvotes. Verwenden Sie die pain_score-Formel aus references/pain-scoring.md.
Für jede Kategorie dieselben Subreddits verwendenr/politics fügt einer DevOps-Suche Rauschen hinzu. Erkennen Sie relevante Subreddits automatisch aus der Kategorie und Wettbewerbsnamen vor der Suche.
Alle rohen Signale ohne Bewertung an KI sendenBewerten Sie lokal zuerst. Senden Sie nur die Top-60-Signale mit hohem Schmerzscore an das KI-Clustering. Spart Tokens und verbessert die Clusterqualität.
ICP-Extraktion aus Post-Metadaten überspringenSubreddit, Flair, Autoren-Bio (HN) und GitHub-Organisationstyp sind reichhaltigere ICP-Signale als Post-Inhalte. Erfassen und melden Sie sie immer.
Anbieteranzahl mit Marktgröße verwechseln"47 Anbieter auf G2" bedeutet wettbewerbsintensiv, nicht groß. Präsentieren Sie alle Signale als richtungsweisende Indikatoren, nicht als harte Zahlen.

Schritt 1: Setup-Prüfung

echo "GITHUB_TOKEN: ${GITHUB_TOKEN:-nicht gesetzt – GitHub Issues-Suche läuft mit 60 req/hr unauthentifiziert}"
echo "Keine anderen API-Schlüssel erforderlich."
echo ""
echo "In diesem Durchlauf verwendete Datenquellen:"
echo "  Reddit public JSON  (keine Authentifizierung, 10 req/min)"
echo "  HN Algolia API      (keine Authentifizierung, kostenlos)"
echo "  GitHub Issues API   (${GITHUB_TOKEN:+authentifiziert, }60-5000 req/hr)"
echo "  G2 Kategorie-Scrape (keine Authentifizierung, HTML-Parse)"
echo "  Google Trends       (keine Authentifizierung, inoffizieller Endpunkt)"

Wenn GITHUB_TOKEN nicht gesetzt ist: Fahren Sie fort. Unauthhentifizierte GitHub-Suche ist mit 60 req/hr für einen Standardlauf ausreichend. Bei wiederholter Nutzung fügen Sie ein Token unter github.com/settings/tokens hinzu (keine Bereiche für öffentliche Repos erforderlich).


Schritt 2: Eingabe parsen

Sammeln Sie aus dem Gespräch:

  • category – Keyword(s), die den Marktbereich beschreiben (z. B. "Developer Observability", "B2B-Analytik", "DevOps-Tooling")
  • competitors – optionale Liste von Wettbewerbsproduktnamen oder Domains (z. B. "Datadog, New Relic, Grafana")
  • product_context – optional: was das Produkt des Benutzers tut (hilft bei der Anpassung von Messaging-Ansätzen)

Wenn der Benutzer nur eine Produktbeschreibung ohne Kategorie-Keyword angibt: Extrahieren Sie selbst 2-3 Kategorie-Keywords daraus.

Wenn der Benutzer nur Wettbewerbsnamen ohne Kategorie angibt: Leiten Sie die Kategorie durch Nachschlagen der Wettbewerber ab.

Schreiben Sie die geparste Eingabe:

python3 << 'PYEOF'
import json, os

data = {
    "category": "CATEGORY_HIER",
    "competitors": ["WETTBEWERBER_1", "WETTBEWERBER_2"],
    "product_context": "PRODUKTKONTEXT_HIER"
}

with open("/tmp/mym-input.json", "w") as f:
    json.dump(data, f, indent=2)
print("Eingabe nach /tmp/mym-input.json geschrieben")
print(f"Kategorie: {data['category']}")
print(f"Wettbewerber: {', '.join(data['competitors']) if data['competitors'] else 'keine angegeben'}")
PYEOF

Schritt 3: Ausführen des eigenständigen Datensammlungsskripts

Das Skript übernimmt die gesamte Datensammlung. Überprüfen Sie zuerst, ob es existiert:

ls scripts/fetch.py 2>/dev/null && echo "Skript verfügbar" || echo "nicht gefunden"

Wenn verfügbar, führen Sie es aus:

GITHUB_TOKEN="${GITHUB_TOKEN:-}" python3 scripts/fetch.py \
    "$(python3 -c "import json; d=json.load(open('/tmp/mym-input.json')); print(d['category'])")" \
    --competitors "$(python3 -c "import json; d=json.load(open('/tmp/mym-input.json')); print(','.join(d['competitors']))")" \
    --context "$(python3 -c "import json; d=json.load(open('/tmp/mym-input.json')); print(d['product_context'])")" \
    --output /tmp/mym-raw.json

Warten Sie auf den Abschluss (erlauben Sie bis zu 4 Minuten – Reddit + HN-Suchen dauern insgesamt ~90 Sekunden).

Überprüfen Sie die Ausgabe:

python3 -c "
import json
with open('/tmp/mym-raw.json') as f:
    d = json.load(f)
print(f'Reddit-Signale: {d[\"market_signals\"][\"reddit_signals_found\"]}')
print(f'HN-Signale:     {d[\"market_signals\"][\"hn_signals_found\"]}')
print(f'GitHub-Signale: {d[\"market_signals\"][\"github_issue_signals\"]}')
print(f'G2-Anbieter:    {d[\"market_signals\"][\"vendor_count_g2\"]}')
print(f'Trends:         {d[\"market_signals\"][\"trends_direction\"]}')
print(f'Signale gesamt: {d[\"summary\"][\"total_pain_signals\"]}')
"

Wenn die Gesamtzahl der Signale < 10 ist: Stoppen Sie. Sagen Sie dem Benutzer: "Für diese Kategorie wurden weniger als 10 Schmerzsignale gefunden. Der Markt ist möglicherweise zu nischenhaft für Reddit/HN-Abdeckung, oder die Kategorie-Keywords müssen angepasst werden. Versuchen Sie es mit breiteren Keywords oder fügen Sie Wettbewerbsnamen hinzu."


Schritt 4: KI-Schmerzpunkt-Clustering

Drucken Sie die Top-60-Schmerzsignale für die KI-Analyse:

python3 -c "
import json
with open('/tmp/mym-raw.json') as f:
    d = json.load(f)
top60 = sorted(d['raw_pains'], key=lambda x: x['pain_score'], reverse=True)[:60]
print(json.dumps(top60, indent=2))
"

Sie haben nun die Top-60-Schmerzsignale. Analysieren Sie sie und erstellen Sie Schmerzcluster.

Anweisungen für die KI-Analyse:

  • Identifizieren Sie 5-7 wiederkehrende Schmerzthemen über alle Quellen hinweg
  • Wählen Sie für jedes Thema einen Namen, der die eigene Sprache des Marktes verwendet (nicht Ihre Worte)
  • Aggregieren Sie den pain_score aller Signale in jedem Cluster
  • Wählen Sie für jedes Thema die 3-5 besten wörtlichen Zitate (höchste Punktzahl, spezifischste Sprache)
  • Notieren Sie, in welchen Quellen und Subreddits sich jedes Thema konzentriert
  • Markieren Sie jedes Thema, das nur in einer Quelle erscheint (geringere Konfidenz)

Schreiben Sie die Cluster nach /tmp/mym-clusters.json:

{
  "clusters": [
    {
      "theme": "genaue Sprache aus den Daten",
      "total_score": 847,
      "signal_count": 34,
      "sources": {"reddit": 18, "hn": 12, "github_issue": 4},
      "top_subreddits": ["devops", "sysadmin"],
      "verbatim_quotes": [
        {"text": "genaues Zitat", "source": "reddit", "score": 234, "url": "..."},
        {"text": "genaues Zitat", "source": "hn", "score": 87, "url": "..."}
      ],
      "who_has_this_pain": "Beschreibung, wer darüber postet"
    }
  ]
}
python3 -c "
import json, os
# Bestätigen, dass die Cluster-Datei geschrieben wurde
with open('/tmp/mym-clusters.json') as f:
    d = json.load(f)
print(f'Cluster geschrieben: {len(d[\"clusters\"])}')
for c in d['clusters']:
    print(f'  {c[\"theme\"]} -- Score: {c[\"total_score\"]}, Signale: {c[\"signal_count\"]}')
"

Schritt 5: ICP-Profilierung

Drucken Sie die ICP-Signale aus den Rohdaten:

python3 -c "
import json
with open('/tmp/mym-raw.json') as f:
    d = json.load(f)
print('ICP-Signale:')
print(json.dumps(d['icp_signals'], indent=2))
print()
print('Subreddit-Verteilung:')
sub_counts = {}
for p in d['raw_pains']:
    s = p.get('subreddit', '')
    if s:
        sub_counts[s] = sub_counts.get(s, 0) + 1
for sub, count in sorted(sub_counts.items(), key=lambda x: -x[1])[:10]:
    print(f'  r/{sub}: {count} Signale')
"

Verwenden Sie die obigen ICP-Signale und die Subreddit-Verteilung, um das ICP-Profil zu synthetisieren. Schreiben Sie es nach /tmp/mym-clusters.json, indem Sie einen icp-Schlüssel hinzufügen:

{
  "icp": {
    "who_they_are": "2-3-Satz-Profil unter Verwendung von Sprache aus den Daten",
    "where_they_live": ["r/devops (89 Beiträge)", "r/sysadmin (67 Beiträge)", "HN ask-hn (34 Threads)"],
    "what_they_say": ["wörtliches Zitat 1", "wörtliches Zitat 2", "wörtliches Zitat 3"],
    "what_they_have_tried": ["alternative Tools oder Ansätze, die in den Daten erwähnt werden"],
    "confidence": "hoch|mittel|niedrig – basierend auf Signalvolumen und Quellenvielfalt"
  }
}

Schritt 6: Marktgrößen-Synthese

Drucken Sie die Marktsignale:

python3 -c "
import json
with open('/tmp/mym-raw.json') as f:
    d = json.load(f)
ms = d['market_signals']
print('Marktsignale:')
print(f'  G2-Anbieter:         {ms[\"vendor_count_g2\"]}')
print(f'  Trendrichtung:       {ms[\"trends_direction\"]}')
print(f'  HN-Signale (12M):    {ms[\"hn_signals_found\"]}')
print(f'  Reddit-Signale:      {ms[\"reddit_signals_found\"]}')
print(f'  G2-Top-Anbieter:     {json.dumps(ms.get(\"top_vendors\", []), indent=4)}')
"

Synthetisieren Sie eine richtungsweisende Marktgrößenbewertung unter ausschließlicher Verwendung dieser Signale. Schätzen Sie keinen Dollar-Betrag. Verwenden Sie Ausdrücke wie:

  • "Signale deuten auf einen wettbewerbsintensiven, wachsenden Markt hin" (viele Anbieter + Trends steigen)
  • "Signale deuten auf einen frühen Markt hin" (wenige Anbieter + geringes Signalvolumen)
  • "Signale deuten auf einen gesättigten Markt hin" (viele Anbieter + flache/rückläufige Trends)

Fügen Sie die Bewertung als market_size-Schlüssel zu /tmp/mym-clusters.json hinzu.


Schritt 7: Positionierungs-Framework

Erstellen Sie unter Verwendung der Cluster (Schritt 4), des ICP (Schritt 5) und der Marktgröße (Schritt 6) das Positionierungs-Framework.

Anweisungen:

  • Wählen Sie die Top-3-Schmerzcluster als primäre Positionierungswinkel
  • Schreiben Sie für jeden Winkel eine Positionierungsaussage unter Verwendung wörtlicher Sprache aus den Daten (nicht paraphrasiert)
  • Generieren Sie 3 Landingpage-Überschriften, die die genauen Phrasen verwenden, die Menschen in den Schmerzdaten verwenden
  • Generieren Sie 3 Kalt-E-Mail-Betreffzeilen basierend auf der Schmerzsprache
  • Verwenden Sie KEINE verbotenen Wörter: powerful, robust, seamless, innovative, game-changing, streamline, leverage, transform, revolutionize

Schreiben Sie das vollständige Positionierungs-Framework nach /tmp/mym-output.json:

{
  "positioning_angles": [
    {
      "pain": "Themenname",
      "statement": "einzeilige Positionierung unter Verwendung von Marktsprache",
      "headline": "Landingpage-Überschrift mit wörtlicher Schmerzsprache",
      "cold_email_subject": "Betreffzeile"
    }
  ],
  "icp_card": {
    "one_liner": "ein Satz: wer sie sind + was ihnen wichtig ist",
    "where_to_find_them": [...],
    "how_to_talk_to_them": "Tonfall + Vokabularnotizen aus den Daten"
  },
  "market_map": [...Top-Anbieter von G2 mit Positionierungsnotizen...]
}

Schritt 8: Selbst-QA und Ausgabe speichern

Führen Sie Selbst-QA-Prüfungen durch:

python3 -c "
import json

# Alle Ausgaben laden
with open('/tmp/mym-raw.json') as f:
    raw = json.load(f)
with open('/tmp/mym-clusters.json') as f:
    clusters = json.load(f)
with open('/tmp/mym-output.json') as f:
    output = json.load(f)

raw_texts = set()
for p in raw['raw_pains']:
    raw_texts.add(p.get('title', ''))
    raw_texts.add(p.get('body_excerpt', ''))

# Prüfung 1: Keine Em-Dashes
import json as j
full_text = j.dumps(output)
if '—' in full_text:
    print('FEHLGESCHLAGEN: Em-Dash in der Ausgabe gefunden')
else:
    print('BESTANDEN: Keine Em-Dashes')

# Prüfung 2: Keine verbotenen Wörter
banned = ['powerful', 'robust', 'seamless', 'innovative', 'game-changing',
          'streamline', 'leverage', 'transform', 'revolutionize']
found = [w for w in banned if w.lower() in full_text.lower()]
if found:
    print(f'FEHLGESCHLAGEN: Verbotene Wörter gefunden: {found}')
else:
    print('BESTANDEN: Keine verbotenen Wörter')

# Prüfung 3: Marktgrößen-Sprachprüfung
if 'billion' in full_text.lower() or 'trillion' in full_text.lower() or 'worth \$' in full_text.lower():
    print('FEHLGESCHLAGEN: Harte Marktgrößenschätzung gefunden – nur richtungsweisende Sprache verwenden')
else:
    print('BESTANDEN: Keine harten Marktgrößenschätzungen')

# Prüfung 4: Signalzahlen stimmen überein
total = raw['summary']['total_pain_signals']
print(f'BESTANDEN: {total} Schmerzsignale insgesamt in Rohdaten')

print('Selbst-QA abgeschlossen.')
"

Beheben Sie Fehler vor dem Speichern.

Speichern Sie den endgültigen Bericht:

python3 << 'PYEOF'
import json, re
from datetime import datetime

with open('/tmp/mym-input.json') as f:
    inp = json.load(f)
with open('/tmp/mym-raw.json') as f:
    raw = json.load(f)
with open('/tmp/mym-clusters.json') as f:
    clusters = json.load(f)
with open('/tmp/mym-output.json') as f:
    output = json.load(f)

slug = re.sub(r'[^a-z0-9]+', '-', inp['category'].lower()).strip('-')
date = datetime.now().strftime('%Y-%m-%d')
outpath_md = f'docs/market-maps/{slug}-{date}.md'
outpath_json = f'docs/market-maps/{slug}-{date}.json'

# Markdown-Bericht erstellen
ms = raw['market_signals']
icp = clusters.get('icp', {})
market_assessment = clusters.get('market_size', {})
angles = output.get('positioning_angles', [])
icp_card = output.get('icp_card', {})
market_map = output.get('market_map', [])

lines = [
    f'# Marktkarte: {inp["category"].title()}',
    f'Datum: {date} | Analysierte Signale: {raw["summary"]["total_pain_signals"]} | Quellen: Reddit ({ms["reddit_signals_found"]}) + HN ({ms["hn_signals_found"]}) + GitHub Issues ({ms["github_issue_signals"]})',
    '',
    '---',
    '',
    '## Marktgrößensignale',
    f'Anbieter auf G2: {ms["vendor_count_g2"]} | Google Trends: {ms["trends_direction"].upper()} | Marktphase: {market_assessment.get("stage", "siehe Signale unten")}',
    '',
    market_assessment.get('summary', ''),
    '',
    '---',
    '',
    '## Ihr ICP',
    '',
    f'**Wer sie sind:** {icp.get("who_they_are", "")}',
    '',
    f'**Wo sie leben:** {", ".join(icp.get("where_they_live", []))}',
    '',
    '**Was sie sagen:**',
]
for q in icp.get('what_they_say', []):
    lines.append(f'> "{q}"')
lines += ['', '---', '', '## Top-Schmerzen (nach Signalstärke geordnet)', '']

for i, c in enumerate(clusters.get('clusters', []), 1):
    lines.append(f'### Schmerz {i}: {c["theme"]} [Score: {c["total_score"]}]')
    sources = c.get('sources', {})
    source_str = ' + '.join(f'{src} ({cnt})' for src, cnt in sources.items())
    lines.append(f'{c["signal_count"]} Signale | Quellen: {source_str}')
    lines.append(f'Wer hat diesen Schmerz: {c.get("who_has_this_pain", "")}')
    lines.append('')
    lines.append('Wörtlich:')
    for q in c.get('verbatim_quotes', [])[:4]:
        lines.append(f'- "{q["text"]}" ({q["source"]}, Score: {q["score"]})')
    lines.append('')

lines += ['---', '', '## Positionierungs-Framework', '']

for angle in angles:
    lines.append(f'**Schmerz:** {angle["pain"]}')
    lines.append(f'**Aussage:** {angle["statement"]}')
    lines.append(f'**Überschrift:** {angle["headline"]}')
    lines.append(f'**Kalt-E-Mail:** {angle["cold_email_subject"]}')
    lines.append('')

lines += ['---', '', '## ICP-Karte', '']
lines.append(f'{icp_card.get("one_liner", "")}')
lines.append(f'Wo zu finden: {json.dumps(icp_card.get("where_to_find_them", []), indent=2, ensure_ascii=False)}')
lines.append(f'Wie ansprechen: {icp_card.get("how_to_talk_to_them", "")}')
lines += ['', '---', '', '## Marktkarte (Wettbewerbslandschaft)', '']
for m in market_map[:10]:
    lines.append(f'- {m.get("name", "")}: {m.get("notes", "")}')

report = '\n'.join(lines)

with open(outpath_md, 'w') as f:
    f.write(report)
print(f'Bericht geschrieben: {outpath_md}')

with open(outpath_json, 'w') as f:
    json.dump(output, f, indent=2, ensure_ascii=False)
print(f'JSON geschrieben: {outpath_json}')
PYEOF

Ergebnis: Sie haben eine Marktkarte mit ICP, gewichteten Schmerzthemen, Marktgrößensignalen und Positionierungswinkeln im docs/market-maps/-Verzeichnis.


Ausführliche Anleitung

Eine detaillierte Referenz mit Formeln, Glossar und Architektur finden Sie in den Ordner references/, insbesondere:

  • references/pain-scoring.md – Wie pain_score für jedes Signal berechnet wird
  • references/glossary.md – Definitionen von Begriffen wie ICP, Marktsignal, Schmerz-Cluster
  • references/architecture.md – Wie Daten fließen und warum

Über deutsches recht

(Dieser Abschnitt dient nur zur Information – kein Teil des Prozesses).

Ihr Skill ist ausschließlich auf deutsch.

Ende der Skill-Beschreibung.

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.

Verwandte Skills