carl-weread

July 10, 2026 · View on GitHub

carl-weread

把微信读书从「读了多少」改成「今天哪个问题可以被读懂一点」。

License: MIT Hermes Skill WeRead API


微信读书行动型阅读教练:根据当前问题,推荐一本书里的今天一小节,并把阅读变成行动卡。


官方微信读书已经有书架、搜索、笔记、统计和推荐。它能回答「你读了多久」「有哪些书」「这本书有哪些笔记」。

carl-weread想多走一步:你现在卡住的事,微信读书里哪本书、哪一节,能帮你今天少囤一点资料,多做一个判断?

当前问题 → 书架/笔记/章节交叉 → 推荐一本书的一小节 → 读后行动卡 → Markdown回流 → 周阅读行动复盘

看差异 · 功能总览 · 核心方法 · 触发话术 · 装上就能用


看差异

同样一个问题:

我最近信息焦虑,总是在囤资料但不产出,今天该读什么?

普通推荐很容易给一串书名:信息管理、效率、认知、写作、项目管理。书可能都对,但问题还在原地。

真正需要被回答的是:

  • 我现在是缺信息,还是缺一个能收束问题的框架?
  • 这本书我是不是早就收藏过、读过、划过线?
  • 今天到底读哪一小节,读完以后做什么?

carl-weread要给的是一个能在今天完成的小切口:

今天只读这一小节:
《某本书》|某一章

为什么是它:
资料已经够多,真正卡住的是问题没有收束。这一节刚好能把「继续搜索」改成「提出一个更好的问题」。

读前问题:
我现在反复搜索,是为了做哪个判断?

读完只做一个动作:
把当前文章选题改写成一个问题句,别再扩成资料清单。

打开:weread://reading?bId=...&chapterUid=...

一句话定位:

carl-weread更像「今天这个问题,只读哪一节,然后怎么用」。

和原版/参考项目的区别

项目更像什么强项carl-weread的差异
微信读书官方能力(App统计 / WeRead Skill)阅读数据与原子接口书架、搜索、笔记、统计、推荐接口完整不停在查数据,往「当前问题→章节→行动」走
huashu-weread读书顾问书架+笔记交叉,推荐下一本书,规划主题路径参考它的交叉分析思路,但把目标缩到「今天只读哪一节」
jerlin-wereadCLI工程底座API文档、脚本、字段约束更稳学它的命令化组织方式,再把命令接成阅读工作流

功能总览

能力当前状态做什么入口
API Key安全初始化✅ 已完成将key写入私有文件,权限600,不进仓库scripts/setup_api_key.py
上下文模式✅ 已完成支持Obsidian、普通文件夹、Chat、WeRead-only四档上下文scripts/setup.py --mode ...
今日推荐✅ 已完成拉取真实WeRead数据,根据当前问题推荐一本书里的一节自然语言触发 / scripts/today_live.py
读后行动卡✅ 已完成把书名、章节、划线、当前问题压成一张行动卡自然语言触发 / scripts/digest_apply.py
写回Obsidian/本地文件夹✅ 已完成把阅读行动卡写回carl-weread/reading-cards/--writeback
周阅读行动复盘✅ 已完成从行动卡看哪些阅读真的进入了文章、项目和判断自然语言触发 / scripts/weekly_loop.py
WeRead原子API helper✅ 已完成书架、搜索、统计、详情、目录、进度、笔记、划线、点评、推荐scripts/weread.sh ...
未读书交叉验证推荐✅ V0.3已完成过滤已深读/只收藏/已消化,推荐真正没读过但现在该读的书scripts/carl_weread.py recommend
苏格拉底式无划线协议✅ V0.3已完成读完后先查有没有划线;没有划线就用问题追回理解scripts/carl_weread.py after-read
统一产品级CLI✅ V0.3已完成从一堆scripts/收束到recommend/today/after-read/weeklyscripts/carl_weread.py ...

核心方法

1. 先问问题,再找书

很多阅读推荐从主题开始,比如AI、产品、心理学。carl-weread先看你现在卡在哪里。

用户输入先判断什么阅读目标
我信息焦虑是缺信息,还是缺收束问题的方法减少输入,形成判断
我写文章卡住了是缺案例,缺结构,还是缺一个反常识角度推进一篇具体内容
我项目推进慢是缺技术方案,缺产品判断,还是缺下一步动作读完能改一个动作
我不知道读什么是真没方向,还是收藏太多没有消化少推荐,多收束

