Communitygithub.com

daily-news-caster

Ruft die neuesten Nachrichten ab, formatiert sie als Podcast-Skript in Markdown und erzeugt eine Audio-Datei. Einsetzbar, wenn der Benutzer aktuelle Nachrichten als Podcast hören möchte.

Was ist daily-news-caster?

Der Daily News Caster Skill ermöglicht es einem KI-Agenten, stets aktuelle Nachrichten zu beschaffen, diese in ein lebendiges, dialogbasiertes Podcast-Skript mit zwei Sprechern umzuwandeln und abschließend eine hörbare Audio-Datei zu generieren. Zuerst stellt der Skill sicher, dass die abhängigen Skills `news-aggregator-skill` und `tts` vorhanden sind. Dann wird das Skript `fetch_news.py` ausgeführt, um Nachrichten aus Quellen wie HackerNews oder GitHub zu laden. Aus diesen Rohdaten erstellt der Agent ein Markdown-Podcast-Skript im Dual-Host-Frage-und-Antwort-Stil, das sachlich und dennoch unterhaltsam ist. Anschließend wird das Skript Satz für Satz mit dem TTS-Skill vertont, wobei unterschiedliche Stimmen für die beiden Moderatoren verwendet werden können. Alle Sprachdateien werden mit ffmpeg zu einer einzigen Podcast-Audiodatei zusammengeführt. Das Ergebnis liefert sowohl das vollständige Markdown-Skript als auch die Audiodatei, sodass der Benutzer den Podcast lesend oder hörend konsumieren kann. Der Skill selbst enthält keinen ausführbaren Code, sondern orchestriert ausschließlich die Skripte der Abhängigkeiten.

Funktioniert mit✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/noizai/skills/tree/main/skills/daily-news-caster

In Ihrer bevorzugten KI fragen

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

Dokumentation

Daily News Caster Skill

Dieser Skill erlaubt es dem Agenten, Echtzeit-Nachrichten abzurufen, sie in ein gesprächiges Podcast-Skript zu überführen und eine Audio-Datei zu erstellen, die das Skript vorliest.

Arbeitsablauf

Wenn der Benutzer darum bittet, die neuesten Nachrichten zu holen und daraus einen Podcast zu machen, führe die folgenden Schritte strikt aus:

Schritt 1: Erforderliche Skills prüfen

Vergewissere dich, dass news-aggregator-skill und tts im Arbeitsbereich vorhanden sind (unter skills/ oder .cursor/skills/). Falls einer fehlt, informiere den Benutzer, welcher Skill nicht gefunden wurde, und bitte ihn, den Skill manuell zu installieren, bevor es weitergeht. Installiere Skills nicht automatisch.

Schritt 2: Neueste Nachrichten abrufen

Suche fetch_news.py im Skill-Verzeichnis von news-aggregator-skill (z. B. skills/news-aggregator-skill/scripts/fetch_news.py). Lies ggf. dessen SKILL.md, um die Nutzung zu verstehen.

Führe das Skript aus, um aktuelle Nachrichten zu holen. Du kannst eine Quelle angeben (z. B. hackernews, github, all) oder Schlüsselwörter basierend auf der Benutzeranfrage. Beispiel-Befehl:

python3 skills/news-aggregator-skill/scripts/fetch_news.py --source all --limit 10 --deep

Schritt 3: Podcast-Skript entwerfen (interner Schritt)

Lies die abgerufenen Nachrichten und formatiere die Informationen als Markdown-Podcast-Skript. Priorisiere unbedingt ein dialogbasiertes Format mit zwei Sprechern (zwei Personen) in dynamischem Frage-und-Antwort-Stil (z. B. Moderator A und Moderator B). Das Skript sollte:

  • Zweisprecher-dialogisch, aber prägnant: Schreibe einen ansprechenden Schlagabtausch zwischen zwei Moderatoren. Moderator A sollte tiefgründige, wertvolle Fragen stellen und das Gespräch lenken, während Moderator B informative, präzise Antworten gibt. Es soll sich wie ein kluger, schneller Q&A-Dialog anfühlen.
  • Keine Füllwörter: Vermeide unnötiges Beiwerk oder überlange Übergänge. Bleibe auf den Punkt (言简意赅), behalte aber alle wichtigen Informationen und Fakten.
  • Sprecher klar kennzeichnen: Beginne jede Zeile oder jeden Absatz mit dem Namen des Sprechers (z. B. Moderator A: oder Moderator B:).
  • Sprechtext klar halten: Vermeide komplexe URLs, rohe Markdown-Links oder schwer aussprechbare Zeichen im gesprochenen Text.

Speichere dieses Skript in einer lokalen Datei mit dem Namen podcast_script.md.

Beispiel für den Inhalt von podcast_script.md:

**Moderator A:** Herzlich willkommen zu unserer heutigen Nachrichtenrunde. Wir haben aufregende Tech-News für Sie. Fangen wir gleich an: Es gibt ein großes Update von [Firmenname]. Welche Kernauswirkungen hat die neue Veröffentlichung für die täglichen Nutzer?

