
Security News
Open VSX Unblocks Extension IDs Used in Malware Campaign
Open VSX has removed three extension IDs from its malicious-extension list as the legitimate publishers they impersonated move to claim the names for themselves.
reading-routine
Advanced tools
Daily reading backlog triage CLI — feeds Claude Code Routines, local cron, or manual review. Backend-agnostic: works with Burn, Raindrop, Readwise, Pocket CSV, or any JSON.
Turn your 12,000-item reading backlog into a daily triage digest — for Claude Code Routines, local cron, or manual review.
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?
reading-routine is a backend-agnostic CLI that:
It doesn't know or care where your reading list lives. It does one thing: rank.
npm install -g reading-routine
# or run without installing:
npx reading-routine help
# 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
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.
# 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.
# Paste your backlog URL list into a file → parse to JSON → digest.
reading-routine digest --input ~/Downloads/backlog.json
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.
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
freshness × 0.6 + depth × 0.3 + tag_bonus
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.
| 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 |
reading-routine pull burn, reading-routine pull raindrop)~/.reading-routine.yaml) with priorities so the score learns your focusRoutines 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.
PRs welcome. Most useful contributions right now: adapter examples for sources I don't have (Instapaper, Wallabag, Matter, Obsidian Web Clipper).
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.
MIT — see LICENSE
FAQs
Daily reading backlog triage CLI — feeds Claude Code Routines, local cron, or manual review. Backend-agnostic: works with Burn, Raindrop, Readwise, Pocket CSV, or any JSON.
We found that reading-routine demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
Open VSX has removed three extension IDs from its malicious-extension list as the legitimate publishers they impersonated move to claim the names for themselves.

Product
Socket’s PHP and Composer support is now in Beta for all customers, with PHP reachability analysis generally available.

Product
Socket is bringing experimental protection to Firefox, scanning 97,000+ extensions in Mozilla's official directory for malware and risky updates.