A curated cybersecurity RSS/Atom OPML collection for building a high-signal daily intelligence workflow.
- Two profiles for different reading budgets:
tiny.opml: focused daily reading (currently ~422 feeds / 9 categories)CyberSecurityRSS.opml: broad coverage (currently ~735 feeds / 12 categories)
- Practical security coverage across vulnerability research, red team, reverse engineering, web security, threat news, and more.
- Automation-first maintenance: dead feed cleanup, deduplication, and tiny -> full sync.
- Ready for both manual reading and AI-assisted daily digest pipelines.
- Choose your feed set:
- Low-noise daily reading:
tiny.opml - Full coverage:
CyberSecurityRSS.opml
- Low-noise daily reading:
- Import the OPML file into your favorite reader.
- Start tracking updates as your personal security knowledge base.
- Reeder (macOS / iOS)
- Feedly (Web / iOS / Android)
- yarr (self-hosted, cross-platform)
- Feeder / Zr / Anyant / Leaf
tiny.opml: streamlined high-signal security feed set.CyberSecurityRSS.opml: full feed set with wider topic coverage.others.md: hand-picked useful sites, including some without RSS.
You can combine this repository with the Skills in zer0yu/sec-daily-digest to generate an automated curated daily cybersecurity digest.
Recommended workflow:
- Install sec-daily-digest Skills in OpenClaw or Claude Code (follow that repository's guide).
- Use
tiny.opmlas default input (orCyberSecurityRSS.opmlfor broader coverage). - Run once per day (for example, every morning) with a 24-hour time window.
- Output a structured report, such as:
- Top picks
- Vulnerabilities & exploitation
- Threat intelligence & incidents
- Research / tooling
- Actionable takeaways
Prompt example:
Use CyberSecurityRSS feeds to generate a curated daily security digest for the last 24 hours.
Keep only high-signal items, group by topic, and include title, why-it-matters, and source URL.
This repository uses GitHub Actions to keep OPML files healthy and synced:
pull_request -> master: runs incheckmode and fails when OPML drift is detected.push -> master: runs inapplymode:- Validate RSS/Atom feed URLs in
tiny.opmlandCyberSecurityRSS.opml. - Remove dead feed entries and deduplicate by
xmlUrl. - Sync valid feeds from
tiny.opmlintoCyberSecurityRSS.opml. - Fallback missing categories to
Misc. - Keep
.github/opml-health-state.jsonand only remove feeds after consecutive hard failures. - Auto-commit OPML changes with
[skip ci].
- Validate RSS/Atom feed URLs in
python3 -m unittest discover -s tests -v
python3 scripts/opml_sync.py \
--mode check \
--tiny tiny.opml \
--full CyberSecurityRSS.opml \
--fallback-category Misc \
--timeout 10 \
--retries 3Use this helper script when you discover a new feed URL:
uv run python scripts/add_feed_to_tiny.pyDefault behavior:
- Runs
git pull --ff-onlyfirst to reduce local/remote drift before editing. - Prints current top-level categories in
tiny.opml. - Lets you select a category by number or type a new name (auto-create).
- Fetches feed metadata (title/site link) from your RSS URL, then appends it.
Common options:
# Non-interactive
uv run python scripts/add_feed_to_tiny.py \
--url "https://example.com/feed.xml" \
--category "ThreatIntel"
# Skip startup git pull
uv run python scripts/add_feed_to_tiny.py --no-git-pullSome readers only accept a specific extension. You can safely rename files:
cp CyberSecurityRSS.opml CyberSecurityRSS.xml
cp tiny.opml tiny.xmlContributions are welcome.
- Submit an Issue or PR for high-quality feeds.
- Include feed URL, category suggestion, and why it is valuable.
- Run local checks before opening the PR.
