目录

ClawSweeper:OpenClaw 的大规模 Issue/PR 自动化审查机器人

前言

在大型开源项目中,Issue 和 Pull Request 的积压是一个普遍且棘手的问题。以 openclaw/openclaw 为例,仓库目前拥有 5320 个开放 Issue4247 个开放 PR,总计 9567 个开放项。人工审查每一个条目几乎是不可能完成的任务。

ClawSweeper 是 OpenClaw 官方推出的保守派维护机器人,专为这一挑战而生。它的设计理念是保守优先——只提议关闭那些证据充分的项,同时确保每一位维护者的贡献不会被误判。

本文将深入解析 ClawSweeper 的架构设计、双 Lane 工作流程、安全模型,以及如何在生产环境中实现大规模自动化代码审查。


核心设计理念

保守派哲学

ClawSweeper 的核心原则是宁可放过,不可错杀。这一理念贯穿于它的每一个设计决策:

  • Review Lane 是只读提议 —— 它只生成审查报告,从不直接关闭任何项
  • Apply Lane 需要高置信度 —— 只有证据足够强的关闭提议才会被执行
  • 维护者-authored 项永远保护 —— 任何由维护者创建的 Issue/PR 都不会被自动关闭

单一真相来源

每个被审查的 Issue 或 PR 都会生成一个对应的 Markdown 报告文件:

items/<number>.md  # 活跃的审查项
closed/<number>.md # 已关闭的项

每个报告文件包含:

  • 审查决策(keep_open / proposed_close)
  • 证据摘要
  • Codex 建议评论内容
  • 运行时元数据
  • GitHub 快照哈希

这种设计确保了审查结果的持久性和可审计性


双 Lane 架构详解

ClawSweeper 分为两个独立的工作 Lane:Review Lane(审查) 和 Apply Lane(应用)。

Review Lane:智能提议系统

Review Lane 是 ClawSweeper 的"大脑",负责分析和提议。

Planner(规划器)

1. 扫描所有开放 Issue 和 PR
2. 根据优先级和活跃度分配精确的项编号到分片(shards)
3. 每个分片独立处理,避免单点瓶颈

Codex 审查流程

  • 模型:gpt-5.5,高推理努力,快速服务等级
  • 超时:每项 10 分钟
  • 审查内容:检查项是否属于可关闭的明确类别

关闭条件(Guardrails)

ClawSweeper 只在项明显属于以下类别时才会提议关闭:

类别说明
implemented_on_main已在当前 main 分支实现
not_reproducible在当前 main 分支无法复现
better_for_clawhub更适合作为 ClawHub skill/plugin 而非核心问题
duplicate重复或被规范 Issue/PR 取代
not_actionable具体但在此代码仓库无法执行
incoherent语无伦次到无法采取任何行动
stale_older_than_60d超过 60 天的陈旧问题且数据不足无法验证

节奏覆盖(Cadence)

ClawSweeper 根据项的活跃度和年龄动态调整审查频率:

节奏覆盖范围当前状态
Hourly(活跃项)7 天内有活动的项13/1043 (1.2%)
Daily(PRs)所有开放 PR3563/3664 (97.2%)
Daily(新 Issue <30d)30 天内创建的新 Issue2015/2085 (96.6%)
Weekly(陈旧 Issue)更早的陈旧 Issue2615/2616 (100%)

实时统计(截至 2026-04-26 UTC 02:38)

- 开放项总计:9567(Issue: 5320,PR: 4247)
- 已审查文件:9408
- 未审查开放项:159
- 近 7 天提议关闭:956 (10.2% of fresh reviews)
- Codex 已关闭:7632

Apply Lane:安全执行系统

Apply Lane 是 ClawSweeper 的"手",负责将提议转化为实际行动。

执行策略

1. 读取现有的审查报告
2. 验证审查是否仍然有效(快照哈希比对)
3. 执行以下操作:
   - 更新唯一的 Codex 自动化评论(原地更新)
   - 仅关闭未改变的、高置信度的提议
   - 将已关闭的报告移动到 closed/<number>.md
   - 将重新打开的归档报告移回 items/<number>.md(标记为 stale)

关键约束

  • 默认只关闭 Issue,不关闭 PR(可通过配置更改)
  • 无年龄门槛
  • 关闭延迟:2 秒
  • 每个检查点最多 50 个新鲜关闭
  • 达到限制时排队另一个相同设置的 Apply 运行

安全模型:多层次防御

ClawSweeper 的安全模型是其设计的核心亮点,通过多层次防御确保自动化不会出错。

第一层:维护者保护

❌ 维护者-authored 项永远不会被自动关闭
✅ 即使满足所有关闭条件,也保持开放

这一规则防止了维护者的重要工作被误判。

第二层:标签保护

❌ 带有 protected 标签的项不会被提议关闭
✅ 维护者可以通过标签显式保护特定项

第三层:只读检查

✅ Codex 运行时不持有 GitHub 写权限
✅ CI 强制 openclaw/openclaw 仓库检出为只读
✅ 审查失败如果 Codex 留下跟踪或未跟踪的更改

这确保了即使 Codex 模型出现异常行为,也无法直接修改仓库。

第四层:快照验证

✅ 每次 Apply 前验证 GitHub 快照哈希
✅ 如果快照发生变化,Apply 会被阻止
✅ 唯一允许的快照变化是机器人自己的评论

