Communitygithub.com

Varnan-Tech/opendirectory

Durchsucht Ihr Projekt nach veralteten npm-, pip-, Cargo-, Go- oder Ruby-Paketen. Führt ein CVE-Sicherheitsaudit durch. Ruft Changelogs ab, fasst Breaking Changes mit Gemini zusammen und erstellt einen PR pro Risikogruppe (Patch, Minor, Major). Enthält einen Diagnosemodus für Installationskonflikte.

Was ist opendirectory?

Diese Skill automatisiert den Abhängigkeitsupdate-Workflow für Entwickler, die mit npm, pip, Cargo, Go oder Ruby arbeiten. Sie scannt das gesamte Projekt auf veraltete Pakete, führt ein Sicherheitsaudit auf bekannte CVEs durch und ruft Changelogs über GitHub Releases oder Paketregistrierungs-APIs ab. Mithilfe des Gemini-Modells von Google werden Breaking Changes und Sicherheitsfixes in einer natürlichen, prägnanten Zusammenfassung beschrieben. Die Skill erstellt dann einen Pull Request (PR) pro Risikogruppe – Patch, Minor, Major – und kann CVE-betroffene Pakete automatisch in eine höhere Prioritätsstufe hochstufen. Zusätzlich enthält sie einen Diagnosemodus, der bei fehlgeschlagenen Installationen die Fehlerursache identifiziert und eine Lösung vorschlägt, ohne den gesamten Durchlauf zu blockieren. Dies reduziert manuellen Aufwand und hält die Abhängigkeiten sicher und aktuell.

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

In Ihrer bevorzugten KI fragen

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

Dokumentation

Dependency Update Bot – Lokalisierte Version (DE)

Durchsucht Ihr Projekt nach veralteten Paketen. Führt ein Sicherheitsaudit durch. Ruft Changelogs ab. Fasst Breaking Changes zusammen. Erstellt einen PR pro Risikogruppe.


Wichtige Regel: Aktualisieren Sie nur Pakete, die der Befehl outdated des Paketmanagers tatsächlich meldet. Raten Sie niemals Versionsnummern oder erfinden Sie sie. Wenn ein Changelog nicht abgerufen werden kann, notieren Sie die Lücke, anstatt Inhalt zu erfinden.


Schritt 1: Überprüfung der Einrichtung

echo "GEMINI_API_KEY: ${GEMINI_API_KEY:+gesetzt}"
echo "GITHUB_TOKEN: ${GITHUB_TOKEN:-nicht gesetzt, Changelog-Abruf auf 60/Std. ratenbegrenzt}"
gh auth status 2>/dev/null | head -1 || echo "gh: nicht authentifiziert"

Wenn GEMINI_API_KEY fehlt: Anhalten. Dem Benutzer mitteilen: „GEMINI_API_KEY ist erforderlich. Holen Sie ihn unter aistudio.google.com ab. Fügen Sie ihn Ihrer .env-Datei hinzu.“

Wenn gh nicht authentifiziert ist: Anhalten. Dem Benutzer mitteilen: „GitHub CLI muss authentifiziert sein. Führen Sie aus: gh auth login“

Paketmanager erkennen:

ls package.json 2>/dev/null && echo "npm"
ls requirements.txt pyproject.toml 2>/dev/null && echo "pip"
ls Cargo.toml 2>/dev/null && echo "cargo"
ls go.mod 2>/dev/null && echo "go"
ls Gemfile 2>/dev/null && echo "ruby"

Wenn mehrere gefunden werden, fragen: „Gefunden: [Liste]. Welche soll ich scannen? (all / npm / pip / cargo / go / ruby)“


Schritt 2: Veraltete Pakete erkennen

npm:

npm outdated --json --long 2>/dev/null | python3 -c "
import sys, json
data = json.load(sys.stdin)
for name, info in data.items():
    print(json.dumps({'name': name, 'current': info.get('current','?'), 'latest': info.get('latest','?'), 'dep_type': info.get('type','dependencies')}))
"

pip:

pip list --outdated --format=json 2>/dev/null | python3 -c "
import sys, json
for p in json.load(sys.stdin):
    print(json.dumps({'name': p['name'], 'current': p['version'], 'latest': p['latest_version']}))
"

Cargo (Rust):

cargo outdated --format json 2>/dev/null || \
  cargo outdated 2>/dev/null | grep -v "^---" | tail -n +3 | head -30
# Falls cargo-outdated nicht installiert: cargo install cargo-outdated

Go-Module:

go list -u -m -json all 2>/dev/null | python3 -c "
import sys, json
decoder = json.JSONDecoder()
buf = sys.stdin.read()
pos = 0
while pos < len(buf):
    try:
        obj, idx = decoder.raw_decode(buf, pos)
        if obj.get('Update'):
            print(json.dumps({'name': obj['Path'], 'current': obj['Version'], 'latest': obj['Update']['Version']}))
        pos += idx
    except: break
"

Ruby (Bundler):

bundle outdated --parseable 2>/dev/null | python3 -c "
import sys
for line in sys.stdin:
    parts = line.strip().split()
    if len(parts) >= 4:
        print('{\"name\":\"' + parts[0] + '\",\"current\":\"' + parts[3].strip('()') + '\",\"latest\":\"' + parts[1] + '\"}')
"

Wenn alle leer zurückkommen: „Alle Pakete sind auf dem neuesten Stand.“ Anhalten.

Vor dem Fortfahren die Anzahl angeben: „Gefunden: X veraltete Pakete.“


Schritt 3: Nach Risikostufe klassifizieren

Versionssprung parsen (aktuell → neueste):

  • MAJOR: erste Ziffer geändert (1.x.x → 2.x.x)
  • MINOR: zweite Ziffer geändert (1.2.x → 1.3.x)
  • PATCH: dritte Ziffer geändert (1.2.3 → 1.2.4)
python3 -c "
def classify(current, latest):
    try:
        c = [int(x) for x in current.lstrip('v').split('.')[:3]]
        l = [int(x) for x in latest.lstrip('v').split('.')[:3]]
        if l[0] > c[0]: return 'major'
        if len(l) > 1 and len(c) > 1 and l[1] > c[1]: return 'minor'
        return 'patch'
    except: return 'unknown'
"

Die Aufschlüsselung angeben: „Patch: X Pakete. Minor: Y Pakete. Major: Z Pakete.“


Schritt 4: Sicherheitsaudit

Führen Sie vor dem Erstellen von PRs einen CVE-Scan durch. Dies bestimmt die Dringlichkeit.

npm:

npm audit --json 2>/dev/null | python3 -c "
import sys, json
d = json.load(sys.stdin)
vulns = d.get('vulnerabilities', {})
for pkg, info in vulns.items():
    sev = info.get('severity', 'unknown')
    via = [v.get('title','') for v in info.get('via',[]) if isinstance(v, dict)]
    print(f'  [{sev.upper()}] {pkg}: {via[0] if via else \"siehe npm audit\"}')
" 2>/dev/null || echo "Keine Schwachstellen gefunden oder npm audit nicht verfügbar"

pip:

pip-audit --format=json 2>/dev/null | python3 -c "
import sys, json
for vuln in json.load(sys.stdin):
    print(f'  [{vuln.get(\"aliases\",[\"\"])[0]}] {vuln[\"name\"]} {vuln[\"version\"]}: {vuln[\"description\"][:80]}')
" 2>/dev/null || echo "pip-audit nicht installiert. Führen Sie aus: pip install pip-audit"

Cargo:

cargo audit 2>/dev/null | grep -E "^(ID|Package|Severity|URL)" | head -30 \
  || echo "cargo-audit nicht installiert. Führen Sie aus: cargo install cargo-audit"

Eskalationsregel: Wenn ein PATCH- oder MINOR-Update ein kritisches oder hohes CVE aufweist, wird es auf MAJOR-Priorität hochgestuft: Es erhält einen eigenen PR und die CVE-Details werden in den PR-Text aufgenommen.

