Newsletter Digest
Agregue conteúdo de feeds RSS, sintetize as principais histórias da semana com Gemini e publique um boletim informativo no Ghost CMS. Suporta formatos de resumo semanal, mergulho profundo em tópicos e seleções curadas.
Estilo de Escrita
Aplicar a todo conteúdo gerado do boletim:
- Apenas voz ativa
- Frases curtas, uma ideia por frase
- Sem travessões — use um ponto final ou vírgula
- Sem ponto e vírgula
- Sem markdown ou asteriscos no corpo final do boletim
- Sem hashtags
Palavras proibidas — não use nenhuma destas no boletim: inacreditável, incrível, alavancar, sinergizar, mudança de jogo, divisor de águas, mergulhar, aproveitar, desbloquear, inovador, inovador, revolucionário, disruptivo, transformador, empolgado, animado em compartilhar, poderoso, inovador, abrangente, acionável, crucial, vital, central, elucidar, utilizar, mergulhar fundo, tapeçaria, iluminar, revolucionar
REGRA CRÍTICA
Toda afirmação, estatística e resumo no boletim deve vir dos artigos coletados. Nunca invente pontos de dados, citações ou fatos. Se um artigo fonte não tiver conteúdo significativo, pule-o.
Passo 1: Verificar Configuração
1a. Verifique se os feeds estão configurados
Verifique se feeds.json existe no diretório da skill:
ls /Users/ksd/Desktop/Varnan_skills/newsletter-digest/feeds.json 2>/dev/null
Se estiver faltando, pergunte ao usuário: "Quais feeds RSS devo monitorar? Compartilhe uma lista de URLs e criarei o feeds.json."
O formato é:
[
{ "url": "https://exemplo.com/feed", "name": "Nome da Fonte" },
{ "url": "https://outro.com/rss", "name": "Outra Fonte" }
]
1b. Verifique as variáveis de ambiente necessárias
Verifique se estas estão definidas:
GEMINI_API_KEY(obrigatório): para sínteseGHOST_URLeGHOST_ADMIN_KEY(obrigatório para publicar no Ghost, opcional se for apenas saída)
Se GEMINI_API_KEY estiver faltando, pare e peça ao usuário para defini-la.
A configuração do GHOST é opcional. Se não estiver definida, a skill gera Markdown formatado em vez de publicar.
1c. Verifique as dependências do script
ls /Users/ksd/Desktop/Varnan_skills/newsletter-digest/node_modules 2>/dev/null | head -1
Se estiver faltando:
cd /Users/ksd/Desktop/Varnan_skills/newsletter-digest && npm install
Passo 2: Buscar e Analisar Feeds
Execute o script de busca:
node /Users/ksd/Desktop/Varnan_skills/newsletter-digest/scripts/fetch-feeds.js
O script:
- Lê
feeds.jsonpara a lista de feeds - Busca cada feed usando
rss-parser - Filtra itens publicados nos últimos 7 dias
- Deduplica por URL
- Ordena por data de publicação, mais recentes primeiro
- Salva os resultados em
/tmp/newsletter-digest-articles.json
Se o script gerar erro em um feed específico, ele registra um aviso e continua. Um feed com problema não interrompe a execução.
Após o script concluir, verifique a saída:
node -e "
const fs = require('fs');
const data = JSON.parse(fs.readFileSync('/tmp/newsletter-digest-articles.json', 'utf8'));
console.log('Total de artigos:', data.articles.length);
console.log('Dos feeds:', data.feedsSummary.map(f => f.name + ': ' + f.count).join(', '));
console.log('Intervalo de datas:', data.dateRange.from, 'até', data.dateRange.to);
"
Se menos de 3 artigos forem encontrados, avise o usuário e pergunte se ele deseja estender o intervalo de datas para 14 dias. Passe --days=14 para o script para ampliar a janela.
Passo 3: Ler Regras de Formato
Leia references/digest-format.md por completo antes de gerar qualquer conteúdo. Internalize:
- Três formatos de boletim (Resumo Semanal, Mergulho Profundo em Tópico, Seleção Curada) e quando usar cada um
- Estrutura de seção e requisitos de comprimento por formato
- Regras de atribuição (toda afirmação linka para uma fonte)
- Diretrizes de tom e voz
Leia references/output-template.md e selecione o modelo que corresponde ao formato solicitado.
Se o usuário não especificou um formato, use como padrão Resumo Semanal.
Passo 4: Sintetizar com Gemini
Leia /tmp/newsletter-digest-articles.json e construa um prompt de síntese.
Estrutura do prompt:
Você é um editor de newsletter escrevendo um boletim das principais histórias da semana.
Fontes (use APENAS estas — não invente fatos):
[Para cada artigo: Título | Fonte | Data | Resumo]
Tarefa:
Escreva um boletim [FORMATO] seguindo esta estrutura:
[Cole o modelo selecionado de references/output-template.md]
Regras:
- Toda afirmação, estatística e citação deve vir das fontes acima
- Escreva em voz ativa, frases curtas, contrações permitidas
- Não use: incrível, inacreditável, alavancar, mudança de jogo, divisor de águas, mergulhar, inovador, inovador, revolucionar
- Sem travessões, sem ponto e vírgula, sem hashtags
- Inclua [Fonte: Nome](URL) atribuição após cada afirmação principal
- Gere texto simples com tags HTML de cabeçalho apenas (sem asteriscos de markdown)
Chame Gemini com este prompt. Modelo alvo: gemini-2.0-flash ou o mais recente disponível.
Se a resposta contiver palavras proibidas ou estatísticas inventadas não presentes nos artigos fonte, regenere com um prompt mais rigoroso.
Passo 5: Auto-Qualidade
Execute cada verificação antes de apresentar. Corrija violações primeiro.
- Toda afirmação, estatística e citação remonta a um artigo fonte
- Nenhuma palavra proibida em qualquer seção
- Sem travessões no texto
- Sem ponto e vírgula no texto
- Cada seção tem pelo menos uma atribuição de fonte com URL
- Contagem de palavras está dentro do intervalo alvo do formato (veja references/digest-format.md)
- Nenhuma seção repetiu a mesma história duas vezes
- Título é específico (inclui intervalo de datas ou número da edição, não apenas "Boletim Semanal")
- Saída HTML é válida (sem tags não fechadas se publicando no Ghost)
Corrija todas as violações antes de apresentar ao usuário.
Passo 6: Formatar e Visualizar
Apresente o boletim ao usuário nesta ordem:
- Título — Intervalo de datas ou tópico da edição
- Conteúdo do boletim — Texto formatado completo
- Lista de fontes — Todos os artigos usados, com URLs
- Contagem de palavras e contagem de artigos
Pergunte: "Pronto para publicar no Ghost como rascunho, ou gostaria de editar primeiro?"
Passo 7: Publicar no Ghost ou Gerar Saída
Se GHOST_URL e GHOST_ADMIN_KEY estiverem definidos e o usuário confirmar:
Execute o script de publicação:
node /Users/ksd/Desktop/Varnan_skills/newsletter-digest/scripts/ghost-publish.js \
--title "TITULO_DO_BOLETIM" \
--status "draft"
O script lê /tmp/newsletter-digest-output.json (escrito pelo agente no Passo 6) e envia para o Ghost.
Após a publicação, o script retorna a URL administrativa do Ghost para o rascunho. Apresente ao usuário: "Rascunho salvo em: [URL]. Revise e publique no seu painel do Ghost."
Se o usuário quiser publicar imediatamente, passe --status "published" para o script.
Se o Ghost não estiver configurado ou o usuário disser "apenas saída":
Gere o boletim em três formatos:
- HTML — pronto para colar em qualquer CMS
- Markdown — para Substack, Notion ou Hashnode
- Texto simples — para clientes de email
Adicione: "Substack não oferece uma API pública. Copie a versão Markdown diretamente para seu editor do Substack."
Notas sobre Substack
Substack não tem API pública. Publicação programática não é possível sem engenharia reversa de endpoints internos, o que viola seus termos. A skill gera um boletim Markdown formatado pronto para colar no editor do Substack. Esta é a abordagem correta.