关于 pp-skool
pp-skool 是通过 skool-pp-cli 运营和管理 Skool 社区的技能,将社区分析与导出功能结合,并通过本地 SQLite 镜像支持搜索、SQL 查询和活动摘要。
主要功能
- 01为帖子和成员排名
- 02汇总近期社区活动
- 03将课程导出为 Markdown
- 04搜索并查询本地 SQLite 镜像
- 05管理成员和帖子
适用场景
- 01制作定期社区摘要
- 02查找互动度高的帖子
- 03导出课程资料以供离线查阅
- 04比较已同步社区的数据
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mvanhorn/ printing-press-library --skill pp-skool安装后在 Claude Code 中输入/pp-skool确认已加载。
详细介绍
Skool — Printing Press CLI
前置条件:安装 CLI
此技能使用 skool-pp-cli 二进制文件。**调用此技能中的任何命令前,必须确认 CLI 已安装。**如果尚未安装,请先安装:
- 通过 Printing Press 安装程序安装。在 macOS/Linux 上,二进制文件默认安装到
$HOME/.local/bin;在 Windows 上,默认安装到%LOCALAPPDATA%\Programs\PrintingPress\bin:npx -y @mvanhorn/printing-press-library install skool --cli-only - 验证:
skool-pp-cli --version - 确保报告的安装目录位于将调用此技能的 Agent/运行时的
$PATH中。
如果 npx 安装失败(没有 Node、处于离线状态等),请改用直接的 Go 安装方式(需要 Go 1.26.6 或更高版本):
go install github.com/mvanhorn/printing-press-library/library/media-and-entertainment/skool/cmd/skool-pp-cli@latest
如果安装后 --version 报告“command not found”,说明运行时无法在 $PATH 中找到二进制文件目录。验证成功前,请勿继续执行技能命令。
何时使用此 CLI
当你运营或管理 Skool 社区,并且需要原生 UI 无法实现的分析、导出或自动化功能时,请使用此 CLI,例如将课堂内容导出为 Markdown、跨社区执行 SQL,或为 Agent 安排定时摘要。
独特功能
其他用于此 API 的工具均不具备以下功能。
可累积的本地状态
-
posts top—— 根据点赞数、评论数或互动情况为近期帖子排名,并返回完整内容。如果需要每天/每周定时任务从任意社区中找出互动度最高的 3-5 篇帖子,便可使用此功能,无需滚动浏览即可快速了解动态。
skool-pp-cli posts top --community earlyaidopters --since 7d --top 5 --by engagement --json -
leaderboard—— 返回社区积分排名靠前的成员,并附带等级和个人简介字段。如果 Agent 需要通过一次调用获取当前社区排行榜,而不必抓取页面,便可使用此功能。
skool-pp-cli leaderboard --community bewarethedefault --top 25 --json -
digest since—— 汇总自某个时间戳以来帖子、评论、成员和课程中的所有新增内容。如果 Agent 需要为每天/每周定时任务生成一份简要的社区动态摘要,便可使用此功能。
skool-pp-cli digest since 24h --json -
sql—— 在本地存储中的所有社区上执行只读 SQL。如果 Agent 需要对你拥有或运营的多个 Skool 社区进行组合查询,便可使用此功能。
skool-pp-cli sql 'SELECT community, COUNT(*) FROM posts GROUP BY community' -
sync --resources posts,members—— 将社区的帖子和成员加载到本地 SQLite 镜像中,并从 Next.js 页面封装结构中提取出来。请在使用
search或sql前使用此功能——两者都会读取镜像;在加载帖子和成员之前,镜像为空。skool-pp-cli sync --community <community-slug> --resources posts,members
面向 Agent 的基础设施
-
calendar export—— 将即将举行的社区活动导出为 .ics 文件,以便导入 Google Cal / Outlook。如果成员希望将社区活动添加到个人日历而无需手动输入,便可使用此功能。
skool-pp-cli calendar export --ics > community.ics -
classroom export—— 将整个课程导出为 Markdown 文件包(模块、课程、附件、视频 URL)。如果 Agent 需要摄取课程内容,以便离线参考、搜索或供大模型检索,便可使用此功能。
skool-pp-cli classroom export <course-slug> --out ./course/
HTTP 传输
此 CLI 使用兼容 Chrome 的 HTTP 传输方式访问面向浏览器的端点。正常 API 调用无需常驻浏览器进程。
命令参考
calendar — 社区日历活动
skool-pp-cli calendar <buildId>— 列出即将举行和近期的日历活动
classroom — 社区课堂(课程、模块、课程内容)
skool-pp-cli classroom get-course— 获取包含模块和课程内容的单门课程skool-pp-cli classroom list— 列出社区中的所有课程
community — 社区动态、设置和元数据
skool-pp-cli community about— 关于页面(规则、所有者、成员人数)skool-pp-cli community info— 获取社区动态(帖子、排行榜摘要、即将举行的活动、设置)skool-pp-cli community leaderboard-tab— 排行榜标签页(以 t=leaderboard 渲染的社区页面)skool-pp-cli community members-tab— 成员标签页数据(以 t=members 渲染的社区页面)
me — 当前已认证用户的仪表板
skool-pp-cli me <buildId>— 获取当前用户、已加入的社区和仪表板状态
members — 社区成员和管理
skool-pp-cli members list— 列出社区成员skool-pp-cli members approve— 批准待处理的成员申请skool-pp-cli members ban— 将成员从社区封禁skool-pp-cli members pending— 列出待处理的成员加入申请skool-pp-cli members reject— 拒绝待处理的成员申请
notifications — 用户通知
skool-pp-cli notifications list— 列出已认证用户的通知skool-pp-cli notifications mark-read— 将通知标记为已读(ids 为空表示全部标记为已读)
posts — 社区内的帖子(论坛主题)
skool-pp-cli posts list— 列出社区帖子(按时间从新到旧)skool-pp-cli posts comment— 为帖子添加评论skool-pp-cli posts create— 创建新帖子(body = TipTap JSON;使用 --md 转换 Markdown)skool-pp-cli posts delete— 删除帖子skool-pp-cli posts get— 获取帖子详情页,包括评论树skool-pp-cli posts like— 为帖子点赞(投赞成票)skool-pp-cli posts unlike— 取消对帖子的点赞skool-pp-cli posts update— 更新现有帖子
新鲜度约定
此 CLI 仅为已注册的、由存储支持的读取命令路径负责有限的新鲜度检查。在 --data-source auto 模式下,这些路径会检查 sync_state,并可能在读取本地数据前执行有限刷新。--data-source local 从不刷新。--data-source live 从 API 读取,不会修改本地存储。设置 SKOOL_NO_AUTO_REFRESH=1 可跳过新鲜度钩子,而不改变数据源选择。
涵盖的路径:
skool-pp-cli notificationsskool-pp-cli notifications listskool-pp-cli notifications mark-read
JSON 输出使用生成的来源信息封套时,新鲜度元数据位于 meta.freshness。应将其视为涵盖命令路径的当前缓存新鲜度,而非完整历史回填或 API 特定增强的保证。
查找合适的命令
如果你知道想做什么,但不知道该用哪个命令,可以直接询问 CLI:
skool-pp-cli which "<capability in your own words>"
which 会根据自然语言能力查询,从此 CLI 精选的功能索引中找出最匹配的命令。退出代码 0 表示至少找到一项匹配;退出代码 2 表示没有足够可信的匹配——请改用 --help,或缩小查询范围。
使用示例
每日摘要定时任务
skool-pp-cli sync --community <community-slug> && skool-pp-cli digest since 24h --community <community-slug> --json --select new_posts,new_members,top_comments
一次同步 + 一次查询。可顺畅地交给定时运行的 Agent,用于起草 Slack/邮件摘要。
将课程导出为 Markdown
skool-pp-cli classroom export ai-foundations --out ./ai-foundations/
递归遍历:模块 → 课程内容 → 附件 + Mux URL。每门课程各建一个文件夹,可直接用于大模型摄取。
填充本地镜像,然后搜索
skool-pp-cli sync --community <community-slug> --resources posts,members
skool-pp-cli search "onboarding" --limit 10
sync 会遍历社区页面,解包帖子对应的 pageProps.postTrees[].post 和成员数组,并将两者写入 SQLite。FTS search 和 sql 会读取该镜像,因此这一步是让它们发挥作用的关键。在 --agent 模式下,失败会按资源报告,格式为 {"event":"sync_error","resource":...,"error":...}。
跨社区互动 SQL
skool-pp-cli sql 'SELECT community, COUNT(*) AS posts_30d FROM posts WHERE created_at > date("now","-30 days") GROUP BY community ORDER BY posts_30d DESC'
对本地存储执行只读 SQL。适用于你已同步的所有社区。
排行榜前 10 名
skool-pp-cli leaderboard --community bewarethedefault --top 10 --json
当前 30 天排行榜。包含成员排名、积分、等级和个人简介字段。
多社区使用
CLI 支持你加入的任何 Skool 社区——auth_token cookie 可覆盖你全局登录的所有社区。在任何命令中使用 --community <slug> 标志切换社区,或在 ~/.config/skool-pp-cli/config.toml 的 [template_vars] 下更改默认社区。
# Default community from config
skool-pp-cli digest since 24h
# Override per call
skool-pp-cli digest since 24h --community early-ai-adopters --json
skool-pp-cli leaderboard --community some-other-community --top 10
# Sync multiple communities into one local store (each row gets a community tag)
skool-pp-cli sync --community bewarethedefault
skool-pp-cli sync --community early-ai-adopters
# Cross-community SQL once both are synced
skool-pp-cli sql "SELECT community, resource_type, COUNT(*) FROM resources GROUP BY community, resource_type"
# Bash one-liner: daily digest across N communities
for c in bewarethedefault early-ai-adopters another-community; do
skool-pp-cli digest since 24h --community "$c" --json --select community,new_post_count,new_posts >> ~/skool-daily-digest.jsonl
done
带有社区标签的存储是 v0.3 跨社区分析命令的基础(高风险成员、流失群组、跨社区互动情况)。
按互动度排序的热门帖子(从噪声中识别信号)
skool-pp-cli posts top --community earlyaidopters --since 7d --top 5 --by engagement --json
skool-pp-cli posts top --community bewarethedefault --since 24h --top 3 --by upvotes
这是每日/每周的核心命令。它会遍历分页的社区动态、去重、筛选时间范围,并按点赞数/评论数/互动度/最新时间排序,返回完整帖子正文,让 Agent 一次调用即可获取所需的全部内容。
身份验证设置
Skool 没有公共 API。使用已登录浏览器会话中的 auth_token JWT cookie 进行身份验证:skool-pp-cli auth login(写入 ~/.config/skool-pp-cli/config.toml)。添加 --chrome 可直接从已登录的 Chrome 配置文件读取 cookie。身份验证命令包括 auth login、auth logout 和 auth status——没有 auth set-token。同一个 cookie 可用于读取和写入;CloudFront 要求使用真实的 User-Agent,CLI 会自动设置。
运行 skool-pp-cli doctor 验证设置。
Agent 模式
为任意命令添加 --agent。它会展开为:--json --compact --no-input --no-color --yes。
-
可管道传输 — JSON 输出到 stdout,错误输出到 stderr
-
可筛选 —
--select保留部分字段。点分路径可深入嵌套结构;数组会逐元素遍历。对于冗长 API,这对缩小上下文至关重要:skool-pp-cli calendar mock-value --community example-value --agent --select id,name,status -
可预览 —
--dry-run显示请求,但不发送 -
支持离线使用 — 有本地 SQLite 存储时,同步/搜索命令可使用该存储
-
非交互式 — 绝不显示提示,每项输入都通过标志指定
-
显式重试 — 仅当已存在的创建操作应视为成功时使用
--idempotent;仅当缺失的删除目标应视为成功时使用--ignore-missing
响应封装
从本地存储或 API 读取数据的命令会将输出封装在一个来源信息对象中:
{
"meta": {"source": "live" | "local", "synced_at": "...", "reason": "..."},
"results": <data>
}
解析 .results 获取数据,并查看 .meta.source 了解数据来自实时 API 还是本地存储。只有当 stdout 连接到终端时,才会将便于阅读的 N results (live) 摘要打印到 stderr——通过管道传输的/Agent 使用者会在 stdout 收到纯 JSON。
Agent 反馈
当你(或 Agent)发现此 CLI 有问题时,请记录下来:
skool-pp-cli feedback "the --since flag is inclusive but docs say exclusive"
skool-pp-cli feedback --stdin < notes.txt
skool-pp-cli feedback list --json --limit 10
条目会存储在本地的 ~/.skool-pp-cli/feedback.jsonl。除非设置了 SKOOL_FEEDBACK_ENDPOINT,并且传入了 --send 或设置了 SKOOL_FEEDBACK_AUTO_SEND=true,否则绝不会发送 POST 请求。默认行为仅在本地存储。
写下让你感到意外的地方,而不是提交错误报告。简短、具体、一行即可:这才是能不断积累价值的内容。
输出传递
每个命令都接受 --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”模式。
skool-pp-cli profile save briefing --json
skool-pp-cli --profile briefing calendar mock-value --community example-value
skool-pp-cli profile list --json
skool-pp-cli profile show briefing
skool-pp-cli profile delete briefing --yes
显式标志始终优先于配置文件中的值;配置文件中的值优先于默认值。agent-context 会在 available_profiles 下列出所有可用配置文件,以便进行自省的 Agent 在运行时发现它们。
退出代码
| 代码 | 含义 |
|---|---|
| 0 | 成功 |
| 2 | 用法错误(参数错误) |
| 3 | 未找到资源 |
| 4 | 需要身份验证 |
| 5 | API 错误(上游问题) |
| 7 | 请求过于频繁(等待后重试) |
| 10 | 配置错误 |
参数解析
解析 $ARGUMENTS:
- 为空、
help或--help→ 显示skool-pp-cli --help的输出 - 以
install开头 → 以mcp结尾 → 安装 MCP;否则 → 请参阅上文的先决条件 - 其他任何内容 → 直接使用(将其作为带
--agent的 CLI 命令执行)
MCP 服务安装
- 安装 MCP 服务:
go install github.com/mvanhorn/printing-press-library/library/other/skool/cmd/skool-pp-mcp@latest - 在 Claude Code 中注册:
claude mcp add skool-pp-mcp -- skool-pp-mcp - 验证:
claude mcp list
直接使用
- 检查是否已安装:
which skool-pp-cli如果未找到,请提供安装选项(请参阅本技能开头的先决条件)。 - 根据用户查询,从上文的独特功能和命令参考中选择最合适的命令。
- 使用
--agent标志执行:skool-pp-cli <command> [subcommand] [args] --agent - 如果有歧义,请查看子命令帮助:
skool-pp-cli <command> --help。