mcpField
P
pp-substack

pp-substack

github.com/mvanhorn营销与增长2.1k259 次安装今天更新
代码仓库

关于 pp-substack

供 Agent 通过 Printing Press CLI 管理 Substack 出版物的技能,涵盖撰写、排期、互动和分析。它将出版物操作与基于本地 SQLite 的分析、归因及跨出版物工作流结合起来。

主要功能

  1. 01创建、发布和排期草稿
  2. 02发布和排期 Notes
  3. 03分析增长与内容表现
  4. 04搜索已同步的帖子和评论
  5. 05比较出版物与订阅者
  6. 06寻找推荐互换伙伴

适用场景

  1. 01带时间间隔保护地安排 Notes
  2. 02衡量 Notes 发布后的订阅增长
  3. 03发现有效的帖子格式与开场方式
  4. 04协调跨出版物推广

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mvanhorn/printing-press-library --skill pp-substack

安装后在 Claude Code 中输入/pp-substack确认已加载。

详细介绍

Substack — Printing Press 命令行工具

前提条件:安装命令行工具

此技能通过 substack-pp-cli 二进制文件运行。**调用此技能中的任何命令前,必须确认已安装该命令行工具。**如果尚未安装,请先安装:

  1. 通过 Printing Press 安装程序安装。在 macOS/Linux 上,二进制文件默认安装到 $HOME/.local/bin;在 Windows 上,默认安装到 %LOCALAPPDATA%\Programs\PrintingPress\bin:
    npx -y @mvanhorn/printing-press-library install substack --cli-only
    
  2. 验证:substack-pp-cli --version
  3. 确保报告的安装目录位于将调用此技能的 Agent/运行时的 $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 访问二进制文件目录。验证成功之前,请勿执行技能命令。

何时使用此命令行工具

当 Agent 需要端到端管理 Substack 出版物时,可以使用此命令行工具:按计划发布 Notes、起草并发布长篇内容、与细分领域的作者互动、寻找互推伙伴,以及衡量哪些内容确实带来了订阅者。如果你需要原生支持 Agent 的工具链(--json、--select、--dry-run、类型化退出码)、离线优先的分析(所有关联查询都在本地通过 SQLite 运行),或者这些工具未覆盖的作者功能,那么相比 WriteStack/StackSweller,它是更合适的选择。互动写入操作(engage like、engage restack、engage restack-with-comment)默认会打印等效的 curl 命令,只有使用 --send 才会执行;请将打印的 curl 输出视为预检,而非实际操作。

独特功能

这些功能在此 API 的其他工具中均不可用。

可累积的本地状态
  • growth attribution — 将你发布的每条 Note 与随后 24 小时内实际新增的付费和免费订阅者关联起来,从此不必再猜测哪些内容带来了增长。

    当 Agent 需要决定下周重复采用哪些 Note 格式时,使用此功能,而不是调用通用统计接口。

    substack-pp-cli growth attribution --days 30 --json --select rank,note_id,note_excerpt,subs_acquired,paid_subs_acquired
    
  • engage reciprocity — 查看与你互动的每位作者的互惠净值:谁会回报你的转发和评论,谁在悄悄坐享其成。

    当 Agent 需要决定是否继续投入精力维护互推伙伴关系时使用;它能在关系变淡之前及时发现问题。

    substack-pp-cli engage reciprocity --days 30 --agent --select handle,outgoing,incoming,net,drift
    
感知算法的自动化
  • notes schedule --guard — 如果某条 Note 的发布时间距离你上一条原创 Note 不足 30 分钟,或违反一天内的时段轮换规则,则拒绝发布(或排队)。返回类型化退出码 2,并附带 JSON 诊断信息。

    防止 Agent 一次性发布整个队列,不慎损害自己的触达率。

    substack-pp-cli notes schedule --at 2026-05-10T13:00:00Z --body "hook line\n\nbody" --guard --json
    
  • growth best-time — 按星期几 × 小时对时段进行排名,可依据你选择的任一增长指标(付费订阅、点赞、转发或评论),而非只提供单一平均值。

    Agent 为明天的 Notes 选择发布时间时,可以指定要优化的目标,而不必凭空猜测。

    substack-pp-cli growth best-time --days 90 --for-goal subs --json --select day_of_week,hour,rate,sample_size
    
模式洞察
  • discover patterns — 以机械化方式提取在某个细分领域中实际表现较好的开场模式(悬念式冒号、三句式公式、破折号转折、提问式开头),并提供转发/评论比率。

    起草 Notes 的 Agent 可以先了解当前在该细分领域中表现更好的开场形式,再开始生成内容。

    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 可与另一位作者进行比较。

    为代笔客户起草 Notes 的 Agent 可以借此确认输出符合客户的语气范围。

    substack-pp-cli voice fingerprint --handle maya --diff devon --json --select metric,self,other,delta
    
