Job ID: 76ce033272c7
Run Time: 2026-06-20 16:03:32
Schedule: 0 16 *
[IMPORTANT: The user has invoked the "news-briefings" skill, indicating they want you to follow its instructions. The full skill content is loaded below.]
name: news-briefings
description: "Research current events and deliver formatted news briefings to the user's messaging platform (Telegram/WhatsApp). Covers one-shot news queries and recurring cron-based news briefings — aggregating from RSS feeds via curl, structuring summaries by region/topic, and delivering to the user's preferred channel."
version: 1.3.0
metadata:
hermes:
tags: [news, current-events, rss, briefing, delivery, telegram, whatsapp, cron]
prerequisites: {}
Research and deliver current-events briefings to the user's messaging platform. Supports two modes:
When the user asks for news/current events, gather from multiple RSS feeds using curl (browser dependency may be unavailable). Good free RSS sources:
BBC World: https://feeds.bbci.co.uk/news/world/rss.xml
NYT World: https://rss.nytimes.com/services/xml/rss/nyt/World.xml
Le Monde: https://www.lemonde.fr/international/rss_full.xml
France Info: https://www.francetvinfo.fr/monde.rss (⚠️ /monde/rss → 404, utiliser .rss)
France 24: https://www.france24.com/fr/rss
Hacker News: https://news.ycombinator.com/
Apple Newsroom: https://www.apple.com/newsroom/
The Guardian: https://www.theguardian.com/tone/news
⚠️ Avoid sources with aggressive anti-bot protection — Some sites (Reuters/DataDome, Google News, DuckDuckGo, Bing, Searx) are systematically blocked from certain server IPs. When curl hits these, the connection may get a TCP reset that propagates as a "Broken pipe" (Errno 32) crash, killing the whole agent run — far worse than a simple HTTP error. For one-shot queries, if these fail, just skip them. For cron jobs, remove them from the prompt entirely — a runtime error crashes the agent, and "skip and continue" won't help if curl itself segfaults on a blocked domain.
Use delegate_task for heavier research (multiple feeds → extraction → structured summary) so the main thread stays responsive. Pass toolsets=["terminal"] for simple RSS parsing.
For parallel research on multiple topics, use the tasks= array form:
delegate_task(tasks=[
{"goal": "Research {topic A}", "toolsets": ["terminal"]},
{"goal": "Research {topic B}", "toolsets": ["terminal"]},
])
This runs up to 3 subagents concurrently.
Pitfall: delegate_task is for ONE-SHOT queries only. Do NOT use it in cron job prompts — cron agents cannot use delegate_task.
Format with clear sections by region/topic. Use emoji markers per region:
Each section: 2-3 bullet points max. Bold the headline item (not the emoji). Include source attribution at end.
Check the user's preferred delivery platform:
The send_message(action='list') may not show platforms even when they're configured. If the platform is defined in .env (TELEGRAM_BOT_TOKEN, etc.), try send_message(target='telegram') directly — it routes to the home channel.
Set up automated daily/weekly briefings that deliver directly to the user's messaging platform on a schedule.
Use cronjob(action='create') with:
skills=["news-briefings"] to load this skill automatically"0 16 " for daily at 16h, "0 16 * 0" for Sundays"origin" (default) — auto-routes to the conversation's origin platform (Telegram/WhatsApp if the conversation came from there, CLI otherwise)"telegram:CHAT_ID" — explicit Telegram delivery (e.g., "telegram:8818654814")"local" — no delivery, saved locally"whatsapp:PHONE" — explicit WhatsApp deliveryExample with explicit Telegram delivery:
cronjob(
action='create',
name='Veille quotidienne d\'actualités',
prompt="Génère un briefing quotidien en français...",
schedule='0 16 * * *',
skills=['news-briefings'],
deliver='telegram:8818654814',
)
delegate_task — cron sessions cannot spawn subagentsexecute_code — cron sessions cannot use execute_code (blocked for security). Use write_file or terminal for file operations instead.clarify — cron agents cannot ask the user questionssend_message needed — the job's final response auto-delivers to the target platformIf cronjob(action='list') shows the job as state: scheduled but last_run_at stays null even after next_run_at has passed:
hermes gateway start or hermes gateway installhermes gateway status — if not running, the scheduler is not activeEven feeds classified as "reliable" (BBC, Le Monde, France 24) can intermittently trigger a Broken pipe (Errno 32) crash in cron context. This happens when a CDN or reverse proxy intermittently sends a TCP reset — the curl subprocess crashes before any "skip on error" logic runs.
no_agent=False, script=path) that curl-fetches feeds sequentially in a single bash script with || true fallbacks, then let the LLM summarize the collected data. This isolates the crash risk to the script layer.delegate_task(tasks=[...], toolsets=["terminal"]). Fetch the feeds in parallel subagents (max 3), each handles its own curl failure gracefully. Then compose and deliver the briefing manually. This bypasses the Broken pipe crash because each subagent's curl crash is isolated.last_status: "error" with delivery error about "cannot schedule new futures"When last_status: "error" AND the delivery error contains "cannot schedule new futures after interpreter shutdown" or "Broken pipe" appears in the output log:
curl to a blocked domain (DataDome/Cloudflare) causes a TCP reset → "Broken pipe" (Errno 32)execute_code in cron)~/.hermes/cron/output/<job_id>/ for the crash reason. Fix the prompt:execute_code calls with write_file or terminalcronjob(action='run', job_id='...') to test the fixWhen a cron job shows last_status: "error" but last_delivery_error: null:
cronjob(action='run', job_id='...') to re-kick the job manuallyEach cron briefing can also save a copy locally for historical reference, alongside Telegram delivery.
Pattern: Add an instruction at the end of the cron prompt to write the briefing content to a file:
❗ À la fin, archive le briefing dans un fichier : écris le contenu exact du briefing dans /home/sebastien/.hermes/memory/modules/veille_actualite/daily/YYYY-MM-DD.md (remplace YYYY-MM-DD par la date du jour). Crée le fichier avec la commande d'écriture appropriée.
Use a dedicated module structure under ~/.hermes/memory/modules/:
veille_actualite/daily/ — for daily briefingsveille_actualite/weekly/ — for weekly geopolitics briefingsPre-create the directories before setting up the cron — the cron agent has file-write tools but directory creation is more reliable when done ahead of time:
mkdir -p ~/.hermes/memory/modules/veille_actualite/{daily,weekly}
Updating existing cron jobs to add archiving: use cronjob(action='update', job_id='JOB_ID', prompt='...') with the original prompt + the archive instruction appended. Always read the existing prompt from ~/.hermes/cron/jobs.json first so you preserve the full content.
| Frequency | Cron expression |
|---|---|
| Daily at 16h | 0 16 * |
| Daily at 9h | 0 9 * |
| Weekly Sunday 16h | 0 16 0 |
| Every 2 hours | every 2h |
curl for RSS feeds over browser toolssend_message(action='list') can return empty even with configured platforms — try direct targetingdelegate_task with toolsets=["terminal"] rather than doing curl calls in the main thread — keeps context cleanhttps://www.france24.com/fr/rss) is a reliable French-language source for international news — include it for francophone briefings import urllib.request, json
url = f"https://api.telegram.org/bot{TOKEN}/getMe"
resp = urllib.request.urlopen(url)
data = json.loads(resp.read()) # {"ok":true, "result":{...}}
.env via terminal heredoc may corrupt them (redaction system replaces characters). Always verify with xxd after writing. Use printf '\xHH' or direct Python binary writes to bypass redactionThe skill ships with a reusable data-collection script in scripts/collecte-veille.sh.
Purpose: Eliminates the Broken pipe (Errno 32) crash that kills cron briefings when a CDN sends a TCP reset during curl. Each feed is fetched with || true isolation — if one feed crashes, the others continue unaffected.
Usage in cron: Set script='collecte-veille.sh' on the cron job. The script runs first, its stdout is injected into the cron agent's prompt, and the agent summarizes the pre-collected data instead of running its own curls. The prompt should explicitly say: "Utilise les données collectées — ne fais PAS de curl toi-même."
Feeds collected: BBC World, Le Monde International, France Info (via .rss, not /rss), France 24, The Guardian (HTML topic page). Parses 10 items each.
Customization: Modify the script to add/remove feeds, or adjust the item count per feed.
blogwatcher — for ongoing/monitoring RSS feeds (complementary: use for single-feed watching, use this skill for multi-source LLM-synthesised briefings)editorial-review-cycle — for producing structured daily/weekly reviews that update the editorial memory system (topics, hypotheses, briefs archive, index). Use this skill when the user asks for a "revue quotidienne" or "briefing mémoire"; use news-briefings when they ask for "what's happening in the news" to deliver to a messaging platform.references/rss-feeds.md for the full list of tested RSS endpoints and parsing recipes.references/vps-feed-reliability.md for per-server feed status (which feeds work, which are blocked, intermittent failure patterns).The user has provided the following instruction alongside the skill invocation: [IMPORTANT: You are running as a scheduled cron job. DELIVERY: Your final response will be automatically delivered to the user — do NOT use send_message or try to deliver the output yourself. Just produce your report/output as your final response and the system handles the rest. SILENT: If there is genuinely nothing new to report, respond with exactly "[SILENT]" (nothing else) to suppress delivery. Never combine [SILENT] with content — either report your findings normally, or say [SILENT] and nothing more.]
The following data was collected by a pre-run script. Use it as context for your analysis.
═══════════════════════════════════════════
COLLECTE VEILLE QUOTIDIENNE — 2026-06-20
═══════════════════════════════════════════
=== BBC World ===
• Israel and Hezbollah continue strikes despite ceasefire agreement
At least 20 people have reportedly been killed by Israeli air strikes as the Israeli military said Hezbollah had fired at Israeli troops in southern Lebanon.
• Meloni tells Trump to 'focus on your own popularity' as row escalates
The US president earlier questioned Meloni's popularity after suggesting she "begged" for a photo at G7 summit
• Bolivian president declares state of emergency
The move comes after weeks of anti-government protests that have caused a shortage of basic goods in Bolivia.
• Tourist dies in Dominican Republic luxury resort fire
Nearly 1,700 people were evacuated from the huge blaze at Viva Wyndham Dominicus Beach in Bayahibe, a popular resort town on the Caribbean coast.
• Zelensky stripped of highest Polish honour over WW2 name of army unit
Ukraine has denounced the move, calling it a "strategic mistake" and "disrespectful".
• US to stop funding HIV programmes in South Africa
More than eight million South Africans are living with HIV – the highest number of any country in the world.
• Australia confirms first case of H5N1 bird flu as virus reaches every continent
Australia was previously the only continent where the H5N1 bird flu strain had not yet been found.
• African and Caribbean nations call for formal apology for transatlantic slavery
The leaders have asked for apologies from the countries that benefited from the slave trade, as well as debt relief and financial compensation.
• James Burrows, legendary director of Cheers and Friends, dies aged 85
Best-known as co-creator of sitcom Cheers, Burrows directed more than 1,000 episodes of other classics including the Big Bang Theory and Will and Grace.
• Boy, 12, wins hearts after trying to check sick chicken into Ethiopian hospital
Markos's beloved hen was not responding to any treatments - so he did the only thing he could think of.
=== Le Monde International ===
• EN DIRECT, guerre en Ukraine : Volodymyr Zelensky déclare avoir renvoyé en Pologne la distinction qui lui a été retirée
Le président polonais avait retiré l’ordre de l’Aigle blanc à son homologue ukrainien en raison de sa décision de baptiser une unité militaire du nom de l’Armée insurrectionnelle ukrainienne, une orga
• En Colombie, un second tour de l’élection présidentielle sous le signe de la polarisation
Au terme d’une campagne agressive, les Colombiens doivent départager, dimanche 21 juin, le candidat de l’ultradroite, Abelardo de la Espriella, donné favori, et celui de la gauche, Ivan Cepeda, hériti
• « La métamorphose de la New School for Social Research est une terrible allégorie de ce que subissent les universités dans les temps sombres où nous vivons »
Dans une tribune au « Monde », un collectif d’universitaires américains et français s’inquiète des graves attaques que subit ce haut lieu de l’antifascisme intellectuel.
• Coupe du monde 2026 : le retour de Manuel Neuer en équipe d’Allemagne, une légende dans un rôle de « grand frère »
Revenu en sélection à 40 ans après deux ans d’absence, le gardien de but de la Nationalmannschaft va disputer, samedi face à la Côte d’Ivoire, son 21ᵉ match lors d’un Mondial, un record pour un portie
• Varsovie et Kiev en pleine crise mémorielle à la veille d’une conférence sur la reconstruction de l’Ukraine
En réaction à l’hommage rendu par Kiev à des nationalistes ukrainiens du XXᵉ siècle accusés de massacres en Pologne, le président polonais, Karol Nawrocki, a retiré la plus haute distinction de son pa
• EN DIRECT, guerre au Moyen-Orient : la marine des gardiens de la révolution prévient que les navires qui s’approcheront du détroit d’Ormuz seront « mis en danger »
L’Iran a annoncé un peu plus tôt fermer le détroit en réaction aux attaques d’Israël au Liban. Les frappes dans le sud du pays, survenues quelques heures après l’annonce d’un cessez-le-feu entre Israë
• UniCredit sécurise près de 40 % de Commerzbank, la bataille pour le contrôle de la banque allemande s’intensifie
A l’issue de la première phase de son offre de rachat, dont les résultats ont été publiés vendredi 19 juin, la banque italienne a sécurisé 39,28 % du capital de sa concurrente de Francfort. Un seuil q
• Avec ses photos saisissantes de Kiev et ses environs, l’Ukrainien Vic Bakin témoigne des traces laissées par la guerre sur les corps et les paysages de son pays
En février 2022, quand les Russes lancent l’invasion de l’Ukraine, Vic Bakin a l’idée de tenir un journal photographique du conflit naissant. Ses images, très personnelles, altérées parfois et mêlées
• Hervé Renard au chevet d’un football tunisien plongé dans la crise après ses débuts ratés lors de la Coupe du monde 2026
Largement battue par la Suède pour son entrée en lice, la Tunisie s’est séparée de son entraîneur, Sabri Lamouchi. Elle compte sur son remplaçant, Hervé Renard, pour enfin lancer les Aigles de Carthag
• Journée mondiale des réfugiés : « L’hospitalité académique est une force morale au fondement même de notre souveraineté »
Dans une tribune au « Monde », Pierre-Paul Zalio, président du campus Condorcet, rappelle l’urgence à protéger ce principe d’accueil pour les chercheurs et chercheuses en sciences humaines et sociales
=== France Info Monde ===
• Un gigantesque incendie ravage un complexe hôtelier en République dominicaine.
Un gigantesque incendie a ravagé un complexe hôtelier en République dominicaine. Une ressortissante italienne est décédée et 1700 personnes ont été évacuées. Les causes ne sont pour l’instant pas conn
• Donald Trump affirme que Giorgia Meloni lui a "demandé, encore et encore", de prendre une photo avec lui au G7
Le président américain a persisté samedi et a enfoncé le clou. "Elle se débrouille mal en Italie en termes de popularité, peut-être parce qu'elle a tourné le dos aux Etats-Unis d'Amérique", a-t-il écr
• Guerre au Moyen-Orient : pourquoi le protocole d'accord entre l'Iran et les États-Unis ne tient pas la comparaison avec l'accord de Vienne
C'est sans doute la raison du fiasco de vendredi : le texte en 14 points sur lequel Iran et Etats-Unis se sont entendus et qui doit servir de base à des négociations est loin d'égaler le JCPOA, l'acco
• G7 : de belles photos, mais aucune décision ?
Le G7, créé en 1975 pour répondre au choc pétrolier, fait face à une remise en question de son utilité réelle. Alors qu'il représentait 67% du PIB mondial en 1992, il ne pèse plus que 44% aujourd'hui
• Entre accolades et bras de fer, Emmanuel Macron réussit-il à manipuler Donald Trump ?
La relation entre Emmanuel Macron et Donald Trump oscille entre accolades et bras de fer diplomatiques. Si le président français cultive une amitié stratégique depuis 2017, les résultats concrets pein
• Malgré l'accord de cessez-le-feu, des affrontements entre Israël et le Hezbollah ont toujours lieu dans le sud du Liban
Le sud du Liban se retrouve à nouveau sous les bombes et de nombreuses victimes ont été recensées comme à Nabatieh.
• Les défis éditoriaux de la Coupe du monde de foot
Les auditeurs s’interrogent sur les défis éditoriaux de la Coupe du monde de football. Pour leur répondre, Nathalie Iannetta, directrice du service des Sports de Radio France, est l’invitée d’Emmanuel
• Allemagne : l'ancienne RDA fascine toujours autant, 36 après la chute du mur
Pourquoi "l'ostalgie" en Allemagne de l'Est est-elle si forte, 36 ans après la chute du Mur ? De Berlin à la Thuringe, les passionnés de la RDA préservent un héritage culturel méconnu.
• États-Unis : une vague d'indignation s'empare du pays après la mort d'un bébé, tué par la police
Un bébé d’un an, Kohen Wiley, a été tué par la police du Mississippi lors d’une intervention le 14 juin dernier. Ce drame, filmé sur le parking d’un supermarché, suscite une vague d’indignation nation
• Kohen Wiley, un an, tué par des policiers aux États-Unis
Kohen Wiley, un bébé d’un an, a été tué par des policiers dans le Mississippi aux États-Unis. Sa mort a entraîné une vague d’émotion dans le pays.
=== France 24 ===
• Le système Epstein et les ramifications françaises : "Society" enquête sur le milliardaire américain
Dans votre magazine cette semaine, on s'intéresse à cet ouvrage : "Epstein, ce que vous n'avez jamais lu".
Une enquête signée Frédéric Mansuy et Emmanuelle Andreani,
Elle est co-rédactrice en che
• Reprise des frappes au Liban : "Israël utilise le Hezbollah comme variable d'ajustement"
Les frappes ont repris au Liban malgré un cessez-le-feu signé entre le Hezbollah et Israël. En réaction, l'Iran a annoncé "fermer" à nouveau le détroit d'Ormuz. Nous en parlons avec notre chroniqueur
• Le détroit d'Ormuz à nouveau fermé : l'accord entre Téhéran et Washington compromis ?
L'armée américaine a dit rester "vigilante" samedi 20 juin pour appliquer l'accord de cessez-le-feu avec l'Iran, après l'annonce par Téhéran de la nouvelle fermeture du détroit d'Ormuz en représaille
• L'Iran dit "fermer" à nouveau Ormuz en représailles aux attaques israéliennes au Liban
L'Iran a annoncé samedi "fermer" à nouveau le stratégique détroit d'Ormuz, en représailles aux meurtrières attaques israéliennes au Liban qui violent, selon lui, les termes de son protocole d'accord
• Canicule : la Fête de la musique va-t-elle être annulée ?
À Nanterre déjà, la Fête de la musique a été annulée. Alors que la température va monter à 36 degrés ce dimanche, elle est pour l'instant maintenue à Paris.
• L'artiste afghane Roya Rassuli raconte l'exil à travers l'art
À l'occasion de la Journée mondiale des réfugiés, France 24 revient sur le parcours de l'artiste afghane Roya Rassuli. Elle est réfugiée en France, pays qu'elle a rejoint après avoir quitté l'Iran, o
• Violation du cessez-le-feu entre Israël et le Liban
Moins de 24 heures après l'annonce d'un cessez le feu entre le Israël et le Hezbollah, des frappes israéliennes dans le sud du Liban ont fait au moins 16 morts samedi, selon la Défense civile liban
• Tensions Trump-Meloni : le président américain enfonce le clou, Rome en colère
Le président américain a martelé samedi que la Première ministre Giorgia Meloni lui avait demandé "encore et encore" de prendre une photo avec lui lors du sommet du G7. Un sujet qui a créé une disput
• Liban : le cessez-le-feu déjà violé, comment mettre fin aux attaques ?
Au moins 16 personnes ont été tuées samedi 20 juin lors de frappes israéliennes dans le sud du Liban, a dit la Défense civile libanaise, malgré un cessez-le-feu entre Israël et le Hezbollah entré e
• Cessez-le-feu violé au Liban : "La république libanaise seule détient la clé"
Malgré le cessez-le-feu, les attaques israéliennes continuent au Liban. Nous en parlons avec Kamal Shehadi, ministre libanais des Déplacés. "Malheureusement, beaucoup de pays n'ont pas compris les en
=== The Guardian ===
═══════════════════════════════════════════
FIN DE LA COLLECTE
═══════════════════════════════════════════
Génère un briefing quotidien en français des actualités du jour pour Sébastien.
Les données des flux RSS ont déjà été collectées par le script ci-dessus (section "COLLECTE VEILLE QUOTIDIENNE"). Utilise ces données — ne fais PAS de curl toi-même. Si la section de collecte est vide ou erronée, produis un message d'erreur clair au lieu d'essayer de faire tes propres curls.
Structure la veille avec des emojis par région :
🔴 Moyen-Orient
🟠 Ukraine / Russie
🟡 Amériques / US
🔵 Asie-Pacifique / Chine
🟢 Afrique
🟣 Europe / UE
⚪ Défense / Alliances
🇫🇷 France
2-3 puces max par section. Gras sur le titre principal. Termine par la source et la date.
Message concis, en français, adapté à Telegram (pas de tableaux — listes à puces uniquement).
❗ À la fin, archive le briefing dans un fichier : écris le contenu exact du briefing dans /home/sebastien/.hermes/memory/modules/revue_editoriale/sources/rss/YYYY-MM-DD.md (remplace YYYY-MM-DD par la date du jour). Crée le fichier avec write_file.
Briefing livré et archivé dans ~/.hermes/memory/modules/revue_editoriale/sources/rss/2026-06-20.md ✅