第五层:操作日志

# 审计命令:比较生成记录与 GitHub 实时状态
npm run audit -- --max-pages 250 --sample-limit 25

# 报告内容:
# - 缺失的开放记录
# - 已归档的开放记录
# - 陈旧记录
# - 重复项
# - protected-label 提议关闭
# - 陈旧的 review-status 记录

技术实现

技术栈

组件技术
语言TypeScript(原生 Node 24+)
构建tsgo
Lintoxlint
格式化oxfmt
AI 审查OpenAI Codex (gpt-5.5)
CI/CDGitHub Actions
APIGitHub REST API

项目结构

clawsweeper/
├── src/
│   ├── index.ts          # 入口
│   ├── planner.ts        # 规划器
│   ├── reviewer.ts       # 审查器
│   ├── applier.ts       # 应用器
│   ├── dashboard.ts     # 仪表板生成器
│   └── auditor.ts       # 审计器
├── items/               # 活跃审查项
│   ├── 65156.md
│   └── 65123.md
├── closed/              # 已关闭项
├── schema/             # 数据模型
└── .github/workflows/  # GitHub Actions

本地运行

# 环境要求:Node 24+
source ~/.profile
npm install

# 1. 规划:扫描并分配项到分片
npm run plan -- \
  --batch-size 5 \
  --shard-count 50 \
  --max-pages 250 \
  --codex-model gpt-5.5 \
  --codex-reasoning-effort high \
  --codex-service-tier fast

# 2. 审查:Codex 逐项审查
npm run review -- \
  --openclaw-dir ../openclaw \
  --batch-size 5 \
  --max-pages 250 \
  --artifact-dir artifacts/reviews \
  --codex-model gpt-5.5 \
  --codex-reasoning-effort high \
  --codex-service-tier fast \
  --codex-timeout-ms 600000

# 3. 应用:执行关闭提议
npm run apply-artifacts -- --artifact-dir artifacts/reviews

# 4. 审计:验证记录与 GitHub 状态一致
npm run audit -- --max-pages 250 --sample-limit 25

# 5. 调解:处理不一致项
npm run reconcile -- --dry-run

GitHub Actions 配置

必要的 Secrets:

  • OPENAI_API_KEY:用于 Codex 登录的 OpenAI API 密钥

实际运行数据(2026-04-26)

以下是从 ClawSweeper 仪表板提取的真实数据:

过去 24 小时活动

指标数值
总审查数11,412
提议关闭数2,743
保持开放数8,669
失败/陈旧审查15
实际关闭数5,527
同步评论数467

近期审查示例

Issue/PR标题决策状态
#65156[Bug] Memory vector search broken in v4.11keep_opencomplete
#65123fix(discord): preserve explicit target kindkeep_opencomplete
#65115fix: resolve 8 GUI bugs in webchat Control UIproposed_closecomplete

设计亮点与启示

1. 保守派策略降低风险

ClawSweeper 的设计理念与传统的"自动化尽可能多"完全不同。它选择只在证据无可辩驳时行动,这大大降低了误判风险。在关键系统上,保守派策略往往是更安全的选择。

2. 双 Lane 解耦审查与执行

将 Review(提议)和 Apply(执行)分离为两个独立 Lane,使得:

  • Review 可以激进地生成提议(只读操作,无风险)
  • Apply 可以保守地执行(只执行高置信度项)
  • 系统可以独立扩展和调优两个阶段

3. 快照验证防止竞态条件

通过 GitHub 快照哈希验证,确保在审查完成到 Apply 执行之间,Issue/PR 的状态没有被外部改变。这是一种乐观锁的思想在自动化系统中的应用。

4. 持久化报告支持人工复核

每个项的审查报告都持久化存储,支持:

  • 人工复核任何提议
  • 回溯历史决策
  • 审计 trail
  • 可解释性(Explainability)

局限性与改进方向

当前局限性

  1. Hourly 覆盖不足:目前只有 1.2% 的活跃项在 hourly 节奏下被覆盖(13/1043),这意味着新鲜项可能需要等待较长时间
  2. PR 关闭保守:默认只关闭 Issue,不关闭 PR,可能导致 PR 积压
  3. Codex 依赖:整个系统依赖 OpenAI Codex,如果 API 可用性或定价变化,可能影响运行

潜在改进方向

  1. 智能优先级动态调整:根据队列深度动态调整审查频率
  2. 多 AI 提供商支持:降低单一 AI 依赖风险
  3. 社区反馈学习:将人工复核结果反馈到模型决策中

总结

ClawSweeper 是大规模开源项目维护的一个优秀范例。它的核心价值在于:

  • 保守优先:宁可放过,不可错杀
  • 安全第一:多层防御确保自动化不出错
  • 可审计:每个决策都有完整的证据链
  • 可扩展:双 Lane 架构支持独立演进

在一个拥有近万开放项的仓库中,完全依靠人工维护是不现实的。ClawSweeper 提供了一种可行的方案:AI 辅助决策,人类保留最终控制权。这或许是未来大规模开源项目维护的标准范式。


参考链接

  • GitHub 仓库:https://github.com/openclaw/clawsweeper
  • 目标仓库:https://github.com/openclaw/openclaw
  • 最新仪表板:https://github.com/openclaw/clawsweeper/blob/main/README.md

🦞 每日08:00自动更新