MIT License · Rust

AI 代码的
合并前质量闸口

优先拦截高风险问题,减少低价值 review 噪音。它不替代测试和人工 review——在合并前先做一轮过滤:高危推到前面,低置信反馈默认折叠。

$ curl -fsSL https://raw.githubusercontent.com/dengmengmian/ReviewGate/main/install.sh | sh
默认只读 45 语言样例评测 revert 金标准留痕
为什么用它

三件事,做到位

不是又一个 AI reviewer,而是一道把高危推前、把噪音压下、不假装通过的闸口。

拦高危

按安全、逻辑、性能、业务规则等维度并行审查,把 must-fix 放到最前面,reviewer 一眼看到最该处理的地方。

降噪音

跨维度去重、独立证伪、按置信度过滤,低价值反馈默认折叠——少一点"啰嗦但没用"的 review 评论。

不假通过

超时、上下文过大、单元未审完都会降级 WARN 并让 CI 非 0 退出,绝不把不完整的审查伪装成 PASS。

工作原理

从 diff 到闸口,四步

并行分维度审查

多个 Agent 各自聚焦一个维度,并行扫你的改动,可按需跨文件追调用方与契约。

行号锚定校验

模型直接标注行号,引擎用代码片段锚点校验并兜底重定位,降低行号漂移。

去重 + 证伪 Judge

同处多维标记合并并加分;每条发现再被独立带证据裁决,证不掉才保留。

置信度闸口

高置信问题阻断合并(BLOCK),低置信默认折叠(仍可展开),未审完降级 WARN。

六个审查维度

security

注入、越权、密钥泄露、不安全反序列化

perf

N+1、无谓拷贝、热路径复杂度、阻塞调用

logic

边界条件、空值、错误处理、并发竞态

style

命名、可读性、重复代码

ai_smell

幻觉 API、看似合理实则错误、假设漂移

business

业务规则、权限边界、状态机、金额/订单/库存

为什么可以信

保守、可验证、不越权

公开评测留痕

真实 PR、revert 金标准、45 语言样例、大 PR、意图评审结果都记录在 docs/evals/,可复查。

默认只读

除显式 --fix 且逐条确认外,审查链路不写工作区、不执行任意 shell 命令。

保守闸口

低置信默认折叠;超时、上下文超限、未审完一律降级 WARN,宁可保守也不漏审放行。

适合

  • AI 一次改很多文件,reviewer 想先知道哪里最危险
  • 团队有权限、金额、状态机等业务规则需反复检查
  • 想给 PR / CI 加一道高置信风险闸口
  • 想用 --intent 检查实现是否符合需求 / 设计

不适合

  • 替代单元测试、集成测试或人工 review
  • 让模型自动改代码并无人确认地合并
  • 对误报零容忍、无法接受保守 WARN
  • 没有 LLM API key,或不允许代码片段发给模型
快速开始 · v0.9

三样东西就能跑

安装包、LLM API key、任意 git 仓库。不绑定模型;路径:init → demo → review。

安装 — Linux / macOS
$ curl -fsSL https://raw.githubusercontent.com/\
    dengmengmian/ReviewGate/main/install.sh | sh
# 或: brew install dengmengmian/tap/reviewgate
# 或: cargo install reviewgate
Windows (PowerShell)
PS> irm https://raw.githubusercontent.com/\
     dengmengmian/ReviewGate/main/install.ps1 | iex

不想直接跑远程脚本?可先下载 install.sh 审阅,或从 GitHub Releases 手动下载二进制。升级:reviewgate upgrade。

init → demo → review
# 交互写出全局配置(密钥不进文件)
$ reviewgate init
$ export REVIEWGATE_API_KEY="your key"

# 内置有毒样例,应 BLOCK(不依赖业务仓库)
$ reviewgate demo

# 审查你的改动
$ cd /path/to/your/repo
$ reviewgate review

