Automated daily AI news digest powered by Claude Code's /loop feature. Posts bilingual digests (English + Traditional Chinese) to Slack #update-vibe.
Two digest types:
- News Digest — Web news across 6 AI categories
- YouTube Digest — Video summaries from @AIDailyBrief with PDF exports
-
Install Python dependencies:
pip install -r requirements.txt
-
Install system dependencies:
Tool Purpose Install yt-dlpFetch YouTube videos & metadata pip install yt-dlpffmpegAudio extraction for Whisper ffmpeg.org google-chromeHeadless PDF generation chrome b2Backblaze B2 CLI for uploads pip install b2 -
Copy
.env.exampleto.envand fill in credentials:cp .env.example .env
-
Required environment variables:
Variable Purpose SLACK_BOT_TOKENSlack Bot Token ( xoxb-...) withchat:writescopeSLACK_CHANNEL_IDChannel ID for #update-vibeSLACK_WEBHOOK_URL(Optional) Webhook fallback B2_KEY_IDBackblaze B2 key ID (for YT digest PDF uploads) B2_APP_KEYBackblaze B2 application key B2_BUCKET_NAMEB2 bucket name (e.g. claw-dir)HF_TOKENHuggingFace token (Whisper fallback for transcripts) -
Invite your Slack bot to
#update-vibe:/invite @YourBotName
/ai-news-digest-news # Run once
/loop 24h /ai-news-digest-news # Run every 24hSearches 6 AI news categories via WebSearch, fetches articles, deduplicates against previous runs, and posts a bilingual summary to Slack.
/ai-news-digest-yt # Run once
/loop 24h /ai-news-digest-yt # Run every 24hPipeline:
- Fetch recent videos from @AIDailyBrief (last 48h)
- Extract transcripts (subtitles → Whisper fallback)
- Claude generates bilingual summaries (EN + zh-TW)
- Build HTML → PDF via headless Chrome
- Upload PDFs to Backblaze B2 (presigned URLs, 7-day expiry)
- Post digest with summaries + PDF links to Slack
.claude/commands/
ai-news-digest-news.md — News digest slash command
ai-news-digest-yt.md — YouTube digest slash command
scripts/
slack_notify.sh — Slack posting (Bot Token + webhook fallback)
yt/
fetch_recent_videos.py — List recent videos (yt-dlp + date filter + dedup)
get_transcript.py — Extract transcript (subs → Whisper fallback)
build_html.py — Markdown → styled HTML
build_pdf.py — HTML → PDF (headless Chrome)
upload_b2.py — Upload to B2, returns presigned URL
digest-news/YYYY-MM-DD/ — News digest backups (gitignored)
digest-yt/YYYY-MM-DD/ — YT digest outputs (gitignored)
.state/ — Dedup state files (gitignored)
| Emoji | Category |
|---|---|
| 🧠 | LLM / Foundation Models |
| 📦 | AI Products & Applications |
| ⚖️ | AI Policy & Regulation |
| 🔬 | AI Research Papers |
| 💼 | Industry & Business |
| 🔓 | Open Source AI |
/loophas a max duration of ~3 days — restart periodically- WebSearch availability may vary by region
- Slack messages auto-split if exceeding ~4000 char limit
- B2 presigned URLs expire after 7 days by default
