---
name: reader
description: |
  Collect the outside world. Pull a live external feed (an RSS URL) or a single web page (via a reader)
  and save the recent items as a clean, immutable raw stream. This is the collect half of the signals
  loop: reader brings the world in; scorer ranks it. It does NOT judge, score, or file anything into the
  brain — staging only. Triggers: "read the feed", "collect signals from <url>", "pull the RSS",
  "read this page for signals".
allowed-tools: [Read, Write, WebFetch, Glob]
---

# Reader (collect the outside world)

> **Workshop TL;DR (for humans):** `reader` fetches a live feed (or one page) and writes a clean list of
> recent items to `work/signals/<date>/raw.md`. It reads the world in. It does not decide what matters —
> that is `scorer`'s job.

This is **ours**, for live external sources. It is distinct from the kit's `pull` (which stages internal
fixtures into `brain/inbox/` for `compile`). Reader never writes to `brain/` or `data/`.

**Where it lives:** in the `gtm-week-workshop` kit (open in Cowork), this skill sits in `skills/reader/`,
next to `pull` and `compile`. It writes to `work/signals/` (`data/` is read-only).

## What this does
1. **Fetch the feed.** Get the RSS URL. If the target is a page with no feed, fetch
   `https://r.jina.ai/<url>` instead.
2. **Keep the last 7 days.** For each item: title, date, link, summary.
3. **Write `work/signals/<YYYY-MM-DD>/raw.md`** — one entry per item. This is the immutable raw stream.
4. **Report** the item count and tell the user to run **`scorer`** next.

## Hard rules
- **Collect only.** Never score, rank, route, or write to `brain/` or `data/`.
- **Public sources only.** Nothing behind a login, nothing confidential.
- **Raw is immutable.** Never edit `raw.md` after writing it; re-runs go in a new dated folder.
- **Not `pull`.** This is for external web/RSS, not internal fixtures. Don't drop items into
  `brain/inbox/`.
