Communitygithub.com

gooseworks-ai/goose-skills

Finde Twitter/X-Influencer, um ein Produkt oder eine Marke zu bewerben. Verwende dies, wenn gebeten wird, Influencer zu finden, Twitter-Konten für Partnerschaften zu entdecken, Ersteller in einer Nische zu identifizieren oder eine Liste für Influencer-Öffentlichkeitsarbeit zu erstellen.

Was ist goose-skills?

Diese Fähigkeit automatisiert die Entdeckung, Bewertung und Kontaktanreicherung von Twitter/X-Influencern für Produkt- oder Markenwerbung. Sie ist für KI-Agenten wie Goose konzipiert, die in terminalfreien Clients mit MCP-Tools oder in lokalen Terminalumgebungen mit GooseWorks-Anmeldeinformationen ausgeführt werden. Der Workflow analysiert die Benutzeranfrage, löst das Unternehmen über Brand.dev auf und führt drei parallele Suchstrategien aus: Exa-Suche nach kuratierten Influencer-Listen, Exa-Ähnlichkeitssuche und Fiber-Suche nach LinkedIn-lastigen Profilen. Anschließend extrahiert und dedupliziert er Twitter-Handles aus Texten, ruft detaillierte Profile und Tweets über Scrape Creators parallel ab, wendet harte Filter (z. B. Follower-Anzahl, Relevanz der Biografie) an und vergibt eine gewichtete Punktzahl basierend auf Relevanz, Engagement-Rate und Inhaltsqualität. Die endgültige Liste wird mit E-Mail-Adressen und LinkedIn-URLs angereichert, die aus Fiber- und Exa-Ergebnissen stammen. Der Hauptvorteil besteht darin, dass manuelle Arbeit überflüssig wird, indem eine umfassende Pipeline von der Anfrage bis zur fertigen Liste erstellt wird, einschließlich Parallelisierung von API-Aufrufen zur Optimierung der Geschwindigkeit.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/gooseworks-ai/goose-skills/tree/HEAD/skills/social/capabilities/find-twitter-influencers

In Ihrer bevorzugten KI fragen

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

Dokumentation

Finde Twitter-Influencer

Einrichtung

Wähle die verfügbare Laufzeitumgebung, bevor du Anmeldeinformationen einrichtest:

  • Terminalfreier Client: Überspringe die Shell-Befehle unten. Verwende verbundene MCP-Tools. Für ScrapeCreators-Operationen lies scrapecreators-api und bevorzuge call_data_provider. Für einen anderen Anbieter-Schritt ohne verbundenes Tool verwende eine gleichwertige integrierte Methode des öffentlichen Webs, wenn sie den Workflow erhält, oder melde den Schritt klar als nicht verfügbar.
  • Lokales Terminal: Verwende die GooseWorks-Anmeldeinformationen und die Proxy-Befehle unten.

Lies deine Anmeldeinformationen aus ~/.gooseworks/credentials.json:

export GOOSEWORKS_API_KEY=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json'))['api_key'])")
export GOOSEWORKS_API_BASE=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json')).get('api_base','https://api.gooseworks.ai'))")

Wenn ~/.gooseworks/credentials.json nicht existiert, sage dem Benutzer: npx gooseworks login

Die lokalen Proxy-Endpunkte verwenden Bearer-Authentifizierung: -H "Authorization: Bearer $GOOSEWORKS_API_KEY". Die Beschreibungen der ScrapeCreators-Operationen bleiben in beiden Laufzeitumgebungen umgebungsneutral.

Entdecke, bewerte und reichere Twitter/X-Influencer an, die für ein Unternehmen, ein Produkt oder eine Nische relevant sind. Liefert eine sortierte Liste mit Engagement-Metriken, Relevanzbegründung und Kontaktinformationen.

Workflow

1. Anfrage parsen

