Skip to main content
← Volver al blog
Claude CodeAIObsidianAutomationProductivity

Digest Diario de Noticias AI con Claude Code CLI y Obsidian — Cero Dependencias

Cómo construí un agente diario de investigación de noticias con un script bash de 6 líneas, modo headless de Claude Code y macOS launchd.

Publicado 12 de abril de 20267 min de lectura

TL;DR

Un script bash de 6 líneas que ejecuta Claude Code CLI en modo headless cada mañana a las 9:00. Busca noticias en 11 temas configurables, filtra el ruido y escribe un digest markdown formateado directamente en un Obsidian vault sincronizado vía iCloud. Cero dependencias. ~100 líneas de configuración total.

El Problema

Como desarrollador, mantenerse al día con múltiples tecnologías es un impuesto diario. Los feeds RSS son ruidosos, Twitter consume tiempo, los newsletters llegan cuando estás en estado de flujo. Necesitaba algo que hiciera la investigación por mí.

La solución típica es construir un pipeline de scraping: un programador, un crawler, un pipeline NLP, una base de datos, un servicio de notificaciones. Eso son semanas de trabajo. Yo quería algo que pudiera hacer en una tarde.

Arquitectura

Todo el sistema son 4 archivos y cero dependencias:

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

El Código (todo)

El proyecto es intencionalmente mínimo.

Punto de entrada: digest.sh

Toda la aplicación es un script bash de 6 líneas:

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

Los flags clave: -p ejecuta Claude en modo headless, --max-turns 20 da suficientes turnos al agente, --allowedTools restringe al agente a lectura, búsqueda y escritura.

El Cerebro: prompt.md

Aquí vive la inteligencia. El prompt convierte a Claude en un agente de investigación de noticias:

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

Configuración: topics.yaml

Los temas son totalmente configurables — agrega uno nuevo y estará en el digest de mañana:

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"

Programación con launchd

En macOS, launchd es la forma nativa de programar tareas recurrentes:

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

Instalar con launchctl load ~/Library/LaunchAgents/com.news-digest.plist. El script se ejecuta diariamente a las 9:00.

Cómo se ve el resultado

Cada mañana aparece un nuevo archivo markdown en el Obsidian vault:

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 números

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)

Decisiones clave de diseño

  • Claude Code CLI en vez de API — sin gestionar API keys, clientes HTTP o parseo de respuestas
  • Obsidian en vez de email — los digests son buscables, enlazables y permanentes
  • launchd en vez de cron — programador nativo de macOS con manejo de ejecuciones perdidas
  • YAML para temas — un nuevo tema es un cambio de 2 líneas
  • Saltar temas vacíos — sin noticias = sin sección

Cómo construir el tuyo

Listo en 10 minutos:

  1. Instalar Claude Code CLI y autenticarse
  2. Clonar el repo: git clone https://github.com/oleksiimazurenko/news-digest
  3. Editar topics.yaml y prompt.md
  4. Editar el plist y launchctl load
  5. Esperar a las 9:00 — o probar manualmente con bash digest.sh

Conclusiones

Lo más interesante de este proyecto es lo que no tiene. Sin base de datos, sin servidor API, sin Docker, sin npm, sin Python, sin parser HTML, sin pipeline NLP.

Así es construir con agentes AI: defines el qué y el dónde, el agente maneja el cómo. Tiempo total: unas 2 horas.

Fuentes