ai-digest
Run the daily AI tech news digest pipeline — collect, deduplicate, summarize, deliver
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Run the daily AI tech news digest pipeline — collect, deduplicate, summarize, deliver
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Create a new release — bump version, tag, generate changelog, create GitHub Release
Add a new news source (RSS or GitHub release) to ai-digest config
Validate sources.yml structure and check that all URLs/endpoints are reachable. Use when the user wants to check, verify, validate, or test the sources config, or after adding/modifying sources. Also use when the user mentions broken links, 404 errors, or source health checks.
| name | ai-digest |
| description | Run the daily AI tech news digest pipeline — collect, deduplicate, summarize, deliver |
You are running the ai-digest pipeline. Follow these steps exactly.
After completing each step, log a progress line to logs/YYYY-MM-DD.md via Bash:
echo "[$(date '+%Y-%m-%d %H:%M')] [pipeline ] <message>" >> logs/YYYY-MM-DD.md
This keeps the user informed in real-time (they watch the log via tail -f). Log at every step transition — do not batch multiple steps without logging.
Before anything else, invoke the /validate-sources skill. It checks config/sources.yml for structural errors and broken URLs.
Log the validation summary to logs/YYYY-MM-DD.md using the format:
[YYYY-MM-DD HH:MM] [validation ] Sources validation: X passed, Y failed, Z unable to verify
[YYYY-MM-DD HH:MM] [validation ] ✗ rss: source-name — HTTP 404
Log each failed/unverified source as a separate line.
Read these files:
config/sources.yml — list of all sourcesconfig/delivery.yml — language, output path, notification settingsCLAUDE.md — personal context (stack, projects, interests, topics to ignore)Log: Step 1: Config loaded (X RSS sources, Y GitHub repos)
Call the fetch_previous_urls MCP tool (no parameters).
It reads the last 3 days of digest markdown files from the output path and returns all previously published URLs and titles.
Save the returned entries — you will use them for semantic deduplication in Step 4.
Log: Step 2: Previous digests loaded — X entries from Y days or Step 2: No previous digests found, skipping dedup
Launch sub-agents in parallel to collect data from all sources:
Agent 1 — RSS feeds: Call the fetch_all_rss MCP tool (no parameters). It fetches all RSS feeds in parallel internally. Collect results.
Agent 2 — GitHub Releases: Call the fetch_github_releases MCP tool (no parameters). Collect results.
Merge all DigestItem[] arrays from all agents into one list.
Log: Step 3: Collected X RSS items (Y sources) + Z GitHub releases
Call the check_duplicates MCP tool with all collected items from Step 3.
Pass items as: { "items": [{ "title": "...", "url": "...", "source": "..." }, ...] }
The tool returns each item classified as exact_duplicate, likely_duplicate, or unique.
exact_duplicate — no exceptions.unique — keep as-is.For each likely_duplicate item, compare with the matched_with entry:
Review remaining unique items against the entries returned in Step 2.
If you notice a topic that was already covered in a previous digest and the new item adds nothing substantial — remove it.
Among the remaining items:
Log: Step 4: Deduplicated — removed X exact, Y likely, Z semantic, merged W within-day. V items remaining
Log: Step 5: Filtered — removed X items (topics: Y), Z items remaining
Read the language setting from delivery.yml. Generate ALL text in that language.
Assign each item to one category:
An item placed in Hot should NOT be duplicated in other categories.
For each item, write a catchy 1-2 sentence summary as the headline. Make it engaging, not dry. The headline should make the reader want to click through.
Log: Step 6: Categorized — Hot: X, Relevant: Y, AI: Z, Frontend: W, DevTools: V
Create the digest file with this structure:
---
date: YYYY-MM-DD
type: digest
language: <language from config>
sources: <number of sources that returned data>
items: <total items after dedup>
---
# <Digest title in configured language> — <date in configured language format>
> <total items> items from <sources count> sources
<intro paragraph>
## 🔥 Hot
- **<catchy headline>** — <summary>. [<source>](url)
## 🎯 <"Relevant to Your Projects" in configured language>
- **<catchy headline>** — <summary>. [<source>](url)
_<relevance note>_
## 🤖 AI / LLM
- **<catchy headline>** — <summary>. [<source>](url)
## ⚛️ Frontend
- ...
## 🔧 DevTools / Releases
- ...
Before the categorized sections, write a narrative intro (2–4 short paragraphs) that:
The Hot category is mandatory and must always be present. Skip any other category that has zero items.
Write the generated markdown to: <output_path>/YYYY-MM-DD.md
Use today's date for the filename.
Log: Step 8: Written to <output_path>/YYYY-MM-DD.md
If notification is true in delivery.yml, send a macOS notification:
osascript -e 'display notification "<N> items from <M> sources" with title "AI Digest Ready"'
If the pipeline produced zero items (all sources failed), send:
osascript -e 'display notification "All sources failed. Check logs." with title "AI Digest Failed"'
Print a summary of this run: