Job ID: 76ce033272c7
Run Time: 2026-07-23 16:08:31
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-23
═══════════════════════════════════════════
=== BBC World ===
• Oil prices hit $100 for the first time since May
The price of Brent crude rose more than 6% on Thursday as the war in the Middle East continues to escalate.
• Saudis must recognise Israel for nuclear deal, says Trump
The US president says the landmark agreement to help Saudis develop nuclear energy is dependent on it joining the Abraham Accords.
• France evacuates 20,000 as wildfires spread in south-west
Most of those evacuated were tourists from campsites around Arcachon Bay in France's Gironde region.
• Yemen's Houthis attack Saudi tanker as US launches more Iran strikes
The Iran-backed group, which previously announced a "maritime embargo" against Saudi Arabia, also claims to have hit another vessel.
• 'I am still alive': Indian activist on hunger strike for 26 days loses 11kg
Sonam Wangchuk has been the main draw at the Cockroach Janta Party (CJP) protest in Delhi.
• Canada's 'powerful' dairy sector is in Trump's trade crosshairs
Canada's dairy supply management system is in the spotlight after the US president singled it out as one of three main irritants used to justify new tariffs.
• South Korea woman acquitted of murdering newborn after hospital delivery
The woman, who had wanted to end her pregnancy at 36 weeks, gave birth to a baby who doctors later killed.
• 'Let's enjoy the ride' says Elon Musk, as AI fears mount
Talking to The Economist, Musk said he doesn't care if people hate him and said he was not a racist.
• Russia's businesses under strain from Ukraine's attacks on Wildberries
Ukrainian drones have hit several retail warehouses belonging to Russia's biggest online retailer Wildberries in a matter of days.
• Google burning through cash with spiralling AI costs
The company said earlier this year it expected to spend as much as $190bn on AI investments.
=== Le Monde International ===
• Russie : le Kremlin menace de « mort civique » les opposants en exil
Les députés de la Douma ont adopté, mercredi, une loi privant les opposants ayant fui la Russie d’accès aux services bancaires et aux transactions immobilières dans le pays, mais aussi aux services co
• Ma vie d’exilée russe à Paris : à Sciences Po, « je dois intervenir en tant que fondatrice d’un média et non comme victime de la répression »
« Une Russe à Paris » (3/6). La journaliste Elizaveta Osetinskaya, arrivée en France en 2022, intervient dans cet établissement d’études supérieures. C’est, selon elle, un des plus ouverts en France,
• EN DIRECT, guerre au Moyen-Orient : la poursuite du conflit risque d’entraîner une inflation plus forte que prévu, estime la présidente de la BCE, Christine Lagarde
La présidente de la Banque centrale européenne a jugé « alarmante » l’extension du conflit à la mer Rouge, où des rebelles houthistes du Yémen, alliés de l’Iran, ont revendiqué des frappes contre deux
• « Il sera difficile de me défaire du traumatisme que j’ai subi » : après une année sous la menace d’une expulsion, une Franco-Algérienne obtient l’annulation de son OQTF
En juin 2025, cette femme, naturalisée française en 1997, s’est vu notifier une obligation de quitter le territoire français. Depuis, elle a vécu dans la crainte d’être arrêtée, avant que la justice n
• La Grèce approuve l’achat d’un bouclier de défense aérienne israélien, nouvelle étape d’un rapprochement avec l’Etat hébreu
Les Grecs vont se doter d’un système intégré valant 3 milliards d’euros, après la validation de l’opération, jeudi 23 juillet, par le Conseil de défense. Cet achat fait partie d’un vaste programme de
• Mali : l’ONU exige une enquête sur les tortures et les meurtres après une attaque au nord du pays
Le Haut-Commissariat des Nations unies aux droits de l’homme a exigé jeudi une enquête indépendante après l’exécution de dizaines de militaires maliens qui s’étaient rendus, lors d’une attaque de sépa
• La Commission européenne inflige une amende de 890 millions à Google, au risque de provoquer le courroux de Trump
L’amende sanctionne notamment les pratiques du moteur de recherche grâce auxquelles le groupe américain met systématiquement en avant ses propres services, au détriment de ses concurrents.
• EN DIRECT, guerre en Ukraine : Volodymyr Zelensky propose au très populaire ex-ministre de la défense Mykhaïlo Fedorov un poste de vice-premier ministre
« Je crois que Mykhaïlo [Fedorov] fait partie de l’équipe », a déclaré le président ukrainien, lui proposant d’être son vice-premier ministre chargé des innovations militaires. Mykhaïlo Fedorov a été
• Nucléaire saoudien : Donald Trump conditionne l’accord à la reconnaissance d’Israël par Riyad
Le président américain a annoncé que l’accord sur le nucléaire civil entre les Etats-Unis et l’Arabie saoudite était « entièrement conditionné » à l’adhésion de Riyad aux accords d’Abraham, actant de
• Au Brésil, la politique de prévention des incendies du président Lula porte ses fruits
Le pays sud-américain a enregistré en 2025 une forte baisse des surfaces brûlées, de l’ordre d’un tiers par rapport à l’année précédente. L’effet probable d’un renforcement de la prévention porté par
=== France Info Monde ===
• Dans le Pas-de-Calais, 150 migrants secourus au large de Berck-sur-Mer
Il s'agit de l'un des sauvetages les plus importants "de l'histoire de la crise migratoire", selon la SNSM du secteur.
• A Gaza, la sécurité alimentaire s'améliore mais reste fragile, selon l'ONU
Un seul point de passage pour l'aide est ouvert à Gaza. L'acheminement des biens essentiels y reste donc limité, relate le Programme alimentaire mondial.
• Promenade dans Balat, le quartier aux mille maisons colorées, parmi les plus photographiés d'Istanbul
Le "13 Heures" vous emmène en balade, direction Istanbul, en Turquie. Visite guidée de Balat et ses vieilles maisons colorées, l'un des quartiers les plus photographiés de la ville.
• Affaire Epstein : après la mort de Daniel Siad, quatre questions sur les suites de l'enquête en France
L'homme de 69 ans, rabatteur présumé de Jeffrey Epstein, était visé par au moins six plaintes, notamment pour viols. Retrouvé mort à son domicile lundi, il n'avait jusqu'ici jamais été entendu par la
• Les Etats-Unis conditionnent l'accord sur le nucléaire civil avec l'Arabie saoudite à une reconnaissance d'Israël
Cet accord ouvre la voie à la construction de centrales nucléaires en Arabie saoudite, qui dépend pour l'heure de centrales au gaz et au pétrole pour son électricité. Mais des critiques s'élèvent sur
• Un petit chien californien retrouvé après deux semaines
En Californie, Prieta, un petit chien, était porté disparu depuis les festivités du 4 juillet. Il a finalement été retrouvé nageant dans la baie de San Francisco le 18 juillet. Les pompiers l'ont seco
• Le Premier ministre indien, Narendra Modi, promet de punir "sévèrement" les responsables des fraudes aux examens, à l'origine de la colère étudiante
La police de la capitale a sévèrement réprimé lundi une manifestation de dizaines de milliers d'étudiants et de jeunes qui tentaient de rallier le Parlement en exigeant la démission du ministre de l'E
• Google sanctionné de 890 millions d'euros d'amendes par l'Union européenne pour des atteintes à la concurrence
Le géant américain se voit notamment reprocher d'avoir mis en avant ses propres services dans son moteur de recherche. Une sanction qui risque de provoquer la colère de Donald Trump.
• Affaire Epstein : l'association Innocence en danger assigne l'État français pour "déni de justice" après la mort de l'homme suspecté d'être le rabatteur du pédocriminel
Daniel Siad, visé par plusieurs plaintes dont deux pour viols, n'a jamais été entendu par la justice alors que les premiers signalements remontent à l'été 2019.
• La Russie met en garde les Etats-Unis contre la poursuite "inadmissible" de livraisons d'armes américaines à l'Ukraine
Le chef de la diplomatie russe, Sergueï Lavrov, a rencontré son homologue américain Marco Rubio en marge d'un sommet à Manille, la capitale des Philippines.
=== France 24 ===
• Tour de France : Richard Carapaz remporte la 18e étape au sommet d'Orcières Merlette
Victoire pour le coureur équatorien Richard Carapaz en solitaire, jeudi, entre Voiron et Orcières Merlette lors de la 18e du Tour de France. Il s'agit de sa deuxième victoire sur la Grande Boucle. Le
• Mauritanie : le paradis menacé d’une communauté de pêcheurs
En Mauritanie, dans le parc national du Banc d’Arguin situé entre le désert et l'océan Altantique, les Imraguens pratiquent une technique de pêche à pied depuis des siècles. Le savoir-faire tradition
• Istanbul : balade à Balat, quartier coloré où se croisent héritages d’Europe et d’Asie
Dans le quartier de Balat, sur la rive européenne d’Istanbul, ruelles pavées, maisons aux façades colorées et lieux de culte racontent la ville-monde qu’est Istanbul. Reportage France 2.
• Espagne : un mégafeu ravage plus de 30 000 hectares en Castille
En Espagne, un mégafeu parti le 16 juillet dans la Sierra Norte de Guadalajara, en Castille-La Manche, a déjà calciné environ 30 à 32 000 hectares. Correspondance de Maude Petit-Jové depuis Madrid po
• En Tunisie, les coupures d'électricité se multiplient en pleine canicule
En Tunisie, une canicule frappe le pays depuis une dizaine de jours. Les températures grimpent et les délestages alimentent la colère. De nombreux Tunisiens dénoncent le manque d'anticipation des aut
• Un pub ferme chaque jour au Royaume-Uni, le Premier ministre leur donne un coup de pouce
Bien décidé à montrer qu'il agit pour améliorer l'économie de son pays et la vie de ses concitoyens, le nouveau Premier ministre britannique, Andy Burnham, a pris jeudi une troisième mesure économiqu
• Au Cap-vert, le pillage de sable défigure le littoral
Au Cap-Vert, il ne reste presque plus rien de l’image de carte postale de certaines plages de l’île de Santiago. Pendant des décennies, l’extraction illégale de sable marin pour le secteur du bâtimen
• Au Rwanda, lancement de la troisième édition du festival Kigali Ciné Junction
À Kigali, le rendez-vous désormais bien ancré du cinéma africain a rouvert ses portes. Le festival Kigali Cine Junction offre aux Rwandais cinq jours de projections, d'ateliers et de rencontres, entr
• Au Tchad, 22 000 agents déployés pour évaluer la population du pays
Le Tchad a lancé le troisième Recensement Général de la Population. Une opération d’ampleur nationale qui n’avait plus été réalisée depuis 2009. L'objectif pour les autorités de Ndjamena est de dispo
• Tunisie : des coupures d'électricité après des températures records
La tension monte après des coupures d'électricité répétées dans plusieurs régions liées à des opérations de délestage de la Société tunisienne de l'électricité et du gaz. Depuis une dizaine de jours,
=== 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-23.md ✅