From ai-news-radar
Manages AI News Radar: finding high-signal AI/tech sources, adding RSS/OPML/GitHub feeds, checking source health, updating the web UI, GitHub Actions, or GitHub Pages deployment.
How this skill is triggered — by the user, by Claude, or both
Slash command
/ai-news-radar:ai-news-radarThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
When this skill triggers inside the repo, read these files first:
When this skill triggers inside the repo, read these files first:
skills/ai-news-radar/README.md for the public-facing 伯乐Skill / Scout Skill positioning,
source-intake prompt, and install-after-first-message guidance.README.md for project usage and current commands.docs/GPT_HANDOFF.md before release-readiness checks or handing the project
to another agent.docs/SOURCE_COVERAGE.md before changing source strategy.docs/ROADMAP.md before changing Source Overlap Check, story merge, or version
planning.docs/V2_PRODUCT_BRIEF.md before changing product positioning or first-screen UX.scripts/update_news.py before changing data generation.assets/app.js, assets/styles.css, and index.html before changing the UI.references/source-intake.md when the user provides a new site, GitHub repo,
RSS feed, newsletter, X source, or asks whether a source can be ingested.references/v2-method.md when the user asks for product optimization, source
coverage strategy, Skill packaging, or "v2" direction.Use this order for non-trivial product or source-strategy work:
For detailed prompts and decision criteria, read references/v2-method.md.
Maintain a two-layer product:
Avoid adding many reader-facing choices. Prefer better defaults, source quality, and clearer status output.
The v2 packaging goal is a forkable public site plus a reusable agent Skill. The public-facing Skill name is 伯乐Skill in Chinese and Scout Skill in English. It should feel concrete and easy to use: a scout that helps choose high-signal sources worth tracking, instead of implying that the system knows everything or blindly adding every noisy feed. Ordinary users should be able to browse the hosted page. Maintainers should be able to add their own sources with OPML, public generated feeds, or secret-backed optional adapters without changing the public default.
feeds/follow.opml..env values into code or logs.AGENTMAIL_API_KEY, AGENTMAIL_INBOX_ID, inbox addresses,
full email bodies, raw emails, or private newsletter contents.EMAIL_DIGEST_ENABLED=1 and both required
credentials are present. Only call the list-messages endpoint; do not call
/raw or read text/html bodies.data/email-digest.json to public Pages by default. Only allow
publication when the maintainer explicitly sets EMAIL_DIGEST_PUBLISH=1 and
understands the site/repo privacy implications.When the user has installed or forked the project but does not know how to start, ask them for a source list first. A good kickoff prompt is:
请使用伯乐Skill,先问我要信息源清单,然后帮我判断每个信源该用 RSS、OPML、公开 feed、静态页面、Jina 兜底、AgentMail 邮箱还是跳过。目标是部署一个不需要服务器、能用 GitHub Actions 自动更新的 AI 日报网站。不要把任何 API Key、cookies、token、真实 OPML、邮箱正文或私有邮件内容写入仓库。
Use OPML for private customization:
cp feeds/follow.example.opml feeds/follow.opml
python scripts/update_news.py --output-dir data --window-hours 24 --rss-opml feeds/follow.opml
For GitHub Actions deployment, base64 encode feeds/follow.opml and save it as
the repository secret FOLLOW_OPML_B64 to override the public demo OPML. If the
secret is not configured, the workflow uses feeds/follow.example.opml as a
small public RSS/OPML demo so the hosted page shows the OPML path working. Do not
commit the private OPML file.
For AgentMail, use EMAIL_DIGEST_ENABLED=1, AGENTMAIL_API_KEY, and
AGENTMAIL_INBOX_ID only in environment variables or GitHub Secrets. Keep
EMAIL_DIGEST_PUBLISH unset unless the maintainer explicitly wants a private
Pages/repo to publish the metadata-only email digest.
When a user gives a source URL, first classify it:
feeds/follow.opml unless it should help
every public visitor.For detailed intake checks and implementation patterns, read
references/source-intake.md.
Only add a built-in source when it is useful to most public visitors.
Run Source Overlap Check for candidate RSS/Atom sources before promoting them into the public default layer:
python scripts/evaluate_source_overlap.py \
--source-url https://example.com/feed.xml \
--source-name "Example Source" \
--site-id example_candidate \
--baseline data/archive.json \
--lookback-days 7 \
--output reports/source-intake/example-overlap.json
Treat the report as advisory: low duplication supports accept_default, high
duplication supports skip_duplicate, and small samples or medium duplication
should stay watchlist / OPML advanced first.
Inspect existing fetchers in scripts/update_news.py.
Add fetch_<source>(session, now) returning list[RawItem].
Use existing helpers for URL normalization, date parsing, and sessions.
Register the fetcher in the built-in task list.
Update docs/SOURCE_COVERAGE.md when coverage changes.
Add or update tests when behavior changes.
Run a local source-only probe before the full end-to-end generation.
For repos like follow-builders, look for public files such as:
feed.json, feed-x.json, feed-blogs.json, latest.jsonstate*.json for dedupe behavior.github/workflows/*.yml for schedules, secrets, and output commit pathsconfig/*.json for source listsIf the generated feed is public, stable, timestamped, and low-noise, add a built-in fetcher that reads the raw GitHub URL. Do not copy its private tokens or rebuild its crawler unless the user explicitly wants a self-hosted variant.
Run the fastest relevant checks:
python -m py_compile scripts/update_news.py
python -m pytest -q
node --check assets/app.js
git diff --check
python "${CODEX_HOME:-$HOME/.codex}/skills/.system/skill-creator/scripts/quick_validate.py" skills/ai-news-radar
For AgentMail changes, also verify default-off safety:
pytest -q tests/test_topic_filter.py -k agentmail
Confirm the checks cover: disabled AgentMail makes no network request, enabled but missing credentials makes no network request, the adapter only uses the list-messages endpoint, and email body/raw fields are not emitted.
When the Skill itself changes, validate the Skill package too:
python "${CODEX_HOME:-$HOME/.codex}/skills/.system/skill-creator/scripts/quick_validate.py" skills/ai-news-radar
For an end-to-end local run:
python scripts/update_news.py --output-dir data --window-hours 24 --rss-opml feeds/follow.opml
python -m http.server 8080
Open http://localhost:8080 and confirm the Signal view, all-source view,
WaytoAGI block, search, site filter, and source counts still work.
After pushing source changes, trigger and watch the workflow:
gh workflow run update-news.yml --repo LearnPrompt/ai-news-radar --ref master
gh run list --repo LearnPrompt/ai-news-radar --limit 5
npx claudepluginhub learnprompt/ai-news-radar --plugin ai-news-radarQueries AI News Radar's public static JSON for recent 24h AI news in Chinese. Zero API key, zero auth, no rate limits, curl-only. Triggers on "AI news", "today's AI", "model releases", "agent tools" in Chinese.
Aggregates AI/tech news from multiple RSS feeds, deduplicates, ranks by importance, and generates a structured briefing with sentiment tags and impact scores.
Generates AI Architect newsletters combining latest AI news, research insights, and visual storytelling. Supports daily briefs and weekly deep-dives.