Introduction
# Feeds
RSS news aggregator. Fetches all current entries from curated feeds across three categories — news, games, and finance. Concurrent fetching, streamed JSON output. No API key needed.
## Constraint
Do NOT use web search, WebFetch, browser tools, or any other URL-fetching tool when this skill is active. The RSS feeds are the sole data source. Do not supplement, verify, or expand results with external searches. Do not fetch article URLs — summaries are already included in the output.
## Categories
Detect the category from the user's message:
- "news", "headlines", "nachrichten", "tech news" → `news` - "finance", "markets", "money", "stocks", "economy" → `finance` - "games", "gaming" → `games`
| Category | Feeds | Sources | |----------|-------|---------| | `news` | 21 | Ars Technica, Wired, TechCrunch, The Verge, NYT, Heise, Quanta, Aeon, Nautilus, and more | | `games` | 10 | GameStar, GamesGlobal, PC Gamer, Polygon, Kotaku, IGN, Rock Paper Shotgun, GamesIndustry.biz | | `finance` | 26 | Bloomberg, WSJ, FT, CNBC, MarketWatch, Seeking Alpha, The Economist, Forbes, CoinDesk, Fed, ECB |
Feed lists are defined in [scripts/lists.py](scripts/lists.py).
## How to Invoke
Run one invocation per category. Run multiple if the user asks for more than one.
```bash python3 scripts/feeds.py --category news python3 scripts/feeds.py --category games python3 scripts/feeds.py --category finance ```
## Output Format
The script streams a JSON array. The first element is metadata, the rest are entries:
```json [{"category": "news", "total_entries": 142, "sources": ["aeon.co", "arstechnica.com"], "fetched_at": "2026-01-31 22:00:00"} ,{"title": "Headline Here", "url": "https://example.com/article", "source": "arstechnica.com", "date": "Fri, 31 Jan 2026 12:00:00 GMT", "summary": "Brief summary text..."} ] ```
| Field | Description | |-------|-------------| | `title` | Headline text | | `url` | Link to full article | | `source` | Domain name of the feed source | | `date` | Publication date as provided by the feed | | `summary` | Brief description, HTML stripped, max 500 chars |
## CLI Reference
| Flag | Description | |------|-------------| | `-c, --category` | Feed category: `news`, `games`, or `finance` (required) |
## Presenting Results
After parsing the output, present a structured, concise rundown:
1. **Group by theme** — cluster related stories under headings (e.g. "Tech & Industry", "Science", "Markets", "Crypto") 2. **Keep it tight** — headline + one-line summary + source attribution per item 3. **Link to sources** — use markdown links so the user can read more 4. **Deduplicate** — if multiple feeds cover the same story, mention it once and note cross-source coverage 5. **Highlight big stories** — if a story appears across 3+ sources, call it out prominently
Example output:
``` ### Tech & Industry - **[Headline](url)** — One-line summary *(Source)* - **[Headline](url)** — One-line summary *(Source)*
### Science - **[Headline](url)** — One-line summary *(Source)* ```
## Edge Cases
- Failed or timed-out feeds (15s timeout) are silently skipped — remaining feeds still return results. - If zero entries are returned, the script exits with `{"error": "No entries found", "category": "..."}`. - Some entries may lack summaries — they will still have title, URL, and source.