关于 pp-roam
pp-roam 是使用 roam-pp-cli 脚本化操作 Roam HQ 的技能,适用于需要命令行管道、定时任务或本地优先搜索的团队和 Agent,支持会议记录分析、Webhook 检查及成员核对。
主要功能
- 01搜索聊天消息和会议记录
- 02提取带引用的决策类内容
- 03比较 On-Air 邀请名单与出席情况
- 04查看近期 Webhook 投递记录
- 05根据名册核对 SCIM 成员
- 06将输入流转发到 Roam 群组
适用场景
- 01搜索过往会议中的特定主题
- 02整理近期决策摘要
- 03无需搭建监听器即可排查 Webhook 投递
- 04根据 HRIS 名册同步 Roam 成员
MCP 相关
README 提及 api.ro.am/mcp 上的远程 MCP,适用于临时 Agent 对话。该 CLI 面向脚本化管道、定时任务和本地优先搜索。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mvanhorn/ printing-press-library --skill pp-roam安装后在 Claude Code 中输入/pp-roam确认已加载。
详细介绍
Roam — Printing Press CLI
前置条件:安装 CLI
此技能使用 roam-pp-cli 二进制文件。调用此技能中的任何命令前,必须确认 CLI 已安装。 如果尚未安装,请先安装:
- 通过 Printing Press 安装程序安装。默认情况下,二进制文件会安装到 macOS/Linux 上的
$HOME/.local/bin,以及 Windows 上的%LOCALAPPDATA%\Programs\PrintingPress\bin:npx -y @mvanhorn/printing-press-library install roam --cli-only - 验证:
roam-pp-cli --version - 确保报告的安装目录位于将调用此技能的 Agent/运行时的
$PATH中。
如果 npx 安装失败(没有 Node、处于离线状态等),则改用直接 Go 安装(需要 Go 1.26.6 或更高版本):
go install github.com/mvanhorn/printing-press-library/library/productivity/roam/cmd/roam-pp-cli@latest
如果安装后 --version 报告“command not found”,则运行时无法在 $PATH 中找到二进制文件目录。验证成功前,不要继续执行技能命令。
何时使用此 CLI
需要通过 shell 或 Agent 编写 Roam HQ 脚本时,可使用 roam-pp-cli:跟踪 webhook 投递、发布部署通知、一次搜索多场会议的转录内容、将 SCIM 成员资格与 HRIS 名册核对,或从上周的录音中提取决策。api.ro.am/mcp 上的远程 MCP 适合临时的 Agent 对话;如果需要流水线、cron 或本地优先搜索,则应选择此 CLI。
独特功能
其他任何用于此 API 的工具都不具备以下功能。
可持续积累的本地状态
-
grep— 一次搜索所有聊天消息和会议转录内容,并支持 --since、--from-user、--in-meeting、--in-group 过滤器。当 Agent 需要回想多场会议中讨论过的内容,而又不想反复请求受速率限制的转录 API 时,可使用此功能。
roam-pp-cli grep "pricing" --since 14d --in-group eng --json --select transcript_id,line -
decisions— 从已同步的转录内容中找出类似决策的语句(“我们决定”“行动项”“已达成一致”“就按这个方案来”)。当 Agent 需要为团队准备周一摘要时,可使用此功能;结果确定且附带引用。
roam-pp-cli decisions --since 7d --in-group product --agent -
onair-attendance-drift— 比较 On-Air 活动的受邀嘉宾与实际出席情况;输出受邀但未出席者和未受邀但到场者名单。当 Agent 被问到谁未出席或谁未受邀却到场时,可使用此功能。
roam-pp-cli onair-attendance-drift --event evt_123 --json -
webhook-tail— 从本地订阅注册表跟踪近期 webhook 投递,并支持 --since 过滤。无需启动监听器即可调试 webhook 集成。
roam-pp-cli webhook-tail --since 1h --json -
mention-inbox— 在 messages.text 中本地全文搜索 @user 标记,并支持 --since 过滤;采用跟踪输出格式。当 Agent 需要查看所有群组中未读的提及,而不想针对每个群组分别请求 API 时,可使用此功能。
roam-pp-cli mention-inbox --user @me --since 7d --agent
安全变更
-
onair-reaper— 查找 N 天内出席人数为零的周期性 On-Air 活动。--apply 会通过已吸收的取消端点取消这些活动。清理已失效的周期性活动时可使用此功能;默认安全。
roam-pp-cli onair-reaper --stale-days 60 --dry-run -
scim-diff— 将 CSV/JSON HRIS 名册与 /Users SCIM 列表进行差异比较;输出新增、更新和移除名单。--apply 会执行 SCIM CRUD 操作。当 Agent 需要将外部名册与 Roam 成员名单核对,而不想通过管理界面逐项操作时,可使用此功能。
roam-pp-cli scim-diff --roster hris.csv --apply --dry-run
面向 Agent 的基础设施
-
transcript-fanout— 针对日期范围内的每份转录内容运行同一个问题;每份转录内容输出一行,包含答案和引用。当 Agent 需要用一个问题扫描多场会议,而不想对每场会议重复提示时,可使用此功能。
roam-pp-cli transcript-fanout --question "did anyone mention Q3 hiring?" --since 30d --agent -
relay— 将任意标准输入行通过 /chat.post 发送到 Roam 群组,并使用确定性的幂等键和 429 退避机制。当 Agent 需要将流(CI、告警、日志)转发到 Roam,而不想编写自定义 webhook 时,可使用此功能。
tail -F deploys.log | roam-pp-cli relay --to eng-deploys --idempotent-key-prefix deploys
连通性排查
-
doctor token— 针对每个规范系列(HQ、On-Air、Chat、SCIM、Webhooks)探测一个代表性的 GET 请求,并输出此密钥可访问的系列。当 Agent 需要在尝试执行命令前确认现有凭据支持哪些 Roam 命令时,可使用此功能。
roam-pp-cli doctor token
命令参考
addr-info — 管理地址信息
roam-pp-cli addr-info— 获取聊天地址的信息。聊天地址是任何可能参与聊天的实体的名称,例如……
app-uninstall — 管理应用卸载
roam-pp-cli app-uninstall— 撤销访问令牌并卸载应用。成功响应后,您的访问令牌将不再……
chat-delete — 管理聊天删除
roam-pp-cli chat-delete— 删除先前发布的机器人消息。机器人必须拥有要删除的消息(按地址 ID 匹配)。个人……
chat-history — 管理聊天历史记录
roam-pp-cli chat-history— 按日期范围(之后/之前)筛选并列出聊天中的消息。结果的排序取决于筛选条件……
chat-list — 管理聊天列表
roam-pp-cli chat-list— 列出所有可访问的聊天,包括已添加机器人的所有私信、多方私信和频道……
chat-post — 管理聊天发布
roam-pp-cli chat-post— 向聊天发布消息。消息可以是纯 Markdown 文本、丰富的 Block Kit 布局,也可以是……
chat-send-message — 管理聊天消息发送
roam-pp-cli chat-send-message— 向指定收件人发送给定消息。目前,我们仅支持发送到单个群组……
chat-typing — 管理聊天输入状态
roam-pp-cli chat-typing— 通知其他聊天参与者您正在准备回复。如果他们打开了聊天,就会看到“(机器人……
chat-update — 管理聊天更新
roam-pp-cli chat-update— 编辑先前发布的机器人消息。更新后的消息可以包含纯 Markdown 文本或丰富的 [Block……
group-add — 管理群组成员添加
roam-pp-cli group-add— 添加一个或多个群组成员和/或管理员。如果满足以下任一条件,应用可以向群组添加成员……
group-archive — 管理群组归档
roam-pp-cli group-archive— 按 ID 归档群组。**访问权限:**仅限组织。所需范围:group:write--- OpenAPI 规范:……
group-create — 管理群组创建
roam-pp-cli group-create— 创建可用于聊天的群组地址。指定了管理员的群组将以“仅管理员”模式运行……
group-members — 管理群组成员
roam-pp-cli group-members— 列出群组成员。满足以下任一条件时,应用可以列出成员:1. 这是一个公开群组……
group-remove — 管理群组成员移除
roam-pp-cli group-remove— 移除一个或多个群组成员。满足以下任一条件时,应用可以从群组中移除成员:……
group-rename — 管理群组重命名
roam-pp-cli group-rename— 按 ID 重命名群组。应用只能重命名自己担任管理员的群组。**访问权限:**仅限组织……
groups — 管理群组
roam-pp-cli groups 02-create— 在您的 Roam 组织中创建新群组。必填字段:displayName(最多 64 个字符)。可选:……roam-pp-cli groups 02-delete— 在 Roam 中归档群组。这是软删除——群组数据会保留,但变为非活动状态……roam-pp-cli groups 02-get— 按 Roam 地址 ID 获取单个群组。响应包含群组的displayName和members数组……roam-pp-cli groups 02-list— 返回 Roam 组织中的分页群组列表。**分页:**使用startIndex(从 1 开始)和count……roam-pp-cli groups 02-patch— 部分更新群组。可使用此命令添加或移除成员,而无需替换整个群组。**支持的……roam-pp-cli groups 02-replace— 完全替换群组属性。整个members列表将替换为提供的值。**必填……
groups-list — 管理群组列表
roam-pp-cli groups-list— 列出您所在 Roam 中所有公开且未归档的群组。**访问权限:**仅限组织。所需范围:……
item-upload — 管理项目上传
roam-pp-cli item-upload— 上传文件,以便将其作为聊天消息附件发送。返回的对象包含一个 item ID,可用于……
lobby-booking-list — 管理大厅预订列表
roam-pp-cli lobby-booking-list— 列出特定大厅配置的预订,并按日期范围(之后/之前)筛选。结果的排序……
lobby-list — 管理大厅列表
roam-pp-cli lobby-list— 列出账户中的活跃大厅。大厅 URL 的形式为ro.am/{handle}或ro.am/{handle}/{slug}。- ……
magicast-info — 管理 magicast 信息
roam-pp-cli magicast-info— 按 ID 获取 magicast。**访问权限:**组织和个人。在个人模式下,仅可访问由……
magicast-list — 管理 magicast 列表
roam-pp-cli magicast-list— 列出 Roam 中的所有 magicast,按时间倒序排列。**访问权限:**组织和个人。在……
meeting-list — 管理会议列表
roam-pp-cli meeting-list— 列出 home Roam 中的所有会议,并按日期范围(之后/之前)筛选。结果的排序取决于……
meetinglink-create — 管理 meetinglink 创建
roam-pp-cli meetinglink-create— 创建会议链接。**访问权限:**组织和个人。在组织模式下,通过电子邮件指定主持人。在……
meetinglink-info — 管理 meetinglink 信息
roam-pp-cli meetinglink-info— 获取会议链接。**访问权限:**仅限组织。必需范围:meetinglink:read--- OpenAPI 规范:……
meetinglink-update — 管理 meetinglink 更新
roam-pp-cli meetinglink-update— 更新会议链接。**访问权限:**仅限组织。必需范围:meetinglink:write--- OpenAPI 规范:……
messageevent-export — 管理 messageevent 导出
roam-pp-cli messageevent-export— 获取每日消息事件导出,其中包含账户中的私信和群聊。对于使用归档功能的客户……
onair-attendance-list — 管理 onair 出席列表
roam-pp-cli onair-attendance-list— 返回 On-Air 活动的出席报告,汇总 RSVP 数据以及加入/时长信息。访客……
onair-event-cancel — 管理 onair 活动取消
roam-pp-cli onair-event-cancel— 取消 On-Air 活动。此操作无法撤销。**访问权限:**组织和个人。必需范围:……
onair-event-create — 管理 onair 活动创建
roam-pp-cli onair-event-create— 创建新的 On-Air 活动。日历主持人必须是组织成员。使用个人访问……
onair-event-info — 管理 onair 活动信息
roam-pp-cli onair-event-info— 返回单个 On-Air 活动的详情。**访问权限:**组织和个人。必需范围:onair:read……
onair-event-list — 管理 onair 活动列表
roam-pp-cli onair-event-list— 返回组织的分页 On-Air 活动列表。结果按开始时间降序排列……
onair-event-update — 管理 onair 活动更新
roam-pp-cli onair-event-update— 更新现有的 On-Air 活动。仅更新请求正文中提供的字段;未提供的字段保持不变……
onair-guest-add — 管理 onair 访客添加
roam-pp-cli onair-guest-add— 将一位或多位访客添加到 On-Air 活动。**访问权限:**组织和个人。必需范围:onair:write……
onair-guest-info — 管理 onair 访客信息
roam-pp-cli onair-guest-info— 返回单个 On-Air 活动访客的详情。**访问权限:**组织和个人。必需范围:……
onair-guest-list — 管理 onair 访客列表
roam-pp-cli onair-guest-list— 返回 On-Air 活动的分页访客列表。可按 RSVP 状态筛选。结果按……
onair-guest-remove — 管理 onair 访客移除
-
roam-pp-cli onair-guest-remove— 从 On-Air 活动中移除访客。**访问权限:**组织和个人。必需范围:onair:write---…… onair-guest-update — 管理 onair 来宾更新 -
roam-pp-cli onair-guest-update— 更新来宾的 RSVP 状态。**访问权限:**组织和个人。所需范围:onair:write---...
reaction-add — 管理 reaction 添加
roam-pp-cli reaction-add— 为聊天中的消息添加 reaction。**访问权限:**仅限组织。所需范围:chat:send_message或...
recording-list — 管理录制列表
roam-pp-cli recording-list— 列出你所在 Roam 中的所有录制内容,可按日期范围(起始日期/结束日期)筛选。结果的排序取决于...
resource-types — 管理资源类型
roam-pp-cli resource-types— 返回 Roam 支持的资源类型列表:User和Group。此操作无需身份验证...
schemas — 管理架构
roam-pp-cli schemas 03-metadata-get— 根据 URN 标识符返回特定 SCIM 架构的定义。此操作无需身份验证...roam-pp-cli schemas 03-metadata-list— 返回 Roam 支持的所有 SCIM 架构,包括核心 User 和 Group 架构以及 Roam 的自定义角色...
service-provider-config — 管理服务提供方配置
roam-pp-cli service-provider-config— 返回 Roam 的 SCIM 功能和支持的特性。使用此端点可了解支持哪些 SCIM 操作...
test — 管理测试
roam-pp-cli test— 测试端点
token-info — 管理令牌信息
roam-pp-cli token-info— 获取访问令牌的信息,例如 Chat Address。**访问权限:**组织和个人。**无...
transcript-info — 管理转录信息
roam-pp-cli transcript-info— 根据 ID 从你所在的 Roam 获取转录内容。适用于已结束和正在进行的会议。对于实时...
transcript-list — 管理转录列表
roam-pp-cli transcript-list— 列出你所在 Roam 中的所有转录内容,可按日期范围(起始日期/结束日期)筛选。此端点会返回转录...
transcript-prompt — 管理转录提示词
roam-pp-cli transcript-prompt— 针对特定会议转录内容提问,并根据其内容获取 AI 生成的回答。使用...
user-info — 管理用户信息
roam-pp-cli user-info— 根据 ID 获取单个用户的详细信息。**访问权限:**仅限组织。所需范围:user:read...
user-list — 管理用户列表
roam-pp-cli user-list— 列出账户中的所有用户。用户按加入账户的顺序返回。访问权限:...
user-lookup — 管理用户查找
roam-pp-cli user-lookup— 按电子邮件地址查找账户中的用户。**访问权限:**仅限组织。所需范围:user:read和...
userauditlog-list — 管理用户审计日志列表
roam-pp-cli userauditlog-list— 获取账户的用户审计日志条目列表。**访问权限:**仅限组织。所需范围:...
users — 管理用户
roam-pp-cli users 01-create— 在你的 Roam 组织中创建新用户。必填字段:userName、name.givenName、...roam-pp-cli users 01-delete— 在 Roam 中归档用户。这是软删除——用户数据会保留,但用户将失去访问权限。...roam-pp-cli users 01-get— 根据 Roam Person ID 获取单个用户。响应包含所有用户属性、active状态以及...roam-pp-cli users 01-list— 返回你的 Roam 组织中的分页用户列表。**筛选:**支持 SCIM 筛选表达式,例如...roam-pp-cli users 01-patch— 部分更新用户。Roam 支持针对 Users 的 SCIM PATCH,但语义有限。支持的操作: -...roam-pp-cli users 01-replace— 完全替换用户属性。请求正文中必须提供所有必填字段。**Roam 特有的...
webhook-subscribe — 管理 Webhook 订阅
roam-pp-cli webhook-subscribe— 为指定事件创建或更新 Webhook 订阅。如果同一事件的订阅已存在且……
webhook-unsubscribe — 管理 Webhook 取消订阅
roam-pp-cli webhook-unsubscribe— 按 ID 移除 Webhook 订阅。**访问权限:**仅限组织。所需范围:webhook:write---...
查找合适的命令
如果你知道要做什么,但不知道该用哪个命令,可以直接询问 CLI:
roam-pp-cli which "<capability in your own words>"
which 会根据自然语言能力查询,从此 CLI 精选的功能索引中匹配最合适的命令。退出代码 0 表示至少有一个匹配项;退出代码 2 表示没有足够确定的匹配项——请改用 --help,或尝试更具体的查询。
使用示例
每日站会摘要
roam-pp-cli decisions --since 1d --in-group standup --agent --select transcript_id,line,speaker
提取站会群组昨天的决策,并附上引用,以便 Agent 使用。
跨会议问题扫描
roam-pp-cli transcript-fanout --question "did anyone mention Q3 hiring?" --since 30d --agent
针对过去 30 天内的每份转录记录,提出同一个问题。
将 HRIS 名单与 Roam SCIM 对账
roam-pp-cli scim-diff --roster hris.csv --apply --dry-run
应用更改前查看新增、更新和移除项;去掉 --dry-run 即可执行。
将 CI 警报导入 Roam
tail -F /var/log/ci.log | roam-pp-cli relay --to eng-alerts --idempotent-key-prefix ci
将 CI 日志行流式传入 Roam 群组,并进行确定性去重。
精简深层嵌套的转录响应
roam-pp-cli transcript-info --id <id> --json --select segments.speaker,segments.text
使用 --select 和点分路径,在较长的转录记录中减少 Agent 上下文。
身份验证设置
通过 ROAM_API_KEY 使用 Bearer 身份验证。Roam 支持两类密钥:完全访问权限的组织密钥和个人访问令牌。部分 HQ v1 端点需要完全访问权限;Chat/Transcript v0 端点支持 PAT。运行 roam-pp-cli doctor token,查看你的密钥可访问哪些端点类别。
运行 roam-pp-cli doctor 验证设置。
Agent 模式
在任意命令中添加 --agent。它会展开为:--json --compact --no-input --no-color --yes。
-
支持管道传输 — JSON 输出到 stdout,错误输出到 stderr
-
支持筛选 —
--select可保留部分字段。点分路径可深入嵌套结构;数组会逐个遍历元素。对于内容冗长的 API,这对控制上下文大小至关重要:roam-pp-cli addr-info --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 是终端时,才会将便于阅读的 N results (live) 摘要打印到 stderr;通过管道接收或由 Agent 消费时,stdout 中只有纯 JSON。
Agent 反馈
如果你(或 Agent)发现此 CLI 有不妥之处,请记录下来:
roam-pp-cli feedback "the --since flag is inclusive but docs say exclusive"
roam-pp-cli feedback --stdin < notes.txt
roam-pp-cli feedback list --json --limit 10
条目保存在本地的 ~/.roam-pp-cli/feedback.jsonl 中。只有设置了 ROAM_FEEDBACK_ENDPOINT,并且传入了 --send 或设置了 ROAM_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”模式。
roam-pp-cli profile save briefing --json
roam-pp-cli --profile briefing addr-info
roam-pp-cli profile list --json
roam-pp-cli profile show briefing
roam-pp-cli profile delete briefing --yes
显式标志始终优先于配置文件值;配置文件值优先于默认值。agent-context 会在 available_profiles 下列出所有可用配置文件,让能够自省的 Agent 在运行时发现它们。
退出代码
| 代码 | 含义 |
|---|---|
| 0 | 成功 |
| 2 | 用法错误(参数错误) |
| 3 | 未找到资源 |
| 4 | 需要身份验证 |
| 5 | API 错误(上游问题) |
| 7 | 触发速率限制(等待后重试) |
| 10 | 配置错误 |
参数解析
解析 $ARGUMENTS:
- 为空、
help或--help→ 显示roam-pp-cli --help输出 - 以
install开头 → 以mcp结尾 → 安装 MCP;否则 → 参见上文的先决条件 - 其他任何内容 → 直接使用(作为带有
--agent的 CLI 命令执行)
MCP 服务安装
从此 CLI 发布的公共库条目或预构建版本安装 MCP 二进制文件,然后注册:
claude mcp add roam-pp-mcp -- roam-pp-mcp
验证:claude mcp list
直接使用
- 检查是否已安装:
which roam-pp-cli如果未找到,提供安装选项(参见本技能开头的先决条件)。 - 将用户查询与上文“独特功能”和“命令参考”中的最佳命令匹配。
- 使用
--agent标志执行:roam-pp-cli <command> [subcommand] [args] --agent - 如果存在歧义,深入查看子命令帮助:
roam-pp-cli <command> --help。