pp-substack について
Agent が Printing Press CLI を通じて Substack の出版物を運用するためのスキルです。下書きや予約投稿、分析に加え、ローカル SQLite による成長分析、効果測定、複数出版物間の作業を扱います。
主な機能
- 01下書きの作成・公開・予約
- 02Notes の投稿と予約
- 03成長とコンテンツ実績の分析
- 04同期済み投稿とコメントの検索
- 05出版物と購読者の比較
- 06推薦交換パートナーの特定
活用シーン
- 01間隔ガード付きの Notes 予約
- 02Notes 投稿後の購読者増加の測定
- 03効果的な投稿形式やフックの発見
- 04複数出版物間のプロモーション調整
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mvanhorn/ printing-press-library --skill pp-substackインストール後、Claude Code で/pp-substackを入力して読み込まれたか確認します。
詳細
Substack — Printing Press CLI
前提条件:CLI をインストールする
このスキルは substack-pp-cli バイナリを使用します。このスキルのコマンドを実行する前に、CLI がインストールされていることを必ず確認してください。 見つからない場合は、先にインストールします。
- Printing Press のインストーラーを使ってインストールします。バイナリの既定のインストール先は、macOS/Linux では
$HOME/.local/bin、Windows では%LOCALAPPDATA%\Programs\PrintingPress\binです。npx -y @mvanhorn/printing-press-library install substack --cli-only - 確認します:
substack-pp-cli --version - このスキルを実行するエージェント/ランタイムから、報告されたインストール先ディレクトリに
$PATHを通します。
npx によるインストールに失敗した場合(Node がない、オフラインなど)は、Go を直接インストールする方法に切り替えてください(Go 1.26.6 以降が必要です)。
go install github.com/mvanhorn/printing-press-library/library/media-and-entertainment/substack/cmd/substack-pp-cli@latest
インストール後に --version が「command not found」と報告する場合、ランタイムからバイナリのディレクトリを $PATH 経由で参照できていません。確認に成功するまで、スキルのコマンドを実行しないでください。
この CLI を使用する場面
エージェントが Substack の出版物をエンドツーエンドで運用する必要がある場合に、この CLI を使用してください。定期的な Notes の投稿、長文の下書きと公開、ニッチなライターとの交流、相互紹介のパートナー探し、実際に購読者を増やしたコンテンツの測定などに対応します。エージェント向けのネイティブな機能(--json、--select、--dry-run、型付き終了コード)、オフライン優先の分析(すべての結合処理を SQLite 上でローカル実行)、または他のツールでは公開されていないライター向け機能が必要な場合は、WriteStack/StackSweller よりも適しています。エンゲージメント関連の書き込み操作(engage like、engage restack、engage restack-with-comment)は既定で curl 相当のコマンドを表示し、実際に実行するのは --send を指定した場合だけです。curl の表示は事前確認として扱い、実際の操作ではありません。
独自の機能
これらの機能は、この API を扱う他のツールでは利用できません。
蓄積されるローカル状態
-
growth attribution— 投稿したすべての Note と、その後の24時間以内に実際に獲得した有料・無料の購読者を結び付けるため、どのコンテンツが成長につながったのかを推測する必要がなくなります。エージェントが翌週に繰り返す Note の形式を決める必要がある場合、一般的な統計情報の呼び出しではなく、こちらを選んでください。
substack-pp-cli growth attribution --days 30 --json --select rank,note_id,note_excerpt,subs_acquired,paid_subs_acquired -
engage reciprocity— 交流したライターごとのギブ/テイクの差を確認できます。再投稿やコメントを返してくれる人と、あなたの投稿にひそかにただ乗りしている人が分かります。相互紹介のパートナーへの投資を続けるかどうかをエージェントが判断する際に使用します。関係が疎遠になる前に、その状況を把握できます。
substack-pp-cli engage reciprocity --days 30 --agent --select handle,outgoing,incoming,net,drift
アルゴリズムを考慮した自動化
-
notes schedule --guard— 前回の自身の Note から30分未満の間隔で投稿する Note、または時間帯のローテーションに違反する Note の実行(またはキューへの追加)を拒否します。診断情報を JSON 形式で返し、型付き終了コード 2 で終了します。キューを一度にまとめて投稿し、エージェントが誤って自分のリーチを損なうのを防ぎます。
substack-pp-cli notes schedule --at 2026-05-10T13:00:00Z --body "hook line\n\nbody" --guard --json -
growth best-time— 選択した成長指標(有料購読者、いいね、再投稿、コメント)について、曜日 × 時間帯の組み合わせを上位からランキング表示します。単一の平均値ではありません。翌日の Notes をいつ投稿するか選ぶエージェントは、推測するのではなく、最適化したい目標を指定できます。
substack-pp-cli growth best-time --days 90 --for-goal subs --json --select day_of_week,hour,rate,sample_size
パターン分析
-
discover patterns— ニッチな分野で実際に高く評価されるフックのパターン(好奇心を誘うコロン、3文の構成、ダッシュによる捉え直し、疑問形の書き出し)を、再投稿率/コメント率とともに機械的に抽出します。Note の下書きを作成するエージェントは、生成を始める前に、このニッチ分野で現在どのフックの形が優れているかを確認できます。
substack-pp-cli discover patterns --niche productivity --sort restacks --since 14d --agent --select pattern,sample_count,avg_restacks,avg_comments,top_example -
voice fingerprint— 文の長さ、ダッシュの使用率、コロンを使ったフックの割合、フック行の比率、語彙の独自性など、任意のハンドルの声の特徴を測定します。--diff を使えば、別のライターとの比較もできます。ゴーストライターのクライアント向けに Note の下書きを作成するエージェントは、出力がクライアントの声の範囲に収まっていることを確認できます。
substack-pp-cli voice fingerprint --handle maya --diff devon --json --select metric,self,other,delta
ネットワーク活用
-
recs find-partners— フォロー相手とおすすめグラフ全体の相互重複密度に基づいて、Substack のおすすめ交換候補となる出版物をスコアリングします。週次の相互プロモーションを行うエージェントは、手当たり次第に売り込む代わりに候補を順位付けできます。
substack-pp-cli recs find-partners --my-pub on --top 20 --json --select rank,handle,pub,overlap_score,shared_followees -
growth pod— ハンドルのリストを指定すると、メンバー×メンバーのエンゲージメントマトリクスを出力します。全ペア間における過去 30 日分のリストック、コメント、いいねが対象です。相互扶助ポッドを運営するエージェントは、スプレッドシートを使わずに、誰が貢献しているか、誰がただ乗りしているかを把握できます。
substack-pp-cli growth pod --members maya,devon,priya,jordan --days 30 --json
詳細なフィールド制御による執筆
-
drafts create/drafts update— Substack の下書き API 全体に対応します。タイトル、サブタイトル、本文(Markdown は自動的に ProseMirror に変換)、section-id、タイプ(ニュースレター/ポッドキャスト/動画/スレッド)、対象読者、署名者、SEO メタデータ、ソーシャルタイトル、カバー画像、コメント設定、ポッドキャスト/動画 URL、公開範囲の切り替えなど、30 以上のフラグを利用できます。ウェブエディターと格闘せずに、エージェントがフィールド単位で制御できる唯一の執筆方法です。調査の要約、翻訳文、ゴーストライティングした記事など、構造化データからエージェントが長文記事を作成し、ペイウォール、SEO、セクションの配置を 1 つのコマンドで設定する必要がある場合に使用します。
export SUBSTACK_PUBLICATION=mypub substack-pp-cli drafts create --title "Why X matters" \ --body-file ./post.md --audience only_paid \ --seo-title "X explained" --seo-description "How X affects Y" \ --cover-image https://substackcdn.com/.../cover.jpg --json
ポートフォリオと分析(ローカルの列指向ストア)
これらのコマンドは、portfolio sync によってデータが入力されたローカルの SQLite ストアを読み取ります。ワークフローは次のとおりです。
auth login --chrome → export SUBSTACK_PUBLICATION=<your-pub> → portfolio sync → portfolio / posts best / grep / subs churn / …
カスタムドメインの出版物にも対応しています。auth login --chrome を実行すると、カスタムドメインから Creator セッションの Cookie が自動的に取得されます。
-
portfolio sync— データを取り込むコマンドです。所有するすべての出版物を検出し、投稿、購読者、下書きをローカルの列指向ストアに書き込みます。portfolio、posts best、grep、schedule board、subs churn、subs cross-sellで複数出版物のデータを取得するには、事前に実行しておく必要があります。export SUBSTACK_PUBLICATION=mypub substack-pp-cli portfolio sync --json -
portfolio— 所有するすべての出版物のステータスを 1 画面に表示します。購読者数、有料購読者数、公開済み投稿数、保留中の下書き数、次の予約投稿を確認できます。タブの切り替えや CSV のエクスポートは不要です。substack-pp-cli portfolio --json -
posts best— 期間を指定して、閲覧数、いいね数、コメント数、リストック数で投稿を順位付けします。--cross-pubを指定すると、すべての出版物を集計します。新しい出版物に複製する投稿や、週刊ニュースレターで紹介する投稿をエージェントが選ぶ際に使用します。
substack-pp-cli posts best --by restacks --window 30d --cross-pub --json substack-pp-cli posts best --by views --limit 5 --publication mypub-en -
posts twin <slug> --to <pub>— 公開済みの投稿を、所有する別の出版物に下書きとして複製します。ペイウォールのマーカーとセクションの対応関係を保持し、画像を対象の CDN に再アップロードします。substack-pp-cli posts twin my-en-slug --to mypub-de --dry-run --json substack-pp-cli posts twin my-en-slug --to mypub-de -
posts pair <en> <de>/posts pairs [--missing]— EN↔DE の投稿ペアをローカルテーブルに記録します。--missingは、対応する複製が記録されていない投稿を一覧表示します。その一覧をposts twinに渡すと、未作成の翻訳を用意できます。substack-pp-cli posts pair my-en-slug my-de-slug substack-pp-cli posts pairs --missing --publication mypub-en --json -
grep <query>— 同期済みの投稿、ノート、コメントを対象に、FTS5 全文検索を行います。bm25 による順位付けで、抜粋とソース URL を返します。--scope、--publication、--sinceで絞り込むこともできます。substack-pp-cli grep "yield curve" --json substack-pp-cli grep "rate hike" --scope posts --publication mypub-en --since 2024-01-01 -
schedule board— 今後 N 日間における、所有するすべての出版物の予約投稿を ASCII カレンダーで表示します。複数出版物の編集予定を 1 画面で確認できます。substack-pp-cli schedule board --days 30 --json -
subs churn— 購読者のスナップショットを比較します。新たに購読した人、購読を解除した人、無料から有料にアップグレードした人、有料から無料にダウングレードした人を確認できます。まず--snapshotを少なくとも 1 回実行して、比較の基準を作成してください。substack-pp-cli subs churn --snapshot substack-pp-cli subs churn --since 7d --json --publication mypub-paid -
subs cross-sell— 所有する出版物の少なくとも 1 つで有料購読している一方、他の出版物では無料購読または未購読のメールアドレスを一覧表示します。ローカルストアに所有する出版物が 2 つ以上必要です。Substack の UI にはないクロスセル用リストを取得できます。substack-pp-cli subs cross-sell --json --limit 100
コマンドリファレンス
categories — Substack 全体のカテゴリ一覧です。カルチャー、テクノロジー、食などが含まれます。
substack-pp-cli categories list— Substack のすべてのカテゴリを一覧表示しますsubstack-pp-cli categories list-publications— 指定したカテゴリの出版物を一覧表示します
comments — 長文投稿へのコメント(Notes とは別です)
substack-pp-cli comments get— ID を指定して単一のコメントを取得します(Note と同じ形式です。Substack ではこれらを一律に扱います)substack-pp-cli comments list— 投稿へのコメントを一覧表示します
discover — 探索機能 — パブリケーションの検索、埋め込みメタデータの取得
substack-pp-cli discover— クエリで Substack のパブリケーションを検索します
drafts — 下書きの CRUD、公開、予約投稿
substack-pp-cli drafts create— 新しい下書きを作成しますsubstack-pp-cli drafts delete— 下書きを削除しますsubstack-pp-cli drafts get— ID を指定して下書きを取得しますsubstack-pp-cli drafts list— 下書きを一覧表示しますsubstack-pp-cli drafts prepublish— 公開前に下書きを検証し、公開を妨げる項目を返しますsubstack-pp-cli drafts publish— 下書きをすぐに公開しますsubstack-pp-cli drafts schedule— 下書きの公開を予約します(または--post-date nullで予約を解除します)substack-pp-cli drafts update— 既存の下書きを更新します
feed — パブリケーションの RSS フィード
substack-pp-cli feed— RSS XML フィードを返します(XML を返します。ダンプするには--rawを使用します)
images — 画像のアップロード(マルチパートではなく、データ URI の JSON)
substack-pp-cli images— 画像をアップロードし、CDN URL を返します。本文はデータ URI の JSON です。
inbox — 認証済み読者フィード(ホームフィード)— 現在のユーザー向けの Notes と投稿
substack-pp-cli inbox home— 認証済みホームフィードsubstack-pp-cli inbox reader-posts— 現在のユーザー向けの投稿フィード
reader — 読者向けコマンド — サブスクリプション、フォロー、リーディングリスト
substack-pp-cli reader subscriptions— 読者として購読しているすべてのパブリケーションを一覧表示します。フラグ:--filter paid|free、--cursor、--limit。ストアのリソースreaderはsyncによって(およびライブ読み取り時の書き込みスルーによって)データが入力されるため、--data-source localと自動ネットワークフォールバックが機能します。
notes — Substack Notes — 短文投稿(Substack では内部的に Notes をコメントとして扱います)
substack-pp-cli notes create— 新しい Note を投稿します(POST /comment/feed)。本文は ProseMirror JSON です。substack-pp-cli notes get— ID を指定して単一の Note を取得しますsubstack-pp-cli notes list-by-profile— プロフィールの Notes を一覧表示します(カーソルページネーション)substack-pp-cli notes reply— 既存の Note に返信します(parent_id + ProseMirror の本文)
grep — 同期済みの投稿、Notes、コメントを対象とした全文検索
substack-pp-cli grep <query>— FTS5 で検索し、bm25 による順位付けを行って、スニペットとソース URL を返します。フラグ:--scope posts|notes|comments|all、--publication、--since、--limit
portfolio — 複数のパブリケーションのステータスダッシュボードとデータ登録
substack-pp-cli portfolio— 所有するすべてのパブリケーションのステータスを1画面に表示します(購読者数、有料購読者数、投稿、下書き、次回の予約投稿)。最初にportfolio syncを実行してください。substack-pp-cli portfolio sync— 所有するすべてのパブリケーションを検出し、ローカルの列指向ストアにデータを登録します(パブリケーション/投稿/購読者/下書き)。すべてのパブリケーション横断分析コマンドを実行するための前提条件です。
posts — 特定のパブリケーションの長文投稿とアーカイブ
substack-pp-cli posts archive— パブリケーションの投稿の公開アーカイブsubstack-pp-cli posts best— キャッシュされた投稿をエンゲージメント指標で順位付けします(--by views|likes|comments|restacks、--window、--cross-pub、--limit、--publication)substack-pp-cli posts get-by-slug— URL スラッグを指定して公開済みの投稿を取得しますsubstack-pp-cli posts list-published— パブリケーションの公開済み投稿を一覧表示します(認証が必要です)substack-pp-cli posts pair <en-slug> <de-slug>— EN↔DE の翻訳ペアをローカルテーブルに記録しますsubstack-pp-cli posts pairs— 記録済みの投稿ペアを一覧表示します。--missingは対応する投稿がない投稿を表示し、--publicationは1つのパブリケーションに絞り込みますsubstack-pp-cli posts ranked-authors— パブリケーションの著者を順位付けして一覧表示しますsubstack-pp-cli posts twin <slug> --to <pub>— 公開済みの投稿を、所有する別のパブリケーションに下書きとして複製します(画像を再アップロードし、有料記事のマーカーを保持します)
profiles — Substack のプロフィール — 自分と他のライターのプロフィール
substack-pp-cli profiles from-linkedin— LinkedIn のハンドルから Substack プロフィールを検索しますsubstack-pp-cli profiles get-by-handle— ハンドルで公開プロフィールを取得します(例:mvanhorn)substack-pp-cli profiles get-by-id— 数値のユーザー ID で公開プロフィールを取得しますsubstack-pp-cli profiles handle-options— 現在のユーザーが利用できるハンドル候補を表示しますsubstack-pp-cli profiles posts— 著者がすべてのパブリケーションで公開した投稿を表示しますsubstack-pp-cli profiles self— 認証済みユーザーのプロフィールを取得します
recommendations — Substack のおすすめ — アウトバウンド(自分がおすすめするパブリケーション)
substack-pp-cli recommendations <publication_id>— あるパブリケーションがおすすめするパブリケーションの一覧を表示します
sections — パブリケーションのセクション(ニュースレターには複数のセクションがある場合があります)
substack-pp-cli sections— セクションとサブスクリプションの一覧を表示します
settings — アカウント設定と接続確認(doctor で使用)
substack-pp-cli settings get— アカウント設定を取得しますsubstack-pp-cli settings ping— 接続確認(doctor が使用する非破壊的な PUT)
schedule — パブリケーションをまたいだ編集スケジュール管理
substack-pp-cli schedule board— 所有するすべてのパブリケーションで予定されている投稿について、今後 N 日間(--days)の ASCII カレンダーを表示します
subs — 購読者数、解約数の差分、クロスセル分析
substack-pp-cli subs authors— パブリケーションの署名付き著者を一覧表示しますsubstack-pp-cli subs churn— 購読者のスナップショットを比較します(新規/購読解除/アップグレード/ダウングレード)。--snapshotでベースラインを作成し、次に--sinceで差分を比較します。フラグ:--publication、--since、--snapshotsubstack-pp-cli subs count— 購読者数を取得します(ローンチチェックリストのペイロードから読み取ります)substack-pp-cli subs cross-sell— あるパブリケーションでは有料購読しているものの、他では無料または未登録のメールアドレスを表示します(ローカルストアに所有するパブリケーションが 2 つ以上必要です)。フラグ:--limit
tags — 投稿タグ
substack-pp-cli tags create— 新しいタグを作成しますsubstack-pp-cli tags list— パブリケーションのすべてのタグを一覧表示します
鮮度契約
この CLI は、登録済みのストアを利用する読み取りコマンドパスに限り、鮮度を一定の範囲で管理します。--data-source auto モードでは、これらのパスは sync_state を確認し、ローカルデータを読み取る前に範囲を限定した更新を実行する場合があります。--data-source local では更新は行われません。--data-source live では API から読み取り、ローカルストアは変更しません。ソース選択を変えずに鮮度フックをスキップするには、SUBSTACK_NO_AUTO_REFRESH=1 を設定してください。
対象のパス:
substack-pp-cli categoriessubstack-pp-cli categories getsubstack-pp-cli categories listsubstack-pp-cli categories searchsubstack-pp-cli draftssubstack-pp-cli drafts getsubstack-pp-cli drafts listsubstack-pp-cli drafts searchsubstack-pp-cli inboxsubstack-pp-cli inbox getsubstack-pp-cli inbox listsubstack-pp-cli inbox searchsubstack-pp-cli inbox-postssubstack-pp-cli inbox-posts getsubstack-pp-cli inbox-posts listsubstack-pp-cli inbox-posts searchsubstack-pp-cli postssubstack-pp-cli posts getsubstack-pp-cli posts listsubstack-pp-cli posts searchsubstack-pp-cli posts-publishedsubstack-pp-cli posts-published getsubstack-pp-cli posts-published listsubstack-pp-cli posts-published searchsubstack-pp-cli posts-rankedsubstack-pp-cli posts-ranked getsubstack-pp-cli posts-ranked listsubstack-pp-cli posts-ranked searchsubstack-pp-cli profilessubstack-pp-cli profiles getsubstack-pp-cli profiles listsubstack-pp-cli profiles searchsubstack-pp-cli readersubstack-pp-cli reader subscriptionssubstack-pp-cli sectionssubstack-pp-cli sections getsubstack-pp-cli sections listsubstack-pp-cli sections searchsubstack-pp-cli subssubstack-pp-cli subs getsubstack-pp-cli subs listsubstack-pp-cli subs searchsubstack-pp-cli tagssubstack-pp-cli tags getsubstack-pp-cli tags listsubstack-pp-cli tags search
JSON 出力で生成されたプロベナンスエンベロープを使用する場合、鮮度メタデータは meta.freshness に表示されます。これは対象のコマンドパスにおける現在のキャッシュの鮮度を示すものであり、過去データの完全なバックフィルや API 固有のエンリッチメントを保証するものではありません。
適切なコマンドを見つける
やりたいことは分かっていても、どのコマンドを使えばよいか分からない場合は、CLI に直接尋ねてください。
substack-pp-cli which "<capability in your own words>"
which は自然言語での機能クエリを、この CLI の厳選された機能インデックスから最適なコマンドに解決します。終了コード 0 は少なくとも 1 件の一致があることを示します。終了コード 2 は信頼できる一致がないことを示します。その場合は --help を使うか、より絞り込んだクエリを指定してください。
レシピ
毎日の成長ループを始める朝のルーティン
substack-pp-cli growth attribution --days 7 --agent --select rank,note_excerpt,subs_acquired
昨日の Note→sub の成果を表示します。substack-pp-cli engage reciprocity --days 7 --agent と組み合わせると、誰のエンゲージメントがあなたのエンゲージメントに応えているかを確認できます。また、事前に substack-pp-cli sync --since 24h を実行して、ローカルストアを最新の状態に保ちましょう。
ケイデンスガードを使って Note を予約する
substack-pp-cli notes schedule --at 2030-05-13T09:00:00Z --body 'Tuesday hook line' --guard --json
Note をローカルにキューイングします。--guard を指定すると、既存の自分の Note から 30 分以内に投稿される場合、予約を拒否します(型付き終了コード 2 と JSON 診断情報を返します)。--guard を外すか、--send を追加すると、すぐに送信されます。
今週のスワップ相手を見つける
substack-pp-cli recs find-partners --my-pub on --top 5 --json --select rank,handle,pub,overlap_score
オーディエンスの重複度に基づいて候補となる出版物をランク付けします。お好みのアウトリーチ下書きツールにパイプしてください(ランキングは substack-pp-cli が行い、アウトリーチの下書き作成はエージェントのプロンプトに委ねられます)。
ライターの声の特徴を JSON として記録する
substack-pp-cli voice fingerprint --handle alice --diff bob --json
指定したハンドルの機械的な声の指標を取得します。--diff を指定すると、別のライターとの差分も表示されます。JSON は自分で保存してください。エージェントの生成プロンプトに読み込ませることもできます。
--select で深くネストされた Note メタデータを表示する
substack-pp-cli notes get c-12345 --agent --select id,body,attachments.url,attachments.image_url,attachments.published_bylines.name,attachments.published_bylines.handle,context.users.name
Notes のレスポンスは深くネストされています(添付ファイル、署名欄、コンテキストに関連するユーザーなど)。ドット区切りの --select を使ってペイロードを絞り込めば、エージェントが不要な 30KB の JSON の解析にコンテキストを費やさずに済みます。
ポートフォリオ分析ストアを初期化する
substack-pp-cli auth login --chrome
export SUBSTACK_PUBLICATION=mypub
substack-pp-cli portfolio sync --json
substack-pp-cli portfolio --json
ログイン後に一度実行してください。すべての出版物を横断する分析コマンド(posts best、grep、schedule board、subs churn、subs cross-sell)は、portfolio sync がデータを取り込むローカルストアを読み取ります。
SEO とカバー画像を設定してリッチな下書きを公開する
export SUBSTACK_PUBLICATION=mypub
substack-pp-cli drafts create \
--title "The case for X" \
--subtitle "Three reasons it matters now" \
--body-file ./post.md \
--audience only_paid \
--seo-title "Case for X" \
--seo-description "Why X matters for Y" \
--cover-image https://substackcdn.com/.../cover.jpg \
--json
Markdown の本文を Substack の ProseMirror 形式に自動変換します。公開先は $SUBSTACK_PUBLICATION から解決されます。公開投稿にする場合は --audience only_paid を省略してください。
EN のベスト投稿を DE の出版物に複製する
# Sync first so the local store has current posts
substack-pp-cli portfolio sync --json
# Find top post by restacks
substack-pp-cli posts best --by restacks --limit 1 --publication mypub-en --json
# Preview the twin operation, then create the draft
substack-pp-cli posts twin my-en-slug --to mypub-de --dry-run --json
substack-pp-cli posts twin my-en-slug --to mypub-de --json
週間購読者解約ダイジェスト
# Run this weekly (automate with a cron or agent schedule)
substack-pp-cli subs churn --since 7d --json --publication mypub-paid
初回の実行時はベースラインが必要です:substack-pp-cli subs churn --snapshot。その後、--since 7d は指定期間内の直近のスナップショットと比較します。
すべての出版物を横断して全文検索する
substack-pp-cli grep "interest rates" --scope posts --json
substack-pp-cli grep "reader question" --scope notes --since 2025-01-01 --limit 20 --json
認証の設定
Substack ではセッション Cookie(substack.sid)を使用します。現在利用できる方法は auth login --chrome のみです(別名として --browser も使用できます)。ログイン済みの Chrome から pycookiecheat / cookies / cookie-scoop-cli 経由で Cookie を読み取り、OS のキーリングに保存します。パスワードログインや、Cookie を手動で貼り付けるサブコマンドはありません。Cookie の有効期限が切れた場合は、auth login --chrome を再実行してください。
substack-pp-cli doctor を実行して、設定を確認してください。
エージェントモード
任意のコマンドに --agent を追加してください。次のオプションに展開されます:--json --compact --no-input --no-color --yes。
-
パイプ処理に対応 — JSON は stdout に、エラーは stderr に出力されます
-
フィルタリング可能 —
--selectでフィールドを絞り込めます。ドット区切りのパスはネストされた構造をたどり、配列には要素ごとに適用されます。詳細な API の出力でコンテキストを小さく保つために重要です:substack-pp-cli categories list --agent --select id,name,status -
プレビュー可能 —
--dry-runでリクエストを送信せずに表示します -
オフライン利用に対応 — 同期/検索コマンドは、利用可能な場合にローカルの SQLite ストアを使用できます
-
非対話型 — プロンプトは表示されず、すべての入力はフラグで指定します
-
明示的な再試行 — 既存の作成済み項目を成功として扱う場合に限り
--idempotentを使用し、削除対象が見つからない場合を成功として扱う場合に限り--ignore-missingを使用してください
レスポンスエンベロープ
ローカルストアまたは API から読み取るコマンドは、出力を情報源のエンベロープで囲みます:
{
"meta": {"source": "live" | "local", "synced_at": "...", "reason": "..."},
"results": <data>
}
データには .results を、ライブデータかローカルデータかの確認には .meta.source を解析してください。人が読める N results (live) の概要は、stdout が端末であり、機械可読形式のフラグ(--json、--csv、--compact、--quiet、--plain、--select)が設定されていない場合にのみ stderr に出力されます。パイプ処理/エージェントでの利用時と、形式を明示した実行時には、stdout に純粋な JSON が出力されます。
エージェントへのフィードバック
あなた(またはエージェント)がこの CLI の気になる点に気づいたら、記録してください:
substack-pp-cli feedback "the --since flag is inclusive but docs say exclusive"
substack-pp-cli feedback --stdin < notes.txt
substack-pp-cli feedback list --json --limit 10
記録はローカルの ~/.local/share/substack-pp-cli/feedback.jsonl に保存されます。SUBSTACK_FEEDBACK_ENDPOINT が設定され、かつ --send が渡された場合、または SUBSTACK_FEEDBACK_AUTO_SEND=true の場合を除き、POST されることはありません。デフォルトではローカルにのみ保存されます。
バグ報告ではなく、意外に感じたことを書いてください。短く、具体的に、一行で。それが積み重なっていく部分です。
出力の送信先
すべてのコマンドで --deliver <sink> を指定できます。出力は標準出力に加えて、または標準出力の代わりに、指定した送信先に送られます。エージェントはコマンド結果を手動でパイプ処理せずに振り分けられます。使用できる送信先は3種類です:
| 送信先 | 動作 |
|---|---|
stdout | デフォルト。標準出力のみに書き込みます |
file:<path> | 出力を <path> にアトミックに書き込みます(一時ファイルを作成してからリネーム) |
webhook:<url> | 出力本文を URL に POST します(--compact の場合は application/json または application/x-ndjson) |
不明なスキームは、サポート対象の一覧を示す構造化エラーとともに拒否されます。Webhook の送信に失敗すると、ゼロ以外の終了コードが返され、URL と HTTP ステータスが stderr に記録されます。
名前付きプロファイル
プロファイルは、保存したフラグ値のセットで、複数回の実行で再利用できます。スケジュールされたエージェントが毎回、同じ設定で同じコマンドを呼び出す場合に使用します。これは HeyGen の「Beacon」パターンです。
substack-pp-cli profile save briefing --json
substack-pp-cli --profile briefing categories list
substack-pp-cli profile list --json
substack-pp-cli profile show briefing
substack-pp-cli profile delete briefing --yes
明示的に指定したフラグは常にプロファイル値より優先され、プロファイル値はデフォルト値より優先されます。agent-context は available_profiles に利用可能なすべてのプロファイルを一覧表示するため、実行時にプロファイルを調べるエージェントがそれらを検出できます。
終了コード
| コード | 意味 |
|---|---|
| 0 | 成功 |
| 2 | 使用方法のエラー(引数が正しくありません) |
| 3 | リソースが見つかりません |
| 4 | 認証が必要です |
| 5 | API エラー(上流の問題) |
| 7 | レート制限中(待機して再試行してください) |
| 10 | 設定エラー |
引数の解析
$ARGUMENTS を解析します。
- 空、
help、または--help→substack-pp-cli --helpの出力を表示します installで始まる場合 →mcpで終わる場合は MCP のインストール、それ以外の場合は上記の前提条件を参照してください- それ以外 → 直接使用(
--agentを指定して CLI コマンドとして実行)
MCP サーバーのインストール
- MCP サーバーをインストールします。
go install github.com/mvanhorn/printing-press-library/library/media-and-entertainment/substack/cmd/substack-pp-mcp@latest - Claude Code に登録します。
claude mcp add substack-pp-mcp -- substack-pp-mcp - 確認します。
claude mcp list
直接使用
- インストール済みか確認します。
which substack-pp-cli見つからない場合は、インストールを提案します(このスキルの冒頭にある前提条件を参照してください)。 - ユーザーのクエリに最適なコマンドを、上記の固有の機能とコマンドリファレンスから選びます。
--agentフラグを指定して実行します。substack-pp-cli <command> [subcommand] [args] --agent- 曖昧な場合は、サブコマンドのヘルプを確認します。
substack-pp-cli <command> --help