Täglicher AI News Digest mit Claude Code CLI und Obsidian — Null Abhängigkeiten
Wie ich einen täglichen Nachrichtenrecherche-Agenten mit einem 6-Zeilen Bash-Skript, Claude Code Headless-Modus und macOS launchd gebaut habe.
TL;DR
Ein 6-zeiliges Bash-Skript, das Claude Code CLI jeden Morgen um 9:00 Uhr im Headless-Modus ausführt. Es durchsucht das Web nach Nachrichten zu 11 konfigurierbaren Themen, filtert Rauschen heraus und schreibt einen formatierten Markdown-Digest direkt in einen Obsidian Vault, der über iCloud synchronisiert wird. Null Abhängigkeiten. ~100 Zeilen Konfiguration insgesamt.
Das Problem
Als Entwickler ist es eine tägliche Steuer, über mehrere Technologien auf dem Laufenden zu bleiben. RSS-Feeds sind laut, Twitter ist ein Zeitfresser, Newsletter kommen wenn man tief im Flow ist. Ich brauchte etwas, das die Recherche für mich erledigt und die Ergebnisse dort präsentiert, wo ich bereits arbeite — meinem Obsidian Vault.
Die typische Lösung ist eine Scraping-Pipeline: ein Scheduler, ein Crawler, eine NLP-Pipeline, eine Datenbank, ein Benachrichtigungsdienst. Das sind Wochen Arbeit für etwas, das kaputt geht wenn eine Website ihr HTML ändert. Ich wollte etwas, das an einem Nachmittag fertig ist.
Architektur
Das gesamte System besteht aus 4 Dateien und null Abhängigkeiten. So funktioniert es End-to-End:
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 devicesDer Code (komplett)
Das Projekt ist bewusst minimal. Jede Zeile verdient ihren Platz.
Einstiegspunkt: digest.sh
Die gesamte Anwendung ist ein 6-zeiliges Bash-Skript:
#!/bin/bash
DIGEST_DIR="$HOME/Developer/news-digest"
claude -p "$(cat "$DIGEST_DIR/prompt.md")" \
--max-turns 20 \
--allowedTools Read,WebSearch,WebFetch,WriteDie wichtigen Flags: -p führt Claude im Headless-Modus aus, --max-turns 20 gibt dem Agenten genug Raum für alle Themen, und --allowedTools beschränkt den Agenten auf Dateilesen, Websuche und Schreiben.
Das Gehirn: prompt.md
Hier lebt die Intelligenz. Der Prompt verwandelt Claude in einen Nachrichtenrecherche-Agenten mit spezifischen Anweisungen:
# 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 spamKonfiguration: topics.yaml
Themen sind vollständig konfigurierbar — füge ein neues Thema hinzu und es ist im morgigen Digest enthalten:
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"Planung mit launchd
Auf macOS ist launchd der native Weg, wiederkehrende Aufgaben zu planen (wie cron unter Linux):
<?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 mit launchctl load ~/Library/LaunchAgents/com.news-digest.plist. Das Skript läuft jeden Tag um 9:00 Uhr — launchd führt verpasste Jobs aus wenn das System aufwacht.
Wie das Ergebnis aussieht
Jeden Morgen erscheint eine neue Markdown-Datei im Obsidian Vault mit strukturierten, priorisierten Nachrichten:
---
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/...)In Zahlen
| 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) |
Wichtige Designentscheidungen
- Claude Code CLI statt API — kein Verwalten von API-Schlüsseln, HTTP-Clients oder Response-Parsing nötig
- Obsidian statt E-Mail — Digests sind durchsuchbar, verlinkbar und permanent
- launchd statt cron — launchd ist der macOS-native Scheduler mit sauberem Handling von verpassten Läufen
- YAML für Themen — ein neues Thema ist eine 2-Zeilen-Änderung
- Leere Themen überspringen — keine Nachrichten = kein Abschnitt
Eigenes bauen
In 10 Minuten einsatzbereit:
- Claude Code CLI installieren und authentifizieren
- Repo klonen:
git clone https://github.com/oleksiimazurenko/news-digest topics.yamlundprompt.mdanpassen- Plist-Datei anpassen und mit
launchctl loadladen - Auf 9:00 Uhr warten — oder mit
bash digest.shmanuell testen
Fazit
Das Interessanteste an diesem Projekt ist, was nicht drin ist. Keine Datenbank, kein API-Server, kein Docker, keine npm-Pakete, kein Python, kein HTML-Parser, keine NLP-Pipeline.
So sieht Bauen mit AI-Agenten in der Praxis aus: Sie definieren das Was und Wohin, der Agent übernimmt das Wie. Gesamte Entwicklungszeit: etwa 2 Stunden.
Quellen
- news-digest on GitHub — full source code
- Claude Code Documentation — headless mode and CLI flags
- Apple Developer — creating launchd jobs
- Obsidian — markdown knowledge base