Agent skill

WeRead Bookshelf and Notes

by teng-lin in teng-lin/weread-omni

Searches books, manages the shelf, reads public-account articles and reads or writes highlights and notes in WeRead through the weread-omni CLI.

MITAuto-check passedKnowledge Management

Install WeRead Bookshelf and Notes

skills CLI
$ npx skills add teng-lin/weread-omni --skill weread -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install teng-lin/weread-omni weread --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/teng-lin/weread-omni.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/weread .claude/skills/weread && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
weread
GitHub stars
660
Token cost
~3.3k tokens
SKILL.md length
1,398 words
Files
2
Skills in repo
1
Repo updated
First seen
Licence
MIT

At a glance

Searches books, manages the shelf, reads public-account articles and reads or writes highlights and notes in WeRead through the weread-omni CLI.

  • Works in 4 steps: Search with weread-omni --account… → Show the matches and have the user… → Subscribe only when requested, then use… → …
  • Looking up a book or author on WeChat Reading
  • SKILL.md covers Account selection, Session preflight, Read workflow and Account changes, plus 1 more section
  • Reaches mp.weixin.qq.com

What it does

The agent talks to WeRead only through the weread-omni command-line tool, always with --json, and summarizes the parsed result. It picks one account alias for the whole session and never switches after a failure. Before any authenticated call it runs a doctor check and proceeds only if the account is authenticated, and it does not start a QR login without your say-so.

Reads start with the narrowest command that answers the request: book search (with scopes such as ebooks, web fiction, audio or authors), book metadata and chapters, public-account articles, shelf and reading data. Results can come from a local library copy, so the agent should say when something may be stale and offer a refresh. Writes such as highlights and notes are allowed unless the operator sets WEREAD_READONLY, which the agent reports as policy rather than working around, and it never exposes credentials.

When your agent uses it

  • Looking up a book or author on WeChat Reading
  • Reviewing or adding highlights and notes on a book on your WeRead shelf
  • Reading a public-account article through WeRead
  • Checking reading statistics or recommendations from your WeRead account

Example prompts

  • “Search WeRead for 三体 and show the top ebook results.”
  • “List the highlights I saved in the book I finished most recently on WeRead.”
  • “Run the weread-omni doctor check and tell me whether my account is logged in.”

Requirements

  • The weread-omni CLI installed
  • A logged-in WeRead account

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Search with weread-omni --account "$ACCOUNT" search books KEYWORD --scope 2 --json.
  2. Show the matches and have the user choose the exact MP_WXS_ ID.
  3. Subscribe only when requested, then use public-accounts subscriptions,
  4. Unsubscribe only after confirming the exact account.

What it can do on your machine

Read from SKILL.md and the folder at commit 88bd2e0. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are bash).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • mp.weixin.qq.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

WeRead Bookshelf and Notes loads about 3.3k tokens when it runs. Until then it costs about 116 tokens; SKILL.md has 1,398 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~116
When it runs · the whole SKILL.md, loaded when a task matches
~3.3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from teng-lin/weread-omni at commit 88bd2e0, republished under its MIT licence (© teng-lin). 1,398 words, ~3,293 tokens.

Download SKILL.mdSave it as .claude/skills/weread/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
weread
description
Search WeRead, inspect books and reading data, manage the bookshelf, public-account subscriptions and reviews, read and write highlights and notes, build private article feeds and archives, ask WeRead AI, or import a personal book through the installed `weread-omni` JSON CLI. Use for requests involving 微信读书, WeChat Reading, a user's WeRead shelf, public accounts, articles, highlights, notes, reviews, reading statistics, recommendations, or book lookup.

WeRead

Use the installed CLI as the only interface. Always pass --json, parse successful stdout as JSON, and summarize the result for the user. On a non-zero exit, parse the JSON error from stderr. Never expose credentials or paste raw tokens.

Account selection

Choose exactly one account for the session and preserve it through every CLI call. Use the alias supplied by the user or operator. If none was supplied, weread-omni accounts --json must show exactly one configured account. In the examples below, $ACCOUNT means that alias. Do not switch accounts after a failure.

