weread について
wereadは、インストール済みのweread-omniコマンドラインからWeReadアカウントを操作するスキルです。読書、検索、ノート、レビュー、アカウント変更に対応し、JSON出力と操作上の制約を備えています。
主な機能
- 01書籍、著者、記事の検索
- 02書籍情報と公式アカウント記事の閲覧
- 03本棚、章、進捗、ノートの確認
- 04レビュー、ブックマーク、本棚状態の管理
- 05公式アカウントのフィードとアーカイブの出力
活用シーン
- 01書名、著者、カテゴリから書籍を検索
- 02読書の進捗や保存したノートを確認
- 03公式アカウントの記事を閲覧・出力
- 04依頼に応じて本棚、レビュー、ブックマークを更新
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ teng-lin/ weread-omni --skill wereadインストール後、Claude Code で/wereadを入力して読み込まれたか確認します。
同梱ファイルagents/openai.yaml
詳細
WeRead
インストール済みの CLI のみをインターフェースとして使用します。常に --json を渡し、成功時の stdout を JSON として解析して、結果をユーザー向けに要約します。終了コードが 0 以外の場合は、stderr の JSON エラーを解析します。認証情報を公開したり、生のトークンを貼り付けたりしないでください。
アカウントの選択
セッションではアカウントを 1 つだけ選び、すべての CLI 呼び出しでそのアカウントを維持します。ユーザーまたはオペレーターが指定したエイリアスを使用してください。どちらからも指定されていない場合は、weread-omni accounts --json に設定済みアカウントがちょうど 1 つ表示される必要があります。以下の例で $ACCOUNT はそのエイリアスを意味します。失敗してもアカウントを切り替えないでください。
オペレーターが WEREAD_READONLY を設定していない限り、書き込みが許可されます。書き込みが拒否されると disabled by WEREAD_READONLY で失敗します。その制限はポリシーとして報告し、解除したり、ユーザーに代わって別のアカウントで再試行したりしないでください。
セッションの事前確認
最初の認証が必要な操作の前に、次を実行します。
weread-omni --account "$ACCOUNT" doctor --json
結果が ok: true、cli.package: "weread-omni"、および auth.status: "authenticated" を含む場合にのみ続行します。認証エラーの場合は、hint に従う前に、JSON エラーに同じ cli.package が含まれていることを確認してください。ユーザーの確認なしに QR ログインを開始しないでください。返されたアカウント固有のヒントに従います。不正な状態や読み取れない状態は、先に修正または削除する必要があります。同じアカウントで doctor を 1 回再試行してください。JSON 以外が返された場合、または別のパッケージ名が示された場合は停止し、command -v weread-omni のパスを報告します。別のコマンドを推測してはいけません。
読み取りワークフロー
リクエストに答えられる範囲で、最も対象を絞った読み取りから始めます。検索結果または本棚の結果に含まれる bookId の値は、後続のコマンドでも保持してください。
書籍のメタデータ、章の一覧、ダウンロード済みの公式アカウント記事は、初回の読み取り後、ローカルライブラリから提供されます。そのため、再度読み取ると、最新の内容ではなく保存済みのコピーが返される場合があります。結果が古いように見える場合は、その旨を伝え、再取得して置き換えるための --refresh を提案してください。--no-library を指定すると、1 回のコマンドでライブラリ全体をスキップできます。保存済みの内容を新たに取得したものとして提示してはいけません。
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 は、電子書籍の場合、デフォルトで --scope 10 を使用します。リクエストに応じてスコープを選択してください。0 はすべて、10 は電子書籍、16 はウェブ小説、14 はオーディオ、6 は著者、12 は全文、13 はブックリスト、2 は公式アカウント、4 は記事です。すべての目的で scope 10 を使用してはいけません。hasMore が 1 の場合は、最後の結果の searchIdx を --max-idx として渡してください。1 ページ分の結果は、結果セット全体ではありません。
コマンドに対応するカーソルのみを使用してください。
shelf syncでは、nextOffsetを--offsetとして渡します。public-accounts articlesでは、最初の呼び出しで--offsetを省略するか、差分更新の場合は以前のsynckeyを--synckeyとして渡します。この 2 つを併用してはいけません。応答にnextOffsetがある場合は、それを--offsetとして渡します。ない場合は停止します。notes notebooksでは、最後の書籍のsortを--last-sortとして渡します。notes recentはアカウント全体を対象とする範囲限定のスナップショットであり、ページカーソルはありません。notes bestとreview listでは、返された項目数を前回の--max-idxに加算します。synckeyは、以前に取得したデータを更新する場合にのみ使用します。ページカーソルではありません。
上流から返された hasMore とカーソルはすべてそのまま保持してください。結果が少ないことや hasMore が欠落していることから、完了を推測してはいけません。
shelf sync はデフォルトでコンパクトなページを返します。ユーザーが上流の同期フィールドを正確に必要とする場合にのみ --full を使用してください。--full は --count または --offset と併用できません。
商品の画像や同じ著者または権利者による他の書籍には、book detail を使用します。関連カタログごとにデフォルトで6件を返します。より少ない件数で十分な場合は --count(1~12)を使用してください。特定の表示には book chapters または book progress を使用します。
book chapters は目次を返します。各項目には、書籍内の位置を指定するためにノートコマンドやレビューコマンドで使用する chapterUid が含まれます。該当するノートの種類には、notes bookmarks、notes best、または notes underlines を使用します。人気のハイライトに付けられた感想を読むには、notes best からその chapterUid と range を取得して notes read-reviews を呼び出し、ユーザーが感想を全文で読みたい場合は review single を使用します。レビュー、関連書籍、質問候補には、それぞれ review list、discover similar、ai suggest を使用します。
指定された記事の URL には、公開アカウントの検索や購読を行わずに、public-accounts read-article URL --json を直接使用します。resolve-article が返すのは ID のみで、review single に含まれるのはメタデータまたは要約だけの場合があります。
返された markdown または contentHtml を使用し、sourceUrl を引用してください。キャッシュがヒットした場合は fromCache: true と示され、cachedAt が設定され、fetchedAt は null になります。status: readable だけでは完全性は確認できません(completeness: unverified)。完全性が重要な場合は、記事の構成と末尾を確認してください。partial はプレビューのみ取得できたことを意味します。本文を取得できない場合は、stderr に JSON 診断情報を出力してゼロ以外の終了コードで終了します。メタデータを本文であるかのように要約してはいけません。
公開アカウントの検索と購読には、次の手順に従います。
weread-omni --account "$ACCOUNT" search books KEYWORD --scope 2 --jsonで検索します。- 該当項目を提示し、正確な
MP_WXS_<digits>ID をユーザーに選んでもらいます。 最初のあいまいな一致を自動選択したり、自動購読したりしてはいけません。 - 依頼された場合にのみ購読し、その後
public-accounts subscriptions、articles、feed、またはexportを使用します。 - 購読解除の前に、対象アカウントが正確に一致していることを確認します。
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
フィードとエクスポートの出力は、デフォルトで最大20件、上限は100件です。集約フィードでは、これは最終出力の上限です。収集時には、アカウントごとに最大でその件数分の候補を取得することがあります。CLI の出力先パスが上書きされることはありません。エクスポートが完了しているのは manifest.json が存在する場合のみです。不完全なパスは削除せず、そのまま報告してください。
記事の取得では、WeRead の E-Ink User-Agent を使用して、検証済みの HTTPS mp.weixin.qq.com/s ソース URL から、回数を制限した直接取得を1回試みます。この試行では、検証済みのリダイレクトを最大3回までたどることがあり、このホストに WeRead の認証ヘッダーを送信することはありません。診断情報に SOURCE_CLOUDFLARE_CHALLENGE または SOURCE_WECHAT_CHALLENGE が含まれる場合は、ブラウザーで sourceUrl を開くようユーザーに伝えてください。アーカイブが完全であると主張したり、CLI が JavaScript チャレンジを実行したり CAPTCHA を解決できるかのように示したりしてはいけません。
書籍の内容に関する質問には、ai ask-book を優先してください。サーバーが直接回答するため、先に何かを取得する必要はありません。
アカウントの変更
書き込み操作は、ユーザーがその変更を明示的に依頼した場合にのみ実行してください。操作の前に対象を伝えてください。以前に読み取りを行ったことから同意を推測してはいけません。
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 では、ユーザーがすでに所有している EPUB、PDF、MOBI、TXT、または AZW3 ファイルを受け付けます。このファイルはユーザー自身の WeRead アカウントにアップロードされます。
本棚の状態を変更する場合、デフォルトでは肯定状態を使用し、反対の状態には否定形のオプションを使用します。
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
レビューの評価には、プロトコルで定められたスケール 20、40、60、80、または 100 を使用します。
章、文字範囲、ハイライトするテキストを指定してハイライト(划线)を追加します。
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
削除は取り消せない操作です。ユーザーに対象を正確に確認してから --yes を指定してください。失敗した書き込みを、確認せずに再試行してはいけません。
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
結果の処理
- 成功した場合は、有用なフィールドを報告し、後続の操作に必要な ID を保持します。
- レスポンスでは、フィールドが省略されたり、要求した数より少ない項目が返されたりする場合があります。実際に返された値だけを使用し、欠落しているフィールドを作り出したり、ゼロ/空として説明したりしないでください。
- コンパクトな棚レスポンスでは
totalCountを使用します。--fullレスポンスの合計はbooks.length + albums.length + (non-empty mp ? 1 : 0)です。bookCountだけを基に回答しないでください。 - ノートブックのノート総数は
reviewCount + noteCount + bookmarkCountです。noteCountはハイライトのみを示し、reviewCountには個人的な感想/レビューがすでに含まれています。エクスポート可能なコンテンツにはnotes bookmarksとnotes mineの両方が必要です。ハイライトのテキストは返されますが、タイプ 0 のブックマークのテキストは返されません。 - 読書時間を示すすべてのフィールドは秒単位として扱います。ただし、
preferAuthor[].readTimeはすでにフォーマット済みのテキストです。読書の進捗は整数のパーセンテージです。1は 1%を意味し、読了を示すのは100のみです。 - 公開レビューの評価には、星 1 つから 5 つに対して
20、40、60、80、100が使われます。個人ノートのレビュー評価は、代わりに0~5、または評価なしを示す-1の場合があります。 - 返された
deepLinkは、そのまま開くリンクとして使用します。レスポンスにない場合、リンクを作成しないでください。提示する前に Unix タイムスタンプを日付に変換します。 { "error": ... }が返された場合は、推測したり、別のコマンドに黙って切り替えたりせず、エラーについて説明します。errCode-2010と-2013は、サーバー独自のレート制限および利用資格に関する判定です。ループで再試行したり、回避のために別のコマンドを試したりせず、その判定として報告します。- ユーザーがより多くの結果を必要とする場合にのみページネーションを行います。バックエンドが必要な次ページのシグナル(
hasMore=1、nextOffset、またはコマンドで定義されたカーソル)を返した場合にのみ続行します。完了を示すシグナルがレスポンスにない場合は、利用可能なページに上限があることを伝え、結果セット全体であるとは断言しないでください。 - 適切な場合は、ソースデータを中国語のまま保持します。翻訳や要約は、依頼された場合にのみ行います。
- 中国語で回答する場合は、英語を一文ずつ翻訳するのではなく、自然な中国語で書きます。簡潔で具体的、かつ自然な表現を優先し、コマンドや制約より先にユーザーができることを伝え、より明確な場合は定着した技術用語を維持し、翻訳調や一般的な AI マーケティング表現を取り除いてから回答します。