Bookmark a page in Chrome, and a DAM agent turns it into a clean article, scores it, and shelves it in a small ranked library you read from one page. Videos and podcast episodes are shelved too, from what their page declares (title, show, duration, description); transcripts are not fetched.
Chrome extension ─▶ inbox/<id>.json ─▶ ingest ─▶ items/ ─▶ analyze ─▶ rank ─▶ queue ─▶ deliver ─▶ one artifact
(files.upload) (Invocation per article) (topic weights) (updated in place)
extension/— the Chrome extension. Setup inextension/README.md.skills/— the agent skills, one per capability:read-later-slack(messages you saved in Slack → inbox events),read-later-ingest(inbox → articles),read-later-analyze(articles → TL;DR, category, topics, scores),read-later-rank(weights + scores → tonight's queue),read-later-deliver(queue → one artifact),read-later-prune(weekly housekeeping).INSTALL.md— setting up an agent, end to end, by telling the agent or from the CLI.docs/walkthrough.md— how it was built, what was tested, what is next.docs/design.md— the decisions behind it.
- The library: one artifact in the DAM artifact library, updated in place. Book-shaped tiles on three shelves (Tonight: three picks, Next: four, Later: the rest), each with segmented 0-10 bars for relevance, hard-won and grounded. Click a tile for the TL;DR, key claims, the scores with their reasons, and the full article text.
- Analysis you can argue with: every score carries a one-sentence reason from the text. The rubric is three prompt files; the category list and topic vocabulary are one editable file; your interests are weights on topics.
- Actions from where you read: in Chrome, right-click for Mark as read, Archive in Read Later or Delete from Read Later. In chat, tell the agent. The page itself is static.
- One unattended refresh a day (
read-later-refresh, 18:00 Prague) and one weekly tidy (read-later-prune). A refresh costs the agent one short turn plus one isolated model run per new article; the page is republished only when something changed.
One DAM agent with a model connection and network access (the owner grants both, once). The agent then installs the rest on itself; a human is needed only for what the platform gives no agent: a connection, a network rule, a restart, an API key, and the browser. Either:
-
Tell the agent. Paste into its chat:
Install read-later on yourself as described in https://raw.githubusercontent.com/apocohq/read-later/main/INSTALL.md
The agent installs the six skills onto itself, writes its reader context, downloads the dependencies, creates the two schedules, and reports back with the short list of commands left for you. Works on any DAM agent that is already running.
-
From the CLI.
dam skill installfor the six skills,dam file putfor the context file,dam schedule createtwice.
The extension is not in the Chrome Web Store: clone this repo, pnpm install && pnpm ext:build, and load extension/dist unpacked. Both install paths, the extension and the key it needs are in INSTALL.md.
DAM pins each installed skill to the commit it was installed from and shows drift when the repo moves on; re-running dam skill install adopts HEAD. There are no release tags. Inside the skills, ANALYSIS_VERSION in analyze.mjs is the version that matters: bump it when a prompt or the result schema changes, and every item analyzed under the old version is redone on the next run. The metadata.version in each SKILL.md is a human label only.
pnpm install && pnpm typecheck && pnpm ext:build # extension → extension/dist
uv run skills/read-later-ingest/scripts/ingest.py --help # ingest script
node skills/read-later-analyze/scripts/analyze.mjs --help # analyze script (needs a DAM agent to actually spawn)
python3 skills/read-later-rank/scripts/rank.py --help # rank script
python3 skills/read-later-deliver/scripts/render.py --help # queue.html renderer
python3 skills/read-later-prune/scripts/prune.py --help # prune script