不止审一次代码:用 Holon 搭建持续跟进 PR 的 Reviewer

蓝色 Reviewer 面对代码面板,前方的 PR 流程依次展示修改、等待与检查通过。

案例来自 Holon 仓库自身的 holon-reviewer;案例记录采集于 2026 年 9 月 10 日。

作者推送了修复,reviewer 确认原来的问题已经解决。几分钟后,CI 又红了。

Holon 仓库的 PR #2854 就经历过这个过程。它修改了工作项的完成行为:Agent 完成另一项工作时,不应连带结束自己正在执行的工作。第一次修复解决了调度问题,却带入了错误的测试期望;reviewer 再次提出阻塞意见,直到作者修正、最终版本的检查通过,才进入合并与收尾。

代码版本审阅判断后续动作
589405cc两个调度端到端测试失败,定位到工作项分类错误提出阻塞意见,等待修复
19f390ca原问题已修复,调度检查通过;另一条测试期望被改反再次提出阻塞意见,等待新版本
f7b93809测试期望恢复,最终版本的相关检查通过确认合并结果,完成工作项

这一过程发生在 2026 年 9 月 9 日,提交、公开审阅与合并结果已和 GitHub 快照核对。部分 CI 任务按条件跳过,表中的“通过”只指实际执行的相关检查。

在 2026 年 6 月 12 日至 9 月 12 日的三个月里,Holon Reviewer 参与审阅了 Holon 仓库的 763 个已合并 PR,覆盖同期 804 个已合并 PR 的约 95%,在这些 PR 上累计提交 1,529 次审阅。

以上合并统计 holonbot 与本机 Reviewer 使用的个人 GitHub 账号 jolestar,排除 Copilot;覆盖的 PR 数按 PR 去重。

下面创建一个 reviewer,让它自动接手仓库的新 PR,在修复和 CI 更新后继续跟进。

从模板创建 Reviewer

先按创建第一个 Agent完成 Holon 安装、模型配置,并启动常驻 runtime。运行 Holon 的机器需要能访问目标仓库,备好 GitHub CLI(gh)及项目测试工具。持续接收事件还会用到 AgentInbox 和 UXC,后面会检查接入。

在自己的终端中,从官方模板创建一个名为 reviewer 的 Agent:

holon agent create reviewer --template https://github.com/holon-run/holon/tree/4895eafce1926cb4cc4687c5b9a99c13b071a1e4/agent_templates/code-reviewer

这里固定模板版本,避免命令依赖 holon-reviewer 更名为 code-reviewer 的改动何时进入 main。如果已经安装或同步了更名后的模板,也可以用模板名;两种方式选一种即可:

holon agent create reviewer --template code-reviewer

reviewer 是你创建的 Agent 名称,code-reviewer 是模板名。若已有同名 Agent,换一个名称,不要覆盖原来的工作记录。

创建后运行 holon agent list,确认新 Agent 出现在列表中,再从 TUI 或 Web GUI 选择它。

模板内置的 AGENTS.md

code-reviewer 模板包含 AGENTS.md,创建时用它初始化新 Agent 的工作规范,并安装模板声明的 Skills。下面摘录文件中的职责定义和权限确认清单:

# Code Reviewer Agent

You are a long-lived code review agent responsible for code review, PR
lifecycle tracking, and merge decisions.

## Permission Confirmation Protocol

For **non-one-time** review work, confirm the following with the operator
before starting, then record the confirmed scope in your agent-local
AGENTS.md:

- whether you may merge PRs
- whether you should subscribe to PR events via `agentinbox` follow
- whether you may approve PRs
- whether you may fix code on behalf of the author

这份规范要求 Agent 审代码、跟进 PR、判断能否合并。开始持续工作前,它需要向你确认权限,并记入自己的 AGENTS.md。安装模板不会自动授予合并权限。

文件后面的章节规定了怎么工作:

审阅的具体方法由 Skills 提供:code-review 规定证据、问题分类和验证范围,github-review 负责 GitHub 上的上下文收集、去重与审阅发布。ghx、sview 辅助平台操作和源码阅读,agentinbox、uxc 负责事件接入。

你只需补充项目要求,不用从头写审阅提示词。要调整通用职责或替换 Skills,可以参考Agent 模板指南。

开始前确认职责与合并权限

向 reviewer 说明负责的仓库、项目要求和操作权限:

负责 <owner/repo> 的 PR,订阅仓库并自动审阅新 PR,持续跟进到合并或关闭。
本地仓库在 <绝对路径>,重点看兼容性,中文反馈;允许隔离测试、评论和批准。
最终版本的必要检查通过、无遗留阻塞且符合仓库合并规则时,可以直接合并。
不代作者修代码;重大或安全敏感变更先问我。请记住这些长期要求。

让 reviewer 确认并记入自己的 AGENTS.md,后续新 PR 沿用这份授权。构建、测试和代码约定优先读取仓库本身的 AGENTS.md;如果团队只允许 squash 合并,也在这里说明。

这份授权还需要 GitHub 账号具备相应权限,并遵守仓库保护规则。模板不提供凭据。首次试用选自己熟悉的低风险 PR,并为测试准备隔离环境。

订阅仓库,自动发现 PR

职责确认后,接通事件来源。Holon 仓库自身的 holon-reviewer 在工作规范中采用两层订阅:

模板提供逐 PR 跟进规则与接入 Skills,前面的授权确定仓库和自动接手范围。外部服务仍需单独认证、订阅。

事件通过 AgentInbox 接收,再通知 Holon 恢复工作;GitHub 适配会用到 UXC。让 reviewer 按自带的 Skill 完成接入即可:

请按 agentinbox Skill 接通这个仓库的新 PR 订阅和逐 PR 的 CI、评论跟进,缺少工具或认证时告诉我。

reviewer 会按 Skill 检查服务、仓库访问和自己的唤醒目标,并指出需要你完成的安装或认证。凭据通过工具的认证流程配置,不要贴进对话。接入细节见AgentInbox 接入指南。

接入后,让它确认仓库发现订阅已生效。不要假定新事件订阅会补齐历史;要接管已有的未关闭 PR,再补一句“也接管当前打开的 PR”。

检查它是否自动开始审阅

等仓库出现一条适合试运行的新 PR,观察 reviewer 能否从事件发现它,自动建立 WorkItem 并开始审阅。这次不要手动发送 PR 地址。

如果新 PR 出现后没有开始审阅,先检查仓库发现订阅、AgentInbox 的事件记录和 reviewer 的唤醒目标。手动发一条 PR 可以测试单次审阅,但不能证明仓库自动接入已经生效。

打开这条 PR 对应的 WorkItem,应该能找到已审 head、问题与证据、已经完成的验证,以及下一步在等什么。修复到达时,reviewer 就能拿新版本对照上次的阻塞项。

首次审阅结果可以按这份示例检查:

已审版本:<head SHA>
阻塞问题:<问题、位置与依据>;或本次未发现阻塞问题
验证:<已执行的测试和结果>;<未覆盖的范围>
下一步:等待 <作者修复 / 当前 head 的 CI / 维护者决定>

验证一次真正的持续复查

先让现有 CI 跑完,检查 reviewer 是否收到事件并更新检查结果。再等作者正常提交更新,观察它是否回到同一条 PR 的 WorkItem,复查新版本。期间不用发“请继续”。CI 通知和新提交都要检查,前者不能替代后者。

核对复查记录:

如果 AgentInbox 已收到事件,reviewer 却没有恢复,先检查唤醒目标、runtime 是否在线及工作项等待条件;如果恢复了却仍引用旧 CI,就要求它重新核对提交。补发一句“继续”可以临时推进工作,但不能代替这次接入验证。

PR #2854 的第二版修好了旧问题,却带入了另一个错误。复查记录需要区分两者,让作者知道下一步该改哪里。

合并与收尾

最终 head 的必要检查通过、没有遗留阻塞且符合仓库规则后,reviewer 可以按授权直接合并。需要升级处理的变更,或权限、检查不满足要求的 PR,应先说明原因,交给你决定。

交付应写明实际合并结果、最终提交和未验证范围。PR 合并或关闭后,reviewer 按模板要求确认终态、完成 WorkItem,并清理该任务的订阅;共享事件源留给其他工作。

保留仓库订阅,reviewer 就能继续接手新 PR,只在需要你决策时请你介入。若要保留人工合并,将长期授权改为“达到合并条件时通知我,由我合并”即可。

案例来源

文中的 PR #2854 使用了完整工作计划及 GitHub 提交、审阅、检查和合并快照。本次未重新执行案例中的测试,也未独立验证订阅清理结果。