Reading list ingest
Reading list ingest
Capture URLs from RSS / Pocket / Instapaper / random browser tabs, and turn them into structured reading notes.
The capture surface
There are two ways a URL becomes a note. The first is the ingest CLI, which fetches a URL (or a local file, or a whole directory) and writes a Markdown note into the vault:
lettuce ingest https://example.com/long-essay-on-cognition --vault ~/Notes
The second, agent-driven, surface is a folder of stub notes. You create one note per thing you want to read — say Reading/long-essay-on-cognition.md — with the URL in its frontmatter. A trigger then splices an > [!ai] directive into each newly created note, and whatever MCP agent you have connected picks it up and fills it in.
The trigger
A trigger does exactly one thing: when a file matching a glob is created, it splices a > [!ai] <prompt> directive into that note. It does not run an agent itself — the connected agent sees the directive via pending_directives and does the work.
# .lettuce/triggers.yml
- when: "file:created:Reading/*.md"
prompt: |
This note's frontmatter has a `source:` URL. Read that URL (use your own
web tools, or `lettuce ingest <url>` to pull a clean copy into the vault),
then rewrite this note as a structured reading note:
- Set `title:` to the real article title and add
`tags: [reading, source/<domain>]` to the frontmatter.
- ## TL;DR — a 3-bullet summary.
- ## Quotes — 2-3 quotes worth remembering, in blockquotes.
- ## Takeaways — bulleted personal takeaways.
- ## Links — any URLs in the original worth following.
Skip URLs that are obviously paywalled (e.g. nyt.com, wsj.com, ft.com);
just leave the source link without summarising.
So your capture step is: drop a stub note under Reading/ with the URL in frontmatter. For example Reading/2026-05-28-long-essay-on-cognition.md:
---
title: "Long essay on cognition"
source: "https://example.com/long-essay-on-cognition"
captured: 2026-05-28
tags: [reading]
---
The moment you create it, the trigger injects the > [!ai] directive, and the agent does the rest.
What you get
After the agent runs, Reading/2026-05-28-long-essay-on-cognition.md is a complete, structured reading note: real title, source tags, a TL;DR, quotes, takeaways, and follow-up links — built on top of the stub you dropped.
Variants
Read later, summarise later
Create the stubs whenever you find something, but let the summarising happen on a fixed cadence instead of on creation. A schedule splices a directive into one target note on a daily/weekly clock:
# .lettuce/schedules.yml
- weekly: "Sat 09:00"
target: "Reading/_inbox.md"
prompt: |
Find every note under Reading/ with an empty `## TL;DR` and a `source:`
URL. Read each, fill in the structure. Process at most 10 per run.
The connected agent picks up the directive from Reading/_inbox.md and works through the backlog.
From RSS
Combine with a feed reader that drops one stub note per item into Reading/ (each with its source: URL in frontmatter):
# A cron job that polls feeds.opml and writes a stub note per item:
feeds-to-inbox --opml feeds.opml --vault ~/Notes
Each new stub matches file:created:Reading/*.md, so the trigger fires and the agent ingests it.
Related
Recipes/02 Research assistant — similar but for in-depth research
Recipes/07 Book notes — same shape, books instead of articles