网络协作优势
  • recs find-partners — 根据关注图谱和推荐图谱中的相互重叠密度,为 Substack 推荐互换筛选候选出版物并评分。

    每周执行交叉推广的 Agent 可以据此为候选对象排序,而不是贸然推介。

    substack-pp-cli recs find-partners --my-pub on --top 20 --json --select rank,handle,pub,overlap_score,shared_followees
    
  • growth pod — 给定一组用户名,生成成员 × 成员互动矩阵,显示每对成员之间过去 30 天的转发、评论和点赞情况。

    组织互助小组的 Agent 可以据此查看谁在净贡献、谁在白占便宜,而不必使用电子表格。

    substack-pp-cli growth pod --members maya,devon,priya,jordan --days 30 --json
    
精细控制字段的内容创作
  • drafts create / drafts update — 完整的 Substack 草稿 API 功能:提供 30 多个标志,可设置标题、副标题、正文(Markdown 会自动转换为 ProseMirror)、section-id、类型(newsletter/podcast/video/thread)、受众、署名、SEO 元数据、社交标题、封面图片、评论设置、播客/视频 URL 和可见性开关。这是唯一能让 Agent 在不受网页编辑器掣肘的情况下精细控制字段的创作方式。

    当 Agent 根据结构化数据撰写完整长文(例如研究摘要、译文或代笔文章),并需要通过一条命令设置付费墙、SEO 和所属栏目时,可使用此功能。

    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 — 在一个屏幕上查看你拥有的每个出版物的状态:订阅者人数、付费订阅人数、已发布文章数、待处理草稿数和下一篇定时发布的文章。无需切换标签页,也无需导出 CSV。

    substack-pp-cli portfolio --json
    
  • posts best — 按浏览量、点赞数、评论数或转发数,对指定时间范围内的文章排序。--cross-pub 会汇总你所有出版物的数据。

    Agent 在决定将哪些文章复制到新出版物,或在每周简报中推荐哪些文章时,可使用此功能。

    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 — 以 ASCII 日历形式显示未来 N 天内你所有出版物的定时发布文章。在一个屏幕上查看多个出版物的编辑安排。

    substack-pp-cli schedule board --days 30 --json
    
  • subs churn — 对比订阅者快照:查看新增订阅者、取消订阅者、从免费升级为付费的订阅者,以及从付费降级为免费的订阅者。请先至少运行一次 --snapshot 以创建基准快照。

    substack-pp-cli subs churn --snapshot
    substack-pp-cli subs churn --since 7d --json --publication mypub-paid
    
  • subs cross-sell — 列出在你至少一个出版物中付费,但在其他出版物中为免费用户或尚未订阅的用户邮箱。本地存储中需要有至少 2 个自有出版物。Substack 界面没有提供此类交叉销售名单。

    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 — 上传图片(使用 data-URI JSON,而非 multipart)

  • substack-pp-cli images — 上传图片;返回 CDN URL。请求体为 data-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。sync 会填充存储资源 reader(实时读取时也会写入),因此 --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 — 在一个屏幕中查看你拥有的每个出版物的状态(订阅数、付费订阅数、文章、草稿、下次计划发布)。请先运行 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 slug 获取已发布文章
  • substack-pp-cli posts list-published — 列出该出版物上已发布的文章(需要认证)
  • substack-pp-cli posts pair <en-slug> <de-slug> — 在本地表中记录一组 EN↔DE 翻译配对
  • substack-pp-cli posts pairs — 列出已记录的文章配对;--missing 显示没有配对文章的文章;--publication 筛选指定出版物
  • 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、--snapshot
  • substack-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 categories
  • substack-pp-cli categories get
  • substack-pp-cli categories list
  • substack-pp-cli categories search
  • substack-pp-cli drafts
  • substack-pp-cli drafts get
  • substack-pp-cli drafts list
  • substack-pp-cli drafts search
  • substack-pp-cli inbox
  • substack-pp-cli inbox get
  • substack-pp-cli inbox list
  • substack-pp-cli inbox search
  • substack-pp-cli inbox-posts
  • substack-pp-cli inbox-posts get
  • substack-pp-cli inbox-posts list
  • substack-pp-cli inbox-posts search
  • substack-pp-cli posts
  • substack-pp-cli posts get
  • substack-pp-cli posts list
  • substack-pp-cli posts search
  • substack-pp-cli posts-published
  • substack-pp-cli posts-published get
  • substack-pp-cli posts-published list
  • substack-pp-cli posts-published search
  • substack-pp-cli posts-ranked
  • substack-pp-cli posts-ranked get
  • substack-pp-cli posts-ranked list
  • substack-pp-cli posts-ranked search
  • substack-pp-cli profiles
  • substack-pp-cli profiles get
  • substack-pp-cli profiles list
  • substack-pp-cli profiles search
  • substack-pp-cli reader
  • substack-pp-cli reader subscriptions
  • substack-pp-cli sections
  • substack-pp-cli sections get
  • substack-pp-cli sections list
  • substack-pp-cli sections search
  • substack-pp-cli subs
  • substack-pp-cli subs get
  • substack-pp-cli subs list
  • substack-pp-cli subs search
  • substack-pp-cli tags
  • substack-pp-cli tags get
  • substack-pp-cli tags list
  • substack-pp-cli tags search

