Put the books you've read "to use." Covers three real scenarios: learning something new, needing citations when writing, and repeatedly reactivating what you've read.
Prerequisites
weread-skillsinstalled- Environment variable
WEREAD_API_KEYconfigured - Cache directory:
/tmp/read-weread-coach/(data cached for 24 hours) - State directory:
~/.claude/skills/read-weread-coach/state/
Feature 1: Recommendations · Tiered book list
Trigger words
- "I want to understand XX / get started with XX / learn XX"
- "Give me a tiered book list for XX"
- "Which book should I start with for XX"
Process
Step 1: Assess level (must ask)
你目前对【XX】的水平?
a. 完全新手,零基础
b. 听说过、读过零星文章,没系统
c. 有一定基础,想突破到前沿
d. 已经熟练,想找冷门好书
Step 2: Pull the user's bookshelf data
Call /user/notebooks + /shelf/sync to get the read + currently reading book list.
Step 3: Generate a 5-tier book list
| Tier | Purpose | Quantity |
|---|---|---|
| ① Primer | An article or a thin book to break down the barrier | 1 |
| ② Beginner | Systematic foundational books | 1-2 |
| ③ Classic | Foundational works in the field that cannot be avoided | 1-2 |
| ④ Frontier | Representative works from the past 3-5 years | 1-2 |
| ⑤ Practice | Tool books that turn knowledge into action | 1 |
Step 4: Annotate
- User has read → mark ✅ + label "You've read X% / Y highlights"
- On the bookshelf but not read → mark 📚 "Already on bookshelf"
- Completely new book → mark 🆕
Adjust the starting point based on level: a starts from ①, b starts from ②, c jumps in from ③, d goes directly to ④⑤.
Step 5: Give 1 suggestion Based on the first unread item in the tiered list, tell the user: which book to read this week, how long it's expected to take, and what to do after finishing.
Feature 2: Citations · Find evidence from books you've read
Trigger words
- "I'm writing about XX, which book can I cite"
- "Which book discussed this viewpoint"
- "I want to cite a viewpoint about XX"
Process
Step 1: Confirm the citation topic Have the user state clearly in one sentence: the viewpoint to argue / the angle of the article.
Step 2: Search within the user's read corpus
Execute:
python3 ~/.claude/skills/read-weread-coach/scripts/fetch_corpus.py
The script will cache /tmp/read-weread-coach/corpus.json(reused within 24h).
Then scan two corpora:
marks_corpus: all highlight original textreviews_corpus: all thoughts/book reviews
Match by keywords + semantics to find the 5-8 most relevant highlights/thoughts.
Step 3: Output
Each citation includes:
- Highlight original text (≤ 50 characters)
- Book title + author
- Highlight time
- Suggested usage: direct quote / as evidence / reverse citation (used as contrast) / paraphrase and use
Step 4: If the read content is not enough When more than 3 strongly relevant items cannot be found in the user's read corpus, additionally recommend 2-3 unread but relevant books (from the weread store or classic recommendations).
Feature 3: Review · Push one highlight daily
Trigger words
- "Today's notes / push a highlight / reading review / give me a daily review"
- Or triggered by
/loop/ OpenClaw cron / Claude Code schedule
Process
Step 1: Ensure the cache is up to date
Execute scripts/fetch_corpus.py(automatically skips cache within 24h).
Step 2: Call the script to select and write to history
python3 ~/.claude/skills/read-weread-coach/scripts/pick_review.py
Script logic:
- Load all highlights (from corpus.json)
- Filter out
state/review_history.jsonlbookmarkIds that have already appeared in - Weight in reverse by time (the older, the more likely to be selected, activating forgotten content)
- Output JSON: bookmarkId / book title / author / chapter / highlight text / highlight time
- Append to
state/review_history.jsonl
Step 3: Package the output
Format example:
📖 今日回顾 · 2026-05-19
《书名》— 作者
🔖 第 X 章 · 划线时间 YYYY-MM-DD
> 划线原文(最长 100 字)
💭 一句话激活提问:
基于这条划线给一个引导性问题,让用户回到当时的思考语境。
Step 4: Deduplication guarantee
review_history.jsonlOne JSON per line:{"bookmarkId":"...","shown_at":"YYYY-MM-DD HH:MM"}- After all highlights have been pushed once, clear the history and start over (the script will automatically reset when there are no unpushed items, and prompt "Completed one full round, starting round N")
Scheduled push configuration
Option A: Claude Code /loop
Run in the terminal:
/loop 1d 推一条今日读书回顾给我
Option B: OpenClaw / cron
Add a line to crontab (every day at 8 AM):
0 8 * * * /usr/bin/python3 ~/.claude/skills/read-weread-coach/scripts/pick_review.py --notify
When the script includes --notify , it will call macOS osascript -e 'display notification' to send a system notification.
Option C: Claude Code schedule skill
/schedule create "每天 8 点推送一条微信读书回顾" --cron "0 8 * * *"
General notes
- No repeated fetching: The three features share
/tmp/read-weread-coach/corpus.json, and do not refetch within 24 hours - Strict deduplication: The review feature must use
bookmarkIdas the unique key, and must not misjudge just because the highlight content is the same - Encryption risk: Do not write the API Key into any cache file; read it only from environment variables
- Quality of the review's "activation question": Do not write "What do you think" perfunctorily. Design specific questions based on the highlight content, for example, for a Stoic highlight ask "Which thing today is most suitable for applying this principle?"
- Avoid hallucinations in the citation feature: Only output the original highlight text that actually exists in the user's corpus; do not fabricate