2. 书架、笔记、章节要交叉看

单看书架,会把「收藏过」误判成「真的需要」。单看笔记,又容易只围着旧兴趣转。carl-weread把几类数据放在一起看:

数据源接口揭示什么用在什么地方
书架/shelf/sync用户主动收藏/分类的兴趣找候选书,不当作唯一证据
笔记本概览/user/notebooks真读过什么、哪些书有痕迹判断深读、浅读、只收藏
章节目录/book/chapterinfo今天能不能定位到小节避免只推荐一本书
阅读进度/book/getprogress是否正在读、读到哪里避免推荐明显不合适的位置
个人划线/book/bookmarklist用户真正停下来的地方读后行动卡的证据
热门划线/点评/book/bestbookmarks/review/list大家反复标记的问题辅助判断章节价值
推荐/相似书/book/recommend/book/similar新候选来源找没读透但现在该读的书

3. 阅读统计不比时长,比影响

微信读书已经能告诉你读了多久。这里不再做一个低配统计页。

weekly-loop关心的是:

这周哪次阅读变成了文章角度?
哪条划线进入了项目决策?
哪本书只是制造了收藏安全感?
下周只保留哪一条阅读主线?

所以它吃的输入包括:

微信读书统计 + 本周划线/行动卡 + Obsidian项目/选题上下文

触发话术

你可以这样说走哪个能力预期输出
今天读哪一小节today-chapter一本书里的一个章节/小节,附读前问题和行动
根据我的书架和最近问题,推荐一本现在最该读的书,只告诉我今天读哪一节today-chapter书名、章节、推荐理由、打开链接
我信息焦虑,帮我少读一点但读准一点today-chapter / after-read先收束问题,再推荐小阅读块
这本书我读到哪了原子能力:progress阅读进度和打开链接
查一下这本书的目录和我的划线原子能力:book-info/bookmarks/chapters书籍详情、章节目录、个人划线
读完了,帮我消化成行动digest-apply阅读行动卡、一个最小行动、选题线索
把这次阅读闭环存到Obsidianwriteback写入carl-weread/reading-cards/
本周阅读行动复盘weekly-loop本周真正进入工作的阅读、逃避式收藏、下周主线
给我推荐一本我没读过但现在该读的书unread-advisor交叉验证已读/未读后推荐一本新书

装上就能用

先说结论:如果你只是想让Agent理解这套阅读方法,安装SKILL.md就够;如果你要运行微信读书API、脚本、测试和写回功能,需要clone完整仓库。

轻量安装:只让Agent读到说明

hermes skills install https://raw.githubusercontent.com/LearnPrompt/carl-weread/main/SKILL.md

这一步只会安装SKILL.md。它适合加载使用说明,但不会带上scripts/carl_weread/workflows/和测试文件。

完整安装:真正运行这套工具

git clone https://github.com/LearnPrompt/carl-weread ~/.hermes/skills/carl-weread
cd ~/.hermes/skills/carl-weread
python3 -m venv .venv
.venv/bin/python -m pip install -U pip pytest
.venv/bin/python -m pytest tests -q

如果你已经clone了仓库,也可以在仓库里跑安装脚本:

scripts/install_skill.py

配置微信读书API Key

自然语言版:

帮我配置carl-weread的微信读书API Key。不要把key写进仓库,也不要在回复里打印key。

代码版:

scripts/setup_api_key.py

它会把key写入~/.config/carl-weread/api_key,文件权限为600,不会写入config.toml,也不会打印key。

也可以只在当前shell临时使用:

export WEREAD_API_KEY="<你的微信读书API Key>"

API Key获取入口:https://weread.qq.com/r/weread-skills


没有Obsidian怎么用

可以用。Obsidian只是最高配上下文源,不是硬依赖。

模式适合谁上下文来源输出能力
Full ModeObsidian用户日记、项目、选题库 + 微信读书最完整的行动闭环
Folder Mode有本地笔记但不用Obsidian任意Markdown/TXT文件夹 + 微信读书可推荐章节并生成行动卡
Chat Mode只在Agent里聊天用户当前一句话/最近对话 + 微信读书轻量推荐今天一小节
WeRead-only Mode没有外部笔记书架、笔记、阅读进度基于最近阅读做推荐