Extrahiere aus der Benutzeranfrage:

  • Unternehmensname oder -domäne (erforderlich) — die Marke, die Influencer sucht
  • Nische/Vertikale (optional) — z. B. "Fintech Twitter", "AI/ML Ersteller", "DTC Beauty"
  • Größenpräferenz (optional) — mittel (10K-100K), Makro (100K+) oder gemischt (Standard: 10K+ Minimum)
  • Maximale Ergebnisse (optional, Standard 20 — hoch- oder herunterskalieren, wenn der Benutzer danach fragt)

2. Unternehmen auflösen

Verwende Brand.dev, um Domäne, Branche, Beschreibung, Zielgruppe und Keywords zu erhalten. Dieser Kontext steuert alle nachfolgenden Suchvorgänge.

curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"brand-dev","path":"/v1/brand/retrieve-by-name","query":{"name":"Acme","Corp":""}}'

Wenn eine Domäne direkt angegeben wird:

curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"brand-dev","path":"/v1/brand/retrieve","query":{"domain":"acme.com"}}'

Erstelle aus dem Ergebnis einen Unternehmenskontext-String: Unternehmensname, Domäne, Branche, Beschreibung und Zielgruppen-Keywords. Beispiel: "Acme Corp acme.com developer tools API platform engineering teams". Verwende diesen in allen Suchabfragen.

3. Kandidaten entdecken

Führe drei Strategien parallel aus, um die Abdeckung zu maximieren:

Strategie A — Exa-Suche nach kuratierten Influencer-Listen (primär, höchste Signalstärke):

WICHTIG: x.com- und twitter.com-Profile befinden sich NICHT im Exa-Suchindex, daher liefert includeDomains: ["x.com"] null Twitter-Ergebnisse. Suche stattdessen nach kuratierten Listenseiten, Blogbeiträgen und Artikeln über Influencer in der Nische. Verwende contents.text, um den Seiteninhalt zu erhalten, damit du Twitter-Handles daraus extrahieren kannst.

Führe 5+ Abfragevarianten aus, um die Abdeckung zu maximieren. Beziehe die Kernnische UND angrenzende Nischen mit ein — viele Influencer überspannen verwandte Themen. Jede Abfrage gibt 10 Ergebnisse mit Textinhalt zurück:

# Abfrage 1: Kernnische — kuratierte Listen
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"exa","path":"/search"}'
  "query": "beste {nische} Twitter-Accounts zum Folgen",
  "numResults": 10,
  "contents": {"text": {"maxCharacters": 5000}}
}'

# Abfrage 2: Kernnische — andere Formulierung
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"exa","path":"/search"}'
  "query": "top {branche} Influencer auf X Twitter zum Folgen",
  "numResults": 10,
  "contents": {"text": {"maxCharacters": 5000}}
}'

# Abfrage 3: Kernnische — Vordenker
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"exa","path":"/search"}'
  "query": "{nische} Vordenker Ersteller Twitter-Handles",
  "numResults": 10,
  "contents": {"text": {"maxCharacters": 5000}}
}'

# Abfrage 4: Angrenzende Nische 1 (z. B. wenn Nische "Identitätsverifizierung", versuche "Betrugsprävention")
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"exa","path":"/search"}'
  "query": "top {angrenzende_nische_1} Influencer Twitter-Accounts zum Folgen",
  "numResults": 10,
  "contents": {"text": {"maxCharacters": 5000}}
}'

# Abfrage 5: Angrenzende Nische 2 (z. B. "Cybersicherheit", "Regtech", "Biometrie")
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"exa","path":"/search"}'
  "query": "beste {angrenzende_nische_2} Experten Ersteller auf X Twitter",
  "numResults": 10,
  "contents": {"text": {"maxCharacters": 5000}}
}'

Auswahl angrenzender Nischen: Identifiziere aus dem Unternehmenskontext (Schritt 2) 2-3 verwandte Vertikalen. Beispiele:

  • Identitätsverifizierung → Betrugsprävention, Cybersicherheit, Regtech, Biometrie
  • Fintech → Banking, Zahlungen, DeFi, Finanzregulierung
  • KI/ML → Datenwissenschaft, MLOps, Entwickler-Tools
  • DTC Beauty → Hautpflege, Wellness, Lifestyle, Clean Beauty

