Skip to main content
← Retour au blog
Claude CodeAIObsidianAutomationProductivity

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.

Publié 12 avril 20267 min de lecture

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 devices

Le 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 :

digest.sh
#!/bin/bash
DIGEST_DIR="$HOME/Developer/news-digest"

claude -p "$(cat "$DIGEST_DIR/prompt.md")" \
  --max-turns 20 \
  --allowedTools Read,WebSearch,WebFetch,Write

Les 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 :

prompt.md
# 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 spam

Configuration : topics.yaml

Les sujets sont entièrement configurables — ajoutez-en un nouveau et il sera dans le digest de demain :

topics.yaml
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 :

~/Library/LaunchAgents/com.news-digest.plist
<?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 :

digests/2026-04-12.md
---
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

MetricValue
Total files in project4 (digest.sh, prompt.md, topics.yaml, .gitignore)
Lines of code~100
External dependencies0
Setup time~10 minutes
Daily execution time2-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 :

  1. Installer Claude Code CLI et s'authentifier
  2. Cloner le repo : git clone https://github.com/oleksiimazurenko/news-digest
  3. Éditer topics.yaml et prompt.md
  4. Éditer le plist et launchctl load
  5. 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 , l'agent gère le comment. Temps total : environ 2 heures.

Sources