Model or dataset
cclank/news-aggregator-skill avatar
cclank/news-aggregator-skill

news-aggregator-skill: an RSS news skill built for agent harnesses

这是一个为您定制的全网新闻聚合skill,支持多个信息源,支持深度获取,能够阅读文章正文并提供有理有据的深度解读。

1,311 stars124 forksPythonLicense varies

At a glance

What is it?
news-aggregator-skill is a Python skill for coding agents that pulls more than 44 RSS sources, reads full article bodies with a headless browser, and renders themed daily briefings in Markdown. It needs no API keys, and adding your own feeds means dropping an xmlUrl into an OPML file.
Who is it for?
Adopt news-aggregator-skill if your agent workflow is built around a skill directory that you can install with one command and that needs no third party API credentials, and if you want a ready-made morning briefing rather than raw feeds.
Can I use it commercially?
Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
Is it still maintained?
Yes. The repository last received commits 149 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A skill package, not a library

news-aggregator-skill is a Python project packaged as a skill, the directory-and-instruction format that coding agents load. The repository layout makes the format obvious: a SKILL.md at the root is the entry point, instructions/ holds supporting material, scripts/ holds the runnable code, templates.md holds the report templates, and .agent/ carries agent-specific configuration. There is also user_sources.opml.example, the seed file for your own feeds, and two files that are unusual enough to mention, MISTAKES.md and implementation_plan.md, which read as a record of what went wrong and what the author intends to build next.

The purpose, in the project's own framing, is a whole-network deep news aggregation assistant for tech, finance and AI, built as an efficient information engine for intelligent agents. The stated audience is a model agent platform such as OpenClaw or a code agent, and the stated appeal is that it is zero-config: pure fetching with no third party API key, no environment variables and no quotas to manage.

That last point is the design decision that sets it apart from most news tooling. Commercial news APIs need credentials and per-request billing. An RSS feed does not. By staying on the feed layer and adding a browser only for the pages that need it, the skill keeps the setup to a dependency install and a directory copy.

The Python version badge states 3.10 or later, and the README states the licence is MIT, although the repository metadata does not list one, so treat the README as the statement of intent rather than a formal licence file.

Forty-four sources, and OPML for the rest

The built-in catalogue is the bulk of the value, and the identifiers in it are what the scripts use. The core set covers hackernews, producthunt, github for GitHub Trending, v2ex, 36kr, tencent, weibo for the trending list, wallstreetcn and huggingface for papers.

The v2 additions bring lobsters, devto, arxiv for recent cs.AI, cs.CL and cs.LG submissions, plus sspai and infoq_cn. The v3 tier is described as AI-curated aggregation where a single source stands in for five to ten original ones: aihot, which pulls a daily Chinese-language selection across X, a Chinese tech site, DeepMind, Anthropic and various AI company newsrooms, tldr_ai for a daily summary of five to ten topics, and import_ai for the weekly long-form writing of Jack Clark.

International coverage runs through an international source that mixes BBC, Guardian, Al Jazeera, France 24 and a Reuters fallback over the last 24 hours, plus dedicated bbc_top, bbc_world, bbc_chinese, guardian_world, aljazeera and france24 sources, and a reuters source that works by querying Google News RSS for site:reuters.com, which the README describes as a lightweight tracking method for people without a Reuters Connect account.

Newsletter and creator sources include latentspace_ainews, chinai, memia, bensbites, oneusefulthing and interconnects, alongside columnists and podcasts.

Anything missing goes through OPML. You add an entry with an xmlUrl to user_sources.opml and the source id user picks it up, and the format is compatible with exports from Feedly and Inoreader, so existing subscriptions can be imported rather than retyped. The example file user_sources.opml.example is the template for that, and the second location, ~/.config/news-aggregator/user_sources.opml, is where the same file can live if the skill directory is not writable.

Three ways to install it into an agent

Installation has two stages, and the first one is about placing the skill where the agent looks for it.

Method A uses the Openskills CLI, which the README recommends because it handles path dependencies and configuration sync for you:

bash
openskills install [email protected]:cclank/news-aggregator-skill.git

openskills sync

Method B goes through NPX and adds the skill straight from the remote repository:

bash
npx skills add https://github.com/cclank/news-aggregator-skill

Method C is manual, and it is the one to use when you want the directory under a specific name in a specific project:

bash
git clone [email protected]:cclank/news-aggregator-skill.git YourProject/.claude/skills/news-aggregator-skill

The second stage is the Python dependencies. You enter the installed skill directory and install them:

bash
cd YourProject/.claude/skills/news-aggregator-skill
pip install -r requirements.txt
playwright install chromium

That last line deserves a note. The requirements file in the repository contains only requests and beautifulsoup4, so the Playwright browser binaries are not covered by the dependency install and the chromium download is a separate step you must not skip. The README also says you can ask your agent to do the configuration for you if it is capable of that, which is the intended workflow for a project shaped as a skill in the first place.

Deep Fetch: reading past the headline

A feed gives you a headline, a link and usually a truncated summary, which is not much to summarise. The skill's answer is a mode called Deep Fetch, which fetches the full body of an article and hands the text to the model to filter and distil.

Getting the body is where the design gets its sharp edge. The README states that the mode is built to get through anti-scraping protection, with Playwright built in to work around Cloudflare. A headless browser runs the page as a real browser would, which is why the install step needs chromium, and it is why the deep fetch mode costs considerably more than a plain HTTP request.