Diese Abfragen geben Listenseiten zurück (z. B. "Top 60 Fintech-Influencer", "FinTwit-Accounts zum Folgen"), deren Textinhalt Twitter-Handles, Biografien und Follower-Zahlen enthält. Parse diese in Schritt 4.

Strategie B — Exa findSimilar (erweitere von starken Listenfunden):

Nachdem Strategie A Ergebnisse geliefert hat, wähle 1-2 der besten kuratierten Listen-URLs aus und finde ähnliche Seiten:

curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"exa","path":"/findSimilar"}'
  "url": "https://example.com/top-fintech-twitter-influencers",
  "numResults": 5,
  "contents": {"text": {"maxCharacters": 5000}}
}'

Dies deckt zusätzliche kuratierte Listen auf, die die Keyword-Suche möglicherweise übersehen hat. Verwende KEINE Twitter/X-Profil-URLs für findSimilar — sie befinden sich nicht im Exa-Index und geben leere Ergebnisse zurück.

Strategie C — Fiber natural-language-search (erfasse LinkedIn-lastige Fachleute):

Einige Influencer sind auf LinkedIn besser indexiert, haben aber aktive Twitter-Konten. Fiber kann diese aufdecken. Führe 2-3 Abfragen zur Kernnische und zu angrenzenden Themen durch:

# Kernnische
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"fiber","path":"/v1/natural-language-search/profiles"}'
  "query": "{nische} Vordenker Inhaltsersteller mit Twitter-Präsenz bei {branche} Unternehmen",
  "pageSize": 20
}'

# Angrenzende Nische — breitere Abdeckung
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"fiber","path":"/v1/natural-language-search/profiles"}'
  "query": "{angrenzende_nische} Influencer Experte mit großer Social-Media-Gefolgschaft",
  "pageSize": 20
}'

Überprüfe Fiber-Ergebnisse mit Twitter in Schritt 5 — behalte nur Personen mit aktiven Twitter-Konten. Extrahiere auch LinkedIn-URLs aus Fiber-Ergebnissen — diese sind entscheidend für die Kontaktanreicherung in Schritt 7.

4. Benutzernamen extrahieren und deduplizieren

Parse aus dem Textinhalt von Exa-Listenseiten Twitter-Handles mit mehreren Mustern:

  • @username-Erwähnungen im Artikeltext
  • URLs, die auf x.com/benutzername oder twitter.com/benutzername verweisen
  • Entferne nachfolgende URL-Pfade (z. B. /status/123, /followers) — behalte nur Basis-Profil-Benutzernamen
  • Verwerfe Nicht-Profil-Muster (Suchseiten, Hashtag-Seiten, x.com/home, x.com/search)
  • Dedupliziere nach Benutzernamen (Groß-/Kleinschreibung ignorieren)
  • Markiere und entferne offensichtliche Marken-/Unternehmenskonten (z. B. @stripe, @shopify) — konzentriere dich auf einzelne Ersteller

Extrahiere aus Fiber-Ergebnissen alle Twitter/X-URLs aus Sozialprofilen. Füge neue Handles zum Kandidatenpool hinzu.

Extrahiere auch LinkedIn-URLs, die in Listenseiten zusammen mit Twitter-Handles erwähnt werden — speichere diese für die Kontaktanreicherung in Schritt 7.

Ziel: ~100-150 eindeutige Handles nach der Deduplizierung. Kuratierte Listenseiten erwähnen normalerweise 20-50 Handles pro Seite, daher liefern 5+ gute Listenergebnisse über Kern- und angrenzende Nischen einen großen Kandidatenpool.

5. Twitter-Profile + Engagement abrufen

Verwende Scrape Creators, um strukturierte Twitter-Daten abzurufen. Dies ist ein zweistufiger Prozess: Rufe Profile für ALLE Kandidaten ab (günstig, 1 Credit pro Stück), dann rufe Tweets für die besten ~2x die Zielergebnisanzahl nach Profilfilterung ab (z. B. ~40, wenn 20 Ergebnisse angestrebt werden).

