$npx -y skills add SpaceZephyr/read-buddy --skill read-weread-coach微信读书教练 — 把读过的书"用起来"。三种用法:(1) 推荐 - 想搞懂一个领域时,先判段位再给阶梯书单;(2) 引用 - 写作时基于已读划线给出可引用的书与原话;(3) 回顾 - 每天推送一条历史划线,自动去重,支持手动与定时触发。触发词:"我想搞懂 XX"、"入门书单"、"阶梯书单"、"我想引用一本书"、"这个观点哪本书讲过"、"今日笔记"、"推一条划线给我"、"读书回顾"。
| 1 | # weread-coach — 微信读书使用教练 |
| 2 | |
| 3 | 把读过的书"用起来"。覆盖三个真实场景:学新东西、写东西要引用、把读过的东西反复激活。 |
| 4 | |
| 5 | ## 前置依赖 |
| 6 | |
| 7 | - `weread-skills` 已安装 |
| 8 | - 环境变量 `WEREAD_API_KEY` 已配置 |
| 9 | - 缓存目录:`/tmp/read-weread-coach/`(数据缓存 24 小时) |
| 10 | - 状态目录:`~/.claude/skills/read-weread-coach/state/` |
| 11 | |
| 12 | --- |
| 13 | |
| 14 | ## 功能 1:推荐 · 阶梯书单 |
| 15 | |
| 16 | ### 触发词 |
| 17 | - "我想搞懂 XX / 入门 XX / 学 XX" |
| 18 | - "给我一个 XX 阶梯书单" |
| 19 | - "XX 从哪本书读起" |
| 20 | |
| 21 | ### 流程 |
| 22 | |
| 23 | **步骤 1:判段位(必问)** |
| 24 | |
| 25 | ``` |
| 26 | 你目前对【XX】的水平? |
| 27 | |
| 28 | a. 完全新手,零基础 |
| 29 | b. 听说过、读过零星文章,没系统 |
| 30 | c. 有一定基础,想突破到前沿 |
| 31 | d. 已经熟练,想找冷门好书 |
| 32 | ``` |
| 33 | |
| 34 | **步骤 2:拉用户书架数据** |
| 35 | 调 `/user/notebooks` + `/shelf/sync` 获取已读+在读书单。 |
| 36 | |
| 37 | **步骤 3:生成 5 层阶梯书单** |
| 38 | |
| 39 | | 层级 | 用途 | 数量 | |
| 40 | |------|------|------| |
| 41 | | ① 引子 | 一篇文章或一本薄书破除门槛 | 1 | |
| 42 | | ② 入门 | 体系化的基础书 | 1-2 | |
| 43 | | ③ 经典 | 该领域绕不开的奠基作 | 1-2 | |
| 44 | | ④ 前沿 | 近 3-5 年的代表作 | 1-2 | |
| 45 | | ⑤ 实践 | 把知识转化为行动的工具书 | 1 | |
| 46 | |
| 47 | **步骤 4:标注** |
| 48 | - 用户已读 → 标 ✅ + 标记 "你已读 X% / Y 条划线" |
| 49 | - 在书架但没读 → 标 📚 "已在书架" |
| 50 | - 完全新书 → 标 🆕 |
| 51 | |
| 52 | 根据段位调整起点:a 从 ① 开始,b 从 ② 开始,c 从 ③ 起跳,d 直接到 ④⑤。 |
| 53 | |
| 54 | **步骤 5:给出 1 条建议** |
| 55 | 基于阶梯的第一个未读项,告诉用户:本周读哪本,预计多久,读完做什么。 |
| 56 | |
| 57 | --- |
| 58 | |
| 59 | ## 功能 2:引用 · 从已读书中找证据 |
| 60 | |
| 61 | ### 触发词 |
| 62 | - "我在写关于 XX 的内容,能引用哪本书" |
| 63 | - "这个观点哪本书讲过" |
| 64 | - "我想引用一个关于 XX 的观点" |
| 65 | |
| 66 | ### 流程 |
| 67 | |
| 68 | **步骤 1:确认引用主题** |
| 69 | 让用户用一句话说清楚:要论证的观点 / 文章的角度。 |
| 70 | |
| 71 | **步骤 2:在用户已读语料中检索** |
| 72 | |
| 73 | 执行: |
| 74 | ```bash |
| 75 | python3 ~/.claude/skills/read-weread-coach/scripts/fetch_corpus.py |
| 76 | ``` |
| 77 | 脚本会缓存 `/tmp/read-weread-coach/corpus.json`(24h 内复用)。 |
| 78 | |
| 79 | 然后扫描两个语料库: |
| 80 | - `marks_corpus`:所有划线原文 |
| 81 | - `reviews_corpus`:所有想法/书评 |
| 82 | |
| 83 | 按关键词 + 语义匹配,找出 5-8 条最相关的划线/想法。 |
| 84 | |
| 85 | **步骤 3:输出** |
| 86 | |
| 87 | 每条引用包含: |
| 88 | - 划线原文(≤ 50 字) |
| 89 | - 书名 + 作者 |
| 90 | - 划线时间 |
| 91 | - **建议用法**:直接引用 / 作为论据 / 反向引用(用作对照) / 改写后用 |
| 92 | |
| 93 | **步骤 4:若已读不够用** |
| 94 | 当用户已读语料中找不到 3 条以上强相关时,额外推荐 2-3 本未读但相关的书(来自 weread 商城或经典推荐)。 |
| 95 | |
| 96 | --- |
| 97 | |
| 98 | ## 功能 3:回顾 · 每日推送一条划线 |
| 99 | |
| 100 | ### 触发词 |
| 101 | - "今日笔记 / 推一条划线 / 读书回顾 / 给我一条今日 review" |
| 102 | - 或由 `/loop` / OpenClaw cron / Claude Code schedule 定时触发 |
| 103 | |
| 104 | ### 流程 |
| 105 | |
| 106 | **步骤 1:保证缓存最新** |
| 107 | 执行 `scripts/fetch_corpus.py`(自动跳过 24h 内缓存)。 |
| 108 | |
| 109 | **步骤 2:调脚本挑选并写入历史** |
| 110 | |
| 111 | ```bash |
| 112 | python3 ~/.claude/skills/read-weread-coach/scripts/pick_review.py |
| 113 | ``` |
| 114 | |
| 115 | 脚本逻辑: |
| 116 | - 加载所有划线(来自 corpus.json) |
| 117 | - 过滤掉 `state/review_history.jsonl` 中已出现过的 bookmarkId |
| 118 | - 按时间反向加权(越老的越可能被选中,激活遗忘的内容) |
| 119 | - 输出 JSON:bookmarkId / 书名 / 作者 / 章节 / 划线原文 / 划线时间 |
| 120 | - 追加到 `state/review_history.jsonl` |
| 121 | |
| 122 | **步骤 3:包装输出** |
| 123 | |
| 124 | 格式示例: |
| 125 | ``` |
| 126 | 📖 今日回顾 · 2026-05-19 |
| 127 | |
| 128 | 《书名》— 作者 |
| 129 | 🔖 第 X 章 · 划线时间 YYYY-MM-DD |
| 130 | |
| 131 | > 划线原文(最长 100 字) |
| 132 | |
| 133 | 💭 一句话激活提问: |
| 134 | 基于这条划线给一个引导性问题,让用户回到当时的思考语境。 |
| 135 | ``` |
| 136 | |
| 137 | **步骤 4:去重保证** |
| 138 | - `review_history.jsonl` 每行一个 JSON:`{"bookmarkId":"...","shown_at":"YYYY-MM-DD HH:MM"}` |
| 139 | - 当所有划线都已被推送过一遍后,清空历史重新轮(脚本会在没有未推送项时自动重置,并提示"已完成全集一轮,开始第 N 轮") |
| 140 | |
| 141 | ### 定时推送配置 |
| 142 | |
| 143 | #### 选项 A:Claude Code `/loop` |
| 144 | 在终端执行: |
| 145 | ``` |
| 146 | /loop 1d 推一条今日读书回顾给我 |
| 147 | ``` |
| 148 | |
| 149 | #### 选项 B:OpenClaw / cron |
| 150 | crontab 加一行(每天早 8 点): |
| 151 | ``` |
| 152 | 0 8 * * * /usr/bin/python3 ~/.claude/skills/read-weread-coach/scripts/pick_review.py --notify |
| 153 | ``` |
| 154 | 脚本带 `--notify` 时会调用 macOS `osascript -e 'display notification'` 发送系统通知。 |
| 155 | |
| 156 | #### 选项 C:Claude Code `schedule` skill |
| 157 | ``` |
| 158 | /schedule create "每天 8 点推送一条微信读书回顾" --cron "0 8 * * *" |
| 159 | ``` |
| 160 | |
| 161 | --- |
| 162 | |
| 163 | ## 通用注意事项 |
| 164 | |
| 165 | 1. **不重复抓取**:三个功能共享 `/tmp/read-weread-coach/corpus.json`,24 小时内不重抓 |
| 166 | 2. **去重严格**:回顾功能必须用 `bookmarkId` 作为唯一键,不能因为划线内容相同而误判 |
| 167 | 3. **加密风险**:API Key 不要写入任何缓存文件,只从环境变量读 |
| 168 | 4. **回顾的"激活提问"质量**:不要敷衍写"你怎么看"。要结合划线内容设计具体问题,例如对斯多葛划线问"今天哪件事最适合用这条原则" |
| 169 | 5. **引用功能避免幻觉**:只输出真实存在于用户语料里的划线原文,不要编造 |