首次配置也给两种说法。

自然语言版:

帮我把carl-weread配置成WeRead-only模式。先不接Obsidian,只根据我的微信读书书架、笔记和阅读进度推荐。

代码版:

# Obsidian用户
scripts/setup.py --mode obsidian --path "/path/to/your/vault"

# 非Obsidian,但有本地Markdown/TXT笔记
scripts/setup.py --mode folder --path "/path/to/your/notes"

# 只使用当前对话上下文
scripts/setup.py --mode chat

# 只使用微信读书数据
scripts/setup.py --mode weread-only

配置默认写入:~/.config/carl-weread/config.toml


今日推荐:一本书里的一小节

自然语言版:

根据我的微信读书书架和最近问题,推荐一本现在最该读的书,并告诉我今天只读哪一节。
我的问题是:我正在写一篇微信读书Skill文章,想找一个能推进文章结构的阅读切口。

代码版:

scripts/today_live.py \
  --brief "我正在写一篇微信读书Skill文章,请根据我的书架推荐一本最适合现在读的书,并告诉我今天只读哪一节。"

它会自动做这些事:

读取配置 → 收集上下文 → 拉微信读书书架/笔记/章节 → 选择一本书里的一小节 → 输出读前问题和读后动作

重点放在少一点:只给今天能读完、能接上当前问题的一节。


V0.3:推荐一本没读透但现在该读的书

这条能力不是再给一串书单。它会先看书架和笔记,排除已经明显消化过的书,再把微信读书推荐、相似书和当前问题放在一起交叉验证。

自然语言版:

给我推荐一本我没读过但现在该读的书。
我的问题是:我在写Agent Skill文章,需要找一个能解释「为什么Skill不能只封装API」的阅读切口。

代码版:

scripts/carl_weread.py recommend \
  --brief "我在写Agent Skill文章,需要找一个能解释为什么Skill不能只封装API的阅读切口。"

输出会包含:

推荐哪本书
为什么不是继续读老书
书架/笔记/推荐来源的证据
翻开后先问什么
读完只做哪个动作

读后行动卡与写回

行动卡要贴着书走。它必须带着书名、章节、划线/想法和当前问题一起生成,否则就会变成空泛总结。

自然语言版:

我刚读完《AI Engineering》的「Evals and workflows」。
这句划线对我有用:Agent的价值在模型、工具、上下文和验证之间。
我现在的问题是:我在写一篇介绍carl-weread的文章,需要把阅读变成可演示动作。
请把这次阅读消化成一张行动卡;如果已经配置写回,就存到我的笔记目录。

代码版:

scripts/carl_weread.py after-read \
  --book-title "AI Engineering" \
  --chapter-title "Evals and workflows" \
  --highlight "Agent的价值在模型、工具、上下文和验证之间。" \
  --current-problem "我在写一篇介绍carl-weread的文章,需要把阅读变成可演示动作。" \
  --writeback

如果你已经知道bookIdchapterUid,也可以让它先自动拉本章划线:

scripts/carl_weread.py after-read \
  --book-id BOOK_ID \
  --chapter-uid CHAPTER_UID \
  --book-title "AI Engineering" \
  --chapter-title "Evals and workflows" \
  --current-problem "我在写一篇介绍carl-weread的文章,需要把阅读变成可演示动作。" \
  --auto-fetch

如果这一章没有划线,它不会硬写总结,而是输出「无划线读后检查」:让你补一条原文/转述,说明它解释了哪个问题,再决定要不要生成行动卡。

写回路径形如:

<你的笔记目录>/carl-weread/reading-cards/YYYY-MM-DD-书名-章节.md

这张卡会保留「哪本书、哪一节、哪条划线、解决什么问题、下一步做什么」。周复盘从这些卡里读证据,避免空泛总结。


本周阅读行动复盘

自然语言版:

基于本周carl-weread写回的阅读行动卡,帮我做一次阅读复盘。
重点看:哪些阅读进入了文章或项目,哪些只是收藏安全感,下周只保留哪一条阅读主线。

代码版:

scripts/carl_weread.py weekly \
  --cards /path/to/reading-cards \
  --context "本周在写Agent Skill文章,也在验证carl-weread的安装链路"

这里不重复微信读书周报。微信读书周报告诉你「读了多久」,这里要回答:

哪本书的哪一节真的推进了工作?
哪条划线变成了文章角度或项目动作?
哪些收藏只是缓解焦虑?

打开微信读书

推荐输出中会给weread://深度链接。它依赖本机微信读书客户端和系统协议注册。更稳妥的输出方式:

open 'weread://reading?bId=BOOK_ID&chapterUid=CHAPTER_UID'

如果没有反应:

  1. 安装并打开微信读书客户端。
  2. 登录同一个微信读书账号。
  3. 再执行上面的open命令。
  4. 仍然打不开时,用书名和章节名在微信读书里手动搜索。

仓库结构

carl-weread/
├── SKILL.md          # Agent读取的技能说明
├── README.md         # 给人看的产品说明和安装指南
├── carl_weread/      # Python核心逻辑
├── scripts/          # 可直接运行的命令入口
├── workflows/        # 可复用工作流说明
├── shared/           # 输出风格等共享约定
└── tests/            # 回归测试

当前边界

  • V0.3已经跑通真实WeRead API helper、今日章节、未读书推荐、读后划线检查、无划线追问、行动卡写回、周复盘和统一CLI。
  • 推荐章节仍使用轻量规则,不做embedding或全文语义检索;它适合演示和日常使用,不伪装成完整阅读智能体。
  • 未读书推荐会根据书架、笔记和推荐/相似书数据做交叉判断,但微信读书接口字段在不同账号上可能有差异,异常时应保留原始JSON样本再补适配。
  • 写回会写入真实Obsidian vault或普通文件夹;Chat/WeRead-only模式默认只在对话中返回,不写文件。

开发者附录:WeRead原子能力

普通用户可以跳过这里。这一节给开发者调试接口、排查字段和复用底层API。

能力命令
查询书架scripts/weread.sh shelf
书籍搜索scripts/weread.sh search --keyword=画家之眼
阅读统计scripts/weread.sh readdata
书籍详情scripts/weread.sh book-info --bookId=BOOK_ID
章节目录scripts/weread.sh chapters --bookId=BOOK_ID
阅读进度scripts/weread.sh progress --bookId=BOOK_ID
笔记概览scripts/weread.sh notebooks --count=20
个人划线scripts/weread.sh bookmarks --bookId=BOOK_ID
个人想法scripts/weread.sh mine-reviews --bookid=BOOK_ID
公开点评scripts/weread.sh reviews --bookId=BOOK_ID
单条想法scripts/weread.sh review --reviewId=REVIEW_ID
热门划线scripts/weread.sh best-bookmarks --bookId=BOOK_ID
章节划线热度scripts/weread.sh underlines --bookId=BOOK_ID --chapterUid=CHAPTER_UID
章节划线评论scripts/weread.sh readreviews --bookId=BOOK_ID --chapterUid=CHAPTER_UID --reviews='[]'
推荐好书scripts/weread.sh recommend
相似书推荐scripts/weread.sh similar --bookId=BOOK_ID
接口列表scripts/weread.sh list-apis

已知兼容处理:

  • readdata默认补--mode=overall,避免服务端返回参数格式错误。
  • recommendsimilar默认补--count=12 --maxIdx=0,避免部分环境缺分页参数失败。
  • best-bookmarks默认补--chapterUid=0,表示全书热门划线。
  • readreviews --reviews=...支持JSON数组/对象参数。
  • 频率超限时不要反复重试,优先复用.cache/weread//private/tmp/中已保存的候选章节JSON。

开发者如果只想调试候选章节生成,可以拆开跑:

scripts/fetch_candidates.py \
  --output .cache/weread/candidates.json \
  --limit-books 5

scripts/today.py \
  --config ~/.config/carl-weread/config.toml \
  --brief "我最近在做一个可分享的微信读书Skill" \
  --chapters .cache/weread/candidates.json

致谢


少读一点,读准一点。


更多好用 Skill · More Skillslearnprompt.pro/skills

鲁班·Skill打磨 · 庖丁·博主蒸馏 · 蔡伦·对话造纸 · 阿福·LLM Todo · 愚公·Loop工程 · 搭子·结对开发 · AI雷达·零API资讯

淘金小镇·ClawHub日榜 · Irasutoya·正文配图 · Humanize PPT·演讲系统 · CC Harness·六件套 · 微信读书教练 · X Article发布

LearnPrompt 出品 · 公众号「卡尔的AI沃茨」 · X @aiwarts