CommunityResearch & Data Analysisgithub.com

Alan-Houxj/ai-news-follow

An AI agent skill that automatically delivers a daily AI newsletter: collects from 12 sources, filters and summarizes with LLM, and outputs to Feishu (Lark) spreadsheets, bot push, and cloud document archiving.

What is ai-news-follow?

This skill enables an AI agent to automatically collect, filter, summarize, and deliver a daily AI newsletter. It pulls raw articles from 12 curated sources (including OpenAI, Google DeepMind, Anthropic, Hugging Face, TechCrunch, The Verge, Hacker News, InfoQ, and arXiv), then uses an LLM (the agent itself) to de-noise, de-duplicate, categorize, and summarize each item into a concise 2-3 sentence Chinese summary. The final curated list (typically 10-30 items) can be output directly in the conversation for zero-configuration use (L0) or pushed to Feishu (Lark) via its three components: a multi-dimensional table (for storage and tracking), a bot card push (for instant notification), and a cloud document archive (for permanent record). The skill requires Python 3.10+ with feedparser and requests, and optionally the `npx @larksuite/cli` tool for Feishu integration. It is designed to be run once daily (recommended at 08:00 Asia/Shanghai) and is platform-agnostic, meaning it can be used with any scheduler or agent host that supports shell command execution.

Works with✓Claude Code✓Codex CLI~Cursor
npx skills add Alan-Houxj/ai-news-follow

Installed? Explore more Research & Data Analysis skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

AI Daily News Collection Skill

When to use this skill: Execute the process described in this file when the user mentions intents such as "AI daily report / AI news / What's happening in AI today / Push the daily report / Write to Feishu spreadsheet".

What the user might say: "Run today's AI daily report for me" / "See what's big in AI today" / "Push the daily report to my Feishu."

Fetch today's AI news, filter and summarize it into a daily report; based on configuration, output to Feishu's three components (multi-dimensional table / bot push / cloud document archive). Each piece of information retains its original link for traceability.

It can also be used without Feishu configuration (L0): Step 3 will detect the configuration and skip automatically, with the daily report output directly in the conversation.

Workflow (Agent follows this)

Step 0: Environment Preparation

cd <skill_directory>/scripts
# Dependency check: If ModuleNotFoundError occurs, first run pip install feedparser requests
python -c "import feedparser, requests" 2>/dev/null || pip install feedparser requests
# Proxy detection: If reachable, enable proxy (needed for overseas sources); if not, connect directly (Chinese sources are forced direct, overseas sources will automatically fail over)
curl -s -o /dev/null -m 5 -x http://127.0.0.1:7897 https://openai.com \
  && export HTTPS_PROXY=http://127.0.0.1:7897 \
  || unset HTTPS_PROXY HTTP_PROXY

lark-cli does not need to be specified manually: the script will automatically detect PATH and common installation locations (including Windows npm global directories); only for non-standard installations do you need export LARK_CLI=<full_path>.

Step 1: Collect Raw Items

python fetch_sources.py --hours 24        # Outputs items.json (for daily timed runs, recommend --hours 26 to cover cross-day gaps)
  • Each source in sources.json declares network: proxy|direct: overseas sources go through the proxy (environment variable HTTPS_PROXY), Chinese sources are forced direct
  • Failure of individual sources (e.g., arXiv occasional 502) is recorded in items.json under errors; continue execution, do not interrupt

Step 2: Filtering and Summarization (Agent/LLM's Responsibility)

Read all items in items.json, then:

  1. De-noise: Remove items not related to AI (HN/InfoQ contain a lot of non-AI content)
  2. De-duplicate and merge: Merge reports of the same event from multiple sources, keep the most authoritative original link
  3. Summarize: 2-3 sentences per item in Chinese, state only facts
  4. Tag: category (Frontier Developments / Community Hot Topics / Chinese News / Paper Briefings / Product Updates), importance (High = industry-level release, funding, policy / Medium / Low), free-form tags
  5. Daily digest: Write a 2-3 sentence digest summarizing the day's highlights and trends, placed at the top level of selection.json — it will become the opening of the daily report

Write the results to scripts/selection.json in the following format (idx references the array index in items.json; source_override is optional, used to normalize the source to a table option name like TechCrunch / The Verge):

{
  "digest": "2-3 sentence daily summary",
  "items": [
    {"idx": 0, "title": "Overridable title", "summary": "Summary", "importance": "High",
     "category": "Frontier Developments", "tags": ["tag"], "source_override": "OpenAI"}
  ]
}

Then:

python make_curated.py       # Produce curated.json (10-30 items)

Hard rule: url can only be taken from the original text in items.json; do not rewrite or guess — traceability is the core value of this skill.

Step 3: Feishu Output (Branch according to configuration, must check first)

First check scripts/config.json: If the file does not exist, or any of base_token/table_id/user_open_id/base_url is empty → Determine that Feishu is not configured, skip all commands in this step, go directly to "Completion Report" (output the daily report text to the user); and at the end of the report, add a sentence: To get table archiving and daily push with Feishu, see the repository docs/setup.md.

If configured, run:

python run_daily.py curated.json    # Write table + card push + cloud document archive
  • Before writing, automatically merge the tag option pool (free-form tags will not mismatch), write item by item
  • Push as Feishu message card (column layout, clickable titles), with three-level degradation to ensure delivery (card → markdown → plain text)
  • Archive is inserted after the cloud document anchor block (callout highlight block + categorized sections, latest at top); if archiving is not configured, skip automatically
  • Running repeatedly will cause duplicate writes; do not re-run

Upon Completion: Report to the User

  • Without Feishu configuration (L0): Organize curated.json into the daily report text (digest + each item's "title / summary / original link"), then append the configuration hint
  • With Feishu configured: Report on four items — Number of items today, category distribution, one-sentence digest, failed sources

If end-to-end fails: Report the specific error only; do not retry more than once.

User Configuration (scripts/config.json)

Copy config.example.json to config.json and fill it in — how to obtain each field is described in the template comments. For installation of lark-cli and Feishu app configuration steps, see the repository docs/setup.md. All fields support environment variable overrides. This skill directory does not contain any secrets; Feishu credentials are managed by the lark-cli global configuration.

Prerequisites

  1. Python 3.10+: pip install feedparser requests
  2. For Feishu output (Step 3): lark-cli (official CLI, npx @larksuite/cli@latest install) must have completed config init and auth login; if lark-cli cannot be found automatically, use the environment variable LARK_CLI to specify its full path

Source List (sources.json, can be added or removed)

SourceMethodNetwork
OpenAI Official NewsRSSProxy
Google DeepMind / Google AI BlogRSSProxy
Anthropic Newssitemap (no official RSS)Proxy
Hugging Face BlogRSSProxy
TechCrunch / The Verge AIRSSProxy
MIT Tech Review AIRSSProxy
Hacker News AI Top PostsAlgolia API (time window + points + keyword word-boundary filter)Direct
InfoQ ChineseRSS (AI-related filtered in Step 2)Direct
arXiv cs.AI / cs.CLarXiv APIProxy

Failure handling: When RSS addresses change, first verify with curl before updating sources.json; free APIs from Jiqizhixin/Liangziliang, and sitemaps from xAI/Stability (navigation page noise/anti-scraping) are no longer available — do not waste time retrying.

Scheduled Execution

The skill is stateless and can be triggered by any scheduler. Recommended daily at 08:00 (Asia/Shanghai). Configuration methods for each host are in docs/scheduling.md; prompt template is in examples/cron-prompt.txt.

Related Skills