mcpField
P
pp-skool

pp-skool

github.com/mvanhorn其他2.1k146 次安装今天更新
代码仓库

关于 pp-skool

pp-skool 是通过 skool-pp-cli 运营和管理 Skool 社区的技能,将社区分析与导出功能结合,并通过本地 SQLite 镜像支持搜索、SQL 查询和活动摘要。

主要功能

  1. 01为帖子和成员排名
  2. 02汇总近期社区活动
  3. 03将课程导出为 Markdown
  4. 04搜索并查询本地 SQLite 镜像
  5. 05管理成员和帖子

适用场景

  1. 01制作定期社区摘要
  2. 02查找互动度高的帖子
  3. 03导出课程资料以供离线查阅
  4. 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 已安装。**如果尚未安装,请先安装:

  1. 通过 Printing Press 安装程序安装。在 macOS/Linux 上,二进制文件默认安装到 $HOME/.local/bin;在 Windows 上,默认安装到 %LOCALAPPDATA%\Programs\PrintingPress\bin:
    npx -y @mvanhorn/printing-press-library install skool --cli-only
    
  2. 验证:skool-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/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 notifications
  • skool-pp-cli notifications list
  • skool-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需要身份验证
5API 错误(上游问题)
7请求过于频繁(等待后重试)
10配置错误

参数解析

解析 $ARGUMENTS:

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

MCP 服务安装

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

直接使用

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

评论

支持 Markdown