You are generating a beautiful standalone HTML page showing what the user is currently reading and has recently read. The output is a single HTML file they can open in a browser or host on their personal site.
Readwise Access
Check if Readwise MCP tools are available (e.g. mcp__readwise__reader_list_documents). If they are, use them throughout (and pass this context to the subagent). If not, use the equivalent readwise CLI commands instead (e.g. readwise list, readwise read <id>). The instructions below reference MCP tool names — translate to CLI equivalents as needed.
Process
Launch a Task subagent to fetch all the data and generate the HTML file. The subagent should:
1. Fetch Data
Run ALL of these in parallel:
- Shortlist:
mcp__readwise__reader_list_documents with location="shortlist", limit=50, response_fields=["title", "author", "category", "reading_progress", "first_opened_at", "last_opened_at", "image", "url", "site_name", "word_count", "saved_at"]
- Later:
mcp__readwise__reader_list_documents with location="later", limit=50, response_fields=["title", "author", "category", "reading_progress", "first_opened_at", "last_opened_at", "image", "url", "site_name", "word_count", "saved_at"]
- Inbox:
mcp__readwise__reader_list_documents with location="new", limit=50, response_fields=["title", "author", "category", "reading_progress", "first_opened_at", "last_opened_at", "image", "url", "site_name", "word_count", "saved_at"]
- Archive page 1:
mcp__readwise__reader_list_documents with location="archive", limit=50, response_fields=["title", "author", "category", "reading_progress", "last_opened_at", "image", "url", "site_name", "saved_at", "word_count"]
2. Paginate Archive Deeply
After the first archive fetch, use nextPageCursor to keep fetching more pages (limit=50 each). Fetch at least 6 more pages (~350 total docs) so the heatmap covers 6 months of reading activity. Keep paginating until the oldest last_opened_at is 6+ months ago OR pages are exhausted.
3. Categorize
From the fetched data, build two lists:
- Currently Reading: Items from shortlist, later, or inbox where
reading_progress is between 0.05 and 0.99 (started but not finished). Sort by last_opened_at descending.
- Recently Read: Items from archive where
reading_progress > 0.9 (actually finished). Sort by last_opened_at descending. Group by month. Show as many months as the data covers.
Also collect ALL last_opened_at dates from archive items with reading_progress > 0.9 for the heatmap.
There is no "Up Next" section. Only show things the user is reading or has read.
4. Generate HTML
Create a now-reading/ directory in the current working directory (if it doesn't exist) and write the HTML file to now-reading/index.html.
Design direction: Warm, sepia-toned, editorial. Think personal reading log, not media dashboard.
Fonts: Google Fonts — Newsreader (serif, for headings) + DM Sans (sans, for body). Include via <link> tag.
Color palette (CSS variables):
--bg: #f6f1eb (warm parchment background)
--surface: #ede6dc (card/heatmap empty cell background)
--surface-hover: #e4dbd0
--border: #d9d0c4
--text: #4a4239 (main body text)
--text-muted: #8a7e72
--text-dim: #b0a597
--heading: #2c251e
--accent: #a0724a (warm brown — progress bars, active states)
--accent-dim: rgba(160, 114, 74, 0.12)
Layout: Max-width 760px, centered. Responsive.
Sections in order:
Header: "What I'm reading" in Newsreader, light weight, large. Subtitle: "Powered by Readwise Reader" with accent-colored link.
Currently Reading — section label in small caps. Gallery of cards using CSS grid (repeat(auto-fill, minmax(160px, 1fr))) so they fill the container. Each card:
aspect-ratio: 3/2, rounded corners, hover lift effect
- Cover image if available (
image field). Gradient placeholder if not (hash title → hue).
- Dark gradient overlay at bottom with white title + author
- Progress bar at card bottom: 5px tall track (dark semi-transparent) with accent-colored fill
- Cards link to the Reader URL
Reading Activity — GitHub-style heatmap filling full container width. Use CSS flex with flex: 1 on weeks and cells so it stretches. Warm amber color scale (rgba(160, 114, 74, 0.2/0.4/0.65/1.0)). Month labels above, day-of-week labels (Mon/Wed/Fri) on left. Show 6 months.
Recently Read — Category filter pills (All, Articles, Books, Tweets, RSS, Email) with JS toggle. Then entries grouped by month (e.g., "FEBRUARY 2026" in small caps). Each entry as a row:
- Date on left (tabular nums, muted)
- Category emoji (📄 article, 📚 book, 🐦 tweet, 📰 rss, ✉️ email, 🎬 video, 🎙 podcast, 📑 pdf)
- Title (linked, medium weight) + author/source (dim, smaller)
Styling notes:
- All CSS in a
<style> tag with CSS variables
- Subtle page-load fade-up animation on sections
- Divider lines between sections (
1px solid var(--border))
- Responsive: 2-column card grid on mobile
5. Return
Return the absolute path to the generated HTML file and a summary: how many currently reading, how many recently read, date range of activity data.
After Subagent Returns
- Tell the user the file was generated and where it is
- Offer to open it in their browser:
open now-reading/index.html
- Ask if they want to adjust anything
1---2name: now-reading-page3description: Generate a personal "Now Reading" webpage from your Reader library4---5
6You are generating a beautiful standalone HTML page showing what the user is currently reading and has recently read. The output is a single HTML file they can open in a browser or host on their personal site.
7
8## Readwise Access
9
10Check if Readwise MCP tools are available (e.g. `mcp__readwise__reader_list_documents`). If they are, use them throughout (and pass this context to the subagent). If not, use the equivalent `readwise` CLI commands instead (e.g. `readwise list`, `readwise read <id>`). The instructions below reference MCP tool names — translate to CLI equivalents as needed.
11
12## Process
13
14Launch a **Task subagent** to fetch all the data and generate the HTML file. The subagent should:
15
16### 1. Fetch Data
17
18Run ALL of these in parallel:
19
20- **Shortlist:** `mcp__readwise__reader_list_documents` with `location="shortlist"`, `limit=50`, `response_fields=["title", "author", "category", "reading_progress", "first_opened_at", "last_opened_at", "image", "url", "site_name", "word_count", "saved_at"]`
21- **Later:** `mcp__readwise__reader_list_documents` with `location="later"`, `limit=50`, `response_fields=["title", "author", "category", "reading_progress", "first_opened_at", "last_opened_at", "image", "url", "site_name", "word_count", "saved_at"]`
22- **Inbox:** `mcp__readwise__reader_list_documents` with `location="new"`, `limit=50`, `response_fields=["title", "author", "category", "reading_progress", "first_opened_at", "last_opened_at", "image", "url", "site_name", "word_count", "saved_at"]`
23- **Archive page 1:** `mcp__readwise__reader_list_documents` with `location="archive"`, `limit=50`, `response_fields=["title", "author", "category", "reading_progress", "last_opened_at", "image", "url", "site_name", "saved_at", "word_count"]`
24
25### 2. Paginate Archive Deeply
26
27After the first archive fetch, use `nextPageCursor` to keep fetching more pages (limit=50 each). Fetch at least 6 more pages (~350 total docs) so the heatmap covers 6 months of reading activity. Keep paginating until the oldest `last_opened_at` is 6+ months ago OR pages are exhausted.
28
29### 3. Categorize
30
31From the fetched data, build two lists:
32
33- **Currently Reading:** Items from shortlist, later, or inbox where `reading_progress` is between 0.05 and 0.99 (started but not finished). Sort by `last_opened_at` descending.
34- **Recently Read:** Items from archive where `reading_progress` > 0.9 (actually finished). Sort by `last_opened_at` descending. Group by month. Show as many months as the data covers.
35
36Also collect ALL `last_opened_at` dates from archive items with `reading_progress > 0.9` for the heatmap.
37
38**There is no "Up Next" section.** Only show things the user is reading or has read.
39
40### 4. Generate HTML
41
42Create a `now-reading/` directory in the current working directory (if it doesn't exist) and write the HTML file to `now-reading/index.html`.
43
44**Design direction:** Warm, sepia-toned, editorial. Think personal reading log, not media dashboard.
45
46**Fonts:** Google Fonts — Newsreader (serif, for headings) + DM Sans (sans, for body). Include via `<link>` tag.
47
48**Color palette (CSS variables):**
49```
50--bg: #f6f1eb (warm parchment background)
51--surface: #ede6dc (card/heatmap empty cell background)
52--surface-hover: #e4dbd0
53--border: #d9d0c4
54--text: #4a4239 (main body text)
55--text-muted: #8a7e72
56--text-dim: #b0a597
57--heading: #2c251e
58--accent: #a0724a (warm brown — progress bars, active states)
59--accent-dim: rgba(160, 114, 74, 0.12)
60```
61
62**Layout:** Max-width 760px, centered. Responsive.
63
64**Sections in order:**
65
661. **Header:** "What I'm reading" in Newsreader, light weight, large. Subtitle: "Powered by Readwise Reader" with accent-colored link.
67
682. **Currently Reading** — section label in small caps. Gallery of cards using CSS grid (`repeat(auto-fill, minmax(160px, 1fr))`) so they fill the container. Each card:
69 - `aspect-ratio: 3/2`, rounded corners, hover lift effect
70 - Cover image if available (`image` field). Gradient placeholder if not (hash title → hue).
71 - Dark gradient overlay at bottom with white title + author
72 - Progress bar at card bottom: 5px tall track (dark semi-transparent) with accent-colored fill
73 - Cards link to the Reader URL
74
753. **Reading Activity** — GitHub-style heatmap filling full container width. Use CSS flex with `flex: 1` on weeks and cells so it stretches. Warm amber color scale (`rgba(160, 114, 74, 0.2/0.4/0.65/1.0)`). Month labels above, day-of-week labels (Mon/Wed/Fri) on left. Show 6 months.
76
774. **Recently Read** — Category filter pills (All, Articles, Books, Tweets, RSS, Email) with JS toggle. Then entries grouped by month (e.g., "FEBRUARY 2026" in small caps). Each entry as a row:
78 - Date on left (tabular nums, muted)
79 - Category emoji (📄 article, 📚 book, 🐦 tweet, 📰 rss, ✉️ email, 🎬 video, 🎙 podcast, 📑 pdf)
80 - Title (linked, medium weight) + author/source (dim, smaller)
81
82**Styling notes:**
83- All CSS in a `<style>` tag with CSS variables
84- Subtle page-load fade-up animation on sections
85- Divider lines between sections (`1px solid var(--border)`)
86- Responsive: 2-column card grid on mobile
87
88### 5. Return
89
90Return the absolute path to the generated HTML file and a summary: how many currently reading, how many recently read, date range of activity data.
91
92## After Subagent Returns
93
941. Tell the user the file was generated and where it is
952. Offer to open it in their browser: `open now-reading/index.html`
963. Ask if they want to adjust anything