关于 babysit-pr
babysit-pr 是一项持续监控单个 GitHub 拉取请求的技能,直到其合并、关闭或需要用户介入。它循环处理评审意见和 CI 失败,在明确限制下修复或提出处理方案,并持续轮询,而不把检查变绿视为结束。
主要功能
- 01轮询 PR 状态和新评审意见
- 02处理前分类 CI 失败
- 03修复真实失败或重跑偶发失败
- 04回复人工评审前要求确认
- 05跟踪尝试次数限制和终止状态
适用场景
- 01持续跟进拉取请求的评审和 CI 更新
- 02处理机器人反馈和已确认的 CI 失败
- 03在检查通过后继续等待后续评审
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ timschoch/ skilly --skill babysit-pr安装后在 Claude Code 中输入/babysit-pr确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
README.mdscripts/classify-failure.shclassify-failure.test.shpr-state.shpr-state.test.shresolve-thread.shwatch.shwatch.test.sh详细介绍
在 PR 达到可合并状态前持续跟进:轮询、分类、修复、推送,再次轮询。终态为 已合并、已关闭、需要用户处理。除此之外,任何情况都不能结束循环;推送、检查通过或报告都不行。
循环
每轮:
- 获取快照。 运行
bash scripts/pr-state.sh <pr> [--since <lastPushAt>]。将上一轮的lastPushAt传给--since,这样只会显示上次推送之后的新审核事项。 - 优先检查终态。 如果
state为MERGED或CLOSED,报告状态并停止。 - 先处理审核事项,再处理 CI。 修复提交会触发 CI,因此先回复审核意见,可以避免在即将被替换的 SHA 上浪费一次重跑。
- CI。 对于每项
conclusion为失败的检查,在修改代码前运行bash scripts/classify-failure.sh <check-url>。 - 推送。 在 PR 的头部分支上提交并推送,然后返回第 1 步,检查新 SHA。
- 等待。
bash scripts/watch.sh <pr>会阻塞,直到检查结果稳定,然后输出新的快照。请用它代替休眠。等待时长上限由BABYSIT_MAX_MINUTES控制,默认为 60。
规则
- 只处理已发布且最新的事项。 仅处理
submittedAt或createdAt晚于lastPushAt的审核事项。pr-state.sh会忽略PENDING审核:审核者仍在撰写时,还没有发表意见。上次推送前已回复的事项仍视为已回复。 - 先分类失败,再按类别处理。
classify-failure.sh会根据日志证据输出flaky或real,然后显示前 20 行失败日志。real:修复分支。flaky:使用gh run rerun <run-id> --failed重跑。只要失败仍被判定为flaky,就不要改动测试、构建脚本、CI 配置和依赖版本固定项。只为掩盖基础设施问题而提交修复,会让下游所有人都看不到真实信号。 - 每个 PR 的 CI 预算:3 次尝试。 对红色检查进行的一次修复推送或重跑算作一次尝试;审核修复推送不计入。检查再次稳定为红色时,即为失败。
- 第三次尝试失败:即使还有想法,也要停止并标记为需要用户处理。
- 告知用户哪些检查失败、每次尝试修改了什么,以及前 20 行失败日志。
- 向人类传达用户原话,而不是你的话。 人类审核者是
reviews[].author中既非 PR 作者、也未标记为isBot的任何人。将其审核事项转达给用户,并附上建议回复;在用户明确确认前,不要向 GitHub 发布任何内容。机器人审核事项由你自行处理并解决。 - 解决已修复的事项。 推送修复后,运行
bash scripts/resolve-thread.sh <threadId>,其中threadId来自快照中的threads[].id。 - 是否合并由用户决定。 完成规则(
.claude/rules/workflow-done.md):已提交表示完成,已推送表示已获认可。只有使用--merge,或用户在本次会话中提出合并时,才进入合并模式。否则,检查通过后停止并报告。 - 合并模式只能在检查通过后合并,绝不能提前。 运行
gh pr merge <pr> --squash --match-head-commit <headSha>;若使用--merge=merge,则用--merge替代--squash。然后再获取一次快照:MERGED表示循环结束。headSha来自检查通过时的快照:若之后有推送落地,就不能合并。- 绝不要使用
--auto:如果仓库没有必需检查,它会立即合并,而不是等 CI 稳定。 - 绝不要使用
--delete-branch。
- 检查通过是一个里程碑,不是退出条件。 没有失败检查、
mergeable: MERGEABLE、没有未解决的讨论串时,报告“已准备好合并”,然后继续轮询。PR 开启期间仍可能收到新的审核事项。合并模式则在此处合并。
审核者集合
pr-state.sh 会从 git 根目录下的 .skilly/config.json 读取机器人登录名:
{ "review": { "bots": ["chatgpt-codex-connector[bot]", "some-reviewer"] } }
以 [bot] 结尾的登录名也会被视为机器人。缺少键或文件时,列表为空;除 PR 作者外的所有审核者都会被视为人类审核者。每次运行都读取配置;不要记住任何登录名。
CI
检查项以 PR 报告的内容为准。.skilly/config.json 中的仓库层级决定检查项集合(verify 技能会说明各层级)。所有层级都会运行 verify 这一项检查,因此 verify 失败总是说明此分支存在问题。
提交
使用约定式提交,并按内容添加前缀:检查未通过时使用 fix:,小的 lint 或配置问题使用 chore:。添加一行正文,便于检索变更来源:
Babysit-pr: fixes review thread <thread-url>
报告
每轮结束时都注明:HEAD SHA、检查统计、是否可合并、推送了什么、已使用的 CI 尝试次数(最多 3 次),以及仍待处理的事项。
评论
支持 Markdown