daily-news-report について
daily-news-reportは、ニュースを収集・選別し、Markdown形式の日報を作成するエージェント向けスキルです。SubAgentの調整、キャッシュによる重複排除、利用できない場合の逐次実行への切り替えを備えています。
主な機能
- 01SubAgentによる並列取得
- 02記事の評価・順位付け・選別
- 03URLと履歴キャッシュの重複排除
- 04必要に応じたブラウザー取得
- 05Markdown日報の作成とキャッシュ更新
活用シーン
- 01複数サイトのニュースを日次で集約
- 02JavaScript描画が必要なページの取得
- 03過去に掲載した記事の再掲載防止
MCP 対応
JavaScript描画が必要な場合、MCP Chrome DevToolsでページを開き、読み込みを待ってスナップショットを取得し、ページを閉じます。
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ rookie-ricardo/ erduo-skills --skill daily-news-reportインストール後、Claude Code で/daily-news-reportを入力して読み込まれたか確認します。
同梱ファイルcache.jsonsources.json
詳細
デイリーニュースレポート v3.0
アーキテクチャのアップグレード:メイン Agent による調整 + SubAgent による実行 + ブラウザーによる取得 + インテリジェントキャッシュ
コアアーキテクチャ
┌─────────────────────────────────────────────────────────────────────┐
│ 主 Agent (Orchestrator) │
│ 职责:调度、监控、评估、决策、汇总 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 1. 初始化 │ → │ 2. 调度 │ → │ 3. 监控 │ → │ 4. 评估 │ │
│ │ 读取配置 │ │ 分发任务 │ │ 收集结果 │ │ 筛选排序 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 5. 决策 │ ← │ 够20条? │ │ 6. 生成 │ → │ 7. 更新 │ │
│ │ 继续/停止 │ │ Y/N │ │ 日报文件 │ │ 缓存统计 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ │
└──────────────────────────────────────────────────────────────────────┘
↓ 调度 ↑ 返回结果
┌─────────────────────────────────────────────────────────────────────┐
│ SubAgent 执行层 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Worker A │ │ Worker B │ │ Browser │ │
│ │ (WebFetch) │ │ (WebFetch) │ │ (Headless) │ │
│ │ Tier1 Batch │ │ Tier2 Batch │ │ JS渲染页面 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ ↓ ↓ ↓ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 结构化结果返回 │ │
│ │ { status, data: [...], errors: [...], metadata: {...} } │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
設定ファイル
この Skill では、以下の設定ファイルを使用します。
| ファイル | 用途 |
|---|---|
sources.json | 情報源の設定、優先度、取得方法 |
cache.json | キャッシュデータ、履歴統計、重複排除用フィンガープリント |
実行フローの詳細
Phase 1: 初期化
步骤:
1. 确定日期(用户参数或当前日期)
2. 读取 sources.json 获取源配置
3. 读取 cache.json 获取历史数据
4. 创建输出目录 NewsReport/
5. 检查今日是否已有部分报告(追加模式)
Phase 2: SubAgent のスケジューリング
方針:並列スケジューリング、分割実行、早期終了の仕組み
第1波 (并行):
- Worker A: Tier1 Batch A (HN, HuggingFace Papers)
- Worker B: Tier1 Batch B (OneUsefulThing, Paul Graham)
等待结果 → 评估数量
如果 < 15 条高质量:
第2波 (并行):
- Worker C: Tier2 Batch A (James Clear, FS Blog)
- Worker D: Tier2 Batch B (HackerNoon, Scott Young)
如果仍 < 20 条:
第3波 (浏览器):
- Browser Worker: ProductHunt, Latent Space (需要JS渲染)
Phase 3: SubAgent のタスク形式
各 SubAgent が受け取るタスク形式:
task: fetch_and_extract
sources:
- id: hn
url: https://news.ycombinator.com
extract: top_10
- id: hf_papers
url: https://huggingface.co/papers
extract: top_voted
output_schema:
items:
- source_id: string # 来源标识
title: string # 标题
summary: string # 2-4句摘要
key_points: string[] # 最多3个要点
url: string # 原文链接
keywords: string[] # 关键词
quality_score: 1-5 # 质量评分
constraints:
filter: "前沿技术/高深技术/提效技术/实用资讯"
exclude: "泛科普/营销软文/过度学术化/招聘帖"
max_items_per_source: 10
skip_on_error: true
return_format: JSON
Phase 4: メイン Agent による監視とフィードバック
メイン Agent の役割:
监控:
- 检查 SubAgent 返回状态 (success/partial/failed)
- 统计收集到的条目数量
- 记录每个源的成功率
反馈循环:
- 如果某 SubAgent 失败,决定是否重试或跳过
- 如果某源持续失败,标记为禁用
- 动态调整后续批次的源选择
决策:
- 条目数 >= 25 且高质量 >= 20 → 停止抓取
- 条目数 < 15 → 继续下一批
- 所有批次完成但 < 20 → 用现有内容生成(宁缺毋滥)
Phase 5: 評価と選別
去重:
- 基于 URL 完全匹配
- 基于标题相似度 (>80% 视为重复)
- 检查 cache.json 避免与历史重复
评分校准:
- 统一各 SubAgent 的评分标准
- 根据来源可信度调整权重
- 手动标注的高质量源加分
排序:
- 按 quality_score 降序
- 同分按来源优先级排序
- 截取 Top 20
Phase 6: ブラウザーによる取得(MCP Chrome DevTools)
JS レンダリングが必要なページでは、ヘッドレスブラウザーを使用します。
流程:
1. 调用 mcp__chrome-devtools__new_page 打开页面
2. 调用 mcp__chrome-devtools__wait_for 等待内容加载
3. 调用 mcp__chrome-devtools__take_snapshot 获取页面结构
4. 解析 snapshot 提取所需内容
5. 调用 mcp__chrome-devtools__close_page 关闭页面
适用场景:
- ProductHunt (403 on WebFetch)
- Latent Space (Substack JS 渲染)
- 其他 SPA 应用
Phase 7: 日報の生成
输出:
- 目录: NewsReport/
- 文件名: YYYY-MM-DD-news-report.md
- 格式: 标准 Markdown
内容结构:
- 标题 + 日期
- 统计摘要(源数量、收录数量)
- 20条高质量内容(按模板)
- 生成信息(版本、时间戳)
Phase 8: キャッシュの更新
更新 cache.json:
- last_run: 记录本次运行信息
- source_stats: 更新各源统计数据
- url_cache: 添加已处理的 URL
- content_hashes: 添加内容指纹
- article_history: 记录收录文章
SubAgent の呼び出し例
general-purpose Agent の使用
カスタム Agent は、検出されるまでに session の再起動が必要なため、worker prompt を注入した general-purpose を使用できます。
Task 调用:
subagent_type: general-purpose
model: haiku
prompt: |
你是一个无状态的执行单元。只做被分配的任务,返回结构化 JSON。
任务:抓取以下 URL 并提取内容
URLs:
- https://news.ycombinator.com (提取 Top 10)
- https://huggingface.co/papers (提取高投票论文)
输出格式:
{
"status": "success" | "partial" | "failed",
"data": [
{
"source_id": "hn",
"title": "...",
"summary": "...",
"key_points": ["...", "...", "..."],
"url": "...",
"keywords": ["...", "..."],
"quality_score": 4
}
],
"errors": [],
"metadata": { "processed": 2, "failed": 0 }
}
筛选标准:
- 保留:前沿技术/高深技术/提效技术/实用资讯
- 排除:泛科普/营销软文/过度学术化/招聘帖
直接返回 JSON,不要解释。
worker Agent の使用(session の再起動が必要)
Task 调用:
subagent_type: worker
prompt: |
task: fetch_and_extract
input:
urls:
- https://news.ycombinator.com
- https://huggingface.co/papers
output_schema:
- source_id: string
- title: string
- summary: string
- key_points: string[]
- url: string
- keywords: string[]
- quality_score: 1-5
constraints:
filter: 前沿技术/高深技术/提效技术/实用资讯
exclude: 泛科普/营销软文/过度学术化
出力テンプレート
# Daily News Report(YYYY-MM-DD)
> 本日筛选自 N 个信息源,共收录 20 条高质量内容
> 生成耗时: X 分钟 | 版本: v3.0
>
> **Warning**: Sub-agent 'worker' not detected. Running in generic mode (Serial Execution). Performance might be degraded.
> **警告**:未检测到 Sub-agent 'worker'。正在以通用模式(串行执行)运行。性能可能会受影响。
---
## 1. 标题
- **摘要**:2-4 行概述
- **要点**:
1. 要点一
2. 要点二
3. 要点三
- **来源**:[链接](URL)
- **关键词**:`keyword1` `keyword2` `keyword3`
- **评分**:⭐⭐⭐⭐⭐ (5/5)
---
## 2. 标题
...
---
*Generated by Daily News Report v3.0*
*Sources: HN, HuggingFace, OneUsefulThing, ...*
制約と原則
- 量より質:品質の低い内容は日報に含めません
- 早期終了の仕組み:品質の高い記事が20件に達したら、取得を停止します
- 並列処理を優先:同じバッチの SubAgent は並列で実行します
- 障害への耐性:単一の情報源で障害が発生しても、全体の処理には影響しません
- キャッシュの再利用:同じ内容の重複取得を防ぎます
- メイン Agent による制御:すべての判断をメイン Agent が行います
- フォールバックへの対応:sub-agent が利用可能か検出し、利用できない場合は適切に縮退します
予想されるパフォーマンス
| シナリオ | 予想時間 | 説明 |
|---|---|---|
| 最良のケース | ~2 分 | Tier1 で十分なため、ブラウザーは不要です |
| 通常のケース | ~3-4 分 | Tier2 による補完が必要です |
| ブラウザーが必要な場合 | ~5-6 分 | JS レンダリングページを含みます |
エラー処理
| エラーの種類 | 処理方法 |
|---|---|
| SubAgent のタイムアウト | エラーを記録し、次に進みます |
| 情報源の 403/404 | 無効としてマークし、sources.json を更新します |
| コンテンツの抽出失敗 | 元のコンテンツを返し、メイン Agent が判断します |
| ブラウザーのクラッシュ | 該当する情報源をスキップし、ログを記録します |
互換性とフォールバック(Compatibility & Fallback)
異なる Agent 環境で利用できるように、以下の確認を必ず実行します。
-
環境の確認:
- Phase 1 の初期化段階で、
workersub-agent の有無を検出します。 - 存在しない場合(または関連するプラグインがインストールされていない場合)、**シリアル実行モード(Serial Mode)**に自動で切り替えます。
- Phase 1 の初期化段階で、
-
シリアル実行モード:
- parallel block は使用しません。
- メイン Agent が各情報源の取得タスクを順番に実行します。
- 実行速度は低下しますが、基本機能を利用できます。
-
ユーザーへの通知:
- 生成する日報の冒頭(引用ブロック部分)に、現在は縮退モードで実行されていることを知らせる明確な警告を必ず含めます。
コメント
Markdown 対応