Install
$ agentstack add mcp-fisher521-reading-routine ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ● Filesystem access Used
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
reading-routine
Turn your 12,000-item reading backlog into a daily triage digest — for Claude Code Routines, local cron, or manual review.
[](https://www.npmjs.com/package/reading-routine) [](https://opensource.org/licenses/MIT) [](https://x.com/hawking520)
The problem
You have too many saved articles. Every morning you open the reading app, get overwhelmed, close it. Six months in, 90% of your backlog you'll never touch.
The problem isn't storage — you already have Raindrop, Readwise, Burn, or a Pocket CSV rotting in ~/Downloads. The problem is triage: which 5 of the 12,000 are worth your next 30 minutes?
The fix
reading-routine is a backend-agnostic CLI that:
- Eats your backlog (JSON in — from any source)
- Scores each item (freshness × depth × tag signal)
- Spits out a ranked markdown digest (or the Claude Code Routine prompt that wraps all of it)
It doesn't know or care where your reading list lives. It does one thing: rank.
Install
npm install -g reading-routine
# or run without installing:
npx reading-routine help
Quick start
# 1. Try with the sample backlog
curl -s https://raw.githubusercontent.com/Fisher521/reading-routine/main/examples/backlog.sample.json \
| reading-routine digest --top 5
# 2. Print the Claude Code Routine prompt (paste into claude.ai/code/routines)
reading-routine routine-prompt
# 3. Or run locally on your own backlog JSON
reading-routine digest --input ~/my-backlog.json --top 10
Three ways to run it
1. As a Claude Code Routine (cloud — hands off)
Claude Code Routines (announced April 15, 2026) let Claude run your workflows on a schedule, even with your laptop closed. reading-routine ships a ready prompt:
reading-routine routine-prompt | pbcopy
Then open claude.ai/code/routines, paste, set schedule (e.g. daily 9 AM), pick the MCP connectors (Burn / Raindrop / Readwise) and the delivery channel (Slack / Email).
Morning arrives → digest in your inbox. You didn't open your laptop.
2. As a local cron (laptop open — private)
# crontab -e
0 9 * * * /usr/local/bin/reading-routine digest \
--input ~/Library/reading-routine/backlog.json --top 10 \
| tee ~/Library/reading-routine/today.md \
| /usr/local/bin/terminal-notifier -title "Today's reading"
You handle the data pull (any script that outputs JSON); reading-routine handles the ranking.
3. As a manual one-off
# Paste your backlog URL list into a file → parse to JSON → digest.
reading-routine digest --input ~/Downloads/backlog.json
Backlog format
JSON array of objects:
[
{
"url": "https://example.com/article",
"title": "Why X matters",
"saved_at": "2026-04-10T14:00:00Z",
"tags": ["rust", "performance"],
"word_count": 2800,
"snippet": "optional preview text"
}
]
Required: url, title. Everything else improves ranking but is optional.
Adapters (bring your own)
Because reading-routine just wants JSON, any source works. Examples:
From Burn (MCP or CLI):
burn-mcp export-queue --status unread --limit 200 | reading-routine digest
From Raindrop.io:
curl -sH "Authorization: Bearer $RAINDROP_TOKEN" \
"https://api.raindrop.io/rest/v1/raindrops/0?perpage=100" \
| jq '[.items[] | {url: .link, title, saved_at: .created, tags, word_count: .word_count}]' \
| reading-routine digest
From Readwise Reader:
curl -sH "Authorization: Token $READWISE_TOKEN" \
"https://readwise.io/api/v3/list/?location=new" \
| jq '[.results[] | {url: .source_url, title, saved_at: .created_at, tags: (.tags // [] | keys), word_count}]' \
| reading-routine digest
From a Pocket CSV (for folks who exported before the Nov 2025 deadline):
# One-liner csv → json conversion — tags are pipe-separated in Pocket, hence the split
node -e "const csv=require('fs').readFileSync('pocket.csv','utf8');const lines=csv.split('\n').slice(1);console.log(JSON.stringify(lines.filter(Boolean).map(l=>{const[title,url,ts,cursor,tags]=l.split(',');return{title:title.replace(/\"/g,''),url,saved_at:new Date(Number(ts)*1000).toISOString(),tags:(tags||'').split('|').filter(Boolean)}})))" \
| reading-routine digest
How the score works
freshness × 0.6 + depth × 0.3 + tag_bonus
- Freshness: peaks around day 3 (out of the hot-take zone, still relevant), decays over ~60 days
- Depth: 2k–6k-word pieces score highest (long-form payoff zone)
- Tag bonus: +0.1 if curated with tags (signal of intent, not drive-by save)
Simple on purpose. The score is a first pass — if you plug it into the Routine prompt, Claude re-ranks against your current priorities in Step 3.
Part of the Burn ecosystem
| Tool | What it does | |---|---| | burn-mcp-server | MCP server (26 tools) for Burn reading triage | | burn451 | Terminal CLI for your reading queue | | morning-brief | Daily briefing CLI | | reading-digest | Weekly digest from your bookmarks | | reading-routine (this) | Backend-agnostic daily triage CLI |
Roadmap
- [x] v0.1 — Core CLI, JSON in, markdown out, Claude Routine prompt generator
- [ ] v0.2 — Bundled source adapters (
reading-routine pull burn,reading-routine pull raindrop) - [ ] v0.3 — Config file (
~/.reading-routine.yaml) with priorities so the score learns your focus - [ ] v0.4 — Built-in delivery: Telegram / email / Slack webhooks
Why this exists
Routines just landed (HN #5, 700 pts on April 15, 2026). The reading-triage use case is obvious — everyone has a backlog, nobody wants another web UI. What's missing is a boring CLI that does ranking well, so the Routine prompt stays short and composable.
Building publicly at @hawking520. Feedback, PRs, adapters for other sources — all welcome.
Contributing
PRs welcome. Most useful contributions right now: adapter examples for sources I don't have (Instapaper, Wallabag, Matter, Obsidian Web Clipper).
About
Built by @hawking520 — exploring AI-era content & attention workflows in public.
Pairs naturally with Burn — the 24h-countdown reading queue that forces you to absorb, not hoard.
License
MIT — see [LICENSE](LICENSE)
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: Fisher521
- Source: Fisher521/reading-routine
- License: MIT
- Homepage: https://burn451.cloud?ref=reading-routine
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.