**Moderator B:** Die wichtigste Erkenntnis ist, dass... [Kurze Antwort und Zusammenfassung von Nachricht 1]. Das ändert vollkommen, wie wir [Thema] angehen.

**Moderator A:** Faszinierend. Aber wirft dieser neue Ansatz nicht Sicherheitsbedenken auf, besonders angesichts der jüngsten Datenlecks?

**Moderator B:** Genau. Experten weisen darauf hin, dass... [Analyse oder Kontext einfügen].

**Moderator A:** Kommen wir zur Open-Source-Welt. Was ist heute auf GitHub angesagt, worauf Entwickler achten sollten?

**Moderator B:** Ein herausragendes Projekt ist... [Kurze Zusammenfassung von Nachricht 2].

**Moderator A:** Großartige Einblicke. Das war's für heute. Danke fürs Zuhören!

Schritt 4: Podcast-Audio Satz für Satz generieren

Um zu vermeiden, dass das gesamte Skript auf einmal an die API gesendet wird, musst du das Audio Satz für Satz (一人一句地生成) erzeugen und anschließend zusammenfügen.

Verwende tts.py aus dem lokalen tts-Skill (skills/tts/scripts/tts.py). Lies die SKILL.md des tts-Skills für die vollständige Nutzung und die Backend-Optionen.

1. Audio für jede Zeile generieren: Führe für jede Dialogzeile im Skript den speak-Befehl aus. Verwende die passende Stimme oder Referenzaudio für den jeweiligen Moderator. Falls der Benutzer Referenz-Audiodateien für die beiden Rollen bereitgestellt hat, nutze sie mit dem --ref-audio-Flag (erfordert noiz-Backend und NOIZ_API_KEY). Ohne API-Key stehen Gast-Modus-Stimmen zur Verfügung (siehe tts SKILL.md für die Stimmenliste).

python3 skills/tts/scripts/tts.py -t "Herzlich willkommen zu unserer heutigen Nachrichtenrunde..." --ref-audio moderator_A.wav -o zeile_01.wav

python3 skills/tts/scripts/tts.py -t "Die wichtigste Erkenntnis ist, dass..." --ref-audio moderator_B.wav -o zeile_02.wav

2. Audio-Dateien zusammenfügen: Erstelle eine Textdatei (z. B. list.txt), die alle generierten Audiodateien in der richtigen Reihenfolge auflistet:

file 'zeile_01.wav'
file 'zeile_02.wav'

Verwende dann ffmpeg, um sie zu einer einzigen Podcast-Audiodatei zu verschmelzen:

ffmpeg -f concat -safe 0 -i list.txt -c copy podcast_ausgabe.wav

Schritt 5: Endergebnis präsentieren

Nachdem das gesamte Audio erzeugt und zusammengeführt wurde, präsentiere die Ergebnisse dem Benutzer. Du MUSST beide Inhalte bereitstellen:

  • Gib das vollständig ausgearbeitete Markdown-Podcast-Skript in den Chat aus, damit der Benutzer es lesen kann.
  • Gib den Pfad zur finalen podcast_ausgabe.wav-Datei an, damit der Benutzer sie anhören kann.
  • Fasse kurz die Schlagzeilen zusammen, die im Podcast enthalten waren.

Sicherheit & Datenweitergabe

Dieser Skill besteht nur aus Anweisungen – er enthält selbst keinen ausführbaren Code. Zur Laufzeit orchestriert er Skripte von zwei abhängigen Skills:

  • Ausgeführte Skripte: news-aggregator-skill/scripts/fetch_news.py (holt Nachrichten von öffentlichen Quellen) und tts/scripts/tts.py (erzeugt Sprachaudio). Beide müssen lokal vorhanden sein, bevor dieser Skill läuft; lies ihren Code und ihre SKILL.md für Details zu ihrem Netzwerkverhalten und ihren Zugangsdatenanforderungen.
  • Zugangsdaten: Dieser Skill benötigt selbst keine API-Schlüssel oder Umgebungsvariablen. Die Abhängigkeit tts benötigt möglicherweise NOIZ_API_KEY für Voice-Cloning-Funktionen (noiz-Backend); ohne ihn funktionieren Gast-Modus-Stimmen sofort. Siehe SKILL.md des tts-Skills für Details.
  • Netzwerkzugriff: Alle Netzwerkaufrufe werden von den abhängigen Skills durchgeführt, nicht von den Anweisungen dieses Skills. Der News-Aggregator ruft Daten von öffentlichen Nachrichtenquellen ab; der tts-Skill kontaktiert noiz.ai nur, wenn das noiz-Backend verwendet wird.
  • Geschriebene Dateien: podcast_script.md, zeile_*.wav (temporäres Satz-Audio), list.txt (ffmpeg-Zusammenführungsliste), podcast_ausgabe.wav (endgültige Ausgabe). Alle werden in das aktuelle Arbeitsverzeichnis geschrieben.
  • Kein dauerhafter Zustand: Dieser Skill schreibt keine Konfigurationsdateien, speichert keine Zugangsdaten und ändert keine anderen Skills.

Individual skills in this repo

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

Verwandte Skills