Community研究与数据分析github.com

Alan-Houxj/ai-news-follow

每天自动送达的 AI 日报 Agent Skill:12 源采集 + LLM 筛选摘要,落地飞书表格/机器人推送/云文档归档

ai-news-follow 是什么?

ai-news-follow is a Claude Code agent skill that 每天自动送达的 AI 日报 Agent Skill:12 源采集 + LLM 筛选摘要,落地飞书表格/机器人推送/云文档归档.

兼容平台✓Claude Code✓Codex CLI~Cursor
npx skills add Alan-Houxj/ai-news-follow

Installed? Explore more 研究与数据分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

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.

相关技能