Communitygithub.com

Daily News Caster

Obtiene las últimas noticias usando news-aggregator-skill, las formatea como guion de podcast en Markdown y genera un archivo de audio mediante la habilidad tts. Útil cuando el usuario pide las noticias del día y que se las lean como un podcast.

¿Qué es Daily News Caster?

Esta habilidad permite al agente reunir noticias en tiempo real, estructurarlas en un guion conversacional tipo podcast y generar un archivo de audio. Es ideal para desarrolladores y usuarios que quieren consumir noticias tecnológicas de forma auditiva y dinámica. Funciona sobre plataformas compatibles con skills de agente (como Claude Code, Cursor, Codex). El flujo de trabajo es estrictamente secuencial: primero verifica que las skills dependientes `news-aggregator-skill` y `tts` estén presentes en el espacio de trabajo; luego ejecuta `fetch_news.py` para obtener las noticias; a continuación redacta internamente un guion en Markdown con un formato de dos anfitriones en estilo preguntas-respuestas; después genera el audio frase por frase (una frase a la vez) usando `tts.py` y las concatena con ffmpeg; finalmente presenta tanto el guion como el archivo de audio final. La skill no ejecuta código propio, sino que orquesta scripts de las skills dependientes, por lo que no requiere claves API directas, aunque `tts` puede necesitar `NOIZ_API_KEY` para clonación de voz. Escribe archivos temporales en el directorio de trabajo actual y no mantiene estado persistente.

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Habilidad Daily News Caster

Esta habilidad permite al agente obtener noticias en tiempo real, organizarlas en un guion de podcast conversacional y generar un archivo de audio que lea el guion en voz alta.

Instrucciones de flujo de trabajo

Cuando el usuario pida obtener las últimas noticias y crear un podcast a partir de ellas, sigue estrictamente estos pasos:

Paso 1: Asegurar que las habilidades requeridas estén presentes

Verifica que news-aggregator-skill y tts existan en el espacio de trabajo (bajo skills/ o .cursor/skills/). Si falta alguna, informa al usuario cuál(es) no se encontraron y pídele que las instale manualmente antes de continuar. NO intentes instalar habilidades automáticamente.

Paso 2: Obtener las últimas noticias

Localiza fetch_news.py en el directorio de la habilidad news-aggregator-skill (ej., skills/news-aggregator-skill/scripts/fetch_news.py). Lee su SKILL.md para entender su uso si es necesario.

Ejecuta el script para obtener noticias en tiempo real. Puedes especificar una fuente (ej., hackernews, github, all) o palabras clave según la solicitud del usuario. Ejemplo de comando:

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

Paso 3: Redactar el guion del podcast (paso interno)

Lee los datos de noticias obtenidos y reescribe la información en un guion de podcast en Markdown. Fundamentalmente, prioriza un formato conversacional de dos anfitriones (dos personas) (ej., Anfitrión A y Anfitrión B) en un estilo dinámico de preguntas y respuestas. El guion debe ser:

  • Conversacional de dos anfitriones pero conciso: Redacta un intercambio atractivo entre dos anfitriones. El Anfitrión A debe hacer preguntas perspicaces y de alto valor para guiar la conversación, y el Anfitrión B debe proporcionar respuestas informativas y concisas. Debe sentirse como un diálogo inteligente y rápido de preguntas y respuestas.
  • Sin relleno: No incluyas relleno innecesario ni transiciones demasiado largas. Mantén la información al grano (言简意赅) conservando todos los datos y hechos críticos.
  • Oradores claramente etiquetados: Comienza cada línea o párrafo con el nombre del orador (ej., Anfitrión A: o Anfitrión B:).
  • Texto claro para el habla: Evita URLs complejas, enlaces Markdown sin procesar o caracteres impronunciables en el texto hablado.

Guarda este guion en un archivo local llamado podcast_script.md.

Ejemplo de contenido de podcast_script.md:

**Anfitrión A:** Bienvenidos al resumen de noticias de hoy. Tenemos actualizaciones tecnológicas emocionantes. Para empezar, hay una gran novedad de [Nombre de la Empresa]. ¿Cuáles son las implicaciones principales de su nuevo lanzamiento para los usuarios cotidianos?