当 JSON 输出使用生成的来源信息封装时,新鲜度元数据位于 meta.freshness。应将其视为所覆盖命令路径的当前缓存新鲜度,而非完整历史回填或特定于 API 的丰富数据保证。

查找合适的命令

如果你知道想做什么,却不知道该用哪个命令,可以直接询问 CLI:

substack-pp-cli which "<capability in your own words>"

which 会根据自然语言能力查询,从此 CLI 精选的功能索引中找出最匹配的命令。退出代码 0 表示至少有一项匹配;退出代码 2 表示没有足够可靠的匹配——请改用 --help,或尝试更具体的查询。

操作示例

每日增长循环晨间例行任务
substack-pp-cli growth attribution --days 7 --agent --select rank,note_excerpt,subs_acquired

展示昨天 Note→订阅转化的赢家。结合 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 加入本地队列;如果安排时间与已有的本人 Note 相隔不到 30 min,--guard 会拒绝安排(类型化退出代码 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 负责排名;外联文案由你的 Agent 根据提示词撰写)。

将作者的语言风格特征保存为 JSON
substack-pp-cli voice fingerprint --handle alice --diff bob --json

为指定账号生成机械化语言风格指标;设置 --diff 时,会与另一位作者进行对比。请自行保存 JSON;Agent 生成提示词可以读取该数据。

使用 --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 可缩小数据负载范围,避免 Agent 为解析 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。

将表现最佳的英文帖子同步到德语出版物
# 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)——它会通过 pycookiecheat / cookies / cookie-scoop-cli 从已登录的 Chrome 中读取 Cookie,并将其存储在操作系统密钥环中。不支持密码登录,也没有手动粘贴 Cookie 的子命令。如果 Cookie 过期,请重新运行 auth login --chrome。

运行 substack-pp-cli doctor 以验证设置。

Agent 模式

为任意命令添加 --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 以确认数据来自实时来源还是本地存储。仅当 stdout 是终端且未设置机器格式标志(--json、--csv、--compact、--quiet、--plain、--select)时,才会将人类可读的 N results (live) 摘要打印到 stderr;通过管道传输的内容、Agent 使用者以及指定格式运行时,stdout 只会输出纯 JSON。

Agent 反馈

当你(或 Agent)发现此 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 发送。默认仅保存在本地。

写下让你感到意外的地方,而不是提交 Bug 报告。简短、具体、写成一行:这才是会不断累积价值的部分。

输出传递

每个命令都接受 --deliver <sink>。输出会发送到指定目标,并且可以同时输出到 stdout,也可以替代 stdout 输出,让 Agent 无需手动通过管道即可传递命令结果。支持三种目标:

目标效果
stdout默认;仅输出到 stdout
file:<path>以原子方式将输出写入 <path>(临时文件 + 重命名)
webhook:<url>将输出正文 POST 到该 URL(使用 --compact 时为 application/json 或 application/x-ndjson)

对于未知方案,会拒绝处理并返回结构化错误,指出支持的方案。Webhook 请求失败时会返回非零退出码,并在 stderr 中记录 URL 和 HTTP 状态。

命名配置

配置是保存的一组标志值,可在多次调用中重复使用。适用于计划任务中的 Agent 每次运行都调用相同的命令并使用相同配置的情况——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 下列出所有可用配置,以便能够自省的 Agent 在运行时发现它们。

退出代码

代码含义
0成功
2用法错误(参数错误)
3未找到资源
4需要身份验证
5API 错误(上游问题)
7请求过于频繁(等待后重试)
10配置错误

参数解析

解析 $ARGUMENTS:

  1. 为空、help 或 --help → 显示 substack-pp-cli --help 的输出
  2. 以 install 开头 → 以 mcp 结尾 → 安装 MCP;否则 → 参见上文的先决条件
  3. 其他任何内容 → 直接使用(作为带有 --agent 的 CLI 命令执行)

MCP 服务安装

  1. 安装 MCP 服务:
    go install github.com/mvanhorn/printing-press-library/library/media-and-entertainment/substack/cmd/substack-pp-mcp@latest
    
  2. 在 Claude Code 中注册:
    claude mcp add substack-pp-mcp -- substack-pp-mcp
    
  3. 验证:claude mcp list

直接使用

  1. 检查是否已安装:which substack-pp-cli 如果未找到,则提供安装选项(参见此技能顶部的先决条件)。
  2. 根据用户查询,从上文的独特功能和命令参考中选择最合适的命令。
  3. 使用 --agent 标志执行:
    substack-pp-cli <command> [subcommand] [args] --agent
    
  4. 如果有歧义,请查看子命令帮助:substack-pp-cli <command> --help。

评论

支持 Markdown