Rafe Blandford

An attention layer, not a feed

RafeOS Reading module looks to give an AI and integration twist to the traditional feed reader.

Rafe Blandford
4 min read
RafeOS — An attention layer, not a feed

Note: the Reading module of RafeOS is one of the first things I built and one of the least finished, so this is as much about the open questions as the answers.

Every feed I've ever used has the same conflict of interest baked in. It aims to keep you scrolling, generally optimising for engagement and attention spent.

I see this as an incentive problem, and incentive problems are systems problems. If you want a different result, you have to change what the system optimises for, not bolt a "focus mode" onto something that's fundamentally trying to hold you.

So when I built the reading layer in RafeOS, I wanted to give it a different job. It's an attention layer, not a set of feeds: surface what's worth my attention, get rid of the noise.

Top ranked stories from RSS feeds

What an editorial stance actually means

The closest comparison is an editor, not an algorithm. A good editor has a view. They'll tell you these five things matter today, this one's worth twenty minutes, ignore the rest. And crucially, they leave things out.

My reading layer takes the editorial stance literally. It runs once a day, early morning, and produces a digest with four sections, each doing a different job:

  • Ranked — five to seven items, scored from my own subscribed feeds. The closest thing to "here's what you should actually read today".
  • External curation — a top-N from each aggregator I trust (Techmeme, Hacker News, a couple of selected subreddits), kept deliberately scan-shaped rather than deep-read-shaped. A glance at what the wider world is talking about, not a reading list.
  • Serendipity — exactly one item, chosen to be a bit sideways. A small, deliberate dose of the thing a tight filter otherwise kills.
  • Saved — something resurfaced from my own unread queue. The article I genuinely meant to read three weeks ago, brought back before it's lost.

Each section answers a different question: what should I read, what's everyone talking about, what might surprise me, what did I promise myself I'd get to.

Underneath, the layer pulls from three kinds of source and unifies them. Miniflux handles the RSS firehose (all my subscribed feeds). External aggregation comes from Hacker News, Techmeme, Reddit, and selected newsletters. Readwise Reader holds the things I've saved to read later. All three are combined into one normalised store.

The same store drives two surfaces. The digest is the passive one: it comes to me, once a day via email. The Reading module of Cockpit is also there when I want to go and look live.

AI ranking as judgement

The Ranked section scores each item in all my subscribed feeds on several signals at once (source, topic, freshness, how much it overlaps with things I've cared about before, a few others) and orders by the combined score. This includes a Haiku-powered AI classification as well as some deterministic rules-based scoring and is what reduces 100+ daily items to fewer than 10.

The weighting of the combined score is not perfect: tuning it is ongoing, and I suspect always will be. However, doing it this way means the digest can put a thoughtful, low-traffic blog post above a high-engagement hot-take.

Where the humans are still winning

I would say the human-run newsletters still beat my digest. Techmeme, Hacker News, the better Substacks: the mix of human judgement and wisdom-of-the-crowds means the curated-by-people surfaces are ahead on both quality and experience, especially for the wide view, which is really why they get their own section.

The curated feeds in Cockpit

So why build my own at all? Because I think there are two different jobs hiding under the word "reading".

One job is quick cognition and nudging: what's happening, what's worth a glance, what should float up before I head out. That's the same job my briefings and status surfaces do, and it's the job a digest is genuinely good at.

The other is deep engagement, sitting with something long enough for it to change how you think. That's a different problem, and I don't think anyone (me included) has worked out what "agentically assisted deep reading" even means yet. Pointing me at the right long thing is easy to say and hard to do well... so something to work on!

Aside: the unexpected verb

The RafeOS layer exposes a small vocabulary of verbs. reading_digest_today gives me the day's digest – it is what's described above.

reading_surface_for_topic is a bit different – it pulls together what I've been reading on a given subject (essentially a search, with strong preference given to items marked as a favourite in the ranked or curated lists or bookmarked in Readwise).

I've found it useful both when I'm about to write or talk about something (and want to know what's already shaped my view) and when I want to get back to something I know I've read. Because it's sitting on the unified store that combines RSS feeds, external curation and bookmarks, it is more useful and powerful than a search across any one of the sources.

Once again the benefits of RafeOS are most apparent when you combine things together. I ended up adding a search bar at the top of the Reading module in Cockpit because I was using it enough that I wanted it more readily available.


On how this was made: RafeOS is built collaboratively with AI, and so was this post — drafted with Claude, edited by me.

New writing by email

Occasional pieces on product, technology and AI — and how they actually play out in practice.

Thanks — check your inbox to confirm.