Schritt 1 — Profile für alle Kandidaten abrufen:

provider: scrapecreators
method: GET
path: /v1/twitter/profile
query:
  handle: examplehandle

Gibt verschachteltes JSON zurück. Wichtige Felder befinden sich in den Objekten core und legacy:

  • core.screen_name, core.name — Handle und Anzeigename
  • legacy.description — Biografie-Text
  • legacy.followers_count, legacy.friends_count, legacy.statuses_count — Zählungen
  • legacy.location, legacy.created_at — Standort und Kontos alter
  • is_blue_verified — Verifizierungsstatus

Die Profil-URL ist https://x.com/{screen_name}.

WICHTIG — Profilabrufe parallelisieren: Rufe Profile NICHT nacheinander in einer sequenziellen Schleife ab. Starte stattdessen ALLE Profilabrufanfragen parallel (mehrere Tool-Aufrufe in einer einzigen Nachricht). Dies reduziert die Gesamtwartezeit drastisch von Minuten auf Sekunden. Gruppiere sie ggf. in Batches von 10-15 parallelen Aufrufen.

Wende harte Filter an, um den Pool einzugrenzen:

  • Weniger als 10.000 Follower (Standardminimum — anpassbar, wenn der Benutzer einen anderen Schwellenwert angibt)
  • Leere Biografie oder Biografie völlig irrelevant zur Nische
  • Suspendierte oder nicht gefundene Konten (API gibt Fehler zurück)
  • Biografie zeigt, dass sie X verlassen haben (z. B. "finde mich auf Mastodon/Bluesky", "diese Seite aufgegeben")
  • Zu breite/allgemeine Konten — Entferne Konten, deren Inhalt nicht spezifisch für die Zielnische relevant ist. Beispielsweise ein allgemeines "Tech-Evangelist"-Konto mit 500K+ Followern, das selten über die Nische twitert, ist weniger wertvoll als ein Spezialist mit 20K Followern. Wenn die Biografie und die letzten Tweets eines Kontos keine spezifische Verbindung zur Zielnische oder angrenzenden Nischen zeigen, schließe es unabhängig von der Follower-Anzahl aus

Schritt 2 — Tweets für die besten Kandidaten abrufen (nach Profilfilterung — rufe ~2x die Zielergebnisanzahl ab, um Filterung zu ermöglichen, z. B. ~40, wenn 20 Ergebnisse angestrebt werden):

provider: scrapecreators
method: GET
path: /v1/twitter/user-tweets
query:
  handle: examplehandle

Gibt ein Array von Tweet-Objekten zurück. WICHTIG — Die Daten sind in jedem Tweet-Objekt verschachtelt:

  • legacy.full_text — Tweet-Text
  • legacy.favorite_count — Likes (Ganzzahl)
  • legacy.retweet_count — Retweets (Ganzzahl)
  • legacy.reply_count — Antworten (Ganzzahl)
  • legacy.created_at — Zeitstempel
  • views.count — Aufrufanzahl (kann fehlen)
  • url — Direkter Link zum Tweet (Feld auf oberster Ebene)

Hinweis: favorite_count, retweet_count, reply_count befinden sich im Objekt legacy, NICHT auf der obersten Ebene jedes Tweets.

WICHTIG — Tweet-Abrufe parallelisieren: Genau wie bei Profilabrufen starte ALLE Tweet-Abrufanfragen parallel (mehrere Tool-Aufrufe in einer einzigen Nachricht). Verwende KEINE sequenziellen for-Schleifen. Dies ist die größte einzelne Geschwindigkeitsoptimierung.

Identifiziere für jeden Kandidaten die Top 3 Tweets nach Engagement (Likes + Retweets + Antworten). Speichere den besten mit seiner URL für die Aufnahme in die finale Ergebnistabelle.

