Communitygithub.com

Locutor de Notícias Diárias

Obtém as últimas notícias usando o news-aggregator-skill, formata-as em um roteiro de podcast em Markdown e usa o tts skill para gerar um arquivo de áudio do podcast. Use quando o usuário pedir para obter as últimas notícias e lê-las em formato de podcast.

O que é Locutor de Notícias Diárias?

O **Locutor de Notícias Diárias** é uma skill voltada para agentes de IA (como Claude Code, Cursor, Codex) que automatiza a criação de um podcast baseado em notícias em tempo real. Após o usuário solicitar as últimas notícias em formato de podcast, o agente verifica se as skills dependentes (`news-aggregator-skill` e `tts`) estão presentes localmente, executa o script de busca de notícias (suportando fontes como Hacker News, GitHub ou palavras-chave) e organiza os dados em um roteiro no formato Markdown com diálogo dinâmico entre dois apresentadores (Host A e Host B) no estilo perguntas e respostas. Em seguida, o agente gera o áudio falado linha por linha (uma sentença de cada vez) usando o backend de TTS, com suporte a vozes personalizadas via `--ref-audio` (necessita chave de API NOIZ) ou vozes do modo convidado quando nenhuma chave é fornecida. Por fim, todos os arquivos de áudio são concatenados com `ffmpeg` em um único arquivo `podcast_output.wav`. A skill não executa código próprio, apenas orquestra scripts das skills dependentes, escrevendo arquivos temporários no diretório de trabalho. É útil para desenvolvedores que desejam consumir notícias de forma auditiva automatizada, seja para si próprios ou para integrar em produtos que entregam resumos noticiosos em áudio.

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

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Skill Locutor de Notícias Diárias

Esta skill permite que o agente busque notícias em tempo real, organize-as em um roteiro de podcast conversacional e gere um arquivo de áudio lendo o roteiro em voz alta.

Instruções de Fluxo de Trabalho

Quando o usuário solicitar as últimas notícias e transformá-las em um podcast, siga estas etapas rigorosamente:

Etapa 1: Garantir que as Skills Necessárias estejam Presentes

Verifique se news-aggregator-skill e tts existem no workspace (em skills/ ou .cursor/skills/). Se alguma estiver faltando, informe ao usuário qual(is) skill(s) não foi(ram) encontrada(s) e peça para instalá-las manualmente antes de prosseguir. NÃO tente instalar skills automaticamente.

Etapa 2: Buscar as Últimas Notícias

Localize fetch_news.py no diretório da skill news-aggregator-skill (ex.: skills/news-aggregator-skill/scripts/fetch_news.py). Leia seu SKILL.md para entender o uso, se necessário.

Execute o script para buscar notícias em tempo real. Você pode especificar uma fonte (ex.: hackernews, github, all) ou palavras-chave com base na solicitação do usuário. Exemplo de comando:

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

Etapa 3: Rascunhar o Roteiro do Podcast (Etapa Interna)

Leia os dados das notícias obtidas e reescreva as informações em um roteiro de podcast em Markdown. Crucialmente, priorize um formato conversacional de dois apresentadores (dupla-host) (ex.: Apresentador A e Apresentador B) em um estilo dinâmico de perguntas e respostas. O roteiro deve ser:

  • Conversacional entre dois apresentadores, mas conciso: Escreva um diálogo envolvente entre dois apresentadores. O Apresentador A deve fazer perguntas perspicazes e de alto valor para guiar a conversa, e o Apresentador B deve fornecer respostas informativas e concisas. Deve parecer um diálogo inteligente e dinâmico de perguntas e respostas.
  • Evite enrolação: Não inclua enrolação desnecessária ou transições muito longas. Seja direto e objetivo, retendo todas as informações e fatos críticos.
  • Palestrantes Claramente Rotulados: Inicie cada linha ou parágrafo com o nome do palestrante (ex.: Apresentador A: ou Apresentador B:).
  • Texto claro para fala: Evite URLs complexos, links Markdown brutos ou caracteres impronunciáveis no texto falado.

Salve este roteiro em um arquivo local chamado podcast_script.md.

Exemplo de Conteúdo de podcast_script.md:

**Apresentador A:** Bem-vindos ao resumo de notícias de hoje. Temos algumas atualizações empolgantes de tecnologia. Para começar, há uma grande novidade da [Nome da Empresa]. Quais são as principais implicações desse novo lançamento para os usuários comuns?

