huashu-weread-advisor
微信读书高阶顾问。在底层 weread skill 的原子 API 之上,提供四类工作流:基于已读做个性化进阶推荐(advisor)、给方向规划入门到前沿的阶梯书单(path)、把零散划线想法提炼成读书笔记总结(alchemy)、做季度/年度阅读复盘并生成可发朋友圈/公众号的文章(review)。核心方法是「书架 + 笔记交叉分析」——书架揭示用户主动分类的兴趣,笔记数据揭示「真读过的」vs「只放着的」。当用户说「推荐书」「下一本读啥」「该读什么」「想搞懂 X 这个领域」「整理我的笔记」「这本书我记住了啥」「我今年读了什么」「读书复盘」「年度盘点」时触发。即使用户只是说「不知道读啥」「有没有相关的书」「帮我看看这本读完了吗」「这个领域我入门了吗」也应触发。
Works with
---
name: huashu-weread-advisor
description: 微信读书高阶顾问。在底层 weread skill 的原子 API 之上,提供四类工作流:基于已读做个性化进阶推荐(advisor)、给方向规划入门到前沿的阶梯书单(path)、把零散划线想法提炼成读书笔记总结(alchemy)、做季度/年度阅读复盘并生成可发朋友圈/公众号的文章(review)。核心方法是「书架 + 笔记交叉分析」——书架揭示用户主动分类的兴趣,笔记数据揭示「真读过的」vs「只放着的」。当用户说「推荐书」「下一本读啥」「该读什么」「想搞懂 X 这个领域」「整理我的笔记」「这本书我记住了啥」「我今年读了什么」「读书复盘」「年度盘点」时触发。即使用户只是说「不知道读啥」「有没有相关的书」「帮我看看这本读完了吗」「这个领域我入门了吗」也应触发。
license: MIT
---
# huashu-weread-advisor
把原子的微信读书 API 变成一个真正读懂你的读书顾问。
## 定位
底层 weread skill 提供原子接口(搜索、书架、笔记、点评、推荐、阅读统计),本 skill 在其之上做**工作流编排**,把原始数据转成对用户有消费价值的产出。
## 前置依赖
- 必须先有 `WEREAD_API_KEY` 环境变量(在用户 shell 中 export)
- 所有 API 调用走 `POST https://i.weread.qq.com/api/agent/gateway`
- 请求 body 必须带 `skill_version` 字段——**值的权威来源**:`~/.claude/skills/weread/SKILL.md` 顶部 frontmatter 的 `version` 字段(当前 `1.0.3`,会变;别从 prompt 或老模板里抄)
- 接口文档和参数详情见底层 weread skill:`~/.claude/skills/weread/SKILL.md`
## 核心方法论(所有 workflow 共享)
### 1. 书架和笔记是两个数据源,必须交叉
| 数据源 | 接口 | 揭示什么 |
|--------|------|---------|
| 书架 | `/shelf/sync` | 用户**主动分类**的兴趣方向 + 加入了什么 |
| 笔记 | `/user/notebooks` | 用户**真读过**的书 + 读得多深(笔记条数) |
| 进度 | `/book/getprogress` | 某本书读到哪、累计读了多久 |
| 统计 | `/readdata/detail` | 周/月/年阅读时长、天数、主题偏好 |
**关键洞察**:很多书在书架但没动,很多书没在书架(借/试读)但深读了。只看书架会漏掉重要信号。
**实战例子**:花叔的 Kandel《追寻记忆的痕迹》27 条笔记,书架的「心理学」分类里根本没列,但其实是他在神经科学领域读得最深的一本。如果只看书架做推荐,会误判他的真实知识地图。
### 2. 「最近读什么」≠「书架主题」
用户的当前兴趣可能和书架分类完全不一致。永远用 `readUpdateTime` 倒序看最近 30 天在动什么书,再做推荐。
### 3. 推荐必附 weread:// 深度链接
`weread://reading?bId={bookId}` 让用户一键打开。链接格式详见底层 weread skill 的「深度链接(URL Schema)」章节。
### 4. 推荐前必须验证微信读书是否上架
用 `/store/search` 搜确认。上架的附 weread:// 链接,不上架的明确告诉用户合法替代路径(购买纸质/英文版/作者公开课/图书馆)。**绝不推盗版资源**。
### 5. 输出走花叔语言风格
- 不堆砌、不破折号(全文 ≤ 2 处)、人味重
- 用「」不用""
- 不用「首先/其次/综上」这类 AI 结构词
- 不用「说白了/简单来说/换句话说」
- markdown 不过度加粗
- 详见 `/04-写作参考/SHARED-RULES.md`
## 检查点设计原则
所有 workflow 必须在「分叉影响输出本质」的地方插入用户确认 gate,防止 AI 默认值跑偏:
- **推荐数量分叉**:advisor 推 3 本 vs 8 本完全不同的体验,不要默认 5 本,先问
- **平台语气分叉**:复盘文章发朋友圈/公众号/小红书/视频脚本语气差很多,写前必须确认
- **段位判断分叉**:path workflow 把「我以为你是入门」的判断给用户看,让他确认或纠正
- **数据量分叉**:alchemy 跨主题模式拉出 50+ 划线时,先汇总议题让用户选子集,不要默认全聚
- **未上架处理分叉**:推荐里要不要包含未上架的书(用户可能只想要点开就能读的)
检查点不是「每步都问」。日常小决策(哪本放第一梯队、用什么动词)AI 自己定,不要打扰用户。规则是:**只在选项影响输出本质时问**。
如果用户原始 prompt 已经明确指定(「推 3 本上架的发公众号」),所有相关检查点都跳过。
## 子命令路由
| 用户说什么 | 走哪个 workflow |
|-----------|----------------|
| 推荐书 / 下一本读啥 / 不知道读啥 / 想读 X 方向 | [advisor.md](workflows/advisor.md) |
| 想搞懂 X 这个领域 / 系统学习 X / 从零入门 X | [path.md](workflows/path.md) |
| 整理我的笔记 / 这本书我记住了啥 / 提炼这个主题的划线 | [alchemy.md](workflows/alchemy.md) |
| 我今年读了什么 / 季度复盘 / 年度盘点 / 写一篇复盘 | [review.md](workflows/review.md) |
| 我现在在读哪本 / 最近在读啥 | 轻量直答(见下方) |
### 轻量直答:「我现在在读哪本」
不走 workflow,直接:
1. `/shelf/sync` 拿全书架
2. 按 `readUpdateTime` 倒序取 top 5
3. 用最新那本调 `/book/getprogress` 拿章节/进度/累计时长
4. 一句话回复「你正在读 X,已到第 N 章,进度 X%,累计读了 X 小时」,附 weread:// 链接
5. 顺带说一句最近一周在读的其他几本,看出主题倾向
## 共享子模块
- [shared/knowledge-map.md](shared/knowledge-map.md):怎么读懂一个人的知识地图(三个数据源 × 三种交叉信号)
- [shared/shelf-cross-notes.md](shared/shelf-cross-notes.md):书架 + 笔记交叉分析的 Python 代码模板和主题关键词组
## 示例
- [examples/advisor-neuroscience.md](examples/advisor-neuroscience.md):花叔「神经科学如何更进一步」案例的完整复盘,含步骤、输出、为什么这样推
## 异常与边界条件
实操常遇异常。以下为全局通用 fallback,所有 workflow 共享。workflow 各自的特殊异常在各自文档末尾。
| 场景 | 触发条件 | 处理动作 |
|------|---------|---------|
| `WEREAD_API_KEY` 未设置 | 环境变量不存在或不是 `wrk-` 开头 | 报错:「请先 export WEREAD_API_KEY=<你的apikey>,从微信读书后台获取」,终止 |
| API 返回 `errcode != 0` | 接口报错 | 显示中文错误信息,重试 1 次;仍失败告知用户并停止当前 workflow |
| 接口返回 `upgrade_info` | 服务端要求 skill 版本升级 | 暂停当前操作,按 `upgrade_info.message` 完成升级后重试,**不得忽略** |
| **`/store/search` 响应解析** | 解析返回 JSON | 顶层不是 `books[]`!实际结构是 `results[]`,按 section 分类。取上架:`results[?title=='电子书'].books[*].bookInfo`;取未上架:`title=='待上架'`。每本书的 bookId 在 `bookInfo.bookId`。**别用 `res.get('books', [])`,会全部 0 结果** |
| `/store/search` 多候选 | 同关键词返回 ≥ 3 本候选 | 默认取 `readingCount` 最高且**作者完全匹配**的(作者错位视同零结果,避免「Co-Intelligence」误命中「Collaborative Intelligence」类似的坑),**明确告知用户**「我用了《X》这本 by Y,bookId=Z,如果不对告诉我」 |
| `/store/search` 零结果 | 完全搜不到 + 关键词调整 + 作者过滤后仍零 | 标记为「未上架」,按 advisor 的「合法替代路径」规则处理,**绝不推盗版** |
| notebooks 完全空 | 新用户 / 从未做笔记 | 退化:仅用 `/shelf/sync` 推断,但**明确告知用户**「你没做过笔记,我只能用书架猜兴趣,准度会差一些」 |
| 书架完全空 | 全新用户 | 不走 advisor / review / alchemy,建议先读几本;或直接进 path workflow 从零规划 |
| 接口分页未拉完 | `/user/notebooks` 有 `hasMore` | 用 `lastSort` 继续翻页(参数平铺,**不要包在 `params` 里**);累计 > 500 本时给用户警告 |
| `readUpdateTime` = 0 | 加入书架但从未打开 | 当作「未读」,不纳入「最近活跃」排序,但仍计入「书架有但没动」 |
| 用户给的书名搜不到 | alchemy / 任何指名书的场景 | 先模糊搜(去标点/去副标题);仍不到给候选清单让用户选 |
| 主题词过宽或过窄 | 「商业」「人文」太宽;冷门词太窄 | 过宽:请用户细化方向;过窄:告知微信读书覆盖薄,建议组合纸质/Kindle |
**原则**:异常先告知用户,再按规则处理;绝不静默跳过或静默失败;接口报错的具体含义看底层 weread skill 的 `references/` 文档。
## 数据展示规范(强制)
所有 workflow 输出给用户时遵守:
- **Unix 时间戳**(`readUpdateTime` / `finishTime` / `createTime` 等)→ 转 `YYYY-MM-DD`,禁止直接展示数字
- **阅读时长字段**单位是秒 → 转「X 小时 Y 分钟」,零小时时只写分钟
- **进度字段**展示为 `X%`
- **bookId** 在用户面前不出现裸数字,要么变成 weread:// 链接,要么藏在 markdown 链接里
## 调用约定
无论走哪个 workflow,第一步都是先读 `SKILL.md` 本文件 + 对应 workflow 文件 + `shared/knowledge-map.md`,然后才开始调 API。不要凭印象做推荐,所有推荐必须有数据支撑。
## 版本自检(静默)
本节给 AI agent:每次使用本 skill 前,先做一个不联网的判断——读本 skill 目录(SKILL.md 所在目录)下的 `.last-update-check` 文件(内容为一行日期 YYYY-MM-DD)。文件存在且距今不足 30 天,跳过本节直接干活,不向用户提任何更新相关的话。
到期或文件不存在时,且仅在此时:
1. 本目录不是 git 克隆(无 `.git` 或无 origin)→ 写入今天日期后跳过本节
2. 对比版本:`git -C <本目录> rev-parse HEAD` 与 `git -C <本目录> ls-remote origin HEAD`
3. 无论结果如何,把今天日期写入 `.last-update-check`
4. 两者一致 → 什么都不说;确认落后 → 先完成用户当前任务,结束后附一句「本 skill 有新版本,可用 `git -C <本目录> pull --ff-only` 更新」。是否更新由用户决定,不要主动执行更新More General & Other skills
find-skills
vercel-labs/skills
Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill.
grill-me
mattpocock/skills
A relentless interview to sharpen a plan or design.
grill-with-docs
mattpocock/skills
A relentless interview to sharpen a plan or design, which also creates docs (ADR's and glossary) as we go.