Berechne aus den Tweet-Daten:

  • Durchschnittliche Likes pro Tweet
  • Durchschnittliche Retweets pro Tweet
  • Durchschnittliche Antworten pro Tweet
  • Engagement-Rate: (durchschn. Likes + durchschn. Retweets + durchschn. Antworten) / Follower * 100
  • Beitragshäufigkeit: abgeleitet aus created_at-Daten
  • Inhaltsthemen: über welche Themen sie am meisten twitern (aus full_text)

Zusätzliche harte Filter (angewendet nach Tweet-Abruf):

  • Keine Tweets in den letzten 30 Tagen (inaktiv)
  • Geschützte/private Konten

Überspringe reine Antwort-Konten (>80% der Tweets sind Antworten an andere mit minimalem Engagement).

6. Bewerten & Sortieren

Wende ein zusammengesetztes Bewertungsmodell an:

FaktorGewichtSignal
Relevanz40%Biografie-Keywords, Inhaltsthemen, Zielgruppenüberschneidung mit Zielunternehmen
Engagement-Rate25%Höher ist besser; Mikro-Influencer übertreffen hier oft Makro-Influencer
Follower-Anzahl15%Log-skaliert — abnehmender Nutzen über 100K
Inhaltsqualität10%Originalinhalte vs. Retweets, Thread-Tiefe, Mediennutzung
Zielgruppenausrichtung10%Passen ihre Follower zur Zielgruppe des Unternehmens? Abgeleitet aus Biografie + Inhaltsthemen

Bewertungsrichtlinien:

  • Relevanz: Vergleiche Biografie und aktuelle Tweet-Themen mit dem Unternehmenskontext-String aus Schritt 2. Exakte Nischenübereinstimmung = hohe Punktzahl. Angrenzende Nische = mittel. Generisch/unzusammenhängend = niedrig.
  • Engagement-Rate-Benchmarks: >3% ausgezeichnet, 1-3% gut, <1% unterdurchschnittlich (variiert nach Follower-Stufe)
  • Inhaltsqualität: Bestrafe Konten, die >50% Retweets sind. Belohne originale Threads, Einblicke und medienreiche Beiträge.

Sortiere alle Kandidaten nach der zusammengesetzten Punktzahl. Wähle die Top N (Standard 20) für die endgültige Liste aus. 20 ist ein guter Standard — genug, um dem Benutzer echte Optionen zu geben, ohne ihn zu überfordern. Skaliere nach oben, wenn der Benutzer mehr verlangt, aber schließe immer mindestens die Top 20 ein, wenn so viele qualifiziert sind.

7. Kontakte anreichern

Finde für die endgültige Liste E-Mail-Adressen und LinkedIn-Profile. Die wichtigste Erkenntnis: Entdecke zuerst LinkedIn-URLs — sie verbessern die E-Mail-Erkennung erheblich. Am effektivsten ist es, LinkedIn-URLs aus Fiber-Ergebnissen (Schritt 3) und Listenseiten (Schritt 4) zu speichern. Wenn ein Kandidat keine gespeicherte LinkedIn-URL hat:

curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"fiber","path":"/v1/enrich/profiles"}'
  "linkedin_url": "https://linkedin.com/in/username-not-available-yet",
  "fields": ["linkedin_url", "work_email", "personal_email"]
}'

# Oder namentlich suchen, wenn LinkedIn-URL unbekannt ist: falsch, benutze stattdessen die obige Methode. Wenn keine Datenbank-LinkedIn-URL vorhanden ist, suche namentlich:
curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \
  -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"api":"fiber","path":"/v1/enrich/search"}'
  "name": "Vorname Nachname",
  "current_company": "Firmenname aus Schritt 2",
  "title": "Rollen-Schlagwörter aus Biografie"
}'

Ziel: Finde mindestens eine Kontaktmethode (E-Mail oder LinkedIn) für jeden der Top 20. Gib für jeden Kandidaten sowohl Twitter-Profil als auch die gefundene Kontaktmethode aus.

8. Ergebnisse präsentieren

Gib eine formatierte Tabelle mit diesen Spalten aus:

| Rang | Handle | Name | Follower | Engagement-Rate | Relevanz | Top-Tweet | Kontakt |

Zeilen-Beispiel: | 1 | @techcreator | Tech Creator | 45,2K | 4,8% | Identität/Fintech | Link | linkedin.com/in/techcreator |

Regeln:

  • Sortiere nach zusammengesetzter Punktzahl (absteigend)
  • Zeige Follower-Zahlen formatiert mit K-Suffix (z. B. 45,2K)
  • Zeige Engagement-Rate als Prozentsatz mit einer Dezimalstelle
  • Spalte Relevanz: Kurze Beschreibung, warum dieser Influencer für das Unternehmen relevant ist (basierend auf Biografie + Inhalt)
  • Top-Tweet: Verwende den Tweet mit dem höchsten Engagement, den du in Schritt 5 gefunden hast. Verlinke zur Tweet-URL
  • Kontakt: Zeige E-Mail-Adresse, LinkedIn-URL oder "Nicht gefunden"

Füge ein Analyseparat nach der Tabelle hinzu, das enthält:

  • Einblicke: 1-2 Beobachtungen über die Liste (z. B. "Mikro-Influencer in der Nische übertreffen Makro-Influencer beim Engagement um das Dreifache", "3 der Top 5 sind auf Cybersicherheit, nicht nur auf Identitätsverifizierung spezialisiert")
  • Nächste Schritte: Wie man diese Liste für Outreach-Aktionen verwendet (z. B. Priorisiere die Top 5, maßgeschneiderte Pitch-Ideen, nutze LinkedIn für Einführungen)

Optimierung: Terminal vs. Terminalfrei

  • Terminalfrei (Claude, Cursor, Copilot): Die obigen curl-Befehle des Shell-Abschnitts sind nicht erforderlich, da die API über MCP-Tools verbunden ist. Anstatt in der Shell herumzuhantieren, rufe MCP-Tools auf. Für Schritt 5 verwende call_data_provider mit dem scrapecreats-Anbieter und übergebe das Objekt als JSON-Argument (z. B. {"method": "GET", "path": "/v1/twitter/profile", "query": {"handle": "example"}}). Mache dasselbe für brand-dev-, exa- und fiber-Tools. Die Ergebnisse sind identisch; nur die Client-Seite unterscheidet sich.

  • Lokales Terminal: Führe die curl-Befehle wie oben gezeigt aus und verwende Umgebungsvariablen aus Schritt 1. Analysiere Ausgaben und erstelle Abfragestrings selbst. Verwende jq, um JSON zu parsen, und Shell-Schleifen (bash for/in), um Handles zu durchlaufen, wenn du sie in der Shell testest. Parallelisierung ist in der Shell knifflig; für eine echte agentenbasierte Implementierung sollte der Agent mehrere Tool-Aufrufe in einer einzigen Runde ausgeben, anstatt auf die Antwort jedes Abfragenaufrufs zu warten.

Individual skills in this repo

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

gooseworks-ai/goose-skills

Burned-in captions for a finished vertical video, three kinds. transcribe.py gets word timings from the video's own audio through the GooseWorks proxy (fal Whisper, bills the Ads agent, cents); captions.py burns one to three words at a time with Pillow + ffmpeg (no libass needed), either pinned to a split-screen seam (plate 25% above / 75% below) or at a fixed height, in a plate, outline or one-word serif style, with an optional red hook card; plates.py burns per-beat caption blocks (black, one union silhouette, placed in the emptiest band) for formats with no voice. The last caption (the CTA) holds to the final frame. Use as the last step of any video ad.

gooseworks-ai/goose-skills

