Daglig AI-nyhedsdigest med Claude Code CLI og Obsidian — Nul afhængigheder
Hvordan jeg byggede en daglig nyhedsforskningsagent med et 6-linjers bash-script, Claude Code headless-tilstand og macOS launchd.
TL;DR
Et 6-linjers bash-script der kører Claude Code CLI i headless-tilstand hver morgen kl 9:00. Det søger nyheder inden for 11 konfigurerbare emner, filtrerer støj og skriver en formateret markdown-digest direkte til en Obsidian vault synkroniseret via iCloud. Nul afhængigheder. ~100 linjer konfiguration i alt.
Problemet
Som udvikler er det en daglig skat at holde sig opdateret. RSS-feeds er støjende, Twitter er en tidssluger, nyhedsbreve ankommer når man er dybt fokuseret. Jeg havde brug for noget der laver research for mig.
Den typiske løsning er at bygge en scraping-pipeline: planlægger, crawler, NLP-pipeline, database, notifikationstjeneste. Det er ugers arbejde. Jeg ville have noget der kan bygges på en eftermiddag.
Arkitektur
Hele systemet er 4 filer og nul afhængigheder:
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 devicesKoden (hele)
Projektet er bevidst minimalt.
Indgangspunkt: digest.sh
Hele applikationen er et 6-linjers bash-script:
#!/bin/bash
DIGEST_DIR="$HOME/Developer/news-digest"
claude -p "$(cat "$DIGEST_DIR/prompt.md")" \
--max-turns 20 \
--allowedTools Read,WebSearch,WebFetch,WriteVigtige flags: -p kører Claude i headless-tilstand, --max-turns 20 giver agenten nok ture, --allowedTools begrænser agenten til læsning, søgning og skrivning.
Hjernen: prompt.md
Her bor intelligensen. Prompten forvandler Claude til en nyhedsforskningsagent:
# 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
Emner er fuldt konfigurerbare — tilføj et nyt emne og det er i morgendagens digest:
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"Planlægning med launchd
På macOS er launchd den native måde at planlægge tilbagevendende opgaver:
<?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>Installer med launchctl load ~/Library/LaunchAgents/com.news-digest.plist. Scriptet kører dagligt kl 9:00.
Hvordan resultatet ser ud
Hver morgen dukker en ny markdown-fil op i Obsidian-vaultet:
---
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/...)I tal
| 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) |
Vigtige designbeslutninger
- Claude Code CLI fremfor API — ingen håndtering af API-nøgler eller HTTP-klienter
- Obsidian fremfor email — digests er søgbare, linkbare og permanente
- launchd fremfor cron — macOS-native planlægger med håndtering af tabte kørsler
- YAML til emner — nyt emne = 2-linjers ændring
- Spring tomme emner over — ingen nyheder = ingen sektion
Byg din egen
Klar på 10 minutter:
- Installer Claude Code CLI og autentificer
- Klon repoet:
git clone https://github.com/oleksiimazurenko/news-digest - Rediger
topics.yamlogprompt.md - Rediger plist-filen og
launchctl load - Vent til 9:00 — eller test manuelt med
bash digest.sh
Konklusioner
Det mest interessante ved dette projekt er hvad der ikke er i det. Ingen database, ingen API-server, ingen Docker, ingen npm-pakker, ingen Python, ingen HTML-parser, ingen NLP-pipeline.
Sådan ser det ud at bygge med AI-agenter: du definerer hvad og hvor, agenten håndterer hvordan. Total udviklingstid: cirka 2 timer.
Kilder
- news-digest on GitHub — full source code
- Claude Code Documentation — headless mode and CLI flags
- Apple Developer — creating launchd jobs
- Obsidian — markdown knowledge base