Writes are permitted unless the operator has set WEREAD_READONLY. A refused write fails with disabled by WEREAD_READONLY; report that limit as policy, and never unset it or retry against another account on the user's behalf.

Session preflight

Before the first authenticated operation, run:

bash
weread-omni --account "$ACCOUNT" doctor --json

Proceed only when the result has ok: true, cli.package: "weread-omni", and auth.status: "authenticated". On an authentication error, require the same cli.package in the JSON error before following its hint. Do not start QR login without user confirmation. Follow the returned account-specific hint; malformed or unreadable state must be corrected or removed first. Retry doctor once with the same account. If it returns non-JSON or names another package, stop and report the path from command -v weread-omni; do not guess another command.

Read workflow

Start with the narrowest read that answers the request. Preserve bookId values from search or shelf results for follow-up commands.

Book metadata, chapter listings, and downloaded public-account articles are served from a local library after the first read, so a repeated read can return a stored copy rather than a fresh one. If a result looks out of date, say so and offer --refresh to refetch and replace it; --no-library skips the library entirely for one command. Never present stored content as freshly fetched.

bash
weread-omni --account "$ACCOUNT" public-accounts read-article 'https://mp.weixin.qq.com/s/ARTICLE' --json
weread-omni --account "$ACCOUNT" search books "三体" --json
weread-omni --account "$ACCOUNT" search books "刘慈欣" --scope 6 --json
weread-omni --account "$ACCOUNT" book info BOOK_ID --json
weread-omni --account "$ACCOUNT" shelf sync --count 20 --json
weread-omni --account "$ACCOUNT" public-accounts subscriptions --count 20 --json
weread-omni --account "$ACCOUNT" public-accounts articles MP_WXS_123 --count 20 --json
weread-omni --account "$ACCOUNT" public-accounts resolve-article 'https://mp.weixin.qq.com/s/ARTICLE' --json
weread-omni --account "$ACCOUNT" notes notebooks --count 10 --json
weread-omni --account "$ACCOUNT" notes recent --count 10 --json
weread-omni --account "$ACCOUNT" notes mine BOOK_ID --count 10 --json
weread-omni --account "$ACCOUNT" notes underlines BOOK_ID CHAPTER_UID --json
weread-omni --account "$ACCOUNT" notes read-reviews BOOK_ID CHAPTER_UID --reviews '[{"range":"393-401","count":10}]' --json
weread-omni --account "$ACCOUNT" review single REVIEW_ID --json
weread-omni --account "$ACCOUNT" read-data detail --mode weekly --json
weread-omni --account "$ACCOUNT" discover recommend --count 10 --json
weread-omni --account "$ACCOUNT" ai ask-book BOOK_ID "Summarize the central argument" --json

search books defaults to --scope 10 for ebooks. Choose the scope from the request: 0 all, 10 ebooks, 16 web fiction, 14 audio, 6 authors, 12 full text, 13 booklists, 2 public accounts, or 4 articles. Do not use scope 10 for every intent. When hasMore is 1, pass the last result's searchIdx as --max-idx; a page is not the complete result set.

Use only the cursor that belongs to the command:

  • For shelf sync, pass nextOffset as --offset.
  • For public-accounts articles, omit --offset on the first call, or pass a previous synckey as --synckey for a delta refresh. Never combine the two. If the response has nextOffset, pass it as --offset; stop when it is absent.
  • For notes notebooks, pass the final book's sort as --last-sort.
  • notes recent is a bounded account-wide snapshot; it has no page cursor.
  • For notes best and review list, add the returned item count to the previous --max-idx.
  • Use synckey only to refresh previously fetched data. It is not a page cursor.

Preserve every upstream hasMore and cursor exactly; do not infer completion from a short result or from a missing hasMore.

shelf sync returns a compact page by default. Use --full only when the user needs exact upstream sync fields; it cannot be combined with --count or --offset.

Use book detail for product images and other books by the same author or rightsholder. It returns six entries per related catalog by default; use --count (1-12) when a smaller result is enough. Use book chapters or book progress for those specific views. book chapters returns the table of contents, where each entry carries the chapterUid that the notes and review commands use to address a position in a book. Use notes bookmarks, notes best, or notes underlines for those note types. To read thoughts under a popular highlight, take its chapterUid and range from notes best, call notes read-reviews, then use review single when the user wants one thought in full. Use review list, discover similar, and ai suggest for reviews, related books, and suggested questions.

