Job ID: 76ce033272c7
Run Time: 2026-06-28 16:09:27
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) ls ~/.hermes/profiles/<profile>/cron/output/<job_id>/
The most recent YYYY-MM-DD_HH-MM-SS.md file often contains the ## Script Output section with collected RSS data, even if the final delivery failed. Extract the data and proceed.
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-28
═══════════════════════════════════════════
=== BBC World ===
• Two boys rescued from Venezuela earthquake rubble after days of being trapped
Rescuers spent six hours carefully digging to reach one of the boys, as many residents continue searching through the rubble by hand, still waiting for heavy machinery to arrive.
• In Caracas, this feels like the hardest moment in Venezuela's modern history
Rescue teams are working ceaselessly to reach those trapped under rubble. But as hope fades, anger is growing.
• US and Iran exchange strikes and accuse each other of violating ceasefire
Iran says it has launched retaliatory attacks at US infrastructure in Kuwait and Bahrain after the US said it hit multiple targets across Iran.
• Eleven killed after plane carrying skydivers crashes in eastern France
The pilot and 10 passengers died in the incident, local officials said.
• Heatwave breaks records in Germany, Denmark and Czech Republic
An estimated 150 million people have been experiencing temperatures of over 35C across Europe.
• Australian man charged with murder after girl found dead in suitcase in Thailand
The 17-year-old's body was found discarded near a railway track on Saturday, police say.
• Fourteen killed in Saudi Arabia helicopter crash
The aircraft belonged to state oil giant Aramco and the cause of the crash is being investigated.
• 117 dead dogs found at California 'no-kill' animal rescue - many with gunshot wounds
Hundreds more animals are still missing from the California facility as investigators continue excavating the grounds.
• Uganda's leading media outlets shut down by army chief
NTV and Daily Monitor say their offices in the capital are under "military siege".
• Australia to double maximum penalty for platforms in breach of social media ban
Children under the age of 16 have been prevented from 10 key social media platforms in Australia since December 2025.
=== Le Monde International ===
• Coupe du monde 2026 : « Neuf équipes africaines qualifiées sur dix, c’est remarquable », salue l’ancien gardien camerounais Joseph-Antoine Bell
Alors que l’Afrique du Sud défie dimanche le Canada en seizièmes de finale, le bilan des équipes africaines engagées dans le Mondial 2026 est très positif, selon Joseph-Antoine Bell. Revue d’effectifs
• EN DIRECT, guerre en Ukraine : Vladimir Poutine promet d’« assurer » la sécurité de la Russie, alors que les attaques ukrainiennes se multiplient
« Nous voyons les problèmes. Nous les reconnaissons et nous y répondons. Mais nous assurerons sans aucun doute la sécurité du pays et de nos citoyens », a affirmé M. Poutine lors d’un congrès de son p
• La Grèce tente de réguler la privatisation des plages pour lutter contre le surtourisme
Le gouvernement grec a interdit l’exploitation commerciale de 251 plages à travers le pays. Transats payants, « beach bars », petites cantines sont désormais interdits.
• Israël reconnaît le génocide arménien, une décision historique qui ravive les tensions avec la Turquie
Le président turc, Recep Tayyip Erdogan, s’est imposé comme l’un des plus virulents critiques de la guerre à Gaza, déclenchée en représailles à l’attaque du Hamas sur le sol israélien le 7 octobre 202
• « En Albanie, avec la “révolution des flamants roses”, le peuple refuse d’être réduit à une position de vassalité »
Dans une tribune au « Monde », l’écrivain et journaliste Fatos Lubonja explique les enjeux de la révolution albanaise, où la société civile s’élève contre les projets d’immobilier de luxe menés par le
• En Ouganda, le principal groupe de médias indépendant dit être « assiégé » par l’armée
Le chef de l’armée, Muhoozi Kainerugaba, qui est aussi le fils du président, Yoweri Museveni, 81 ans, a affirmé depuis ces derniers mois son emprise croissante sur le pays, en ordonnant l’arrestation
• Israël, qui affirme avoir tué plusieurs « terroristes » en Syrie, veut maintenir sa présence sur le plateau du Golan
L’Etat hébreu a mené, depuis l’arrivée au pouvoir en Syrie de nouvelles autorités islamistes, des incursions répétées en territoire syrien, ainsi que des bombardements, et a déclaré vouloir une zone d
• « Le Golfe est-il persique ou arabique ? Ou bien les deux ? »
La dénomination historique de « golfe Persique » a pu être contestée par des régimes arabes, mais Donald Trump a renoncé, en 2025, à la remplacer par « golfe Arabique ».
• « J’attends une heure que ça fasse effet, et je dors ensuite pendant dix heures » : la consommation de cannabis augmente chez les plus de 65 ans aux Etats-Unis
« Cartes vermeil ». Une fois par mois, un de nos journalistes raconte comment on vieillit hors de nos frontières. Outre-Atlantique, la consommation de cannabis augmente chez les plus de 65 ans, qui y
• Vladimir Poutine ou la solitude de l’« Homo sovieticus »
Entre déni de réalité, désir de revanche et communication calibrée, le président russe tente de se poser en maître du jeu. Mais, après plus de quatre ans de guerre en Ukraine, ces vieilles ficelles hé
=== France Info Monde ===
• Un an au pouvoir et déjà en sursis : en Allemagne, le chancelier Friedrich Merz fragilisé
Le chancelier Friedrich Merz et la coalition au pouvoir présentent la semaine prochaine un train de réformes (retraites, fiscalité, santé). De quoi reprendre la main ?
• Après de nouvelles frappes, la guerre entre l'Iran et les États-Unis se dirige-t-elle vers une reprise ?
Au Moyen-Orient, la trêve entre l’Iran et les États-Unis est de nouveau menacée. Depuis samedi 27 juin, les échanges de tirs ont repris. L’armée américaine a visé dix infrastructures iraniennes, dont
• Les recherches se poursuivent après le séisme au Venezuela, qui a fait au moins 1 430 morts et 50 000 disparus
Au Venezuela, trois jours après le double séisme qui a ravagé le nord du pays, l'espoir de retrouver des survivants est très réduit. Mais dans la nuit de samedi 27 à dimanche 28 juin, contre toute att
• Crash d'avion en Meurthe-et-Moselle : le maire de Nancy fait part de sa "stupeur" et son "immense émotion"
Le maire précise qu'il n'y a aucune victime collatérale mais en revanche, des personnes choquées qui ont assisté à la scène, notamment des proches des passagers de l'avion. Elles sont prises en charge
• En Europe, au moins 191 millions de personnes vont passer dimanche sous plus de 35°C à cause de la vague de chaleur
Au total, les températures maximales devraient dépasser 30°C pour plus de 381 millions d'habitants en Europe, selon les calculs de l'AFP.
• Séismes au Venezuela : un garçon de 11 ans retrouvé vivant trois jours après la catastrophe
Les secousses de magnitude 7,2 et 7,5 qui ont frappé le nord du pays mercredi ont particulièrement touché La Guaira.
• "Washington, le premier des Américains" de l’historien Yves-Marie Péréon, aux éditions Tallandier.
Alors que les États-Unis s'apprêtent à célébrer leurs 250 ans, voici l'histoire et le portrait intime de celui qui fut le premier président des USA. Une figure exemplaire.
• A Budapest, des dizaines de milliers de personnes ont défilé pour la première marche des fiertés de l'après Viktor Orban, sous la canicule
La victoire électorale de Peter Magyar, qui a mis fin à 16 ans de gouvernement Orban, a suscité un immense soulagement au sein de la communauté LGBT+ du pays.
• En Russie, une attaque ukrainienne fait un mort et provoque un incendie dans une raffinerie
La raffinerie de Slaviansk-sur-Kouban est l'une des plus grandes du sud de la Russie et a déjà été touchée par des frappes.
• DIRECT. Guerre au Moyen-Orient : l'Iran prévient que toute ingérence dans sa gestion du détroit d'Ormuz risque "d'accroître les tensions"
Téhéran et Washington ont de nouveau échangé des tirs dans la nuit de samedi à dimanche.
=== France 24 ===
• Mondial 2026 : aucune entente avec l'Algérie, assure le sélectionneur de l'Autriche
Ralf Rangnick, sélectionneur de l'Autriche, a raillé les soupçons d'entente entre son équipe et l'Algérie à l'issue de leur spectaculaire match nul 3-3, lors de leur dernière rencontre de poule à
• Mondial 2026 - RDC : les supporters des Léopards fêtent une qualification historique
La République démocratique du Congo a battu l'Ouzbékistan 3-1 samedi 27 juin à Atlanta et obtenu une qualification historique pour les 16es de finale de la Coupe du monde.
• Élections en Nouvelle-Calédonie : "Les habitants sont lassés"
À 17H00 locales (08H00 à Paris), une heure avant la fermeture des bureaux de vote, la participation atteignait 54,42%, contre 58,49% en 2019 à la même heure, selon un communiqué du haut-commissariat
• Mondial 2026 : la RD Congo se qualifie en 16es, "Kinshasa a explosé de joie"
La République démocratique du Congo a battu l'Ouzbékistan 3-1 samedi à Atlanta et obtenu une qualification historique pour les 16es de finale de la Coupe du monde, avec une affiche à venir contre l'A
• Nouvelle-Calédonie : le scrutin a moins mobilisé qu'en 2019
Les Calédoniens ont voté dans le calme dimanche 28 juin pour les premières élections provinciales depuis 2019, un scrutin appelé à redessiner les rapports de force politiques de l'archipel et à peser
• Afrique du Sud - Canada : suivez en direct le premier 16e de finale du Mondial
Les 16es de finale débutent dimanche à Los Angeles avec le match opposant le Canada, co-organisateur de cette Coupe du monde, à l'Afrique du Sud. Pour continuer à tracer leur route dans cette compéti
• Avec 9 pays qualifiés en 16es, le football africain vit "un Mondial historique"
Un seul pays africain manque à l’appel à l’heure où débutent les 16es de finale de la Coupe du monde : la Tunisie. Tous les autres ont réussi à se qualifier pour la suite de la compétition. Premier p
• Séismes au Venezuela, démission de Starmer, statue de Lumumba au Mondial : la semaine en images
Retour sur les temps forts de l'actualité de la semaine : la démission du Premier ministre britannique Keir Starmer deux ans après sa nomination, les suites de la canicule en France, l'arrivée du sup
• Mondial 2026 : La RDC et l'Algérie qualifiées au bout du suspense
Longtemps menés face à l'Ouzbékistan, les Léopards ont réussi à renverser la situation pour offrir à la République démocratique du Congo une première qualification historique en phase finale de Coupe
• Mondial 2026 : la RD Congo qualifiée, les supporters rêvent des demi-finales
Les supporters de la RD Congo célèbrent la qualification des Léopards à Atlanta et affichent leurs ambitions avant le quart de finale contre l'Angleterre. Plusieurs regrettent également l'absence du
=== 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.
RuntimeError: [Errno 32] Broken pipe