Skip to main content
← Tilbage til bloggen
Claude CodeAIObsidianAutomationProductivity

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.

Udgivet 12. april 20267 min læsning

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 devices

Koden (hele)

Projektet er bevidst minimalt.

Indgangspunkt: digest.sh

Hele applikationen er et 6-linjers bash-script:

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

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

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

Konfiguration: topics.yaml

Emner er fuldt konfigurerbare — tilføj et nyt emne og det er i morgendagens digest:

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"

Planlægning med launchd

På macOS er launchd den native måde at planlægge tilbagevendende opgaver:

~/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>

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:

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/...)

I tal

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)

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:

  1. Installer Claude Code CLI og autentificer
  2. Klon repoet: git clone https://github.com/oleksiimazurenko/news-digest
  3. Rediger topics.yaml og prompt.md
  4. Rediger plist-filen og launchctl load
  5. 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