Assemble a cartoon / animated / hand-crafted music-video ad from a config — a sung song carries the whole narrative while N per-bar i2v clips (one recurring animated character, one look pack) are each cut to their BAR window from librosa beat-tracking and hard-concatenated on the bar, VEED-whisper white bold-sans captions in the BOTTOM third (Alignment 2, above the logo bug, no pill) burned from the song's word timings re-spelled against the locked lyrics, a persistent brand logo bug held over the body (suppressed on the end card), and closed on a solid-brand-color PIL end card with the song still playing under it — never AI-rendered text. This is the FREE deterministic assembly stage (cut-to-bar + hard concat + logo bug + captions + end card + song mux); the song, character, keyframes, and clips come from create-music-elevenlabs / create-image-fal / create-video-fal. Use for the cartoon-music-video format.

gooseworks-ai/goose-skills

Assemble a cinematic live-action-style music-video ad from a config — an original sung anthem carries the whole narrative while N 35mm-film-look i2v clips are each cut to their lyric window and hard-concatenated on the beat as a 3-act arc, the anthem muxed at loudnorm I=-14, cinematic lower-third serif captions built from the song's OWN word timings (never Whisper) with the hook line landing on the chorus drop, and closed on a brand end card composited from the real asset — never AI-rendered text. This is the FREE deterministic assembly stage (cut-to-window + hard concat + anthem mux + captions + end card); the anthem, keyframes, and clips come from create-music-elevenlabs / create-image-gpt-image-fal / create-video-fal. Use for the cinematic-music-video format.

gooseworks-ai/goose-skills

Assemble an editorial-motion podcast-clip ad from a config — a real clipped podcast MP3 carries the narrative while N flat limited-palette editorial-illustration keyframes (one look pack) are animated NOT by generative i2v but by DETERMINISTIC ffmpeg ken-burns (zoompan) + hard cuts (no crossfades, which expose geometric drift), each beat snapped to its spoken line, the real audio muxed, Whisper-driven captions burned only mid-sentence, and closed on a PIL brand end card — never AI-rendered text. This is the FREE deterministic assembly stage (ffmpeg ken-burns + hard concat + audio mux + captions + end card); the real audio is clipped from source and the keyframes come from create-image-fal. Use for the editorial-motion-podcast format.

gooseworks-ai/goose-skills

Analyze the message match between your ads and landing pages. Checks if the promise in the ad copy carries through to the landing page headline, body, and CTA. Flags disconnects that kill conversion rates. Works with Google, Meta, and LinkedIn ads.

gooseworks-ai/goose-skills

Generate a single 4-15s vertical video clip with ByteDance Seedance 2.0 reference-to-video via fal.ai. Multi-image reference (avatar + product + setting), native lip-synced VO + ambient audio (generate-audio on by default), internal multi-cut handling within one render. Routes through the GooseWorks FAL proxy (bills the Ads agent). The default clip atom for AI-creator UGC ads built on the NB2 + Seedance architecture. Validated on beauty-by-earth/video-01.

gooseworks-ai/goose-skills

Mandatory pre-publish review gate for a UGC video render. Transcribes the finished render's AUDIO with Whisper and word-diffs it against the approved spoken script, then gates set_final_render — blocking a render whose generated audio mis-voices a word (e.g. the approved "human-vetted" spoken as "human witted"), drops an approved phrase, or comes back silent. Runnable, gating counterpart to content-goose's review-transcript-integrity atom. Every ugc-video-formats recipe runs this after render and BEFORE set_final_render.

gooseworks-ai/goose-skills

Render pixel-accurate Apple Notes (iPhone, light mode) screenshot mockups from a JSON note spec. Outputs HTML + PNG at the iPhone 16/15 Pro native 1180×2556. Supports paragraphs, images, checklists, dividers, autocorrect underline, smart quotes, and an optional iOS keyboard chrome overlay used by the parent video-ad molecule.

gooseworks-ai/goose-skills

Extract competitor and customer intelligence from any company's landing page HTML. Discovers tech stack, analytics tools, ad pixels, customer logos, SEO metadata, CTAs, hidden elements, and more. No API keys required.

gooseworks-ai/goose-skills

Find speakers, hosts, and guest profiles at conferences and events on Luma. Two modes - free direct scrape for hosts, or Apify-powered search for full guest profiles with LinkedIn/Twitter/bio.

Verwandte Skills