Job ID: 76ce033272c7
Run Time: 2026-06-21 16:10:08
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-21
═══════════════════════════════════════════
=== BBC World ===
• US and Iran begin talks on initial peace deal in Switzerland
The face-to-face meeting follows ongoing fighting in Lebanon and Iran's claim to have shut the Strait of Hormuz.
• Fuel sales halted in occupied Crimea as Ukraine targets oil facilities
Fuel had already been rationed due to shortages caused by Kyiv's attacks against supply routes in Russian-occupied territories.
• Nobel Peace Prize winner triumphs at Ethiopian polls but fears grow of new conflict
Abiy Ahmed's party retains its huge majority despite unrest in several parts of Ethiopia and tensions with its neighbours.
• Half of France under red heat alert as alcohol banned at street music festival
Temperatures are forecast to peak on Monday, and authorities warn they could match historic highs.
• Colombia's escalating, brutal internal conflict is defining its presidential election
A left-wing senator who backs talks with armed gangs faces an outsider endorsed by Trump.
• Former Olympian denies vandalising Washington Reflecting Pool after arrest
Davey Hearn says he was simply touching the new paint at the site out of curiosity and did not remove or alter it.
• Tight security as Indian students resit medical exam after alleged paper leak
Millions of candidates face biometric checks and frisking as air force deployed to secure exam papers.
• Israeli strikes kill six people in Gaza including Al Jazeera cameraman, officials say
The Israeli military accused Ahmed Wishah of being a "Hamas sniper operative", without providing evidence.
• Low-key funeral held for giant of the art world David Hockney
The artist, who passed away at his home in London earlier this month, requested just his partner and great-nephew attend.
• Dutch royals enjoy two big results in one World Cup day
There may be about 5,000 miles between the Netherlands and their former colony Curacao but members of the Dutch royal family managed to see both sides play on Saturday.
=== Le Monde International ===
• EN DIRECT, guerre en Ukraine : les tensions entre l’Ukraine et la Pologne sont « une erreur stratégique dont les deux parties pâtiront », regrette le premier ministre polonais, Donald Tusk
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 a retiré la plus haute distinction de son pays à Volodymyr Ze
• « On ne s’habitue jamais aux morts » : à Tyr, dans le sud du Liban, le retour impossible à la vie ordinaire après des mois de guerre
Les habitants reviennent peu à peu dans cette ville côtière durement touchée par les bombardements israéliens, mais l’inquiétude perdure alors que le cessez-le-feu a été maintes fois violé, avant une
• IA : « L’Europe doit transformer les discours sur la souveraineté numérique en une véritable stratégie industrielle »
La réussite des Etats-Unis ne repose pas seulement sur la loi du marché mais vient de plusieurs révolutions technologiques que les Européens n’ont pas su déployer massivement, constate, dans une tribu
• EN DIRECT, guerre au Moyen-Orient : Donald Trump menace de frapper l’Iran « très fort » si ses alliés au Liban continuent de « causer des problèmes »
Les négociations entre l’Iran et les Etats-Unis sous médiation pakistanaise ont commencé en Suisse. Tandis que Téhéran a affirmé que le Liban serait le « principal » sujet des pourparlers, Israël a dé
• Al-Jazira rejette les accusations israéliennes contre son journaliste Ahmed Washah, tué par une frappe israélienne dans la bande de Gaza
Le cameraman, frère de Mohammed Washah, un correspondant de la chaîne également tué en avril par un drone israélien, est accusé par Israël d’avoir été un « terroriste du Hamas ».
• En images. Dans les vestiaires, le roi des Pays-Bas célèbre le match nul du Curaçao en Coupe du monde
Samedi 20 juin, l’équipe curacienne a obtenu son premier point dans la compétition, en réalisant un match nul face à l’Equateur.
• En Crimée, la vente de carburant suspendue après des attaques ukrainiennes
Privée de carburant et d’électricité, la Crimée fait face à une nouvelle vague d’attaques de drones ukrainiens qui ont fait quatre morts, un cinquième ayant été tué alors qu’il circulait sur un ferry
• En Chine, les mariages « low cost » font recette
« Transports amoureux ». Comment se rencontre-t-on, s’aime-t-on, vit-on en couple ailleurs ? Le mariage traditionnel, très onéreux, est devenu un frein aux unions et une source d’endettement pour les
• Maroc : dans le Rif, la légalisation du cannabis profite encore peu aux producteurs locaux
Adoptée en 2021, la légalisation du cannabis à usage médical et industriel devait transformer une économie longtemps informelle en filière encadrée et porteuse de développement pour les zones montagne
• « Faire exister un pays impossible à filmer » : la réalisatrice franco-libanaise Danielle Arbid importe Beyrouth à Paris dans « Seuls les rebelles »
Alors que Beyrouth subissait encore les frappes de l’armée israélienne le 14 juin, la cinéaste franco-libanaise préparait la sortie de son dernier film « Seuls les rebelles », en salle le 24 juin, con
=== France Info Monde ===
• L'Ukraine dévoile TrophyLab, la base de données participative qui révèle au monde les secrets de l'armée russe
Développé par le ministère de la Défense ukrainien, cet outil rassemble les connaissances acquises par l'armée ukrainienne sur l'armement utilisé par la Russie sur son territoire depuis le début de la
• REPORTAGE. "Ce qui a fédéré, c'est son talent" : dans le Jura, la mobilisation inédite d'un village pour demander la régularisation d'une chanteuse nigériane
Ayomidé et sa famille, originaires du Nigéria, ont vu leur demande d'asile rejetée. Ses professeurs et un collectif ont décidé de la soutenir en lui permettant de raconter son histoire en chanson.
• En Suisse, le vice-président américain, J.D. Vance, salue une "rencontre historique" avec l'Iran et appelle à "tourner une nouvelle page"
Des pourparlers ont lieu dimanche dans un complexe hôtelier de luxe des Alpes suisses, afin de finaliser un protocole d'accord mettant fin aux hostilités au Moyen-Orient.
• La reconstruction de l'Ukraine : un sujet qui n'attend pas la fin de la guerre
Après un sommet du G7 qui a affirmé son "soutien indéfectible" à l'Ukraine, la semaine prochaine sera marquée par une conférence internationale pour la reconstruction de l'Ukraine, en présence de Volo
• L'artiste plasticien israélien Yaakov Agam est mort à l'âge de 98 ans
Une de ses œuvres phares, le Salon Agam, conçu pour le palais présidentiel de l'Elysée, figure encore dans les collections du Centre Pompidou à Paris.
• Accord États-Unis - Iran : des négociation sous tensions
L'accord États-Unis - Iran entre en phase de négociation à Lucerne (Suisse) malgré des tensions persistantes. Ce sommet de 60 jours vise trois objectifs : le nucléaire, les avoirs gelés et le pétrole.
• Frappes israéliennes, trafic maritime, pourparlers menacés… Ce que l'on sait de la nouvelle "fermeture" du détroit d'Ormuz par l'Iran
En représailles à des frappes meurtrières d'Israël au Liban cette fin de semaine, Téhéran a annoncé samedi "fermer" à nouveau cette voie maritime stratégique du golfe Persique, où transitaient 20% des
• Guerre au Moyen-Orient : malgré l'optimisme du vice-président américain, les négociations entre Washington et Téhéran s'annoncent délicates
Le vice-président américain JD Vance a rejoint une délégation iranienne en Suisse pour tenter d'avancer vers un accord définitif. Mais les tensions persistantes au Moyen-Orient menacent déjà de compli
• Aux États-Unis, la mort d'un bébé tué par la police suscite colère et indignation
La mort d'un bébé d'un an lors d'une intervention policière dans le Mississippi provoque une vive émotion aux États-Unis. Alors que les circonstances font l'objet d'une enquête, les images du drame et
• Au Qatar, une ferme produit du lait en plein désert
Produire du lait au cœur du désert paraissait impensable il y a encore quelques années. Pourtant, au Qatar, une immense ferme ultramoderne est parvenue à relever ce défi. Né d'une crise diplomatique,
=== France 24 ===
• Accord Iran-États-Unis : les prochains jours incertains, "rien n'est linéaire"
"La question libanaise est instrumentalisée des deux côtés, par les Iraniens comme par Israël", analyse notre invité ce vendredi 19 juin, David Rigoulet-Roze, rédacteur en chef de la revue "Orients S
• Mondial 2026 : en Tunisie, la déception des supporters tunisiens
Pour les Aigles de Carthage, il n'y a pas eu d'effet Hervé Renard, nommé sélectionneur pour remplacer Sabri Lamouchi, limogé après la déroute des Tunisiens face à la Suède (5-1). Ils ont perdu ce 21
• Liban : "les armes se sont tues" ces dernières heures
"Aujourd'hui, tout semble figé, aucune activité militaire n'a été détectée" au Liban après une fin de semaine particulièrement violente, rapporte, Serge Berberi notre correspondant au Liban. Des habi
• Fermeture du détroit d'Ormuz : qu'est-ce que cela implique pour les marins sur place ?
Après les nouveaux affrontements au Liban, le commandement central de l'armée iranienne a annoncé que "le détroit d'Ormuz serait fermé au trafic maritime", une "première mesure en réponse à la violat
• En Suisse, JD Vance salue une "rencontre historique" avec l'Iran
Le vice-président américain JD Vance a qualifié d'"historiques" les négociations engagées dimanche en Suisse avec l'Iran pour finaliser un protocole d'accord mettant fin aux hostilités au Moyen-Orien
• Donald Trump à Versailles, attaques sur Moscou et canicule en France : la semaine en images
Retour sur les temps forts de l'actualité de la semaine : Donald Trump signe le protocole d'accord avec l'Iran, visant à mettre fin à la guerre, depuis le Château de Versailles, les attaques ukrainie
• 🔴 En direct : les négociations Iran-États-Unis en cours en Suisse, le Liban au centre de l'attention
• Accord de fin de guerre en Iran : les relations Israël-États-Unis se tendent
l'Iran a averti qu'il n'entrerait pas "dans la phase de négociation en vue d'un accord final" avec Washington sans cessation des hostilités au Liban, où Israël a juré de venir à bout du Hezbollah pro
• Mondial 2026 : les regrets ivoiriens, le fiasco tunisien
La Côte d'Ivoire est passée tout près d'un exploit face à l'Allemagne, avant de s'incliner à la dernière minute. Dans le même groupe, Curaçao a vécu un moment historique en inscrivant son tout premie
• France : Paris placée en vigilance rouge canicule
Alors que la capitale a été placée en vigilance rouge canicule, les Parisiens essaient de se rafraîchir comme ils le peuvent. La vague de chaleur touche aussi d'autres pays d'Europe.
=== 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