Щоденний AI News Digest через Claude Code CLI та Obsidian — нуль залежностей
Як я побудував щоденного агента дослідження новин з 6-рядковим bash-скриптом, headless-режимом Claude Code та macOS launchd. Він шукає 11 тем і пише дайджести прямо в Obsidian.
TL;DR
6-рядковий bash-скрипт, який запускає Claude Code CLI в headless-режимі щоранку о 9:00. Він шукає новини з 11 налаштовуваних тем, фільтрує шум і записує форматований markdown-дайджест прямо в Obsidian vault, синхронізований через iCloud. Нуль залежностей. ~100 рядків конфігурації загалом.
Проблема
Як розробник, слідкувати за багатьма технологіями — це щоденний податок. RSS-стрічки шумні, Twitter забирає час, розсилки приходять коли ти глибоко в потоці. Мені потрібно щось, що робить дослідження за мене і подає результати там, де я вже працюю — в Obsidian vault.
Типове рішення — побудувати пайплайн скрапінгу: планувальник, краулер, NLP-пайплайн, базу даних, сервіс нотифікацій. Це тижні роботи для чогось, що зламається коли сайт змінить HTML. Мені потрібно щось, що можна зробити за один вечір.
Архітектура
Вся система — 4 файли і нуль залежностей. Ось як вона працює від початку до кінця:
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Код (весь)
Проєкт навмисно мінімальний. Кожен рядок заслуговує своє місце.
Точка входу: digest.sh
Увесь додаток — це 6-рядковий bash-скрипт:
#!/bin/bash
DIGEST_DIR="$HOME/Developer/news-digest"
claude -p "$(cat "$DIGEST_DIR/prompt.md")" \
--max-turns 20 \
--allowedTools Read,WebSearch,WebFetch,WriteКлючові флаги: -p запускає Claude в headless-режимі (без інтерактивного терміналу), --max-turns 20 дає агенту достатньо ходів для дослідження всіх тем, а --allowedTools обмежує агента тільки читанням файлів, пошуком в інтернеті та записом результату.
Мозок: prompt.md
Тут живе інтелект. Промпт перетворює Claude на агента дослідження новин з конкретними інструкціями що шукати, як фільтрувати і куди зберігати:
# 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Конфігурація: topics.yaml
Теми повністю налаштовувані — додай нову тему і вона буде в завтрашньому дайджесті. Кожна тема має назву та опціональний контекст, який направляє пошук AI:
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"Планування через launchd
На macOS launchd — це нативний спосіб планування повторюваних задач (як cron на Linux). 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>Встановлюється через launchctl load ~/Library/LaunchAgents/com.news-digest.plist. Скрипт запускається щодня о 9:00, навіть якщо ви були вилогінені — launchd запустить пропущені задачі коли система прокинеться.
Як виглядає результат
Щоранку в Obsidian vault з'являється новий markdown-файл зі структурованими, пріоритизованими новинами:
---
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/...)В цифрах
| 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) |
Ключові рішення
- Claude Code CLI замість API — не потрібно керувати API-ключами, HTTP-клієнтами чи парсити відповіді. CLI обробляє автентифікацію, виконання інструментів та відновлення після помилок з коробки
- Obsidian замість email — дайджести можна шукати, посилатися на них і вони зберігаються назавжди. Вони живуть поряд з моїми нотатками, а не тонуть у поштовій скриньці
- launchd замість cron — launchd є нативним планувальником macOS. Він чисто обробляє пропущені запуски, логування та змінні оточення
- YAML для тем — додати нову тему це зміна в 2 рядки. Модифікація коду не потрібна
- Пропускати порожні теми — якщо реальних новин немає, секція не включається взагалі. Без наповнювача, без розтягнутого контенту
Як зробити своє
Ви можете запустити це за 10 хвилин:
- Встановити Claude Code CLI та авторизуватись
- Клонувати репо:
git clone https://github.com/oleksiimazurenko/news-digest - Відредагувати
topics.yamlз вашими інтересами таprompt.mdз вашим шляхом збереження - Відредагувати plist-файл з вашим юзернеймом та шляхами, потім
launchctl load - Чекати 9:00 — або протестувати вручну через
bash digest.sh
Висновки
Найцікавіше в цьому проєкті — це те, чого в ньому немає. Ні бази даних, ні API-сервера, ні Docker-контейнера, ні npm-пакетів, ні Python virtualenv, ні HTML-парсера, ні NLP-пайплайну. Просто промпт, список тем і 6-рядковий скрипт, який делегує всю складну роботу AI-агенту.
Ось як виглядає будування з AI-агентами на практиці: ви визначаєте що і куди, а агент обробляє як. Загальний час розробки — близько 2 годин, включаючи ітерації над промптом для правильної якості фільтрації.
Джерела
- news-digest on GitHub — full source code
- Claude Code Documentation — headless mode and CLI flags
- Apple Developer — creating launchd jobs
- Obsidian — markdown knowledge base