关于 prwatch
prwatch 是面向有未合并 GitHub PR 的贡献者的分流工具,按紧急程度排序并说明原因,帮助判断先处理哪个 PR。它会区分可由贡献者修复的问题与外部阻塞。
主要功能
- 01按紧急程度排序未合并 PR
- 02给出分数、类别和排序原因
- 03查看审查状态、检查结果和未解决线程
- 04将外部阻塞与代码问题区分
- 05提供 CLI 和 JSON 报告
适用场景
- 01多个 PR 同时收到审查时确定处理顺序
- 02查找需要回复或修改的审查线程
- 03识别由部署授权导致的外部阻塞
- 04快速查看单个 PR 的详细状态
MCP 相关
以 stdio MCP 服务提供注意事项报告、开放 PR 列表和单个 PR 状态详情。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
3收录的工具列表 · 更新于 2 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| repo | string | 否 | 可选的 owner/repo 筛选条件,例如 shadcn-labs/pdfcn。 |
| user | string | 否 | GitHub 用户名。默认使用令牌所有者的用户名。 |
详细介绍
prwatch
现在有什么需要你关注? prwatch 会为有未合并 PR 的贡献者解答这个问题。
它源于真实的一天:同一个仓库里有 3 个未合并 PR,CodeRabbit 对这 3 个 PR 都进行了审查,Vercel 部署失败却不是作者的过错,而且无法一眼看出到底哪个 PR 需要处理。手动阅读每个 PR 中的所有审查讨论串已经是过去的做法。prwatch 会根据紧急程度对未合并 PR 排序,并给出易于理解的原因,让你先打开最该处理的 PR。
安装
要求:Node 20+。
git clone https://github.com/CloudCorpRecords/prwatch
cd prwatch
npm install
npm run build
npm link # or run with npx tsx src/cli.ts
设置 GITHUB_TOKEN(或 GH_TOKEN),即可获得每小时 5000 次的已认证速率限制。没有令牌时,每小时仍可使用 60 次的未认证速率限制。
使用 Docker 运行
prwatch 也以容器镜像的形式发布在 GHCR:ghcr.io/cloudcorprecords/prwatch。
将其用作 stdio MCP 服务:
docker run -i ghcr.io/cloudcorprecords/prwatch
可以在镜像名称后传入任何 CLI 命令,以替代默认的 mcp 参数:
docker run ghcr.io/cloudcorprecords/prwatch <command> [args]
身份验证
令牌为可选项。--repo 模式和 prwatch show 无需令牌即可运行,因为它们不会访问搜索 API。面向整个账户的报告(不带 --repo 的 attention / list)会使用 author: 搜索;GitHub 对某些账户的未认证调用限制了此搜索,因此建议使用令牌。无作用域的经典令牌足以访问公开数据;没有令牌时,程序会提供清晰的指引,而不是原始的 422 错误。
CLI 用法
prwatch attention # rank my open PRs by urgency
prwatch attention --user octocat --repo shadcn-labs/pdfcn
prwatch attention --json # machine readable output
prwatch list # simple one line per PR
prwatch show https://github.com/shadcn-labs/pdfcn/pull/92
输出示例:
[ACTION] 74 shadcn-labs/pdfcn#92
feat: add Business Letter block
- 4 unresolved review threads need a reply or code change (business-letter.tsx, business-letter.mdx)
https://github.com/shadcn-labs/pdfcn/pull/92
[READY] 45 shadcn-labs/pdfcn#93
feat: add Resume block
- Approved and green, ready to merge.
https://github.com/shadcn-labs/pdfcn/pull/93
prwatch show 会提供深入分析:审查状态、每项检查及其结论、包含文件和行号的未解决审查讨论串,以及完整的关注度分析。
MCP 服务
使用与 CLI 相同的引擎,通过 stdio 为 Claude、Cursor 和 Cline 提供服务:
| 工具 | 功能 |
|---|---|
attention_report({user?, repo?}) | 按排名显示关注度报告,包含分数、类别和原因 |
list_my_prs({user?, repo?}) | 简单列出未合并 PR |
pr_status({url}) | 深入分析单个 PR:审查、检查、讨论串和关注度分数 |
Claude Code / Cursor 配置(~/.claude.json 或 MCP 设置):
{
"mcpServers": {
"prwatch": {
"command": "node",
"args": ["/absolute/path/to/prwatch/dist/mcp.js"],
"env": { "GITHUB_TOKEN": "ghp_your_token_here" }
}
}
}
直接使用 npm run start:mcp 启动。
评分机制
每个未合并 PR 的初始分数为 50,并根据各种信号增加或降低紧急程度:
| 信号 | 影响 |
|---|---|
| 审查者要求修改 | +30,类别 ACTION |
| 合并冲突(分支不可合并) | +25,类别 ACTION |
| 你的代码检查失败(构建、测试、lint、DCO) | 每项 +12,类别 ACTION |
| 要求修改的未解决审查讨论串 | 每条 +8,类别 ACTION |
| 已获批准、检查全部通过且可合并 | READY,分数最高为 45 |
| 与你无关的检查失败(例如 Vercel 提示“Authorization required to deploy”) | 归类为 BLOCKED_EXTERNAL,紧急程度较低 |
| 检查仍在运行 | WAITING |
| 7 天以上没有动静且未获批准 | STALE |
分数限制在 0–100。类别按以下顺序排列:ACTION、BLOCKED_EXTERNAL、READY、WAITING、STALE。报告先按分数排序,再按类别排序。
有两项判断标准值得了解:
- 外部阻碍不算失败。 如果预览部署失败是因为维护者必须先授权,GitHub 会将其标记为“failure”,但修改代码并不能解决问题。prwatch 会检测已知模式(需要授权、登录后才能部署、等待团队批准),并将其归类为外部阻碍,因此绝不会因此提高你的紧急程度。
- 讨论串是否已解决是近似判断。 GitHub REST API 无法指出审查讨论串是否已解决,因此,非作者的顶层审查评论会被视为未解决讨论串。提出修改建议的评论(代码建议、“please”、“consider”、“fix”)会被视为需要采取行动。
开发
npm install
npm test # tsx --test test/*.test.ts
npm run build # tsc, emits to dist/
npm run dev # run the CLI from source
test/fixtures/ 中的测试样例参考了 shadcn-labs/pdfcn 在 2026-10-13 的 PR #92、#93 和 #94 的真实数据结构。测试不会访问网络。
许可证
MIT。Copyright (c) 2026 Rene Turcios。详见 LICENSE。
工具套件
此工具是开源贡献工作流中的四款工具之一,它们都以 @reneturcios npm 作用域发布,且每款都提供 CLI 和 MCP 服务(<tool> mcp):
- gatefile(
npx @reneturcios/gatefile)会提取仓库的贡献门槛,并将其写入已提交的contribution-gates.json。 - greenlight(
npx @reneturcios/greenlight)会预检问题(GO / RISKY / TAKEN / GATED / STALE),在check和scan中使用 gatefile 的输出,然后认领问题、做好准备并提交 PR。 - claimcheck(
npx @reneturcios/claimcheck)会监控过期认领,以及停留在 fork 上的修复。 - prwatch(
npx @reneturcios/prwatch)会根据哪些未合并 PR 需要你立即处理,对它们进行分类。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。