cc-pr-tracker:在输入框上方查看 Claude Code PR 状态
在 Claude Code 输入框上方为每个 GitHub PR 显示一行:合并状态、审查、必需检查,状态变化时发出提醒。
权限
- 读取文件可以读取你电脑上的文件并列出目录($.fs.read / list / stat / exists)。
- 执行命令可以在你的电脑上运行 shell 程序($.process.run / spawn)。具体运行哪些程序请查看源码。
- 拦截工具调用能看到 Claude 发起的每一次工具调用(tool.call / tool.check),并可以阻止或修改它。
- 读取你的提示词可以看到你输入的内容和对话记录(prompt.* / session.append / session.messages)。
- 修改界面在 Claude Code 界面中绘制内容:横条、面板、状态文字、弹出通知(ui.render / $.ui.*)。
- 添加命令/工具注册新的斜杠命令或工具,供你或 Claude 调用($.command.register / $.tool.register)。
- 存储数据在插件的私有存储中跨会话保存数据($.store.*)。
- 实测版本
- v2.1.296
- 最近实测
- 需要
- Claude Code ≥ 2.1.287
- 显示位置
- 输入框上方、弹出通知
这个插件能做什么?
cc-pr-tracker 是一款社区插件,作者是 Seza Akgün(sezaakgun),它让你在工作时始终能看到 Claude Code PR 状态。粘贴一个 GitHub 拉取请求(PR)的链接,或者让 Claude 自己创建一个 PR,这个 PR 就会在输入框上方占据一行:显示它的合并状态、审查结论、必需检查中通过、失败和等待中的数量,以及标题。默认每分钟刷新一次。
当某个必需检查发生变化或合并状态改变时,你会收到一条弹出提示,输入框上方会出现一条持续一秒的闪烁条,在 macOS 上还会播放系统提示音。Claude 也会在下一轮收到一条简短的自动说明,附带失败检查的日志链接。把鼠标悬停在某一行上会显示按钮,可以打开 PR、复制链接、静音、显示详情面板或停止关注。Claude 可以通过 pr_status 工具自己查询状态,而 /prs 可以在任何地方以文本形式列出所关注的 PR。
它和 提示框上方的 Git 分支 很接近,后者显示的是本地分支,而 cc-pr-tracker 关注的是 GitHub 而非你的工作区。如果你只想在一轮结束时收到一条简单的提示,请看 完成提示。作者的 README 要求 Claude Code 2.1.289 或更高版本才能使用全部功能;更早的版本只会把关注列表保存在内存中。
演示
录屏使用的是作者自己提供的替身 gh 脚本(仓库中的 docs/record/gh),它用预先准备的 JSON 回应插件的 GraphQL 调用,因此不会查询任何真实的 GitHub 仓库。我们在小型演示项目里启动加载了该插件的 Claude Code,然后把两个 PR 链接作为一条提示词粘贴进去:acme/api#87 和 acme/storefront#418。这里没有运行任何模型轮次。Claude Code 显示 "Prompt dropped by a hook: watching acme/api#87, watching acme/storefront#418",输入框上方随即出现两行,每行包含仓库和编号、红色的 blocked、绿色的 approved、绿色的通过检查数、黄色的等待检查数,以及 PR 标题。
安装
使用安装区块中的任意一种方式;它们都直接从作者自己的插件市场安装。你还需要安装并登录 gh(gh auth status)。如果想从克隆的仓库只试用一个会话,可以在仓库中运行 claude --plugin-dir .。运行 /plugin 确认插件已启用。
$ install cc-pr-tracker
需要 Claude Code ≥ 2.1.287
从作者自己的 marketplace 安装: sezaakgun/cc-pr-tracker
1.在 Claude Code 中一行安装
/plugin install cc-pr-tracker --marketplace sezaakgun/cc-pr-tracker粘贴到正在运行的会话中(v2.1.275+)。Claude Code 会先询问是否添加该插件市场。
2.从终端安装
claude plugin marketplace add sezaakgun/cc-pr-tracker claude plugin install cc-pr-tracker@cc-pr-tracker然后在所有已打开的会话中运行 /reload-plugins。
3.免安装试用
git clone https://github.com/sezaakgun/cc-pr-tracker claude --plugin-dir ./cc-pr-tracker仅在当前会话中加载该插件,不会写入你的设置。
工作原理
这个插件只有一个 hooks 模块。prompt.submit 从你的提示词中读取 PR 链接,turn.complete 和针对 Bash 的 tool.call hook 会捕获 Claude 回答中以及 gh pr create 输出中的链接,AbovePrompt 上的 ui.render 负责绘制这些行。在 session.start 中启动的计时器会通过 gh 轮询每个关注的 PR。以下是这个调用,来自 hooks/register.tsx:
const gh = async (args: string[]) => {
const { stdout, stderr, exitCode } = await $.process.run(['gh', ...args], { timeoutMs: 30_000 })
if (exitCode) throw new Error(stderr.trim() || `gh exited ${exitCode}`)
return JSON.parse(stdout)
}每次轮询都是一次只读的 gh api graphql 查询,获取 PR 的标题、状态、合并状态、审查结论以及其最新提交上的检查,并带上 GitHub 自己的 isRequired 标记。每个检查只保留最近一次运行,分组方式与 gh pr checks 相同。如果 GitHub 拒绝 GraphQL 请求(例如在 claude.ai/code 中),插件会改为每次轮询发起四到六次 REST 调用。轮询失败时会保留旧值,并把该行标记为 refresh failed,这样网络的短暂波动不会被当作状态变化报告出来。PR 的首次加载,以及进入或离开临时的 unknown 合并状态,都不会触发提醒。
自定义
打开 /config,找到 cc-pr-tracker 的各行;每一项也可以用 /config cc-pr-tracker.<field>=<value> 设置,并立即生效。十二个选项分别是:Mute all PR alerts(静音所有 PR 提醒)、Alert on(提醒范围:每次变化、失败与可合并,或仅失败)、Tell Claude about changes(把变化告诉 Claude)、Alert sound(提醒声音)、Poll every(轮询间隔,单位为秒)、Auto-watch PRs(自动关注 PR)、Remember watched PRs(记住关注的 PR:仅本会话或本项目)、Stop watching merged or closed PRs(停止关注已合并或已关闭的 PR)、Count all checks(统计所有检查)、Alert on review changes(审查变化时提醒)、Flash strip(闪烁条)和 Show PRs in the transcript(在对话记录中显示 PR)。每行的悬停按钮可以静音或停止关注单个 PR。
权限与安全
我们读过了插件会加载的每一个文件:.claude-plugin/plugin.json、hooks/hooks.json、hooks/register.tsx(约 740 行可读的 TypeScript)、类型声明、两个测试文件,以及仓库中的辅助脚本和工作流。没有 package.json、安装脚本、打包或压缩后的代码、远程代码,也没有动态 import()。docs/record/ 下的脚本只用于生成 README 中的图片,插件不会加载它们。
检查结果如下,均与 README 的描述一致:
- 网络: 插件自身不发出任何请求。它会针对你关注的 PR 运行
gh api graphql(或通过 REST 运行gh api repos/...),因此所有者、仓库和 PR 编号会以你的gh登录身份发送到 github.com。 - 进程: 轮询时运行
gh;打开按钮使用open或xdg-open;提醒时用afplay播放 macOS 系统提示音;此外,仅在 cmux 终端中,会运行CMUX_BUNDLED_CLI_PATH指向的 cmux 自带 CLI,用来让窗格闪烁并发送通知。参数以数组形式传递,而不是 shell 字符串。 - 环境变量: 只读取
CMUX_BUNDLED_CLI_PATH和CMUX_SURFACE_ID,从不写入环境变量。 - 文件: 不写入任何文件。关注列表保存在插件自己的
$.store和$.state中,按会话或项目区分;30 天内没有被轮询的列表会被清理。 - 对提示词的影响: 提醒触发后,插件会向对话追加一条用户角色的说明。这条说明会注明它是自动通知、并非由你撰写,并把来自 GitHub 的检查名称作为数据引用,长度上限为 100 个字符。GitHub 文本中的控制字符在显示前会被去除。你可以通过 "Tell Claude about changes" 关闭这条说明。插件还为 Claude 注册了一个
pr_status工具。 - 拦截型 hook: 只包含 PR 链接的提示词会被丢弃(不触发模型轮次),这是文档中说明的行为。更长的提示词会原样通过。
Bashhook 只读取gh pr create的输出。 - 守护进程与遥测: 没有。轮询计时器运行在 Claude Code 内部,随它一起停止。没有任何统计分析。
- 依赖: 已登录的
gh。声音需要 macOS;cmux 为可选。 - 许可证: MIT,附带 LICENSE 文件。
claude plugin validate 没有报告任何错误或警告;它的提示信息列出了四个没有 .catch 的 hook(config.set、prompt.submit 以及两个 tool.call hook),这只是提示性信息。作者的 70 个测试在 Claude Code 2.1.296 上全部通过。
- 读取文件
- 可以读取你电脑上的文件并列出目录($.fs.read / list / stat / exists)。
- 执行命令
- 可以在你的电脑上运行 shell 程序($.process.run / spawn)。具体运行哪些程序请查看源码。
- 拦截工具调用
- 能看到 Claude 发起的每一次工具调用(tool.call / tool.check),并可以阻止或修改它。
- 读取你的提示词
- 可以看到你输入的内容和对话记录(prompt.* / session.append / session.messages)。
- 修改界面
- 在 Claude Code 界面中绘制内容:横条、面板、状态文字、弹出通知(ui.render / $.ui.*)。
- 添加命令/工具
- 注册新的斜杠命令或工具,供你或 Claude 调用($.command.register / $.tool.register)。
- 存储数据
- 在插件的私有存储中跨会话保存数据($.store.*)。
兼容性与故障排除
已在 macOS 上使用 Claude Code 2.1.296 检查(validate、测试和录屏)。如果有功能无法正常工作:
- 链接被发送给了模型。 说明插件没有加载。检查
claude --version是否为 2.1.287 或更高版本,以及/plugin是否在已启用的插件中列出了 cc-pr-tracker。 - 某行显示
gh failed: …。 在终端中运行gh pr view <url>;通常是gh没有登录,或者无权访问该仓库。 - 没有悬停按钮。 你的终端不上报鼠标事件;再次粘贴该链接即可停止关注,或者使用
/prs。 - 没有声音。 只有带
/System/Library/Sounds的 macOS 才会播放声音。 - 只识别
github.com链接,不支持 GitHub Enterprise 主机。
常见问题
- cc-pr-tracker 需要 GitHub token 或 API 密钥吗?
- 它需要已登录的 GitHub CLI(gh),并且能访问你关注的仓库。插件自身不保存任何 token;每次轮询都会运行 gh,所以它能看到什么,由 gh 自己的登录状态决定。
- 它多久轮询一次?会消耗模型 token 吗?
- 默认每 60 秒一次,每个 PR 通过 gh 发起一次 GraphQL 调用;间隔可在 /config 中设为 30 到 3600 秒。轮询不会调用模型。只有提醒触发时,才会添加一条简短说明,由 Claude 在下一轮读取。
- 为什么我粘贴 PR 链接后,提示词消失了?
- 只包含 PR 链接的提示词会被插件丢弃,并开始(或停止)关注这些 PR,不会触发模型轮次。Claude Code 会显示 "Prompt dropped by a hook: watching owner/repo#N"。如果链接位于一段更长的提示词中,它会被关注,提示词也照常执行。
- Claude 能看到 PR 状态吗?
- 能。插件注册了一个 pr_status 工具,Claude 可以通过它查询所关注 PR 的状态、合并状态、审查和检查,而不必调用 gh。提醒触发后,插件还会添加一条自动说明,标明并非由你撰写,并附上失败检查的日志链接。
- 怎样关闭提醒?
- 把鼠标悬停在某一行上并点击静音按钮可以静音单个 PR,或在 /config 中开启 "Mute all PR alerts"。各行仍会继续更新,但不会弹出提示、闪烁、播放声音或通知 Claude。"Alert sound"、"Flash strip" 和 "Tell Claude about changes" 可以分别关闭其中某一部分。
# 相关插件
精选
精选更多 Git 与 GitHub、提示与通知。