- name
- ai-newsletter-daily
- description
- >
- version
- 1.2.1
- author
- Jeff Yang (https://github.com/j3ffyang)
- user-invocable
- true
- category
- content
- license
- MIT
- metadata
- openclaw
- skillKey
- ai-newsletter-daily
- emoji
- 🗞️
- required-tools
- requires
- env
- commands
- description
- Generate a daily AI news digest in Markdown and JSON.
- arg-mode
- raw
AI Newsletter Daily
Generate a concise daily AI newsletter for a Chinese audience from fresh web sources.
Use this skill only when the request is about current AI/ML news, releases, research, funding, product launches, model updates, regulation, benchmarks, or practitioner-relevant developments.
Do not use this skill for:
- Evergreen explainers.
- Non-AI topics.
- Long-form research that is not intended to become a curated newsletter.
Inputs
Expected inputs, with defaults if missing:
target_news_count= 20search_query="latest AI news today"search_time_window_days= 2max_search_results= 60min_articles_required= 10include_domains=[]exclude_domains=["youtube.com", "reddit.com", "facebook.com", "x.com", "twitter.com"]summary_model="host-default"max_scrape_retries= 2
Rules:
- Clamp
target_news_countto 1..50. - Clamp
search_time_window_daysto 1..14. - Clamp
max_search_resultsto 20..120. - Clamp
min_articles_requiredto 1..50. - Clamp
max_scrape_retriesto 0..5. - If
min_articles_required > target_news_count, setmin_articles_required = target_news_count.
Batch policy
Use a two-stage batch limit:
- Search batch: collect up to
max_search_resultscandidates from search. - Scrape batch: keep the top
target_news_count * 2ranked candidates for fetch and summary attempts. - Final batch: return only the top
target_news_countverified items.
Do not summarize every search result. Over-collect, filter, verify, then reduce to the final batch.
Required outputs
Return all of the following:
newsletter_itemsas a list of objects.markdown_newsletteras a string.json_newsletteras an object.
Each newsletter item must include:
titleurldomainpublished_atsummaryrelevance_scoresource_query
Use "unknown" for published_at when no date is available.
Deterministic workflow
- Resolve inputs.
- Apply defaults and bounds. - Initialize warnings = []. - Initialize seen_canonical_urls = set(). - Initialize processed_urls = set().
- Search.
- Run web_search with search_query. - If there are no usable results, retry once with: - "{search_query} generative AI LLM model open source enterprise" - If there are still no usable results, fail with a clear message.
- Normalize and filter.
- Keep only results with non-empty title and URL. - Canonicalize URLs by lowering the host, removing tracking parameters when possible, and normalizing safe trailing slashes. - Drop duplicates by canonical URL. - Apply include_domains and exclude_domains. - Prefer results likely within search_time_window_days. - Keep unknown dates, but score them lower.
- Rank.
- Score each candidate from 0 to 100: - AI-topic relevance: 0..50. - Freshness: 0..30. - Title/snippet clarity: 0..20. - Sort by: - relevance_score descending - published_at descending, unknown last - url ascending - Keep the top target_news_count * 2 candidates.
- Verify and summarize.
- Process candidates in ranked order until target_news_count verified items are collected. - Skip candidates whose canonical URL is already in processed_urls. - Attempt web_fetch up to max_scrape_retries + 1 times. - If fetch fails, add a warning with the URL and reason, then continue. - Cross-check search result vs fetched page using title similarity, domain consistency, topic alignment, and published date when available. - If the page appears materially inconsistent, skip it and warn. - Summarize each accepted article in one short plain-text paragraph, max about 80 words, focused on why it matters to AI practitioners.
- Minimum quality gate.
- If collected items are fewer than min_articles_required, run one fallback search with: - "AI news today machine learning model release funding research" - Process only new candidates not already seen or processed. - Repeat filtering, ranking, verification, and summarization.
- Final integrity check.
- Ensure every final item has non-empty title, url, domain, summary, source_query, and numeric relevance_score. - Ensure each URL appears once. - Ensure markdown_newsletter and json_newsletter match in item count. - Remove and warn on any invalid item.
- Finalize.
- Sort by relevance_score descending, then published_at descending. - Truncate to target_news_count. - Render markdown_newsletter. - Assemble json_newsletter. - Apply the language output rule below. - Return all outputs.
Language output
- Translate the final
markdown_newsletterbody and each articlesummaryinnewsletter_itemsinto Simplified Chinese. - Keep
title,url,domain,published_at,relevance_score, andsource_queryunchanged. - If a source title is already in Chinese, preserve it as-is.
- Do not add extra commentary outside the newsletter content.
Verification
Accept items only if:
- URL is valid and canonicalized.
- Search result and fetched page broadly match.
- Topic is actually AI/news relevant.
- Published date is present or safely unknown.
- Fetched content is not malformed or off-topic.
Record warnings for failed URLs, short reasons, and whether fallback search was used.
Output Format
markdown_newsletter:
- H1 title with date.
- One H2 per article.
- One short summary paragraph per article.
- One source link per article.
json_newsletter:
datequerycountarticleswarnings
Safety rules
- Use only sanctioned tools.
- Do not request API keys from the user.
- Do not expose secrets.
- Do not include copyrighted full article text.
- Keep summaries neutral, concise, and factual.
- Preserve deterministic behavior wherever tool outputs allow.