pp-podcast-goat について
pp-podcast-goatは、ポッドキャストの文字起こしを取得・検索するコマンドラインスキルです。登録済み番組を扱うエージェント向けで、Cookie、無料、有料の順に取得を試し、有料取得前にソースと費用を確認できます。
主な機能
- 01Cookie・無料・有料ソースから文字起こしを取得
- 02エピソードの束ねとローカル引用検索
- 03エピソードのソース比較
- 04ソース・利用可否・概算費用の事前確認
- 05YouTubeの多言語字幕取得
活用シーン
- 01複数エピソードにまたがるテーマの整理
- 02キャッシュ済み文字起こしから発言を検索・引用
- 03有料取得前のソースと費用の確認
MCP 対応
READMEによるとMCPインターフェースを提供し、各コマンドがMCPツールとして公開され、読み取り操作にはmcp:read-onlyが付与されます。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mvanhorn/ printing-press-library --skill pp-podcast-goatインストール後、Claude Code で/pp-podcast-goatを入力して読み込まれたか確認します。
詳細
Podcast GOAT — Printing Press CLI
前提条件:CLI をインストールする
このスキルは podcast-goat-pp-cli バイナリを使用します。**このスキルのコマンドを実行する前に、CLI がインストールされていることを必ず確認してください。**インストールされていない場合は、先にインストールしてください。
- Printing Press インストーラーを使ってインストールします。バイナリの既定のインストール先は、macOS/Linux では
$HOME/.local/bin、Windows では%LOCALAPPDATA%\Programs\PrintingPress\binです。npx -y @mvanhorn/printing-press-library install podcast-goat --cli-only - 確認します:
podcast-goat-pp-cli --version - 報告されたインストールディレクトリが、このスキルを実行するエージェント/ランタイムの
$PATHに含まれていることを確認します。
npx によるインストールに失敗した場合(Node がない、オフラインなど)は、Go を直接インストールしてください(Go 1.26.6 以降が必要です)。
go install github.com/mvanhorn/printing-press-library/library/media-and-entertainment/podcast-goat/cmd/podcast-goat-pp-cli@latest
インストール後に --version が「command not found」と報告する場合、ランタイムからバイナリディレクトリを $PATH 経由で参照できません。確認に成功するまでは、このスキルのコマンドを実行しないでください。
この CLI を使う場面
エージェントが長尺のポッドキャストを読んだり引用したりする必要があり、すでにその番組を購読している場合は、podcast-goat を使用してください。CLI はまず会員向け Cookie を確認し、次に無料の YouTube/Substack/RSS ソースを試します。無料の方法が使えない場合に限り、spoken.md や音声の文字起こしに費用をかけます。MCP インターフェースにより、Claude Code エージェント向けの標準的なポッドキャストアダプターとして機能します。すべてのコマンドが MCP ツールであり、すべての読み取りには mcp:read-only が注記されます。
この CLI を使わない場面
作成、更新、削除、公開、コメント、賛成票の投票、招待、注文、メッセージ送信、予約、購入、またはリモート状態の変更が必要な依頼では、この CLI を起動しないでください。この CLI が提供するのは、調査、エクスポート、同期、分析を行う読み取り専用コマンドです。
起動しない条件
次の場合は podcast-goat を使わないでください。
- **音声のダウンロード。**この CLI が音声をディスクに書き込むことはありません。
yt-dlpまたはお使いのポッドキャストアプリを直接使用してください。 - **ペイウォールの回避。**Cookie 対応アダプターは、すでに購読している番組について、ログイン済みのご自身のセッションを再利用します。ユーザーが料金を支払っていないコンテンツを読むために、この CLI を経由させないでください。
- **LLM による要約や分析。**この CLI は標準の Markdown をエージェントに渡します。要約はここではなく、エージェントが行います。
- **リアルタイムのライブ文字起こし。**音声パイプライン(
whisperapi)は v0.2 で対応予定です。ライブ字幕には、代わりにストリーミング対応の Deepgram クライアントを使用してください。 - **文字起こしのその場での編集や注釈付け。**出力は読み取り専用です。注釈は別の場所に保存してください。
独自の機能
この API のほかのツールでは利用できない機能です。
蓄積される複数ソースのコーパス
-
magic— トピックに関するキャッシュ済みの文字起こしを上位 N 件まとめ、エージェントが1回の呼び出しで要約できる Markdown ファイルにします。chip-supply-chain.fly.dev でのコピー&ペースト作業を、1つのコマンドで置き換えます。複数エピソードを横断した統合が必要な場合に使ってください。
podcast-goat-pp-cli magic 'AI chip supply chain' --out ~/chip-supply-chain.md -
episode get --explain— ドライランにより、どのソース階層が使われるか、先行する階層がスキップされた理由、有料呼び出し前の予想コストを表示します。エージェントが実行前に費用とソースの帰属を確認できます。有料で実行する前に使ってください。
podcast-goat-pp-cli episode get https://www.hubermanlab.com/episode/example --explain -
episode quote— FTS5 によるフレーズ検索で、一致したセグメントと、その前後にある N 件のセグメントを返します。標準の話者形式とディープリンク用のタイムスタンプも保持されます。ポッドキャストの記憶を5秒で検索できます。あいまいな引用を覚えていて、正確な発言を探したい場合に使ってください。
podcast-goat-pp-cli episode quote 'pricing power' -C 3 --json -
source compare— 複数のソースで特定できるエピソードについて、利用可能なすべてのアダプターからデータを取得し、セグメント数、トークン数、話者の種類数、ラベルの信頼度を比較します。無料ソースで十分な場合と、有料ソースが必要な場合を判断できます。上流ソースを推奨する前に使ってください。
podcast-goat-pp-cli source compare https://www.acquired.fm/episodes/vanguard --json -
speakers list— キャッシュ済みコーパス全体の話者名を、エピソード数とともに集計します。番組による絞り込みも可能です。「Senra/Buffett/Karpathy に関する手持ちのコンテンツは何か」に答えます。統合用のプロンプトを作成する際に使ってください。
podcast-goat-pp-cli speakers list --show acquired --json
多言語対応
-
episode get --lang— yt-dlp が認識する任意の言語で YouTube の自動字幕を取得します(1 回の取得につき 1 言語コード)。デフォルトは引き続きenです。英語以外の番組にも文字起こしがあります。
--langを指定しない場合、字幕が存在していてもイタリア語のみの動画は取得に失敗します。設計上の制限が 2 つあります。ローリング字幕の重複除去は、空白でトークンを区切る言語に適用されます(zh/ja/th のように空白なしで書かれる字幕は、重複除去されずにそのまま渡されます)。また、デフォルト以外の言語で取得したデータはローカルキャッシュに保存されません(v0.1 ではキャッシュの識別情報は URL 単位で、言語を区別しません。保存するには--outを使用してください)。podcast-goat-pp-cli episode get 'https://www.youtube.com/watch?v=EXAMPLE' --lang it
エージェント向けの仕組み
-
episode info --probe— 費用のかからない利用可否チェックです。静的な費用見積もりだけを表示するのではなく、spoken.md の検索エンドポイントに問い合わせて、エピソードが実際に利用可能か確認します。見積もりで分かるのは取得にかかる費用であり、ソースにエピソードがあるかどうかではありません。支払う前にプローブしてください。デモキーでも利用できます。
podcast-goat-pp-cli episode info <url> --paid --probe --json -
auth services— サービスごとに 1 行で、Cookie の経過期間、有効期限、最後の取得結果を表示する表です。古い場合は対処方法のヒントも表示します。Cookie は気付かないうちに期限切れになります。バッチ実行の前にこれを使って、メンバー向けのアクセスがまだ有効か確認してください。
podcast-goat-pp-cli auth services --json -
budget show --by-show— spend.jsonl と URL でエピソードを結合し、番組、プロバイダー、月ごとに支出をまとめて費用を割り当てます。どのサブスクリプションが役に立っているか、またどの番組にまだ費用がかかっているかを確認できます。毎月使用してください。
podcast-goat-pp-cli budget show --by-show --since 30 --json
コマンドリファレンス
episode — ポッドキャストのエピソードの文字起こしを取得、検索、確認します
podcast-goat-pp-cli episode get— Cookie → 無料 → 有料のディスパッチチェーンを通じて、URL から 1 件の文字起こしを取得しますpodcast-goat-pp-cli episode latest— 登録済みフィードから最新のエピソードを取得します
適切なコマンドを見つける
何をしたいかは分かっているものの、どのコマンドを使えばよいか分からない場合は、CLI に直接尋ねてください。
podcast-goat-pp-cli which "<capability in your own words>"
which は、自然言語の機能に関するクエリを、この CLI の厳選された機能インデックスから最適なコマンドに対応付けます。終了コード 0 は少なくとも 1 つ一致したことを示し、終了コード 2 は確信を持てる一致がなかったことを示します。その場合は --help を使うか、より絞り込んだクエリを指定してください。
レシピ
Hermes / Claude / エージェントのワークフロー
以下の 3 つのレシピでは、この CLI が実現するように設計されたエージェントのエンドツーエンドのワークフローを説明します。ユーザーの言い回しに合わせて選んでください。各レシピの最後にあるトリガーフレーズは、文字起こしを手動で取得するのではなく、エージェントがこのレシピを使って応答すべき自然言語の例です。
月曜朝の一括取得 → トピック別バンドル → エージェントによる要約
# One-time setup (if not already done):
podcast-goat-pp-cli auth set-key --provider spoken --value "$SPOKEN_API_KEY"
podcast-goat-pp-cli auth login-service --service spotify # if user has Spotify Premium
# The actual workflow:
podcast-goat-pp-cli episode batch \
https://www.dwarkesh.com/p/andrej-karpathy \
https://open.spotify.com/episode/<id> \
https://www.acquired.fm/episodes/<slug> \
--json
podcast-goat-pp-cli magic "AI chip supply chain" --limit 5 --out /tmp/bundle.md
# Then: ask the user's preferred LLM to summarize /tmp/bundle.md
複数のエピソードを並行して(デフォルトでは同時に 3 件)取得してそれぞれをキャッシュし、トピックに一致するキャッシュ済みエピソードを 1 つの YAML フロントマター付き Markdown ファイルにまとめます。このファイルは、エージェントが一度に要約するためにそのまま使えます。バンドル内の各エピソードには source、show、host、date、provider、cost が含まれているため、要約するエージェントは主張の出典を適切なエピソードに紐付けられます。
トリガーフレーズ:「このポッドキャストのエピソードを取得して」「今週聴いた内容を要約して」「 のバンドルを作って」「最新の のプロンプトを作って」「月曜朝のポッドキャストを取得して」。
は について何と言っていた?— ローカルで引用を検索
podcast-goat-pp-cli episode quote "<phrase>" -C 3 --json \
--select 'results.episode_url,results.segments'
ローカルのキャッシュ済みコーパスを対象にした FTS5 フレーズ検索です。一致したセグメントと、その前後にある話者タグ付きセグメントを N 件返します。各検索結果には episode_url と ts_sec が含まれているため、エージェントは該当箇所への直接リンクをユーザーに渡せます。文字起こしを再取得する前に、必ずまずこれを使用してください。ユーザーがエピソードをキャッシュ済みなら、回答に費用はかかりません。
トリガーフレーズ:「Senra は について何と言ってた?」「 に関するあの引用を探して」「 は について話した?」「ポッドキャストのキャッシュから を grep して」。
有料の取得前にコストを考慮して調査する
# Step 1: preview — no transcript fetch, no spend, no commitment
podcast-goat-pp-cli episode info <url> --paid
# Step 1b: coverage check — does spoken.md actually HAVE this episode?
# Spend-free (search endpoint only; works with the demo key).
podcast-goat-pp-cli episode info <url> --paid --probe
# Step 2: only after preview confirms the URL + cost are right:
podcast-goat-pp-cli episode get <url> --paid --provider spoken --yes
episode info では、URL を取得できるアダプター、ソースごとの推定コスト、エピソードがすでにキャッシュされているかどうか、デフォルトで実行されるソースを確認できます。初めて見る URL をユーザーが貼り付けたときは、特に有料クレジットを使う前に、必ずこれを使ってください。JSON 出力なら、コストとソースの判断を簡単に解析できます。質問がコストだけでなく利用可否に関するものなら、--probe を追加してください。静的な見積もりでわかるのは spoken.md から取得する場合のコストですが、--probe は spoken.md の検索エンドポイントにエピソードが存在するかどうかを問い合わせます(probe: available (<title>) と probe: no results のいずれか)。そのため、有料の取得を一度も試さずに、フィード全体のカバレッジを把握できます。
トリガーとなるフレーズ:「この URL の取得にはいくらかかる?」「このエピソードはすでにキャッシュされている?」「取得前にコストを確認したい」「これを取得できるソースは?」「spoken にこのエピソードはある?」
その他の便利なレシピ
Dwarkesh のトランスクリプトを 1 つ取得する
podcast-goat-pp-cli episode get https://www.dwarkesh.com/p/andrej-karpathy --md --out karpathy.md
無料で、認証も不要です。話者ラベルとタイムスタンプ付きの正規の Markdown です。このファイルは任意のエージェントに渡せます。
同じエピソードの無料版と有料版を比較する
podcast-goat-pp-cli source compare https://www.acquired.fm/episodes/vanguard --json
URL パターンに一致するすべてのアダプターに処理を振り分け、ソースごとのセグメント数、異なる話者数、ダイアライゼーション品質を表示します。価値の高いエピソードでどのソースを使うか決める際に役立ちます。
サブスクリプションの価値レポート
podcast-goat-pp-cli budget show --by-show --since 30
spend_log を番組、プロバイダー、月ごとに集計します。どのサブスクリプションで費用を節約できたか(Cookie による取得は 0 ドル、同じ番組を spoken から取得すると有料)を確認できます。
避けるべき使い方
- シェルで
episode getをループ実行しないでください。episode batchを使ってください。並列で実行され、進行状況も表示されます。シェルのループは順次実行され、進行状況も表示されません。 - 同じ URL を確認せずに二度取得しないでください。 まず
cache listまたはepisode infoを確認してください。キャッシュ済みのエピソードはすぐに返されます。エージェントは、処理をやり直す前に、必ずその旨を把握する必要があります。 - 未知の URL に対して
--yes --paidを指定しないでください。 まずepisode info <url> --paidを実行してコストを確認し、その後で実行を確定してください。コストを事前に確認できることは、必須の UX として明記されています。 --json出力のmeta.sourceフィールドを無視しないでください。 エージェントが引用を生成元のソースまで必ずたどれるようにしてください。このフィールドが監査証跡になります。- SPOKEN_API_KEY(または有料キー)を、ユーザーがコミットできる共有ファイルに書き込まないでください。
auth set-keyを使ってください。これはプロジェクトではなく、ユーザーのホームディレクトリにある権限 0600 の設定ファイルに書き込みます。
認証の設定
認証方法は 3 種類あり、コスト順に並んでいます。(1)auth login-service --service <huberman|acquired|founders|peterattia> は、ログイン済みの Chrome Cookie を一度抽出してローカルに保存します。これが中心となるワークフローです。(2)無料のソース(Dwarkesh Substack、Podcasting 2.0 RSS トランスクリプト、yt-dlp の自動字幕)には認証は不要です。(3)有料のソース(spoken.md の SPOKEN_API_KEY、Taddy の TADDY_API_KEY と TADDY_USER_ID、ElevenLabs/OpenAI/Deepgram などの音声プロバイダー)は、--paid または --provider <name> を明示して指定したコマンドでのみ使用されます。spoken.md の pt_demo キーは、サインアップせずに使えます。
podcast-goat-pp-cli doctor を実行して、設定を確認してください。
エージェントモード
任意のコマンドに --agent を追加してください。次のオプションに展開されます:--json --compact --no-input --no-color --yes。
-
パイプで利用可能 — 標準出力には JSON、標準エラー出力にはエラーが出力されます
-
フィルタリング可能 —
--selectでフィールドを絞り込めます。ドット区切りのパスでネストされた構造をたどり、配列では各要素に対して走査します。冗長な API のコンテキストを小さく保つうえで重要です。podcast-goat-pp-cli episode get mock-value --agent --select id,name,status -
プレビュー可能 —
--dry-runを使うと、送信せずにリクエストを表示します -
オフラインに対応 — sync/search コマンドは、利用可能な場合、ローカルの SQLite ストアを使用できます
-
非対話型 — プロンプトは表示されず、入力はすべてフラグで指定します
-
読み取り専用 — 作成、更新、削除、公開、コメント、賛成票、招待、注文、送信など、状態を変更するリクエストにはこの CLI を使用しないでください
レスポンスエンベロープ
ローカルストアまたは API から読み取るコマンドは、出力をプロベナンスエンベロープでラップします。
{
"meta": {"source": "live" | "local", "synced_at": "...", "reason": "..."},
"results": <data>
}
データには .results を、ライブかローカルかを確認するには .meta.source を解析してください。人間が読みやすい N results (live) の概要が stderr に出力されるのは、stdout がターミナルであり、かつ機械可読形式のフラグ(--json、--csv、--compact、--quiet、--plain、--select)が設定されていない場合に限ります。パイプ経由の利用者やエージェント、および明示的な形式指定を伴う実行では、stdout に JSON のみが出力されます。
エージェントからのフィードバック
この CLI の気になる点にあなた(またはエージェント)が気付いたら、記録してください。
podcast-goat-pp-cli feedback "the --since flag is inclusive but docs say exclusive"
podcast-goat-pp-cli feedback --stdin < notes.txt
podcast-goat-pp-cli feedback list --json --limit 10
エントリーはローカルの ~/.podcast-goat-pp-cli/feedback.jsonl に保存されます。PODCAST_GOAT_FEEDBACK_ENDPOINT が設定され、かつ --send が渡された場合、または PODCAST_GOAT_FEEDBACK_AUTO_SEND=true の場合を除き、POST されることはありません。デフォルトの動作ではローカルにのみ保存されます。
バグ報告ではなく、意外だったことを書いてください。短く、具体的に、1 行で。それが積み重なっていく要素です。
出力の受け渡し
すべてのコマンドは --deliver <sink> を受け付けます。出力は stdout に加えて(または stdout の代わりに)指定されたシンクに送られるため、エージェントはコマンド結果を手作業でパイプに通すことなく転送できます。対応しているシンクは 3 種類です。
| シンク | 動作 |
|---|---|
stdout | デフォルト。stdout のみに書き込みます |
file:<path> | <path> に出力をアトミックに書き込みます(tmp + rename) |
webhook:<url> | 出力本文を URL に POST します(--compact の場合は application/json または application/x-ndjson) |
未対応のスキームは、対応しているスキームの一覧を示す構造化エラーとともに拒否されます。Webhook の失敗時はゼロ以外の終了コードを返し、URL と HTTP ステータスを stderr に記録します。
名前付きプロファイル
プロファイルは、保存しておき、呼び出しのたびに再利用するフラグ値のセットです。スケジュールされたエージェントが毎回同じ設定で同じコマンドを呼び出す場合に使用します。これは HeyGen の「Beacon」パターンです。
podcast-goat-pp-cli profile save briefing --json
podcast-goat-pp-cli --profile briefing episode get mock-value
podcast-goat-pp-cli profile list --json
podcast-goat-pp-cli profile show briefing
podcast-goat-pp-cli profile delete briefing --yes
明示的に指定したフラグは常にプロファイル値より優先され、プロファイル値はデフォルトより優先されます。agent-context は、実行時に情報を調べるエージェントがプロファイルを確認できるよう、available_profiles にすべての利用可能なプロファイルを一覧表示します。
終了コード
| コード | 意味 |
|---|---|
| 0 | 成功 |
| 2 | 使用方法エラー(引数が誤っています) |
| 3 | リソースが見つかりません |
| 4 | 認証が必要です |
| 5 | API エラー(上流の問題) |
| 7 | レート制限中(待機してから再試行してください) |
| 10 | 設定エラー |
引数の解析
$ARGUMENTS を解析します。
- 空、
help、または--help→podcast-goat-pp-cli --helpの出力を表示します installで始まる場合 →mcpで終わる場合は MCP をインストールします。それ以外の場合は、上記の前提条件を参照してください- その他すべて → 直接使用(
--agentを付けて CLI コマンドとして実行します)
MCP サーバーのインストール
この CLI の公開されたパブリックライブラリエントリーまたはビルド済みリリースから MCP バイナリをインストールし、登録します。
claude mcp add podcast-goat-pp-mcp -- podcast-goat-pp-mcp
確認します:claude mcp list
直接使用
- インストール済みか確認します:
which podcast-goat-pp-cli見つからない場合は、インストールを提案します(このスキルの冒頭にある「前提条件」を参照してください)。 - ユーザーのクエリに最適なコマンドを、上記の「独自の機能」と「コマンドリファレンス」から選びます。
--agentフラグを付けて実行します。podcast-goat-pp-cli <command> [subcommand] [args] --agent- 曖昧な場合は、サブコマンドのヘルプを確認します:
podcast-goat-pp-cli <command> --help。