Job ID: 76ce033272c7
Run Time: 2026-07-22 16:07:22
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 toolsweb_extract may fail when the backend is DuckDuckGo (search-only). Use the fallback technique in references/curl-extraction-fallback.md when this happens: download HTML with curl -o /tmp/page.html then extract text with the Python cleanup recipe documented theresend_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).references/curl-extraction-fallback.md for extracting text from web pages when web_extract or the browser are unavailable — the curl+Python HTML-stripping recipe tested on major French news sites.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-07-22
═══════════════════════════════════════════
=== BBC World ===
• US to announce deal allowing Saudi Arabia a nuclear programme
The agreement would fulfil a long-held Saudi ambition but could attract concern in Israel and from some US lawmakers.
• Trump threatens to target Iran's bridges and power plants if Hormuz attacks persist
Donald Trump says the US will respond any time Iranian forces shoot at a ship in the Strait of Hormuz.
• Who is Mykhailo Drapatyi, Ukraine's new commander-in-chief?
Drapatyi becomes Ukraine's third commander-in-chief since Russia's full-scale invasion in February 2022.
• Tankers make sharp U-turns after Houthi shipping threat
All of the ships were travelling to or from Saudi ports before changing course, ship-tracking data shows.
• Ukrainian drones hit Russian online giant retailer Wildberries for second time
Logistics hubs belonging to Wildberries in the Krasnodar and Stavropol regions were struck overnight.
• British woman jailed for blackmail after accusing banker of rape in Hong Kong
Isabel Rose was convicted of trying to extort £100,000 from the UK banker and perverting the course of justice.
• Wreckage of Pan Am plane that shaped aviation safety found 74 years on
The deaths of 52 people on the Clipper Endeavor led to the introduction of mandatory pre-flight safety briefings.
• Modelling scout linked to Epstein found dead in Paris
Daniel Siad, whose name appears in the Epstein files thousands of times, denied knowledge of the threat Jeffrey Epstein posed.
• India's Modi government under growing pressure as 'cockroach' protests intensify
The CJP got a boost on Tuesday when the opposition Congress party demonstrated outside the PM's house.
• Police station opens at Hitler's birthplace in bid to rid site of Nazi link
The opening follows years of controversy about what to do with the 17th-Century former inn, where the Nazi dictator was born.
=== Le Monde International ===
• EN DIRECT, guerre en Ukraine : la nomination de Mykhaïlo Drapaty comme commandant en chef de l’armée ukrainienne ne changera pas la situation sur le front, affirme le Kremlin
En réponse aux mobilisations citoyennes pour demander le départ du général Oleksandr Syrsky, Volodymyr Zelensky a remplacé ce dernier par le populaire commandant des forces interarmées.
• EN DIRECT, guerre au Moyen-Orient : après les menaces de Donald Trump, l’Iran promet des représailles contre des infrastructures régionales liées aux intérêts américains
Le président américain avait menacé, un peu plus tôt mercredi, de répliquer à toutes les prochaines attaques de navires par l’Iran dans le détroit d’Ormuz en bombardant les ponts et les centrales élec
• Ma vie d’exilée russe à Paris : pour les soins et l’éducation, « la France est une version améliorée de l’URSS »
« Une Russe à Paris » (2/6). Arrivée en France en 2022, la journaliste Elizaveta Osetinskaya s’est installée dans le 16ᵉ arrondissement de la capitale. Elle loue notamment le système scolaire français
• Le procureur général de Hongrie, nommé sous l’ex-premier ministre Viktor Orban, annonce sa démission
Gabor Balint Nagy met en cause le gouvernement de Péter Magyar, conservateur pro-européen, pour expliquer sa décision.
• « Il faut empêcher qu’Ebola ne devienne une menace régionale et internationale »
Face aux coupes dans l’aide au développement et au risque d’une plus grande propagation du virus en République démocratique du Congo, un collectif de responsables politiques et du monde de l’entrepris
• En Algérie, le « scandale des moutons » de l’Aïd embarrasse le pouvoir
Afin d’enrayer la flambée des prix avant la « fête du sacrifice », plus de 1 million d’ovins ont été importés dans le pays. Mais cette opération d’envergure, voulue par le président Abdelmadjid Tebbou
• Au Cambodge, Poipet, la cité casino, rattrapée par la répression contre l’industrie du « scam »
A la frontière entre le pays khmer et la Thaïlande, Poipet, déjà connue pour ses jeux d’argent, est également devenue l’un des hauts lieux de la cyberfraude dans la région. La répression menée sous la
• Incendies en Espagne : 32 000 hectares brûlés au nord de Madrid, où « les fronts » du feu « se sont réduits »
Le président de la région de Castille-La Manche dit espérer pouvoir circonscrire d’ici jeudi l’incendie qui fait rage dans la province de Guadalajara.
• Ebola : le bilan de l’épidémie dépasse désormais les 1 000 morts en RDC et en Ouganda, selon l’OMS
« L’épidémie conserve une longueur d’avance sur nous et nous sommes encore dans une phase où nous tentons de rattraper son évolution », avait déclaré mardi Thierno Baldé, un responsable de l’Organisat
• Algérie : Emmanuel Macron assure que la France n’a aucun « objectif chiffré » concernant le nombre de visas octroyés et nie tout « laxisme »
« Le président de la République a tenu à corriger les propos de notre ambassadeur en Algérie, qui ont été très relayés ces derniers jours sur notamment le nombre de visas », a déclaré la parole du gou
=== France Info Monde ===
• La Lituanie compte parmi les pays de l'UE au déclin démographique le plus marqué
La population de l'Union européenne devrait diminuer de 50 millions de personnes d'ici 2100, selon un nouveau rapport de la Commission européenne. La Lituanie figure parmi les pays les plus touchés, c
• La ministre de la Culture Catherine Pégard assure veiller à "l'intégrité" de la DJ Barbara Butch
L'artiste doit se produire samedi soir à Saint-Martin-du-Tertre, un village de l'Yonne, dans le cadre d'un évènement musical organisé par une association locale.
• China Moses et l'acceptation de soi : "Ma mère a vu quelque chose en moi, que je ne voyais pas"
Dee Dee Bridgewater et China Moses sont les invitées exceptionnelles toute cette semaine du Monde d’Elodie, pour la sortie de leurs albums respectifs, "Elemental", pour la mère et "It’s complicated",
• Liban : la cité antique de Tyr inscrite au patrimoine mondial en péril de l'Unesco
Située sur la côte dans le sud du Liban, Tyr est l'une des plus anciennes cités du monde méditerranéen. La ville est la cible d'une campagne de frappes israéliennes depuis le début de la guerre avec l
• Guerre au Moyen-Orient : le complexe souterrain de Pickaxe Mountain est devenu la nouvelle cible de Donald Trump en Iran
Situé près du site nucléaire de Natanz, le complexe souterrain est soupçonné d'abriter des centrifugeuses destinées au programme nucléaire iranien. Donald Trump a menacé de viser ces installations ce
• Il découvre un cratère de météorite vieux de 390 millions d'années... sur Google Maps
Préparant ses vacances dans cette région du Québec, Joël Lapointe s'est rapidement aperçu d'une anomalie géographique. Dépêchés sur place, des chercheurs ont pu valider sa découverte.
• Le maire de New York, Zohran Mamdani, dit qu'il n'a pas la capacité juridique d'arrêter Benyamin Nétanyahou et appelle à l'action des autorités fédérales
L'élu démocrate envisageait de faire arrêter le Premier ministre israélien, visé par un mandat d'arrêt délivré par la Cour pénale internationale, s'il se rendait à l'Assemblée générale de l'ONU à New
• Mort de Daniel Siad : "Très choquée" et "en colère", une plaignante réclame des réponses sur les causes de sa mort
Ebba Karlsson a porté plainte pour viol en février contre Daniel Siad, recruteur français de mannequins.
• Pour entraîner sa population à une crise majeure, Taïwan va couper Internet pendant 30 minutes sur tout son territoire
Le gouvernement taïwanais se demande si sa population est prête à survivre dans un monde sans téléphonie mobile. Pour préparer ses habitants à une éventuelle grande crise d'Internet, le pays va couper
• Qui est El Mahdi Lyoubi, le rappeur détenu depuis dix jours au Maroc ?
Le réalisateur et musicien, connu sous le nom de scène de Mehdi Black Wind, est emprisonné depuis dix jours à Casablanca. Il est entendu mercredi par la justice marocaine. Près de 700 personnalités du
=== France 24 ===
• Le Lac Rose retrouve un peu de sa couleur et relance l’économie du sel
Au #Senegal, le Lac Rose retrouve sa couleur et relance le tourisme de la région. En 2022, ce lac emblématique avait perdu sa couleur et sa salinité à la suite d'inondations extrêmes, entraînant un e
• Mykhaïlo Drapaty, le visage d’une nouvelle génération à la tête de l’armée ukrainienne
Mykhaïlo Drapaty a été nommé mardi commandant en chef de l'armée ukrainienne par Volodymyr Zelensky. Réformateur et soucieux de ses troupes, ce stratège militaire expérimenté incarne un profil qui se
• Ukraine : Mykhailo Drapatyi nommé nouveau commandant en chef de l'armée
Le nom de Mykhailo Drapatyi figure parmi les plus importants aujourd'hui en Ukraine après sa nomination au poste de commandant en chef de l'armée. Il succède à Oleksandr Syrskyi, dont de nombreux man
• Inde : la crise entre les jeunes "cafards" et le gouvernement se poursuit
Le bras de fer s'est poursuivi ce 22 juillet en Inde entre la contestation des "cafards", déterminés à obtenir la tête du ministre de l'Education pour cause de fraudes aux examens universitaires, et
• Le Sénégal soutient désormais la candidature de Macky Sall à l'ONU
Au Sénégal, quelques jours après avoir reçu Macky Sall au palais présidentiel, le président Bassirou Diomaye a tranché ce lundi et a décidé d'appuyer la candidature de son prédécesseur au poste de se
• Canicule de juin : Santé publique France calcule un excès de près de 6 0000 décès dans l'Hexagone
Dans un deuxième bilan sur la période caniculaire allant du 17 juin au 2 juillet, Santé publique France constate un excès de mortalité de 5 764 personnes par rapport aux données normales sur cette pé
• Incendies en France : décès de deux pompiers lors d'une intervention
Deux sapeurs-pompiers sont morts lors d'une intervention contre un incendie désormais fixé, survenu près de l'aéroport de Bordeaux, alors que leur camion a été "piégé" par les flammes. Reportage Fran
• Guinée : Conakry réclame à la France des manuscrits pillés pendant la colonisation
La Guinée demande à la France la restitution de manuscrits pillés pendant la colonisation. Conakry souhaite notamment récupérer le Coran de Samory Touré, conservé au Musée de l'Armée. Pour en parler,
• RD Congo : l’opposition ouvre le dialogue avec le président Tshisekedi
L'opposition, réunie autour de la plateforme politique C64, a annoncé le report de sa marche pour s'opposer au projet de modification de la Constitution initialement prévue ce 22 juillet. Une annonce
• Guinée : de fortes pluies provoquent l'effondrement meurtrier d'un immeuble à Conakry
En Guinée, les premières fortes pluies qui s’abattent sur Conakry depuis quelques jours provoquent d’importants dégâts. Un immeuble s’est effondré sur plusieurs habitations. Le bilan provisoire fait
=== 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 archivé dans /home/sebastien/.hermes/memory/modules/revue_editoriale/sources/rss/2026-07-22.md.