**Apresentador B:** A principal conclusão é que... [Inserir resposta concisa e resumo da Notícia 1]. Isso muda completamente a forma como abordamos [Tópico].

**Apresentador A:** Fascinante. Mas essa nova abordagem levanta preocupações de segurança, especialmente considerando as recentes violações de dados?

**Apresentador B:** Exatamente. Especialistas apontam que... [Inserir análise ou contexto].

**Apresentador A:** Falando em mundo de código aberto, o que está em alta no GitHub hoje que os desenvolvedores devem ficar de olho?

**Apresentador B:** Um projeto de destaque é... [Inserir resumo conciso da Notícia 2].

**Apresentador A:** Ótimas ideias. Isso é tudo para a atualização rápida de hoje. Obrigado por nos acompanhar!

Etapa 4: Gerar o Áudio do Podcast Linha por Linha

Para evitar enviar o roteiro inteiro para a API de uma só vez, você deve gerar o áudio frase por frase (一人一句地生成) e depois concatená-las.

Use tts.py da skill tts local (skills/tts/scripts/tts.py). Leia o SKILL.md da skill tts para obter o uso completo e as opções de backend.

1. Gerar Áudio para Cada Linha: Para cada linha de diálogo no roteiro, execute o comando speak. Use a voz apropriada ou áudio de referência para o respectivo apresentador. Se o usuário forneceu arquivos de áudio de referência para os dois papéis, use-os através da flag --ref-audio (requer backend noiz e NOIZ_API_KEY). Sem uma chave de API, as vozes do modo convidado estão disponíveis (consulte o SKILL.md do tts para a lista de vozes).

python3 skills/tts/scripts/tts.py -t "Bem-vindos ao resumo de notícias de hoje..." --ref-audio host_A.wav -o line_01.wav

python3 skills/tts/scripts/tts.py -t "A principal conclusão é que..." --ref-audio host_B.wav -o line_02.wav

2. Concatenar os Arquivos de Áudio: Crie um arquivo de texto (ex.: list.txt) listando todos os arquivos de áudio gerados na ordem:

file 'line_01.wav'
file 'line_02.wav'

Em seguida, use ffmpeg para mesclá-los em um único arquivo de áudio do podcast:

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

Etapa 5: Apresentar o Resultado Final

Após o áudio completo ser gerado e mesclado, apresente os resultados ao usuário. Você DEVE fornecer ambos os conteúdos:

  • Exiba o roteiro do podcast em Markdown totalmente redigido no chat para que o usuário possa lê-lo.
  • Forneça o caminho para o arquivo podcast_output.wav final para que ele possa ouvir o áudio.
  • Resuma brevemente as manchetes que foram incluídas no podcast.

Segurança e Divulgação de Dados

Esta skill é apenas de instrução — não contém código executável por si só. Em tempo de execução, ela orquestra scripts de duas skills dependentes:

  • Scripts executados: news-aggregator-skill/scripts/fetch_news.py (busca notícias de fontes públicas) e tts/scripts/tts.py (gera áudio de fala). Ambos devem estar presentes localmente antes que esta skill seja executada; revise seus códigos e SKILL.md para detalhes sobre o comportamento de rede e requisitos de credenciais.
  • Credenciais: Esta skill não requer chaves de API ou variáveis de ambiente diretamente. A dependência tts pode exigir NOIZ_API_KEY para recursos de clonagem de voz (backend noiz); sem ela, as vozes do modo convidado funcionam imediatamente. Consulte o SKILL.md da skill tts para detalhes.
  • Acesso à rede: Todas as chamadas de rede são feitas pelas skills dependentes, não pelas instruções desta skill. O agregador de notícias busca em fontes públicas de notícias; a skill tts contata noiz.ai apenas quando o backend noiz é usado.
  • Arquivos escritos: podcast_script.md, line_*.wav (áudio temporário por frase), list.txt (lista de concatenação do ffmpeg), podcast_output.wav (saída final). Todos são escritos no diretório de trabalho atual.
  • Sem estado persistente: Esta skill não escreve arquivos de configuração, armazena credenciais ou modifica outras skills.

Individual skills in this repo

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

Habilidades Relacionadas