Digest Quotidien AI avec Claude Code CLI et Obsidian — Zéro Dépendance
Comment j'ai construit un agent de recherche d'actualités quotidien avec un script bash de 6 lignes, le mode headless de Claude Code et macOS launchd.
TL;DR
Un script bash de 6 lignes qui exécute Claude Code CLI en mode headless chaque matin à 9h00. Il recherche des actualités sur 11 sujets configurables, filtre le bruit et écrit un digest markdown formaté directement dans un Obsidian vault synchronisé via iCloud. Zéro dépendance. ~100 lignes de configuration au total.
Le Problème
En tant que développeur, rester à jour sur plusieurs technologies est un impôt quotidien. Les flux RSS sont bruyants, Twitter est chronophage, les newsletters arrivent quand on est en plein flow. J'avais besoin de quelque chose qui fasse la recherche pour moi.
La solution typique est de construire un pipeline de scraping : un planificateur, un crawler, un pipeline NLP, une base de données, un service de notification. C'est des semaines de travail. Je voulais quelque chose faisable en un après-midi.
Architecture
Le système entier fait 4 fichiers et zéro dépendance :
macOS launchd (9:00 AM daily)
│
└── digest.sh
│
└── claude -p "$(cat prompt.md)" --max-turns 20 --allowedTools Read,WebSearch,WebFetch,Write
│
├── Reads topics.yaml (11 configurable topics)
├── WebSearch → finds news for each topic (last 24-48h)
├── WebFetch → reads full articles
├── Filters noise: old tutorials, promos, AI spam
└── Write → saves digest to Obsidian Vault
│
└── ~/Obsidian Vault/digests/2026-04-12.md
│
└── iCloud sync → available on all devicesLe Code (en entier)
Le projet est intentionnellement minimal.
Point d'entrée : digest.sh
L'application entière est un script bash de 6 lignes :
#!/bin/bash
DIGEST_DIR="$HOME/Developer/news-digest"
claude -p "$(cat "$DIGEST_DIR/prompt.md")" \
--max-turns 20 \
--allowedTools Read,WebSearch,WebFetch,WriteLes flags clés : -p lance Claude en mode headless, --max-turns 20 donne assez de tours à l'agent, --allowedTools restreint l'agent à la lecture, recherche et écriture.
Le Cerveau : prompt.md
C'est ici que vit l'intelligence. Le prompt transforme Claude en agent de recherche d'actualités :
# News Digest Agent
You are a news research agent. Your job is to find today's most important
and interesting news for a senior frontend developer.
## Instructions
1. Read the topics file at ~/Developer/news-digest/topics.yaml
2. For EACH topic, search the web for news from the last 24-48 hours
3. Filter: only include genuinely new and noteworthy items
4. Write the digest as a markdown file to Obsidian Vault digests/YYYY-MM-DD.md
5. IMPORTANT: Use the Write tool to save the file. Do NOT output to stdout.
## Rules
- Language: Ukrainian for summaries, English for titles and technical terms
- If there's no real news for a topic — SKIP IT ENTIRELY
- Prioritize: releases > breaking changes > security > new patterns > discussions
- Max 5 items per topic, sorted by importance
- Include direct links to sources
- Skip promotional content, generic tutorials, and AI-generated spamConfiguration : topics.yaml
Les sujets sont entièrement configurables — ajoutez-en un nouveau et il sera dans le digest de demain :
topics:
- name: better-auth
context: "auth library for TypeScript. New releases, breaking changes"
- name: Next.js
context: "GitHub issues, releases, App Router, Turbopack, performance"
- name: SolidJS
context: "SolidStart, releases, ecosystem, comparison with React"
- name: Tailwind CSS
context: "v4 updates, new utilities, plugins"
- name: Claude AI
context: "Anthropic announcements, Claude Code, new models, MCP, API"
- name: GPT AI
context: "OpenAI announcements, new models, ChatGPT features"
- name: React
context: "React 19+, Server Components, new patterns, ecosystem"
- name: Apple
context: "Hardware, software, WWDC, developer tools, Apple Intelligence"
- name: Notable People
context: >
Latest tweets from: Elon Musk, Dario Amodei, Sam Altman,
Jensen Huang, Andrej Karpathy, Simon Willison, Swyx...
- name: AI Global
context: "Major AI news, new models, regulations, open-source AI"Planification avec launchd
Sur macOS, launchd est le moyen natif de planifier des tâches récurrentes :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.news-digest</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/Users/you/Developer/news-digest/digest.sh</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>9</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
<key>StandardOutPath</key>
<string>/Users/you/Developer/news-digest/logs/stdout.log</string>
<key>StandardErrorPath</key>
<string>/Users/you/Developer/news-digest/logs/stderr.log</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin</string>
<key>HOME</key>
<string>/Users/you</string>
</dict>
</dict>
</plist>Installation : launchctl load ~/Library/LaunchAgents/com.news-digest.plist. Le script s'exécute tous les jours à 9h00.
À quoi ressemble le résultat
Chaque matin, un nouveau fichier markdown apparaît dans le vault Obsidian :
---
date: 2026-04-12
---
# News Digest — 2026-04-12
## Next.js
### Next.js 16.1 Released with Improved Turbopack Caching
Нова версія Next.js 16.1 включає покращене кешування для Turbopack,
що зменшує час холодного старту на ~40%.
[Посилання](https://nextjs.org/blog/next-16-1)
### Critical Memory Leak Fix in App Router
Виправлено витік пам'яті в App Router при частому перемиканні
між динамічними маршрутами.
[GitHub Issue](https://github.com/vercel/next.js/issues/...)
## Claude AI
### Claude Code 1.5 — MCP Server Auto-Discovery
Anthropic випустив оновлення Claude Code з автоматичним
виявленням MCP серверів у проєкті.
[Блог](https://www.anthropic.com/news/...)En chiffres
| Metric | Value |
|---|---|
| Total files in project | 4 (digest.sh, prompt.md, topics.yaml, .gitignore) |
| Lines of code | ~100 |
| External dependencies | 0 |
| Setup time | ~10 minutes |
| Daily execution time | 2-5 minutes |
| Cost per run | ~$0.10-0.30 (Claude API usage) |
Décisions clés de conception
- Claude Code CLI plutôt qu'API — pas besoin de gérer des clés API, clients HTTP ou parsing de réponses
- Obsidian plutôt qu'email — les digests sont recherchables, liables et permanents
- launchd plutôt que cron — planificateur natif macOS avec gestion propre des exécutions manquées
- YAML pour les sujets — un nouveau sujet est un changement de 2 lignes
- Ignorer les sujets vides — pas d'actualités = pas de section
Construire le vôtre
Opérationnel en 10 minutes :
- Installer Claude Code CLI et s'authentifier
- Cloner le repo :
git clone https://github.com/oleksiimazurenko/news-digest - Éditer
topics.yamletprompt.md - Éditer le plist et
launchctl load - Attendre 9h00 — ou tester manuellement avec
bash digest.sh
Conclusions
Le plus intéressant dans ce projet est ce qui n'y est pas. Pas de base de données, pas de serveur API, pas de Docker, pas de npm, pas de Python, pas de parser HTML, pas de pipeline NLP.
Voilà à quoi ressemble la construction avec des agents AI : vous définissez le quoi et le où, l'agent gère le comment. Temps total : environ 2 heures.
Sources
- news-digest on GitHub — full source code
- Claude Code Documentation — headless mode and CLI flags
- Apple Developer — creating launchd jobs
- Obsidian — markdown knowledge base