Automatically search for and summarize the day's tech news, usingmulti-source cross-validation + in-depth research + importance scoringmechanism,use the Write tool to directly write the finished drafts as two Markdown files in the repository, publishing to the ZerxLab blog in one step.
⚠️ Core architecture of this Skill
Runs in the zerx-lab-website repository, and the content source isthe Markdown files under src/content/posts/ in the repository(Astro Content Layer). Publishing goes throughfile writing + git commit(not a database, not any MCP):
┌──────────────────┐ ┌──────────────────────────────────────┐
│ Claude Code │ │ src/content/posts/ │
│ (GitHub Actions) │────▶│ daily-tech-news-{DATE}/ │
│ WebSearch │ │ zh.md (中文正文 + frontmatter) │
│ WebFetch │ │ en.md (英文正文 + frontmatter) │
│ Glob / Read │ │ │
│ Write │ │ workflow 校验通过后 git commit + push │
└──────────────────┘ └──────────────────────────────────────┘
Claude throughoutuses only filesystem tools(Glob / Read / Write) to read and write these two Markdown files. When this skill ends, the files are already on the workspace disk,and it is not responsible for git commit / push / sending email — those are handled by subsequent steps in the workflow (commit only after validation passes, send email only after a successful commit).
⚠️ Required parameters
When invoking this skill, the target date must be specified in the prompt:
TARGET_DATE: YYYY-MM-DD 格式的日期
示例: 2026-04-17
All dates during execution (file paths, date, title, search keywords) must use this TARGET_DATE.Prohibitedto use relative dates such as "today / yesterday".
Date derivation rules:
- Directory / slug:
daily-tech-news-{TARGET_DATE}(e.g.:daily-tech-news-2026-04-17) - File path:
src/content/posts/daily-tech-news-{TARGET_DATE}/zh.mdanden.md - frontmatter
date:{TARGET_DATE}T00:00:00.000Z - Chinese title date: convert to Chinese format (e.g.:
2026年04月17日) - English title date:
Apr 17, 2026format coverLabel: date abbreviation (e.g.:04/17)
⚠️ The body text must be written in full in one go (placeholders prohibited)
After Claude finishes, the workflow has apure shell validation step: check whether the two files exist, whether the frontmatter fields are complete, whether the body text character count is ≥ 100, and whether the full text contains the placeholder / TBD / TODO(case-insensitive) substring.If any item fails, the entire run fails directly — there will be no git commit, so no deployment will be triggered, and no notification email will be sent.
Therefore:
- The only correct path = in Phase 4, truly write the Chinese-English bilingual body textin full(multi-paragraph structure, each article ≥ 100 characters), and only then in Phase 5 use Write to write both files completely in one go.
- Strictly prohibitedto first write an "outline / placeholder version" content intending to "fill it in later" — within a single run of this skill there is no "next round"; if it is not written completely, this run fails directly.
- If worried about insufficient context or tokens → reduce the number of candidate news items (the Phase 6 fallback rule allows 6-8 items), but do not pad with placeholders.
Core principles
Accuracy first → multi-source cross-validation + in-depth reading of the original text Quality over quantity → importance scoring screening + deduplication and noise reduction Depth over breadth → In-depth analysis of Top 3 news items + technical interpretation Bilingual parity → Chinese and English versions written independently, no machine translation
Phase 0: Establish the working baseline (must be executed first)
Before any WebSearch,you mustfirst establish the following context:
Step 0.1: Check articles published in the last 7 days (deduplication baseline)
Glob("src/content/posts/daily-tech-news-*/zh.md")
Sort the matched paths in reverse order by the date in the directory name, take the few from the last 7 days, and for each one Read its frontmatter (title / excerpt) and the body's heading structure.
Purpose: Extract the project names / company names / event keywords already reported from the title + excerpt + body subheadings, forming a EXCLUDE_LIST. During Phase 2/3 search and scoring, actively exclude already-covered events. "Incremental progress" on the same product may be reported, but the difference from existing coverage must be stated.
Step 0.2: Confirm the target file does not yet exist
Glob("src/content/posts/daily-tech-news-{TARGET_DATE}/*.md")
- Returns empty → normal path, Phase 5 directly Writes the new file
- A directory with the same name already exists (rare, e.g. a manual rerun on the same day) → treat as an overwrite rewrite, Phase 5 still uses Write to fully rewrite both files (the Write tool itself overwrites the entire file, no extra "update" step is needed)
Step 0.3: Confirm the available author / category / tags
No need to look up any database id anymore — all associations are nowpure string slugs, just write them directly into the frontmatter:
- Author is fixed to
author: "ai"(this slug needs to already exist insrc/content/data/authors.json; normally it is preset by the project, no confirmation needed) - Category is fixed to
category: "news"(likewise needs to already exist insrc/content/data/categories.json) - Tags are selected from
src/content/data/tags.json:
Read("src/content/data/tags.json")
Establish the tag_slug list to be used this time (selected dynamically based on content,do notlook up ids one by one, use the slug strings directly):
| Standard tag_slug | Meaning | When to apply |
|---|---|---|
daily-news |
Daily news | Always apply(every article) |
ai |
AI overview | When the day's AI category has content |
llm |
Large models | Involves a specific LLM product/model |
github |
GitHub / Open source | GitHub-related entries |
frontend |
Frontend | Frontend frameworks / toolchains |
backend |
Backend | Backend frameworks / languages |
infra |
Infrastructure | K8s / Docker / cloud |
devtools |
Development tools | IDE / CLI / productivity tools |
If the content clearly needs a new tag not in the table(e.g. edge-runtime): this is outside the write scope of this skill — do notedit tags.jsonwithout authorization. As a fallback, choose the closest existing tag from the table above, or apply only daily-news. Expanding the tag system falls under site maintenance and is left to manual evaluation.
Phase 1: Multi-source deep search (WebSearch + WebFetch)
Step 1.1: Authoritative official sources (highest priority)
| Source | URL | Description |
|---|---|---|
| Hacker News | https://news.ycombinator.com/ | Tech Community Trend Indicator |
| GitHub Trending | https://github.com/trending | Open Source Project Trends |
| Trendshift | https://trendshift.io/ | GitHub Trend Analysis |
| Product Hunt | https://www.producthunt.com/ | New Product Releases |
Use WebFetch to retrieve directly and extract the day's Top 10 trending content.
Step 1.2: Professional Media Sources (2-3 keyword combinations per field)
AI / LLM:
1. site:techcrunch.com AI {date}
2. site:theverge.com artificial intelligence {date}
3. "OpenAI" OR "Anthropic" OR "Google AI" announcement {date}
4. "LLM" OR "GPT" OR "Claude" release {date}
5. machine learning breakthrough research {date}
GitHub / Open Source:
1. site:github.blog {date}
2. "open source" major release {date}
3. GitHub "stars" trending repository {date}
Frontend:
1. site:reactjs.org OR site:vuejs.org blog {date}
2. "React" OR "Vue" OR "Next.js" OR "Svelte" release {date}
3. frontend framework update {date}
4. JavaScript TypeScript major update {date}
Backend / Infrastructure:
1. site:kubernetes.io blog {date}
2. "Rust" OR "Go" programming release {date}
3. "Docker" OR "Kubernetes" announcement {date}
4. cloud infrastructure AWS Azure GCP {date}
Tech Industry News:
1. site:crunchbase.com funding {date}
2. tech startup Series A B C funding {date}
3. developer tools company announcement {date}
Step 1.3: Chinese Tech Communities (supplement with Chinese original content)
1. site:juejin.cn 热门 {date}
2. site:infoq.cn {date}
3. site:segmentfault.com 头条 {date}
Phase 2: In-Depth Research and Verification
Step 2.1: Cross-Verification (for each candidate news item)
1. 核心事实提取 (5W):
- WHO / WHAT / WHEN / WHERE / WHY
2. 多源验证 (至少 2 个独立来源):
- 来源 A 报道 → WebFetch 获取原文
- 来源 B 验证 → WebSearch 搜索相同事件
- 对比核心事实是否一致
3. 置信度标记:
✓ 已验证 (2+ 源确认)
? 待验证 (仅单一来源)
⚠ 有争议 (来源间矛盾)
News with a confidence level below "✓" does not enter the Top 3, and is only conservatively included in classifications with clear labeling.
Step 2.2: In-Depth Reading of Original Articles
For the Top 10 candidates, use WebFetch to extract:
- Core argument
- Key data and facts
- Expert quotes and commentary
- Technical details and implementation methods
- Practical impact on developers
Step 2.3: Importance Scoring (out of 100)
| Dimension | Weight | Scoring Criteria |
|---|---|---|
| Scope of Impact | 25% | How many developers does it affect? Global vs. local |
| Practicality | 25% | Can it be applied immediately? What problem does it solve? |
| Novelty | 20% | First announcement vs. repeated coverage? Breakthrough vs. incremental |
| Depth of Information | 15% | Has technical details vs. only a headline |
| Authority | 15% | Official release vs. rumor |
Score to star rating:
- 90-100 → ⭐⭐⭐⭐⭐
- 80-89 → ⭐⭐⭐⭐
- 70-79 → ⭐⭐⭐
- 60-69 → ⭐⭐
- < 60 → Not included
Step 2.4: Deduplication and Noise Reduction
❌ 标题党:
- 含 "震惊"、"重磅"、"曝光" 但无实质内容
- 过多感叹号/问号
❌ 低质:
- 与开发者无关的泛科技新闻
- "AI 继续发展" 这类笼统报道
- EXCLUDE_LIST 中 7 天已覆盖事件
- 单一来源且无法验证的消息
❌ 内容去重:
- 同事件多报道 → 只留信息最丰富的
- 优先级: 官方来源 > 专业媒体 > 泛媒体
Phase 3: Top 3 In-Depth Analysis
Select the 3 highest-scoring items and write according to the template (one Chinese and one English version each, embedded in the final body):
### [标题] ⭐⭐⭐⭐⭐
**核心要点:**
- 要点1
- 要点2
- 要点3
**技术解读:**
[对开发者的影响、技术实现、背景]
**开发者行动建议:**
- 建议1
- 建议2
**相关链接:**
- 官方公告:[链接]
- 技术文档:[链接]
- 社区讨论:[链接]
Chinese-English Bilingual Requirement: The two versions are written independently, not machine-translated. The English version uses active voice, specific numbers, and minimal pleasantries, in line with English tech blog conventions.
Phase 4: Body Structure
Chinese Version Body Skeleton
## 🔥 今日焦点
{Top 3 资讯的深度分析,每条按 Phase 3 模板}
---
## AI / 人工智能
### {标题} ⭐⭐⭐⭐
{3-5 句摘要}
**为什么重要:** {一句话对开发者的影响}
- 来源:[{来源名}]({URL})
- 验证:✓ 多源确认
### {标题2}
...
## GitHub / 开源
### GitHub 热门项目
本日 GitHub 趋势榜热门项目:
- **[owner/repo](https://github.com/owner/repo)** (TypeScript, 12.5k ⭐) ⭐⭐⭐⭐
AI 驱动的代码编辑器插件。
**亮点:** {为什么值得关注}
- 来源:[GitHub Trending](https://github.com/trending), [Trendshift](https://trendshift.io/)
### {其他开源资讯}
...
## 前端开发
...
## 后端 / 基础设施
...
## 科技动态
...
---
## 📊 今日数据
| 指标 | 数值 |
|------|------|
| 搜索源数量 | {N} 个 |
| 候选资讯 | {N} 条 |
| 去重后 | {N} 条 |
| 最终收录 | {N} 条 |
| 多源验证率 | {N}% |
---
> 本文由 AI 自动生成,采用多源交叉验证机制。如发现错误,欢迎反馈。
English Version Body Skeleton
Use English category headings (AI / Open Source / Frontend / Backend & Infra / Tech Industry),written independently, not a direct translation of the Chinese version.
Markdown Conventions (body after frontmatter)
- Opening: An introductory paragraph that explains "what happened in the tech world today"; do not go directly into
## 标题 - Heading Levels:
##and###as the main structure (H2 / H3 automatically enter the TOC; H4+ do not) - Code Blocks: Must specify a supported language (Shiki dual-theme highlighting); common languages are all acceptable, such as
bash, shell, powershell, javascript, typescript, tsx, jsx, json, yaml, toml, markdown, html, css, astro, go, rust, python, java, c, cpp, sql, dockerfile - External Links:
[文字](https://...); the frontend automatically addstarget="_blank" - Images: Use public external links
. Do not reference image hosts that require login - Blockquotes:
>at the beginning, used for "notes/tips/warnings" - GFM: Tables, task lists (
[ ]/[x]), strikethrough (~~~~) are all supported - after frontmatter: Do not show a second instance at the top of the body
---(the boundary that would be mistaken for yet another frontmatter block)
Phase 5: Write the Markdown files
Step 5.1: Write the two files
Use the Write toolWrite them completely in one goTwo files (all frontmatter fields set to final values, all YAML strings wrapped in double quotes):
src/content/posts/daily-tech-news-{TARGET_DATE}/zh.md:
---
title: "每日技术资讯 - 2026年04月17日"
excerpt: "50-150 字中文摘要,突出 Top 3"
coverLabel: "04/17"
date: "{TARGET_DATE}T00:00:00.000Z"
author: "ai"
category: "news"
tags: ["daily-news", "ai", "github"]
featured: false
---
{Phase 4 撰写好的中文版完整 Markdown 正文}
src/content/posts/daily-tech-news-{TARGET_DATE}/en.md:
---
title: "Daily Tech News - Apr 17, 2026"
excerpt: "50-150 word English excerpt, highlighting Top 3"
coverLabel: "04/17"
date: "{TARGET_DATE}T00:00:00.000Z"
author: "ai"
category: "news"
tags: ["daily-news", "ai", "github"]
featured: false
---
{Phase 4 撰写好的英文版完整 Markdown 正文}
Key points:
title/excerpt/coverLabelis a language-dependent field, so each of the two files writes its own valuedate/author/category/tags/featuredis a language-independent field, so the two files must becompletely identicaltagsis a string array; write the slug directly, no id mapping is needed- Do not write
cover(no image available; the frontend will fall back to thecoverLabellarge text card) - Do not write
updatedDate/seoTitle/seoDescription(optional field, not needed in this scenario) - Do not write
draft(defaultfalse, i.e. normal publishing)
Step 5.2: Read back to confirm
After writing is complete,you must read back with Readonce for each of the two files, to confirm:
- the frontmatter is complete and field values contain no unreplaced placeholders (such as the literal
{TARGET_DATE}、XX月XX日) - the body is sufficiently long (each article is clearly ≥ 100 characters; in practice it should have a multi-paragraph structure, several hundred characters or more)
- the body does not contain the word
placeholder/TBD/TODOwording
⚠️ The workflow has a separate shell validation step that performs the same check,and failing it will cause the entire run to fail, with nothing committed and no email sent. The self-check here is meant to catch and fix problems before Claude finishes running, rather than leaving them for the workflow to intercept.
Phase 6: Self-check list (must pass before writing)
Phase 0(工作基线)
[ ] 已 Glob + Read 近 7 天文章形成 EXCLUDE_LIST
[ ] 已确认目标文件路径(daily-tech-news-{TARGET_DATE}/{zh,en}.md)
[ ] 已读 tags.json 确认本次要用的 tag slug
内容质量
[ ] Top 3 资讯都经过多源验证(✓)
[ ] 每条资讯都有来源链接
[ ] 重要性评分星级标记完整
[ ] 无标题党
[ ] 已应用 EXCLUDE_LIST 去重
[ ] 中英双语独立撰写,不是机翻
[ ] Top 3 深度分析 200-400 字/词每条
[ ] 总资讯数 10-20 条(质量优先,安静日允许 6-8 条)
[ ] 至少覆盖 3 个分类
字段完整性
[ ] 目录名 = daily-tech-news-{TARGET_DATE}
[ ] date = {TARGET_DATE}T00:00:00.000Z(两个文件一致)
[ ] author = "ai"
[ ] category = "news"
[ ] tags 至少含 "daily-news"(数组,slug 字符串)
[ ] featured = false
[ ] 每个文件的 title / excerpt / coverLabel 已按各自语言填好,无占位符
[ ] 正文长度 ≥ 100 字符,且不含 placeholder / TBD / TODO 子串(大小写不敏感)
Markdown
[ ] 代码块都标注了受支持的语言
[ ] 正文里没有出现第二段顶格 ---
[ ] 外链格式正确
If any item fails, do not call Write to produce the final version, and go back to fill in what is missing.
Phase 7: Output summary
After a successful write, output a brief summary to the workflow (no JSON needed; human-readable is fine):
✅ 写入成功
- slug: daily-tech-news-{TARGET_DATE}
- 文件: src/content/posts/daily-tech-news-{TARGET_DATE}/{zh,en}.md
- 收录资讯: {N} 条(Top 3 深度分析 + {N} 条分类资讯)
- 多源验证率: {N}%
- 前端 URL(部署后可访问):
· 中文: https://zerx.dev/blog/daily-tech-news-{TARGET_DATE}/
· 英文: https://zerx.dev/en/blog/daily-tech-news-{TARGET_DATE}/
PUBLISHED: daily-tech-news-{TARGET_DATE}
End with PUBLISHED: <slug> as the completion marker, so the workflow can judge success accordingly.Note: this only means the files have been written to the workspace disk. The actual "publishing" (git commit + push + deploy + send email) is done by later workflow steps; this skill is not responsible for it and has no permission to do it.
Strictly prohibited list
| Operation | Reason for prohibition |
|---|---|
Editing src/content/data/*.json(authors / categories / tags and other metadata) |
The metadata system is managed by the site maintainers; this skill only reads it and does not write to it |
Writing placeholder strings in the body (placeholder-*、TBD、TODO, empty strings), intending to "fill them in later" |
This skill has no "next round" within a single run; the workflow's validation step will intercept it and fail immediately, in which case nothing is committed and no email is sent, meaning this run is completely wasted |
| Writing a file in only one language | The frontend's bilingual routing will 404 on the other language |
| Skipping Phase 0 and starting WebSearch directly | This misses the deduplication baseline and repeats reporting of events within 7 days |
| Skipping the Phase 5.2 read-back confirmation | There is no way to ensure the written content matches expectations |
Executing on your own git add / git commit / git push |
Submission is handled by a separate step in the workflow and must pass validation first; submitting from within the skill bypasses validation and pushes the issue content directly |
Violating any one of these is considered a failure.
Information source priority
First priority (authoritative official)
- GitHub official blog, Trending
- Official blogs of various frameworks/languages (React, Vue, Rust, Go, etc.)
- Official company announcements (Google, Microsoft, AWS, Anthropic, OpenAI, etc.)
Second priority (professional media)
- Hacker News (community bellwether)
- TechCrunch, The Verge (in-depth tech reporting)
- InfoQ, Juejin (Chinese tech communities)
Third priority (general media)
- General technology news websites
- Social media trending topics
- Personal blogs
Clickbait identification rules (automatically downrank or exclude)
❌ 情绪化词汇: 震惊、重磅、曝光、惊天、颠覆、史上最强
❌ 过度夸张: 彻底改变、完全碾压、全面超越
❌ 模糊表述: 某公司、据说、可能、或将
❌ 无实质内容: AI 继续发展、技术在进步
❌ 标题与内容不符: 标题说重大突破,内容只是小更新
Common errors and fallbacks
| Scenario | Handling |
|---|---|
| On a certain day the global tech community is very quiet and fewer than 10 items can be gathered | It is fine to include 6-8 items; do not force it. In the excerpt, state "there is little news today" |
| A certain category (such as frontend) has no important developments that day | Skip that category; do not fabricate. Only need ≥ 3 categories |
| WebFetch cannot access a certain source | Switch to another source for verification; if it fails twice, mark ? 待验证 and downrank |
| Unsure whether an event is true or false | Better not to include it than to publish unverified information |
The needed tag is not in tags.json inside |
Choose the closest one from the existing tags, or only attach daily-news; do not edit tags.json |
| Phase 0.2 finds that the same-day directory already exists (duplicate run) | Treat as overwrite and rewrite; Phase 5 still rewrites the complete contents of both files in full |
Notes
- Depth over breadth: better to have 10 high-quality items than 30 low-quality ones
- Verification over speed: each news item undergoes multi-source verification
- Interpretation over retelling: provide technical interpretation and developer action recommendations
- Deduplication over repetition: the EXCLUDE_LIST in Phase 0.1 must be strictly applied
- English search + bilingual output: searching with English keywords works better, final output is bilingual Chinese-English
- Stay objective and neutral: avoid subjective evaluations and emotional expressions
- One-step completion: Phase 5 writes directly to the final file via Write, without any intermediate script/database