name: topic-monitor version: 1.5.2 description: Monitor topics of interest and proactively alert when important developments occur. Use when the user wants automated monitoring of specific subjects like product releases, news topics, technology updates, RSS/Atom feeds, or GitHub releases. Supports scheduled web search plus feed polling, boolean topic filters, AI importance scoring with sentiment tracking, smart alerts vs weekly digests, and memory-aware contextual summaries. metadata: {"openclaw":{"requires":{"bins":["python3"],"env":{"TOPIC_MONITOR_TELEGRAM_ID":"optional - Telegram chat ID for alerts","TOPIC_MONITOR_DATA_DIR":"optional - defaults to .data/ in skill dir","WEB_SEARCH_PLUS_PATH":"optional - defaults to relative path"},"note":"All env vars optional. Defaults work out of the box."}}}
Monitor topics continuously and alert only when something looks relevant.
feedsgithub_repos → https://github.com/{owner}/{repo}/releases.atomrequired_keywords and exclude_keywordspositive, negative, neutral, mixedalert_on_sentiment_shiftpython3 scripts/quick.py "AI Model Releases"
python3 scripts/quick.py "OpenClaw Releases" --github-repos "openclaw/openclaw"
python3 scripts/quick.py "Security Advisories" --feeds "https://example.com/security.xml"
Then test it:
python3 scripts/monitor.py --dry-run --verbose
Each topic can mix multiple sources:
queryfeedsgithub_reposAll collected results flow into the same pipeline:
Each topic supports these keys:
idnamequerykeywordsfeedsgithub_reposrequired_keywordsexclude_keywordsfrequency → hourly|daily|weeklyimportance_threshold → high|medium|lowchannelscontextalert_onalert_on_sentiment_shiftignore_sourcesboost_sources{
"topics": [
{
"id": "openclaw-news",
"name": "OpenClaw Updates",
"query": "OpenClaw AI assistant update release",
"keywords": ["OpenClaw", "release", "update"],
"feeds": ["https://example.com/blog/rss.xml"],
"github_repos": ["openclaw/openclaw"],
"required_keywords": ["release"],
"exclude_keywords": ["rumor", "affiliate"],
"frequency": "daily",
"importance_threshold": "medium",
"channels": ["telegram"],
"context": "Track product updates and releases",
"alert_on": ["keyword_exact_match", "github_release"],
"alert_on_sentiment_shift": true,
"ignore_sources": [],
"boost_sources": ["github.com"]
}
]
}
required_keywordsAll listed terms must appear in the title/snippet before scoring.
"required_keywords": ["release", "stable"]
exclude_keywordsAny matching term filters the result out before scoring.
"exclude_keywords": ["beta", "rumor", "affiliate"]
This is intentionally simple boolean logic:
python3 scripts/manage_topics.py add "Security Feeds" \
--feeds "https://example.com/rss.xml,https://example.com/atom.xml" \
--keywords "security,CVE,patch"
Discover feeds from a normal website URL:
python3 scripts/manage_topics.py discover-feed https://example.com/blog
python3 scripts/monitor.py --discover-feed https://example.com/blog
Add a topic and auto-discover feeds in one step:
python3 scripts/manage_topics.py add "Vendor Blog" \ --discover-feeds "https://example.com/blog" \ --keywords "release,announcement"來源於7w4.net。
Import feed subscriptions from an OPML file:
python3 scripts/manage_topics.py import-opml feeds.opml
Imported topics default to daily / medium unless you override:
python3 scripts/manage_topics.py import-opml feeds.opml --frequency hourly --importance high
Feed polling uses feedparser and stores per-feed cache data in monitor state:
etaglast-modifiedThat allows efficient conditional requests and avoids reprocessing unchanged feeds.
Track repo releases with:
"github_repos": ["openclaw/openclaw", "anthropics/claude-code"]
These map to GitHub Atom feeds automatically:
https://github.com/openclaw/openclaw/releases.atomhttps://github.com/anthropics/claude-code/releases.atomCLI example:
python3 scripts/manage_topics.py add "CLI Releases" \
--github-repos "openclaw/openclaw,anthropics/claude-code" \
--keywords "release,version"
GitHub release items are labeled clearly in alerts.
Each scored finding also gets a sentiment label:
positivenegativeneutralmixedAlerts and digest entries include that sentiment.
Enable:
"alert_on_sentiment_shift": true
When enabled, a result that changes sentiment versus the topic’s previous sentiment history gets promoted for alerting.
State tracks:
last_sentimentsentiment_historyscripts/manage_topics.py# Add topic
python3 scripts/manage_topics.py add "Topic Name" \
--query "search query" \
--keywords "word1,word2" \
--feeds "https://example.com/rss.xml" \
--github-repos "openclaw/openclaw" \
--required-keywords "release" \
--exclude-keywords "beta,rumor"
# List topics
python3 scripts/manage_topics.py list
# Edit topic
python3 scripts/manage_topics.py edit topic-id --feeds "https://example.com/rss.xml"
# Discover feeds
python3 scripts/manage_topics.py discover-feed https://example.com/blog
# Import OPML
python3 scripts/manage_topics.py import-opml feeds.opml
# Test topic
python3 scripts/manage_topics.py test topic-id
scripts/monitor.pypython3 scripts/monitor.py
python3 scripts/monitor.py --dry-run
python3 scripts/monitor.py --topic openclaw-news --verbose
python3 scripts/monitor.py --discover-feed https://example.com/blog
Alerts can now include:
Web, Feed, GitHub Release)Feed support uses Python feedparser.
Install if needed:
pip3 install feedparser
discover-feed against the site URLfeedparserpython3 scripts/monitor.py --dry-run --verboserequired_keywordsexclude_keywordsimportance_thresholdowner/repo--verbose這個 Skill 質量不錯,核心功能(多源監控、智慧評分、多渠道告警)都已實現,執行穩定,文件清晰詳細,互動式設定對新手很友好。情感分析和去重機制體現了產品細節的用心。不足之處是缺少自動化測試,部分異常情況的處理可能不夠完善,會影響長期執行的可靠性。總體來說值得使用。