CI:reviewgate review --fail-on block(退出 0 放行 · 1 闸口拦截 · 2 工具出错)。大 PR:目录装箱 unit + coverage 报告;可选 --profile audit、--estimate-only、reviewgate security。

init / demo

一条命令写配置;内置有毒样例当场验证闸口会 BLOCK。

profile · 成本

--profile gate|audit;跑前 [cost] 估算与 --max-cost / --estimate-only 预算守卫。

大 PR 覆盖

超预算按目录切 unit;报告 unit_plan + coverage(covered / unfinished / oversized),未审完不装 PASS。

接入方式

一个引擎,多种形态

都只是调同一个 reviewgate CLI。CLI 为主、Action 用于 PR/CI;Claude Skill、Codex 与 AtomCode 是更薄的 agent 壳(experimental)。

主形态

CLI

本地或 CI 直接跑。支持 init/demo、profile、成本预算、大 PR unit 覆盖、security 深审、--intent。

$ reviewgate review --from main --to HEAD
$ reviewgate security --from main --to HEAD
CI

GitHub Action

在 PR 上自动审查并回贴摘要 + 行内 suggestion,作者一键应用、人来把关。

uses: dengmengmian/ReviewGate/
      integrations/github-action@v0
experimental

Agent 壳:Claude / Codex / AtomCode

装进 Claude Code(用 /reviewgate 触发)、Codex(AGENTS.md)或 AtomCode(.atomcode/skills),在对话里调同一套引擎。比 CLI/Action 更薄、较新。

$ integrations/claude-skill/install-into-project.sh
$ integrations/codex/install-into-project.sh
$ integrations/atomcode/install-into-project.sh
常见问题

你可能想问的

和普通 AI code review 有什么不同?

它是一道闸口,不是又一个 reviewer。发现会去重、被独立证伪、按置信度过滤;低价值反馈默认折叠;超时或未审完会降级 WARN 并让 CI 非 0 退出,绝不把不完整的审查伪装成 PASS。

支持哪些模型或 provider?

不绑定模型。任何 OpenAI 兼容或 Anthropic 端点都行——DeepSeek、Kimi、GLM、通义、Claude 等,按团队成本、速度、上下文窗口自选。

会把我的代码发给第三方吗?

只发给你自己在配置里指定的 LLM 端点,没有别的服务器。审查链路默认只读:除非显式 --fix 且逐条确认,不写工作区、不执行任意 shell。

怎么接入 CI?

reviewgate review --fail-on block,退出码 0 放行 / 1 被闸口拦截 / 2 工具自身出错;或直接用 GitHub Action 在 PR 上自动审查并回贴行内 suggestion。

免费吗?

工具本身 MIT 开源、免费。你只需要为自己 LLM API 的用量付费。

误报会不会很多?

每条发现都过一遍带证据的证伪 Judge,再按置信度闸口过滤,低置信默认折叠。可调 block / warn 阈值,也可用 --samples 提高召回或 --no-judge 加速。

和 CodeRabbit / PR-Agent 有什么不同?

ReviewGate 不跑在第三方 SaaS 上,只调用你自己配置的 LLM 端点;审查链路默认只读,代码不离开你的基础设施。设计上更保守:宁可 WARN 也不把没审完的 PR 标成 PASS,并把去重、证伪、置信度闸口放在核心流程。

支持 GitLab / Azure DevOps 吗?

CLI 可在任何能跑 shell 的 CI 里使用(GitLab CI、Azure Pipelines、Jenkins、Buildkite 等),只要给 reviewgate 一个 git 工作区和 API key。GitHub Action 目前只支持 GitHub。

会修改我的代码吗?

默认只读。只有在显式使用 --fix 并且逐条确认后,才会把建议 patch 应用到工作区;不会自动提交或合并。

给你的 PR 加一道闸口

开源、MIT、不绑定模型。建议先用 WARN / 评论模式跑一阵,稳了再开 BLOCK 强制。