Sicherheitsergebnisse vor dem Fortfahren melden:

Sicherheitsaudit: [N] Schwachstellen gefunden
  [KRITISCH] lodash 4.17.19: Prototype Pollution (CVE-2021-23337)
  [HOCH] axios 0.21.1: Server-Side Request Forgery (CVE-2021-3749)

Wenn keine Schwachstellen: „Sicherheitsaudit: sauber.“


Schritt 5: Changelogs abrufen

Für jedes Paket nacheinander Quellen versuchen. Bei der ersten, die Inhalt zurückgibt, anhalten.

Quelle 1: GitHub Releases API

Repo-URL aus der Registrierung abrufen:

# npm
curl -s "https://registry.npmjs.org/{PACKAGE}/latest" \
  | python3 -c "import sys,json; d=json.load(sys.stdin); r=d.get('repository',{}); print(r.get('url','') if isinstance(r,dict) else str(r))"

# pip
curl -s "https://pypi.org/pypi/{PACKAGE}/json" \
  | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('info',{}).get('home_page','') or d.get('info',{}).get('project_urls',{}).get('Source',''))"

Die letzten 5 Releases abrufen:

AUTH_HEADER=""
[ -n "$GITHUB_TOKEN" ] && AUTH_HEADER="-H \"Authorization: Bearer $GITHUB_TOKEN\""
curl -s $AUTH_HEADER \
  "https://api.github.com/repos/{OWNER}/{REPO}/releases?per_page=5" \
  | python3 -c "import sys,json; [print(json.dumps({'tag':r.get('tag_name',''),'body':r.get('body','')[:1500]})) for r in json.load(sys.stdin)]"

Nur Releases zwischen der aktuellen und der neuesten Version behalten.

Quelle 2: npm-Registry README (Fallback)

curl -s "https://registry.npmjs.org/{PACKAGE}" \
  | python3 -c "import sys,json; print(json.load(sys.stdin).get('readme','')[:3000])"

Quelle 3: PyPI-Beschreibung (letzter Ausweg für pip)

curl -s "https://pypi.org/pypi/{PACKAGE}/json" \
  | python3 -c "import sys,json; print(json.load(sys.stdin).get('info',{}).get('description','')[:2000])"

Wenn keine Quelle Inhalt zurückgibt: „Kein Changelog gefunden“ notieren und fortfahren.


Schritt 6: Zusammenfassung mit Gemini

Eine Anfrage pro Risikogruppe. Sicherheitsergebnisse für alle von CVE betroffenen Pakete einbeziehen:

cat > /tmp/deps-summary-request.json << 'ENDJSON'
{
  "system_instruction": {
    "parts": [{
      "text": "You are a developer writing a GitHub PR description for a dependency update. Given a list of packages being updated and their raw changelog content, write a concise PR body in Markdown. Rules: For each package, list only what changed between the OLD version and the NEW version. Use bullet points. Flag breaking changes with a BREAKING prefix. Flag CVE fixes with a SECURITY prefix and include the CVE ID. Keep each package section to 3-5 bullets maximum. If no changelog was found for a package, write 'No changelog available.' Do not use em dashes. Do not use these words: seamless, robust, leverage, transform, innovative. Output only the Markdown PR body, no commentary."
    }]
  },
  "contents": [{
    "parts": [{
      "text": "PACKAGES_AND_CHANGELOGS_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/deps-summary-request.json \
  | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['candidates'][0]['content']['parts'][0]['text'])"

Schritt 7: PRs erstellen

Ein PR pro nicht leerer Risikogruppe. Ein PR pro Paket für Major-Updates (einzelne Überprüfung erforderlich).

1. Branch erstellen:

BRANCH="deps/{RISK}-updates-$(date +%Y%m%d)"
git checkout -b "$BRANCH"

2. Paketdatei aktualisieren:

npm:

npm install {package}@{latest_version} --save-exact
# devDependencies:
npm install {package}@{latest_version} --save-dev --save-exact

pip:

python3 -c "
import re, sys
pkg, version, filename = sys.argv[1], sys.argv[2], sys.argv[3]
with open(filename) as f: content = f.read()
pattern = rf'^{re.escape(pkg)}[>=<!\s].*$'
new_content = re.sub(pattern, f'{pkg}=={version}', content, flags=re.MULTILINE|re.IGNORECASE)
if new_content == content: new_content = content + f'\n{pkg}=={version}'
open(filename, 'w').write(new_content)
" "{PACKAGE}" "{LATEST}" "requirements.txt"

Cargo:

# Cargo.toml-Versionsfeld für das Paket bearbeiten, dann:
cargo update {package}

Go:

go get {module}@{latest_version}
go mod tidy

Ruby:

bundle update {gem_name}

3. Committen:

git add -A
git commit -m "chore(deps): update {RISK} dependencies $(date +%Y-%m-%d)"

4. PR erstellen:

cat > /tmp/dep-pr-body-{RISK}.md << 'ENDMD'
PR_BODY_FROM_GEMINI
ENDMD

gh pr create \
  --title "chore(deps): update {RISK} dependencies" \
  --body-file /tmp/dep-pr-body-{RISK}.md \
  --label "dependencies" \
  --base main

Major-Updates erhalten das Label dependencies,breaking-change. CVE-behebende Updates erhalten das Label dependencies,security.

Nach jedem PR zu main zurückkehren: git checkout main


Schritt 8: Diagnosemodus

Auslöser: Wenn ein Paketinstallationsbefehl während der Ausführung fehlschlägt, den Diagnosemodus starten, anstatt anzuhalten.

Den Fehlertyp erkennen:

FehlermusterWahrscheinliche UrsacheVorgeschlagene Lösung
peer dep conflictInkompatibilität der Peer-AbhängigkeitenKonfliktpaar anzeigen, --legacy-peer-deps-Flag oder Downgrade vorschlagen
ERESOLVEnpm-Auflösungskonfliktnpm install --legacy-peer-deps nur für das betroffene Paket ausführen
version not foundVersion existiert nicht in der RegistrierungRegistrierung mit npm view {pkg} versions überprüfen
python requiresPython-VersionsinkompatibilitätErforderliche Python-Version notieren, Paket überspringen
cargo E0463Rust-Edition-InkompatibilitätZur manuellen Überprüfung kennzeichnen

Eine Diagnosezusammenfassung anzeigen:

Installation fehlgeschlagen für {package}: {Fehlertyp}
Wahrscheinliche Ursache: {Erklärung}
Vorgeschlagene Lösung: {spezifischer Befehl oder Aktion}
Verbleibende Pakete: Fortfahren mit {N} erfolgreichen Paketen.

Den gesamten Durchlauf nicht anhalten, wenn ein Paket fehlschlägt. Mit den erfolgreichen Paketen fortfahren.


Schritt 9: Ausgabeübersicht

## Dependency Update Zusammenfassung: [YYYY-MM-DD]

### Sicherheit
[KRITISCH] lodash: CVE-2021-23337 behoben in 4.17.21: PR #42
[HOCH] axios: CVE-2021-3749 behoben in 0.21.4: PR #42

| Risikostufe | Pakete | PR |
|-------------|--------|-----|
| Patch | lodash 4.17.19→4.17.21, axios 0.21.1→0.21.4 | #42 |
| Minor | express 4.17.1→4.18.2 | #43 |
| Major | react 17.0.2→18.2.0 | #44 |

PRs erstellt: 3

Pakete ohne Changelog: some-obscure-pkg (kein GitHub-Repo in der Registrierung)
Installationsfehler: keine

Nächste Aktion: Major-Update-PRs vor dem Mergen einzeln überprüfen.

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

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

Creates professionally designed B2B SaaS e-books in HTML + CSS, exported as print-ready PDF. 3–10 pages, 9 style presets, 11 page layout types. Trigger when user says "create an ebook", "design a lead magnet", "make a PDF guide", "build a gated content piece", "write a B2B ebook", "design a white paper", "create a nurture asset", or "make a PDF report".

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