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.jsondeclaresnetwork: proxy|direct: overseas sources go through the proxy (environment variableHTTPS_PROXY), Chinese sources are forced direct - Failure of individual sources (e.g., arXiv occasional 502) is recorded in
items.jsonundererrors; continue execution, do not interrupt
Step 2: Filtering and Summarization (Agent/LLM's Responsibility)
Read all items in items.json, then:
- De-noise: Remove items not related to AI (HN/InfoQ contain a lot of non-AI content)
- De-duplicate and merge: Merge reports of the same event from multiple sources, keep the most authoritative original link
- Summarize: 2-3 sentences per item in Chinese, state only facts
- Tag:
category(Frontier Developments / Community Hot Topics / Chinese News / Paper Briefings / Product Updates),importance(High = industry-level release, funding, policy / Medium / Low), free-formtags - Daily digest: Write a 2-3 sentence
digestsummarizing the day's highlights and trends, placed at the top level ofselection.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.jsoninto 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
- Python 3.10+:
pip install feedparser requests - For Feishu output (Step 3): lark-cli (official CLI,
npx @larksuite/cli@latest install) must have completedconfig initandauth login; if lark-cli cannot be found automatically, use the environment variableLARK_CLIto specify its full path
Source List (sources.json, can be added or removed)
| Source | Method | Network |
|---|---|---|
| OpenAI Official News | RSS | Proxy |
| Google DeepMind / Google AI Blog | RSS | Proxy |
| Anthropic News | sitemap (no official RSS) | Proxy |
| Hugging Face Blog | RSS | Proxy |
| TechCrunch / The Verge AI | RSS | Proxy |
| MIT Tech Review AI | RSS | Proxy |
| Hacker News AI Top Posts | Algolia API (time window + points + keyword word-boundary filter) | Direct |
| InfoQ Chinese | RSS (AI-related filtered in Step 2) | Direct |
| arXiv cs.AI / cs.CL | arXiv API | Proxy |
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.