**Anfitrión B:** La conclusión principal es que... [Insertar respuesta concisa y resumen de la Noticia 1]. Esto cambia completamente cómo abordamos [Tema].

**Anfitrión A:** Eso es fascinante. Pero, ¿este nuevo enfoque plantea preocupaciones de seguridad, especialmente dado los recientes incidentes de datos?

**Anfitrión B:** Exactamente. Los expertos señalan que... [Insertar análisis o contexto].

**Anfitrión A:** Pasando al mundo del código abierto, ¿qué está trending en GitHub hoy que los desarrolladores deberían tener en cuenta?

**Anfitrión B:** Un proyecto destacado es... [Insertar resumen conciso de la Noticia 2].

**Anfitrión A:** Grandes ideas. Eso es todo por la actualización rápida de hoy. ¡Gracias por sintonizarnos!

Paso 4: Generar el audio del podcast línea por línea

Para evitar enviar todo el guion a la API de una sola vez, debes generar el audio frase por frase (一人一句地生成) y luego concatenarlas.

Usa tts.py de la habilidad tts local (skills/tts/scripts/tts.py). Lee el SKILL.md de la habilidad tts para conocer el uso completo y las opciones de backend.

1. Generar audio para cada línea: Por cada línea de diálogo en el guion, ejecuta el comando speak. Usa la voz o el audio de referencia adecuado para el anfitrión correspondiente. Si el usuario proporcionó archivos de audio de referencia para los dos roles, úsalos mediante la bandera --ref-audio (requiere backend noiz y NOIZ_API_KEY). Sin una clave API, están disponibles las voces en modo invitado (consulta el SKILL.md de tts para la lista de voces).

python3 skills/tts/scripts/tts.py -t "Bienvenidos al resumen de noticias de hoy..." --ref-audio host_A.wav -o linea_01.wav

python3 skills/tts/scripts/tts.py -t "La conclusión principal es que..." --ref-audio host_B.wav -o linea_02.wav

2. Concatenar los archivos de audio: Crea un archivo de texto (ej., lista.txt) que enumere todos los archivos de audio generados en orden:

file 'linea_01.wav'
file 'linea_02.wav'

Luego usa ffmpeg para fusionarlos en un único archivo de audio de podcast:

ffmpeg -f concat -safe 0 -i lista.txt -c copy podcast_final.wav

Paso 5: Presentar el resultado final

Una vez que se haya generado y fusionado el audio completo, presenta los resultados al usuario. DEBES proporcionar ambos contenidos:

  • Muestra el guion del podcast en Markdown completamente redactado en el chat para que el usuario pueda leerlo.
  • Proporciona la ruta al archivo final podcast_final.wav para que puedan escuchar el audio.
  • Resume brevemente los titulares que se incluyeron en el podcast.

Seguridad y divulgación de datos

Esta habilidad es solo de instrucciones: no contiene código ejecutable en sí misma. En tiempo de ejecución, orquesta scripts de dos habilidades dependientes:

  • Scripts ejecutados: news-aggregator-skill/scripts/fetch_news.py (obtiene noticias de fuentes públicas) y tts/scripts/tts.py (genera audio de voz). Ambos deben estar presentes localmente antes de que esta habilidad se ejecute; revisa su código y SKILL.md para obtener detalles sobre su comportamiento de red y requisitos de credenciales.
  • Credenciales: Esta habilidad no requiere ninguna clave API o variable de entorno directamente. La dependencia tts puede requerir NOIZ_API_KEY para funciones de clonación de voz (backend noiz); sin ella, las voces en modo invitado funcionan sin configuración adicional. Consulta el SKILL.md de la habilidad tts para más detalles.
  • Acceso a red: Todas las llamadas de red las realizan las habilidades dependientes, no las instrucciones de esta habilidad. El agregador de noticias obtiene datos de fuentes públicas; la habilidad tts contacta a noiz.ai solo cuando se usa el backend noiz.
  • Archivos escritos: podcast_script.md, linea_*.wav (audio temporal por frase), lista.txt (lista de concatenación de ffmpeg), podcast_final.wav (salida final). Todos se escriben en el directorio de trabajo actual.
  • Sin estado persistente: Esta habilidad no escribe archivos de configuración, almacena credenciales ni modifica otras habilidades.

Individual skills in this repo

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

Skills relacionados