Two practical cautions. First, the requirements file installs only requests and beautifulsoup4, so anything beyond that in the deep fetch path depends on the Playwright install being present and on a chromium build that can render the site. Second, and more importantly, the sites that put bot protection in front of them have usually asked automated clients not to fetch their content. Using a headless browser to get around that protection is a decision about your own compliance posture, and the skill offers no per-site allowlist for it in the files listed here. The feed path is unremarkable; the deep path is where the terms of the sites you point it at matter.

The mode is opt-in per request rather than global, and it is used in practice to read a shortlist of articles properly, for example when you want the content of the top trending repositories rather than their descriptions.

Briefings, a menu of fifty-three options, and one command

The output side of the skill is what makes it usable on a schedule. There are built-in scenario presets, described as a general daily briefing, a finance briefing, a tech briefing, a gossip daily and an AI deep-daily, each producing a magazine-styled Chinese Markdown report. The templates live in templates.md, so the report layout is a file you can edit rather than a hardcoded format.

There is also an interactive route. A dedicated trigger phrase summons a global interactive menu with up to 53 function options, and you answer with a number rather than composing a long prompt. The point of the design is that the agent already knows what the options do, and a short numeric reply is a much more reliable input than a free-form sentence in a second language.

You can also drive it in plain language, asking for a themed briefing, a deep fetch over a set of sources, or a merge of several feeds into one report. The sources can be named individually, so a request that combines a developer forum, a finance feed and a trending list into a single briefing is a normal thing to ask for.

The custom feed path is also runnable on its own, without going through the agent at all:

bash
python scripts/fetch_news.py --source user --limit 15

That command reads the user source, which is your own OPML file, and returns fifteen items. It is the quickest way to check that your subscription file is well formed before you rely on the skill to summarise it.

Maintenance state and where the risk sits

The repository is not archived, and the last push was on 2026-05-27. There are no GitHub releases for the project, so the history is the commit log rather than a tagged version list, which means there is no obvious upgrade path or changelog to read before pulling changes. The README's own invitation is to contribute by adding new global sources, so the intended direction of the project is coverage growth.

The real risks are operational rather than historical. The list of sources is a list of third-party feeds and pages, and every one of them can change its markup, its feed URL, its rate limits or its terms without notice, and the skill has no test suite described that would catch a broken scraper before you notice an empty section in a briefing. The international sources, which mix several publishers over a 24 hour window, are the most exposed to that kind of quiet breakage.

The dependency surface is small and pleasant: requests and beautifulsoup4, plus Playwright when you want deep fetch. There is no model API key to manage, and no account to create, which removes the usual failure mode of a tool that stops working because a credential expired.

The alternative to installing the skill is to write the fetching yourself, which for the feed layer is a weekend of work with the same requests and parsing code, and for the deep layer is the browser work you would otherwise inherit. The difference this project offers is the curation: which sources, which selectors, which themes, and an agent-native interface that produces a formatted briefing instead of a list of links. If your needs are one feed and a summary, that curation is more than you need, and if you need an auditable archive of what was published on a given day, this is the wrong shape of tool, because it summarises a moving window rather than storing a corpus.

Editorial conclusion

Adopt news-aggregator-skill if your agent workflow is built around a skill directory that you can install with one command and that needs no third party API credentials, and if you want a ready-made morning briefing rather than raw feeds. Do not adopt it as a research archive, because it reads whatever the feeds expose and there is no corpus behind it, and do not point its deep fetch mode at sites whose terms forbid automated retrieval without checking first, since the browser mode exists specifically to get past bot protection. Before you start, copy user_sources.opml.example to user_sources.opml if you want your own feeds, run playwright install chromium because requirements.txt only lists requests and beautifulsoup4, and confirm your agent can reach the sources your region blocks.

Frequently asked questions

How do I install news-aggregator-skill into my agent?

There are three documented routes: openskills install [email protected]:cclank/news-aggregator-skill.git followed by openskills sync, npx skills add https://github.com/cclank/news-aggregator-skill, or cloning the repository into YourProject/.claude/skills/news-aggregator-skill yourself. You then run pip install -r requirements.txt and playwright install chromium inside the skill directory.

Does news-aggregator-skill need any API keys?

No. The design goal is zero configuration, with plain fetching and no third party API key, no environment variables and no quota to manage. The only credentials involved are for the sources you subscribe to yourself.

How do I add my own RSS feeds to news-aggregator-skill?

Copy user_sources.opml.example to user_sources.opml in the skill directory, or to ~/.config/news-aggregator/user_sources.opml, and add an entry with an xmlUrl. The format accepts Feedly and Inoreader exports, and the source id user picks the file up.

What does Deep Fetch do differently from a normal fetch?

It retrieves the full body of an article rather than the feed summary, using a headless browser through Playwright to get past anti-scraping protection, and hands the text to the model to filter and summarise. That is why the install step needs a chromium download, and it is worth checking the terms of any site you point it at.

How recently has news-aggregator-skill been updated?

The repository is not archived and the last push was on 2026-05-27. The project has no GitHub releases, so the commit history is the only version record, and the stated contribution direction is adding new global sources.

Official sources

  1. cclank/news-aggregator-skill on GitHub
  2. Issues
  3. README
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/cclank-news-aggregator-skill.svg)](https://hysenlabs.com/projects/cclank-news-aggregator-skill)

Was this useful?