Tech Harvester
RSSフィードを取得し、テーマ別に整理して日本語要約付きのMarkdownダイジェストを生成するスキル。 収集先・キーワードが使うたびに自律的に改善される進化機能も備える。
モード一覧
| モード | 発動フレーズ例 | 概要 |
|---|---|---|
| A: ダイジェスト生成 | 「ニュースを取得して」「テックブログをまとめて」「最新の技術情報を集めて」「ダイジェストを作って」「RSSをまとめて」 | フィードを取得しテーマ別日本語要約を生成する |
| B: トレンド分析 | 「トレンドを分析して」「今週のキーワードをまとめて」「注目トピックを教えて」 | 記事からキーワードを抽出し rising/stable/declining を分類する |
| C: フィード発見 | 「新しいフィードを探して」「収集先を増やして」「フィードを発掘して」 | 記事内リンクから未登録の RSS フィードを自動発見する |
| D: フィード進化 | 「フィードを最適化して」「不要なフィードを整理して」「フィードを進化させて」 | 品質統計に基づき feeds をローカルで自動更新する |
ワークフロー A: ダイジェスト生成(通常利用)
ステップ1: 記事を取得する
python .github/skills/tech-harvester/scripts/fetch_feeds.py --output articles.json
--update-stats を付けると取得後に自動で feed_stats を更新する(推奨):
python .github/skills/tech-harvester/scripts/fetch_feeds.py --output articles.json --update-stats
オプション:
| オプション | 説明 | 例 |
|---|---|---|
--max-items N |
フィードあたりの最大記事数(デフォルト: 10) | --max-items 5 |
--lang ja|en |
言語でフィードを絞り込む | --lang ja |
--tags TAG1,TAG2 |
タグでフィードを絞り込む | --tags cloud,ai |
--output FILE |
結果をJSONファイルに書き出す | --output articles.json |
--update-stats |
フェッチ後に feed_stats を更新する | — |
スクリプトは記事一覧をJSON形式で出力する。
ステップ2: テーマ別に整理して日本語要約を生成する
取得したJSON(articles 配列)を元に以下を行う:
- 記事のタイトルと説明文からテーマを判定し、関連する記事をグループ化する
- 各記事の要約を日本語で1〜2文にまとめる
- 「出力フォーマット」に従いMarkdown形式のファイルを生成する
テーマの例: AI・機械学習, クラウド・インフラ, 開発ツール・OSS, セキュリティ, フロントエンド・Web, キャリア・コミュニティ など。記事の内容に応じて適切なテーマを設定する。
キーワードトレンドが蓄積されている場合は「今週の注目キーワード」セクションを先頭に追加する:
## 今週の注目キーワード
`キーワード1` `キーワード2` `キーワード3`
ワークフロー B: キーワードトレンド分析
「トレンドを分析して」「今週のキーワードをまとめて」などで発動する。
python .github/skills/tech-harvester/scripts/keyword_trends.py --articles articles.json
- articles.json がなければ先にステップ1を実行する
- 実行後、
skill-registry.jsonのkeyword_trendsセクションに今週のデータが書き込まれる - ltm-use が利用可能であれば、トレンドサマリーが episodic 記憶として自動保存される
オプション:
| オプション | 説明 | 例 |
|---|---|---|
--week YYYY-WNN |
対象週(省略時: 今週) | --week 2026-W19 |
--keep-weeks N |
保持する週数(デフォルト: 8) | --keep-weeks 4 |
--no-ltm |
ltm-use への保存をスキップ | — |
保存済みトレンドを確認する:
python .github/skills/tech-harvester/scripts/keyword_trends.py show
ワークフロー C: フィード自動発見
「新しいフィードを探して」「収集先を増やして」などで発動する。
python .github/skills/tech-harvester/scripts/discover.py --articles articles.json
記事の説明文・リンクから外部ドメインを抽出し、RSS/Atom フィードを試行する。
発見した候補は skill-registry.json の candidate_feeds に追記される。
オプション:
| オプション | 説明 | 例 |
|---|---|---|
--top-domains N |
調査するドメイン上位数(デフォルト: 15) | --top-domains 20 |
--timeout SEC |
フィード確認のタイムアウト秒数(デフォルト: 8) | --timeout 5 |
候補一覧を確認する:
python .github/skills/tech-harvester/scripts/discover.py show
候補の relevance_score を評価・設定する(0〜100点):
python .github/skills/tech-harvester/scripts/scorer.py set-relevance "フィード名" 80.0
ワークフロー D: フィード自律進化(統合)
「フィードを最適化して」「不要なフィードを整理して」などで発動する。
まず変更内容をプレビューする:
python .github/skills/tech-harvester/scripts/evolve_feeds.py --dry-run
問題なければ適用する:
python .github/skills/tech-harvester/scripts/evolve_feeds.py
削除基準:
- 3回以上連続フェッチ失敗
- 関連性スコアが 30 未満かつ取得回数が 10 以上
追加基準(candidate_feeds からの昇格):
- 発見数 2 回以上かつ関連性スコアが 60 以上
すべてローカルで更新する。リポジトリへのプッシュは行わない。 変更内容は ltm-use に進化ログとして記録される。
オプション:
| オプション | 説明 |
|---|---|
--dry-run |
プレビューのみ(適用しない) |
--only-remove |
削除のみ実行 |
--only-add |
追加のみ実行 |
--min-discovery N |
昇格に必要な発見回数(デフォルト: 2) |
--min-relevance SCORE |
昇格に必要な関連性スコア(デフォルト: 60) |
--no-ltm |
ltm-use へのログ保存をスキップ |
フィード管理(手動)
ユーザーからフィードの追加・削除・変更を求められた場合は .github/skill-registry.json の tech-harvester.feeds 配列を直接編集する。
使用できる tags の例: general, cloud, aws, ai, github, japanese, devops, enterprise, oss, news
フィード品質の統計を確認する:
python .github/skills/tech-harvester/scripts/scorer.py show
skill-registry.json の構造
{
"skill_configs": {
"tech-harvester": {
"feeds": [...],
"feed_stats": {
"フィード名": {
"fetch_count": 42,
"article_count": 380,
"avg_desc_length": 210.5,
"consecutive_failures": 0,
"last_fetched": "2026-05-09T12:00:00Z",
"relevance_score": 75.0
}
},
"keyword_trends": {
"2026-W19": {
"rising": ["Claude 4", "MCP"],
"stable": ["Kubernetes", "TypeScript"],
"declining": ["GPT-3"]
}
},
"candidate_feeds": [
{
"name": "Example Tech Blog",
"url": "https://example.com/feed",
"lang": "ja",
"discovered_from": ["https://..."],
"discovery_count": 3,
"relevance_score": 0.0,
"suggested_tags": ["japanese", "tech", "blog"],
"status": "pending"
}
]
}
}
}
feeds が未設定のエージェントホームでは、初回の fetch_feeds.py が同梱の
scripts/default_feeds.json(19 フィード)を書き込んでから取得する。以降はレジストリ側が正で、
既定フィードを読み直すことはない。
feed_stats・keyword_trends・candidate_feeds はローカルで育っていく。
リポジトリへのプッシュは行わず、バックアップが必要な場合はユーザーが任意で行う。
出力フォーマット
# Tech Digest
_YYYY-MM-DD HH:MM UTC_
## 今週の注目キーワード
`キーワード1` `キーワード2` `キーワード3`
---
## テーマ名
### [記事タイトル](URL)
日本語による1〜2文の要約。
---
トラブルシューティング
- フィードの取得に失敗する: スクリプトは
[WARN]を stderr に出力してスキップする。--update-statsを使っていればconsecutive_failuresが自動加算される。 - 説明文が空の記事: タイトルから内容を推定して日本語要約を生成する。
- Atom形式のフィード:
fetch_feeds.pyはRSS 2.0とAtomの両方に対応している。 - ltm-use が見つからない: ltm-use スキルがインストールされていない場合は ltm 連携をスキップしてスクリプトは正常終了する。
- フィード発見で何も見つからない: RSS を公開していないサイトや説明文にリンクを含まないフィードでは候補が出ない。手動でフィードを追加する。