For a supplied article URL, use public-accounts read-article URL --json directly; no public-account search or subscription is needed. resolve-article only returns an ID and review single may only contain metadata or an abstract. Use the returned markdown or contentHtml, and cite sourceUrl. A cache hit is marked fromCache: true, with cachedAt and a null fetchedAt. status: readable does not independently establish completeness (completeness: unverified); inspect the article structure and ending when completeness matters. partial means only a preview was obtained. An unavailable body exits nonzero with JSON diagnostics on stderr; never summarize its metadata as though it were the body.

For public-account discovery and subscription, follow this sequence:

  1. Search with weread-omni --account "$ACCOUNT" search books KEYWORD --scope 2 --json.
  2. Show the matches and have the user choose the exact MP_WXS_<digits> ID. Never auto-select or auto-subscribe the first fuzzy match.
  3. Subscribe only when requested, then use public-accounts subscriptions, articles, feed, or export.
  4. Unsubscribe only after confirming the exact account.
bash
weread-omni --account "$ACCOUNT" public-accounts subscribe MP_WXS_123 --json
weread-omni --account "$ACCOUNT" public-accounts feed MP_WXS_123 --format rss --out /private/path/feed.xml --json
weread-omni --account "$ACCOUNT" public-accounts feed subscriptions --format json --out /private/path/feed.json --json
weread-omni --account "$ACCOUNT" public-accounts export MP_WXS_123 --out /private/path/archive --json
weread-omni --account "$ACCOUNT" public-accounts unsubscribe MP_WXS_123 --yes --json

Feed and export outputs contain at most 20 items by default and 100 maximum. For aggregate feeds, this is a final output limit; collection may retrieve up to that many candidates per account. CLI output paths are never overwritten. An export is complete only when manifest.json exists; report an incomplete path rather than deleting it. Article retrieval makes one bounded direct retrieval attempt from a validated HTTPS mp.weixin.qq.com/s source URL using WeRead's E-Ink User-Agent. The attempt may follow at most three validated redirects and sends no WeRead authentication headers to that host. If a diagnostic reports SOURCE_CLOUDFLARE_CHALLENGE or SOURCE_WECHAT_CHALLENGE, tell the user to open its sourceUrl in a browser. Do not claim the archive is complete or imply that the CLI can execute JavaScript challenges or solve CAPTCHAs.

For a question about a book's substance, prefer ai ask-book: the server answers it directly, with no need to pull anything down first.

Show full SKILL.md (439 more words)Show less

Account changes

Run a write only when the user explicitly requests that change. State the target before acting. Do not infer consent from a prior read.

bash
weread-omni --account "$ACCOUNT" shelf add BOOK_ID --json
weread-omni --account "$ACCOUNT" review add BOOK_ID "A concise review" --star 100 --json
weread-omni --account "$ACCOUNT" review edit REVIEW_ID "Replacement text" --json
weread-omni --account "$ACCOUNT" import book /absolute/path/to/book.epub --json

import book accepts an EPUB, PDF, MOBI, TXT, or AZW3 file the user already has; it uploads that file to the user's own WeRead account.

Shelf state changes use the positive state by default and a negated option for the reverse:

bash
weread-omni --account "$ACCOUNT" shelf pin BOOK_ID --json
weread-omni --account "$ACCOUNT" shelf pin BOOK_ID --no-top --json
weread-omni --account "$ACCOUNT" shelf set-private BOOK_ID --json
weread-omni --account "$ACCOUNT" shelf set-private BOOK_ID --no-secret --json
weread-omni --account "$ACCOUNT" shelf mark-finished BOOK_ID --json
weread-omni --account "$ACCOUNT" shelf mark-finished BOOK_ID --no-finished --json
weread-omni --account "$ACCOUNT" shelf mark-reading BOOK_ID --json
weread-omni --account "$ACCOUNT" shelf mark-reading BOOK_ID --no-reading --json

