agent-code-review 是一个 PR 审查队列与调度 CLI 工具,用于管理等待自动审查的拉取请求队列。
用途
该工具维护一个基于 DuckDB 的候选 PR 队列,并使用可插拔的审查引擎(Codex 或 Claude Code,默认 Codex)对 PR 进行审查。它适合需要自动化管理 PR 审查流程、按作者分组应用不同审查策略、并对作者贡献进行评分的团队或项目。
主要能力
队列管理
queue ls:列出所有待处理候选 PR(NDJSON 格式),可按仓库过滤。queue add owner/name 1234:添加 PR(获取实时元数据,拒绝已关闭/已合并的 PR)。queue promote owner/name 1234:立即审查,置于队列顶部并清除任何 hold。queue skip owner/name 1234:记录为 SKIPPED 并移除(新提交后可重新入选)。queue rm owner/name 1234:移除且不记录任何内容。queue log owner/name 1234 -f:流式查看审查代理日志。
队列仅保存待处理工作,按首次发现时间 FIFO 排序。带有 claimed_at 的行表示正在审查中。行可携带 holds 映射(名称到过期时间),包括 settling(PR 在静默期内被推送或编辑)、cooldown(在重新审查冷却期内已审查过)、editing(作者打开了仪表盘的 steering 编辑器)。所有 hold 过期后才会被调度,期间保持队列位置并被跳过。已完成的结果存放在 history 中。
作者名册管理
authors set owner/name alice core --name "Alice" --slack-id U01:设置作者分组。authors set '*' bob outsider:在所有仓库上设置该分组。authors ls --repo owner/name:列出各行及其解析到的策略。authors groups:列出各分组及其授予的权限。authors who alice --repo owner/name:查询某作者的分组。authors rm owner/name alice:移除作者。
每个作者在每个仓库中属于一个分组,分组定义在配置的 authors.groups 下,是一个完整的审查策略:审查级别(ignore = 从不发现,但手动添加仍会审查;comment = 审查但从不批准;approve = 可批准),以及引擎、模型、effort 和额外提示词片段。authors.overrides 可按 handle 缩小任何字段。解析顺序:该仓库的名册行,否则 * 的行,否则 authors.unlisted[repo],否则 authors.unlisted["*"];然后每个匹配的 override 逐字段修补。
评分与排行榜
每次完成的审查会为 PR 作者赚取积分,依据 diff 大小、审查结论、代码库增减和修订次数。生成文件和 vendored 文件被排除,读取仓库自身的 .gitattributes。
score leaderboard:排名,最高优先。score leaderboard --days 30:指定时间窗口。score show owner/repo 123:某 PR 的每次评分审查。score ls --missing:从未评分的行。score ls --stale:在旧规则下评分的行。score recompute --stale --dry-run:预览变化。score recompute --stale:应用变化。score refetch --missing:从 GitHub 重新测量。score set owner/repo 123 0 --note "duplicate of #120":手动设置分数。
评分分两部分:SIZE 是加减行数的曲线,在 piece_lines(50 行变更)处每行积分达到峰值,单个 PR 最多 size_points(100)分,然后受结论和衰减影响;REMOVAL 是每百行净删除行数给 removal_points_per_100(20)分,额外支付。示例:+100/-100 得 100 分,+1000/-1000 得 29 分,+100/-1000 得 227 分,+1000/-100 得 47 分,-2000 得 429 分。分数在审查完成时冻结,并附带产生它们的规则哈希,因此重新调整配置只影响未来审查。
运行审查
run:排空队列后退出。serve --http :8330:守护进程 + 仪表盘。serve --http :8330 --tailscale serve:并在 tailnet 上暴露。
配置
config path:配置文件位置。config show:当前配置(NDJSON)。repos ls|add|rm:管理监视的仓库。prompts show|set|unset|preview:管理提示词。config list|get|set|unset:管理标量参数。
配置位于 ~/.config/agent-code-review/config.json,包含仓库、作者分组、年龄阈值、调度、审查提示词和规则。CLI 从不硬编码仓库或 GitHub handle,一切皆配置。
使用方式
默认输出为 NDJSON:stdout 每行一条 JSON 记录(-f json|yaml 将列表包装为单个 {"data": [...]} 文档;run 和 score recompute|refetch 以 {"@summary": {...}} 行结束)。错误以一行 JSON 输出到 stderr:{"error": "...", "fixable_by": "agent"|"human"|"retry", "hint": "..."},并返回非零退出码。
适用场景
适用于需要自动化 PR 审查队列管理、按作者分组应用不同审查策略、对作者贡献进行评分和排名的开发团队。
限制与要求
需要 gh(已认证)、duckdb CLI 以及配置的审查引擎(默认 codex,或 claude)在 $PATH 中并已认证。候选规则:NEW(从未审查,≤14天)和 REFRESHED(自上次审查后 head SHA 变化,≤21天)。按首次发现 FIFO 处理,最多 4 个并行。已批准的 PR 被跳过,当前 head SHA 的任何已记录结果会抑制重新入队。发现的候选需等待资格 hold(静默期默认 15 分钟,重新审查冷却默认 90 分钟,0 秒禁用)。大多数配置编辑约 30 秒内实时重载(节奏、并行度、使用下限、仓库、提示词);只有循环开关和仪表盘/Tailscale 设置需要重启守护进程。当审查引擎剩余使用量低于 <engine>.usage_floor.{5h,1w}_percent 时,候选被 HELD。代理执行实际审查和 GitHub 操作,然后报告其行为(APPROVED|COMMENTED|REQUESTED_CHANGES|SKIPPED)。组装提示词带有内置批准指令,默认仅评论;批准需要 approve 级分组且非自己编写的 PR(自我审查否决位于分组级联之上,任何分组都无法解除)。评分可通过 config set scoring.mode 全局关闭:enabled(测量并评分)、leaderboard-only(停止测量,移除每次审查的 GitHub 调用,但仍显示已赚积分)、disabled(同时隐藏仪表盘中的排行榜)。可按仓库在 scoring.repos 下缩小范围。同一提交的第二次审查(有人回复机器人)得 0 分:这是讨论,不是新工作。排行榜每次修订只支付一次。