Digest de Newsletter
Agrégez le contenu de flux RSS, synthétisez les meilleures histoires de la semaine avec Gemini et publiez un digest sur Ghost CMS. Prend en charge les formats de digest hebdomadaire, de focus thématique et de sélection curatoriale.
Style d'écriture
Appliquer à tout contenu de digest généré :
- Voix active uniquement
- Phrases courtes, une idée par phrase
- Pas de tirets cadratins — utilisez un point ou une virgule à la place
- Pas de points-virgules
- Pas de markdown ni d'astérisques dans le corps final de la newsletter
- Pas de hashtags
Mots interdits — n'utilisez aucun de ces mots dans le digest : incroyable, étonnant, exploiter, synergiser, révolutionnaire, qui change la donne, plonger, exploiter, débloquer, révolutionnaire, de pointe, remarquable, paradigme, révolutionner, perturbateur, transformateur, ravi, heureux de partager, puissant, innovant, complet, actionnable, crucial, vital, central, élucider, utiliser, plonger en profondeur, tapisserie, illuminer, révolutionner
RÈGLE CRITIQUE
Chaque affirmation, statistique et résumé dans le digest doit provenir des articles récupérés. Ne jamais inventer de points de données, de citations ou de faits. Si un article source n'a pas de contenu significatif, passez-le.
Étape 1 : Vérifier la configuration
1a. Vérifier que les flux sont configurés
Vérifiez si le fichier feeds.json existe dans le répertoire de la compétence :
ls /Users/ksd/Desktop/Varnan_skills/newsletter-digest/feeds.json 2>/dev/null
S'il est manquant, demandez à l'utilisateur : « Quels flux RSS dois-je surveiller ? Partagez une liste d'URLs et je créerai feeds.json. »
Le format est :
[
{ "url": "https://example.com/feed", "name": "Nom de la source" },
{ "url": "https://another.com/rss", "name": "Autre source" }
]
1b. Vérifier les variables d'environnement requises
Vérifiez que celles-ci sont définies :
GEMINI_API_KEY(obligatoire) : pour la synthèseGHOST_URLetGHOST_ADMIN_KEY(obligatoires pour la publication Ghost, facultatives si sortie uniquement)
Si GEMINI_API_KEY est manquante, arrêtez-vous et demandez à l'utilisateur de la définir.
La configuration GHOST est facultative. Si elle n'est pas définie, la compétence produit un Markdown formaté au lieu de publier.
1c. Vérifier les dépendances du script
ls /Users/ksd/Desktop/Varnan_skills/newsletter-digest/node_modules 2>/dev/null | head -1
Si manquant :
cd /Users/ksd/Desktop/Varnan_skills/newsletter-digest && npm install
Étape 2 : Récupérer et analyser les flux
Exécutez le script de récupération :
node /Users/ksd/Desktop/Varnan_skills/newsletter-digest/scripts/fetch-feeds.js
Le script :
- Lit
feeds.jsonpour la liste des flux - Récupère chaque flux en utilisant
rss-parser - Filtre les articles publiés au cours des 7 derniers jours
- Déduplique par URL
- Trie par date de publication, du plus récent au plus ancien
- Sauvegarde les résultats dans
/tmp/newsletter-digest-articles.json
Si le script génère une erreur sur un flux spécifique, il enregistre un avertissement et continue. Un mauvais flux n'arrête pas l'exécution.
Une fois le script terminé, vérifiez la sortie :
node -e "
const fs = require('fs');
const data = JSON.parse(fs.readFileSync('/tmp/newsletter-digest-articles.json', 'utf8'));
console.log('Total articles:', data.articles.length);
console.log('From feeds:', data.feedsSummary.map(f => f.name + ': ' + f.count).join(', '));
console.log('Date range:', data.dateRange.from, 'to', data.dateRange.to);
"
Si moins de 3 articles sont trouvés, avertissez l'utilisateur et demandez-lui s'il souhaite étendre la plage de dates à 14 jours. Passez --days=14 au script pour élargir la fenêtre.
Étape 3 : Lire les règles de format
Lisez references/digest-format.md en entier avant de générer du contenu. Intériorisez :
- Les trois formats de digest (Récapitulatif hebdomadaire, Focus thématique approfondi, Sélection curatoriale) et quand les utiliser
- La structure des sections et les exigences de longueur par format
- Les règles d'attribution (chaque affirmation renvoie à une source)
- Les consignes de ton et de voix
Lisez references/output-template.md et sélectionnez le modèle correspondant au format demandé.
Si l'utilisateur n'a pas spécifié de format, choisissez par défaut le Récapitulatif hebdomadaire.
Étape 4 : Synthétiser avec Gemini
Lisez /tmp/newsletter-digest-articles.json et construisez une invite de synthèse.
Structure de l'invite :
Vous êtes un rédacteur de newsletter qui rédige un digest des meilleures histoires de la semaine.
Sources (utilisez UNIQUEMENT celles-ci — n'inventez pas de faits) :
[Pour chaque article : Titre | Source | Date | Résumé]
Tâche :
Rédigez un digest [FORMAT] suivant cette structure :
[Collez le modèle sélectionné depuis references/output-template.md]
Règles :
- Chaque affirmation, statistique et citation doit provenir des sources ci-dessus
- Écrivez à la voix active, phrases courtes, contractions autorisées
- N'utilisez pas : incroyable, étonnant, exploiter, qui change la donne, plonger, de pointe, révolutionner
- Pas de tirets cadratins, pas de points-virgules, pas de hashtags
- Incluez une attribution [Source : Nom](URL) après chaque affirmation importante
- Produisez du texte brut avec uniquement des balises HTML de titre (pas d'astérisques markdown)
Appelez Gemini avec cette invite. Modèle cible : gemini-2.0-flash ou le plus récent disponible.
Si la réponse contient des mots interdits ou des statistiques inventées qui ne figurent pas dans les articles sources, régénérez avec une invite plus stricte.
Étape 5 : Auto-contrôle qualité
Effectuez chaque vérification avant de présenter le résultat. Corrigez d'abord les violations.
- Chaque affirmation, statistique et citation provient d'un article source
- Aucun mot interdit dans aucune section
- Pas de tirets cadratins dans le texte
- Pas de points-virgules dans le texte
- Chaque section contient au moins une attribution de source avec URL
- Le nombre de mots se situe dans la plage cible du format (voir references/digest-format.md)
- Aucune section ne répète la même histoire deux fois
- Le titre est spécifique (inclut la plage de dates ou le numéro d'édition, pas seulement « Digest hebdomadaire »)
- La sortie HTML est valide (pas de balises non fermées en cas de publication sur Ghost)
Corrigez toutes les violations avant de présenter le résultat à l'utilisateur.
Étape 6 : Formater et prévisualiser
Présentez le digest à l'utilisateur dans cet ordre :
- Titre — Plage de dates du numéro ou sujet
- Contenu du digest — Texte complet formaté
- Liste des sources — Tous les articles utilisés, avec URLs
- Nombre de mots et nombre d'articles
Demandez : « Prêt à publier sur Ghost en tant que brouillon, ou souhaitez-vous d'abord modifier ? »
Étape 7 : Publier sur Ghost ou produire la sortie
Si GHOST_URL et GHOST_ADMIN_KEY sont définis et que l'utilisateur confirme :
Exécutez le script de publication :
node /Users/ksd/Desktop/Varnan_skills/newsletter-digest/scripts/ghost-publish.js \
--title "TITRE_DU_DIGEST" \
--status "draft"
Le script lit /tmp/newsletter-digest-output.json (écrit par l'agent à l'étape 6) et le publie sur Ghost.
Après publication, le script renvoie l'URL d'administration Ghost du brouillon. Présentez-la à l'utilisateur : « Brouillon sauvegardé à : [URL]. Révisez et publiez depuis votre tableau de bord Ghost. »
Si l'utilisateur souhaite publier immédiatement, passez --status "published" au script.
Si Ghost n'est pas configuré ou que l'utilisateur dit « sortie uniquement » :
Produisez le digest dans trois formats :
- HTML — prêt à coller dans n'importe quel CMS
- Markdown — pour Substack, Notion ou Hashnode
- Texte brut — pour les clients de messagerie
Ajoutez : « Substack n'offre pas d'API publique. Copiez la version Markdown directement dans votre éditeur Substack. »
Notes sur Substack
Substack n'a pas d'API publique. La publication programmatique est impossible sans rétro-ingénierie des points de terminaison internes, ce qui viole leurs conditions d'utilisation. La compétence produit un digest Markdown formaté prêt à coller dans l'éditeur Substack. C'est l'approche correcte.