Review ratings use the protocol scale 20, 40, 60, 80, or 100.

Add a highlight (划线) with the chapter, character range, and highlighted text:

bash
weread-omni --account "$ACCOUNT" notes add-bookmark BOOK_ID CHAPTER_UID "777-778" "the highlighted text" --json
weread-omni --account "$ACCOUNT" notes update-bookmark BOOKMARK_ID --style 2 --color-style 5 --json

Deletion is destructive. Confirm the exact target with the user, then include --yes; never retry a failed write blindly.

bash
weread-omni --account "$ACCOUNT" shelf delete BOOK_ID --yes --json
weread-omni --account "$ACCOUNT" notes remove-bookmark BOOKMARK_ID --yes --json
weread-omni --account "$ACCOUNT" review delete REVIEW_ID --yes --json
weread-omni --account "$ACCOUNT" public-accounts unsubscribe MP_WXS_123 --yes --json

Result handling

  • On success, report the useful fields and retain relevant IDs for follow-ups.
  • A response may omit fields or return fewer items than requested. Use only values actually returned; do not synthesize a missing field or describe it as zero/empty.
  • Use totalCount from the compact shelf response. In a --full response, the total is books.length + albums.length + (non-empty mp ? 1 : 0). Do not answer from bookCount alone.
  • A notebook's total notes are reviewCount + noteCount + bookmarkCount. noteCount is highlights only, and reviewCount already includes personal thoughts/reviews. Exportable content requires both notes bookmarks and notes mine; highlight text is returned, but type-0 bookmark text is not.
  • Treat every reading-duration field as seconds except preferAuthor[].readTime, which is already formatted text. Reading progress is an integer percentage: 1 means 1%, and only 100 means finished.
  • Public review ratings use 20, 40, 60, 80, 100 for one through five stars. Personal-note review ratings may instead be 0-5 or -1 for none.
  • Use a returned deepLink directly as the open link. Never construct one when the response omits it. Convert Unix timestamps to dates before presenting them.
  • On { "error": ... }, explain the error without guessing or silently switching commands.
  • errCode -2010 and -2013 are the server's own rate-limit and entitlement decisions. Report them as such rather than retrying in a loop or trying a different command to work around them.
  • Paginate only when the user needs more results. Continue only when the backend returns the required next-page signal (hasMore=1, nextOffset, or the command's documented cursor). If the response omits a completion signal, report that the available page is bounded rather than claiming it is the complete result set.
  • Keep source data in Chinese when appropriate; translate or summarize only when requested.
  • Write Chinese responses as original Chinese, not as sentence-by-sentence translations from English. Prefer short, concrete, idiomatic wording; state what the user can do before commands and constraints; retain established technical names when they are clearer; and remove translationese or generic AI marketing language before replying.

© teng-lin, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file in skills/weread of teng-lin/weread-omni.

  • SKILL.md
  • agents/openai.yaml

Open the folder on GitHubat commit 88bd2e0

Compare with similar skills

WeRead Bookshelf and Notes next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

WeRead Bookshelf and Notes compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
WeRead Bookshelf and Notes this skillteng-lin/weread-omni660—~3.3kAutomated safety check: PassMIT
Greenbubbles Personal Memorybojieli/greenbubbles365—~669Automated safety check: PassMIT
Obsidian CLIpablo-mano/Obsidian-CLI-skill450—~3.2kAutomated safety check: PassNone
Daily Notes Workflowballred/obsidian-claude-pkm1.9k—~2kAutomated safety check: PassMIT
Tencent ima Knowledge Base Readerzj-unicom-ai/UniEmployee360—~1kAutomated safety check: PassMIT
Xiaohongshu Post Extractorchenxiachan/xhs-claude-skills421—~1.5kAutomated safety check: WarnMIT

Similar skills

  • Greenbubbles Personal Memory

    bojieli/greenbubbles

    Build or revise private, cited Markdown notes from the user's WeChat history in the current agent session.

    365 GitHub stars~669 tokensUpdated 8 days ago
    Knowledge ManagementAuto-check passed
  • Obsidian CLI

    pablo-mano/Obsidian-CLI-skill

    Lets the agent read, write, search and tidy an Obsidian vault directly through the official Obsidian command-line interface.

    450 GitHub stars~3.2k tokensUpdated 7 mo ago
    Knowledge ManagementAuto-check passed
  • Daily Notes Workflow

    ballred/obsidian-claude-pkm

    Creates today's daily note in an Obsidian vault and guides morning, midday and evening routines for planning, task review and reflection.

    1.9k GitHub stars~2k tokensUpdated 7 mo ago
    Knowledge ManagementAuto-check passed
  • Tencent ima Knowledge Base Reader

    zj-unicom-ai/UniEmployee

    Exports the article list and original article text from a Tencent ima knowledge base through a logged-in Chrome session, using browser automation.

    360 GitHub stars~1k tokensUpdated 2 days ago
    Knowledge ManagementAuto-check passed
  • Xiaohongshu Post Extractor

    chenxiachan/xhs-claude-skills

    Pulls a Xiaohongshu post's text, image text and video subtitles or transcript into a Markdown note saved in an Obsidian folder, in Chinese.

    421 GitHub stars~1.5k tokensUpdated 1 mo ago
    Knowledge ManagementAuto-check: warnings
  • Daily

    kv0906/pm-kit

    Log standup update with keyword detection. An agent skill from kv0906/pm-kit.

    138 GitHub stars~749 tokensUpdated today
    Knowledge ManagementAuto-check passed

Works with

Questions about WeRead Bookshelf and Notes

What does WeRead Bookshelf and Notes do?

Searches books, manages the shelf, reads public-account articles and reads or writes highlights and notes in WeRead through the weread-omni CLI. The agent talks to WeRead only through the weread-omni command-line tool, always with --json, and summarizes the parsed result. It picks one account alias for the whole session and never switches after a failure.

When should I use WeRead Bookshelf and Notes?

WeRead Bookshelf and Notes fits situations like: looking up a book or author on WeChat Reading; reviewing or adding highlights and notes on a book on your WeRead shelf; reading a public-account article through WeRead; checking reading statistics or recommendations from your WeRead account.

How do I install WeRead Bookshelf and Notes in Claude Code?

Run `npx skills add teng-lin/weread-omni --skill weread -a claude-code`. Or copy the skill folder (skills/weread in teng-lin/weread-omni) into .claude/skills/weread in your project. Claude Code loads it when a task matches its description.

How do I install WeRead Bookshelf and Notes in Codex?

Run `npx skills add teng-lin/weread-omni --skill weread -a codex`. Or copy the skill folder (skills/weread in teng-lin/weread-omni) into .agents/skills/weread in your project. Codex loads it when a task matches its description.

Can I use WeRead Bookshelf and Notes in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add teng-lin/weread-omni --skill weread -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/weread, .gemini/skills/weread, .github/skills/weread and .opencode/skills/weread in your project.

What does WeRead Bookshelf and Notes need to run?

SKILL.md names no scripts, command-line tools or credentials: WeRead Bookshelf and Notes is instructions for the agent only. Our summary lists: The weread-omni CLI installed; A logged-in WeRead account.

Does WeRead Bookshelf and Notes access the network?

SKILL.md names 1 domain. In commands or code: mp.weixin.qq.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is WeRead Bookshelf and Notes safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does WeRead Bookshelf and Notes use?

WeRead Bookshelf and Notes is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does WeRead Bookshelf and Notes use?

About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to WeRead Bookshelf and Notes?

Skills that share tags, products or a category with WeRead Bookshelf and Notes: Greenbubbles Personal Memory (bojieli/greenbubbles, 365 stars), Obsidian CLI (pablo-mano/Obsidian-CLI-skill, 450 stars), Daily Notes Workflow (ballred/obsidian-claude-pkm, 1.9k stars) and Tencent ima Knowledge Base Reader (zj-unicom-ai/UniEmployee, 360 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains WeRead Bookshelf and Notes?

teng-lin (a GitHub user) maintains it in teng-lin/weread-omni, which has 660 GitHub stars. The repository was last updated on September 14, 2026.

Source: teng-lin/weread-omni on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.