kenn-io/roborev
GitHub: kenn-io/roborev
roborev 是一个本地运行的持续代码审查工具,通过 git hook 在 AI agent 每次提交后自动审查代码并支持自动修复闭环。
Stars: 1563 | Forks: 138
[](https://go.dev/)
[](https://opensource.org/licenses/MIT)
[](https://roborev.io)
**[文档](https://roborev.io)** | **[快速开始](https://roborev.io/quickstart/)** | **[安装](https://roborev.io/installation/)**
为 AI 编程 agent 提供持续的代码审查。roborev 在后台
运行,在 agent 编写代码时审查每一次提交,并在几秒钟内暴露出
问题——在它们累积之前。在上下文新鲜时将代码审查拉入
你的 agentic 循环。

## 工作原理
1. 运行 `roborev init` 来安装 post-commit hook
2. 每次提交都会触发一次后台审查——agent 编写,roborev 阅读
3. 在 TUI 中查看结果,将其反馈给你的 agent,或者让 `roborev fix` 处理
### 自动化,两层机制

- **Post-commit 审查** - git hook 在后台审查每次提交(适用于任何 agent)。
- **Agent hook** - 监控你的 Claude Code / Codex 会话,并在结果堆积时告诉 agent 运行 roborev-fix 技能。
```
roborev init # layer 1: per-commit reviews
roborev skills install
roborev agent-hook install # layer 2: mid-session fix loop (Codex/Claude)
roborev agent-hook install --agent droid # layer 2: mid-session fix loop (Factory Droid)
```
在交付之前,运行 `/roborev-refine` 技能:它会重新审查并修复你的
整个分支,直到所有审查通过,在提交 PR 之前捕获 bug。
新来的?运行 `roborev quickstart` 并让你的 agent 指向它。
## 快速开始
```
cd your-repo
roborev init # Install post-commit hook
git commit -m "..." # Reviews happen automatically
roborev tui # View reviews in interactive UI
```
如果 roborev 由版本管理器管理,`roborev init` 和
`roborev agent-hook install` 会尝试使用稳定的 shim/symlink 安装 hook。
你也可以使用以下命令指定确切的二进制路径:
`roborev init --binary ~/.local/share/mise/shims/roborev`,
`roborev agent-hook install --binary ~/.local/share/mise/shims/roborev`,或者
`roborev agent-hook install --agent droid --binary ~/.local/share/mise/shims/roborev`。

## 功能
- **后台审查** - 通过 git hooks 自动审查每一次提交。
无需远程审查工作流。
- **自动修复** - `roborev fix` 将审查结果反馈给 agent,
由 agent 应用修复并提交。`roborev refine` 会进行迭代,直到审查通过。
- **Agent Hook** - 可选的 Codex、Claude Code 和 Factory Droid harness hook
可以在 roborev 有未通过的审查时,提示活跃的会话运行修复技能。
- **代码分析** - 内置分析类型(重复、复杂度、
重构、测试夹具、死代码、安全),agent 可以自动修复
这些问题。
- **多 Agent** - 支持 Codex、Claude Code、Gemini、Copilot、
OpenCode、Cursor、Kiro、Kilo、Droid 和 Pi。
- **本地运行** - 无需托管服务或额外的基础设施。
审查在你自己的机器上使用你已经配置好的
编程 agent 进行编排。
- **交互式 TUI** - 带有 vim 风格导航的实时审查队列。
- **审查验证** - `roborev compact` 会根据
当前代码验证结果,过滤误报,并将相关问题
合并为单次审查。
- **可扩展 Hook** - 在审查事件上运行 shell 命令。内置
[beads](https://github.com/steveyegge/beads) 和 [kata](https://github.com/kenn-io/kata)
集成会自动根据审查失败创建可追踪的 issue。
## Agentic 修复循环
当审查发现问题时,将审查结果复制并粘贴到你的
交互式 agent 会话中,或者在 Claude Code 中调用
`/roborev-fix`,在 Codex 中调用 `$roborev-fix`。你也可以
通过命令行使用 `roborev fix` 非交互式地处理未解决的审查。
`roborev fix` 会向 agent 展示审查结果,agent 会应用
更改并提交。新的提交会被自动审查,
从而形成闭环。
对于 Codex、Claude Code 和 Factory Droid 会话,`roborev agent-hook install`
可以添加一个可选的 harness hook,在满足配置的轮次、提交或
审查失败阈值后,提示活跃会话调用
`$roborev-fix`(对于 Droid 是 `/roborev-fix`)。
该 hook 为会话计数器使用独立的本地 `roborev-agent-hook` daemon;
它不会在主 roborev daemon 内运行。
对于完全自动化的迭代(高级功能),请使用 `refine`:
```
roborev refine # Fix, re-review, repeat until passing
```
`refine` 在隔离的 worktree 中循环运行:修复问题,等待
重新审查,再次修复,直到所有审查通过或达到 `--max-iterations`。
## 代码分析
在你的代码库中运行针对性分析,并可选择自动修复:
```
roborev analyze duplication ./... # Find duplication
roborev analyze refactor --fix *.go # Suggest and apply refactors
roborev analyze complexity --wait main.go # Analyze and show results
roborev analyze test-fixtures *_test.go # Find test helper opportunities
roborev analyze security ./... # Find security risks in existing code
```
可用类型:`test-fixtures`、`duplication`、`refactor`、`complexity`、
`api-design`、`dead-code`、`architecture`、`security`。
分析任务会出现在审查队列中。稍后使用 `roborev fix` 应用
未解决的结果,使用 `roborev fix
` 指向特定任务,或者
传递 `--fix` 立即应用。
分析类型可以在配置中锁定自己的 agent 设置:
```
[analyze.refactor]
agent = "claude-code"
model = "sonnet"
reasoning = "fast"
```
## 安装
**Shell 脚本 (macOS / Linux):**
```
curl -fsSL https://roborev.io/install.sh | bash
```
**Homebrew (macOS / Linux):**
```
brew install roborev-dev/tap/roborev
```
**Windows (PowerShell):**
```
powershell -ExecutionPolicy ByPass -c "irm https://roborev.io/install.ps1 | iex"
```
**使用 Go:**
```
go install go.kenn.io/roborev/cmd/roborev@latest
```
## 开发者设置
此仓库使用 [`prek`](https://prek.j178.dev/) 进行本地 pre-commit 检查。
这些 hook 是本地系统 hook。它们运行一个快速的 Git-test 隔离防护和
`make lint`,因此 pre-commit 可以自动应用 `golangci-lint --fix`,
而不是使用上游的 `golangci-lint` pre-commit 仓库。Git-test 隔离防护和
`make lint` 的 hook 配置为 `always_run = true`,因此它们在每次提交时都会运行,
而不仅仅是在涉及 Go 文件的提交时。Renovate 配置验证器会在
`renovate.json` 发生变化时运行。
```
brew install prek # or use your preferred prek install method
mise use --global npm:renovate@latest
prek install # install the local git hook
prek run --all-files # run the configured checks manually
```
如果 hook 重写了文件,请重新暂存它们并重新运行 `git commit`。当
你需要一个非变异的 lint 检查时使用 `make lint-ci`。使用
`make check-renovate-config` 直接验证 `renovate.json`。
## 命令
| 命令 | 描述 |
|---------|-------------|
| `roborev init` | 在当前仓库中初始化 roborev |
| `roborev tui` | 交互式终端 UI |
| `roborev status` | 显示 daemon 和队列状态 |
| `roborev review ` | 将提交加入审查队列 |
| `roborev review --branch` | 审查当前分支上的所有提交 |
| `roborev review --dirty` | 审查未提交的更改 |
| `roborev fix` | 修复未解决的审查(或指定任务 ID) |
| `roborev refine` | 自动修复循环:修复、重新审查、重复 |
| `roborev analyze ` | 运行代码分析并可选择自动修复 |
| `roborev agent-hook install` | 安装可选的 Codex/Claude agent harness hook |
| `roborev agent-hook install --agent droid` | 安装可选的 Factory Droid harness hook |
| `roborev compact` | 验证并合并未解决的审查结果 |
| `roborev show [sha]` | 显示提交的审查 |
| `roborev export reviews` | 将已完成的审查导出为 JSON |
| `roborev run ""` | 使用 AI agent 执行任务 |
| `roborev close ` | 关闭审查 |
| `roborev skills install` | 为 Claude/Codex 安装 agent 技能 |
查看[完整命令参考](https://roborev.io/commands/)了解所有选项。
### 导出审查历史
使用 `roborev export reviews` 将已完成的审查输出为一个 JSON 文档,用于
本地报告或归档工作流:
```
roborev export reviews
roborev export reviews --profile metadata --since 2026-06-01 --until 2026-06-30
roborev export reviews --closed-only --repo github.com/org/repo --limit 1000
roborev export reviews --cursor "$NEXT_CURSOR" --until 2026-07-01
```
默认的 `content` profile 包含存储的原始审查输出。该输出
可能包含敏感的仓库详细信息,因此请小心处理导出的文件。
当你只需要标识符、时间戳、结论、
成本元数据以及相关的审查元数据时,请使用 `--profile metadata`。
导出内容包含本地审查数据库的稳定 `database_id`,并且当
至少导出一条审查时,会包含一个不透明的 `next_cursor`。传入
`--cursor ` 以在上一页之后恢复;`--cursor` 不能
与 `--since` 组合使用。如果 cursor 属于之前的数据库
生成,`roborev export reviews` 将以退出代码 `3` 退出;丢弃该 cursor
并使用窗口回填重试。其他 cursor 拒绝情况也要求在
回填之前丢弃 cursor。
## 配置
在你的仓库中创建 `.roborev.toml`:
```
agent = "claude-code"
snapshot_dir = ".roborev"
review_guidelines = """
Project-specific review instructions here.
"""
# 可选:使用 repo guidelines 而不是附加全局 review_guidelines。
review_guidelines_supersede_global = false
# 可选:roborev 拥有的 fix commits 的 metadata 以及 agent 拥有的 fix commits 的 prompt hints。
fix_commit_author = "Your Name "
fix_commit_co_authored_by = ["Pair Reviewer "]
```
你也可以在 `~/.roborev/config.toml` 中设置 `review_guidelines`。全局
指南默认应用于每个仓库,并附加在仓库指南之前。
`snapshot_dir` 必须是仓库相对路径。`roborev init` 确保它在 `.gitignore` 中被忽略;对于忽略设置已过时的现有检出,创建快照时还会添加一个本地 `.git/info/exclude` 回退。
查看[配置指南](https://roborev.io/configuration/)了解所有选项。
### Kata 任务上下文
如果你的仓库绑定到了 [kata](https://github.com/kenn-io/kata) 项目(一个
已提交的 `.kata.toml`),roborev 可以将被审查的提交信息中引用的
kata issue 拉入审查提示,并将审查结果作为
kata issue 提交回去。
```
# .roborev.toml
[kata_context]
mode = "current" # off (default) | current | open
max_chars = 50000 # cap on kata context bytes in the prompt
# 当 review 失败或返回 findings 时提交一个 kata issue:
[[hooks]]
event = "review.*"
type = "kata"
# branches = ["main"] # 仅针对这些 branches 上的 reviews 提交 katas;默认为所有
# project = "myproj" # 默认为 .kata.toml binding
# labels = ["from-review"]
# priority = 2
```
`mode = "current"` 仅包含在被审查提交信息中引用的
kata(例如 `Closes: kata#abc4`);`open` 包含绑定项目中
所有打开的 kata,kata hook 自己提交的 issue(标记为
`roborev`)除外,因此审查结果不会作为任务
意图反馈到以后的审查中。hook 可选的 `branches` 列表(如 `release/*` 这样的 glob 模式)
将其限制在匹配分支上的审查;未设置则在所有分支上触发。匹配的
分支是本地审查的提交分支,以及 CI 拉取请求审查的 PR base
(target)分支——因此 `branches = ["main"]` 在本地表示 `main` 上的
提交,但在 CI 中表示*针对* `main` 的 PR,并且 fork 的 head
分支名称无法满足受保护分支过滤器。`kata` CLI 必须在
`PATH` 中;当它不存在或仓库未绑定时,提示上下文将
被静默跳过。任何其他失败——损坏的 `.kata.toml`,失败的 `kata`
调用——都会被提示构建器和配置的 `kata`
hook 记录下来,因此配置的集成永远不会在未被注意的情况下失效。
### 环境变量
| 变量 | 描述 |
|----------|-------------|
| `ROBOREV_DATA_DIR` | 覆盖默认数据目录(`~/.roborev`) |
| `ROBOREV_COLOR_MODE` | TUI 颜色主题:`auto`(默认)、`dark`、`light`、`none` |
| `ROBOREV_SYNC_CURSOR_LOOKBACK` | PostgreSQL 同步 cursor 重叠持续时间(默认为 `5m`) |
| `ROBOREV_AGENT_HOOK_TURN_THRESHOLD` | 覆盖 agent-hook Stop 阈值 |
| `ROBOREV_AGENT_HOOK_COMMIT_THRESHOLD` | 覆盖 agent-hook 提交阈值 |
| `ROBOREV_AGENT_HOOK_FAILED_REVIEW_THRESHOLD` | 覆盖 agent-hook 审查失败阈值 |
| `ROBOREV_DROID_HOOK_TURN_THRESHOLD` | 覆盖 Factory Droid agent-hook Stop 阈值 |
| `ROBOREV_DROID_HOOK_COMMIT_THRESHOLD` | 覆盖 Factory Droid agent-hook 提交阈值 |
| `ROBOREV_DROID_HOOK_FAILED_REVIEW_THRESHOLD` | 覆盖 Factory Droid agent-hook 审查失败阈值 |
| `NO_COLOR` | 设置为任何值即可禁用所有颜色输出([no-color.org](https://no-color.org)) |
## 支持的 Agent
| Agent | 安装 |
|-------|---------|
| Codex | `npm install -g @openai/codex` |
| Claude Code | `npm install -g @anth-ai/claude-code` |
| Gemini | `curl -fsSL https://antigravity.google/cli/install.sh \| bash`(首选 Antigravity CLI)或 `npm install -g @google/gemini-cli` |
| Copilot | `npm install -g @github/copilot` |
| OpenCode | `npm install -g opencode-ai@latest`([anomalyco/opencode](https://github.com/anomalyco/opencode)) |
| Cursor | [cursor.com](https://www.cursor.com/) |
| Kiro | [kiro.dev](https://kiro.dev/) |
| Kilo | `npm install -g @kilocode/cli` |
| Droid | [factory.ai](https://factory.ai/) |
| Pi | [pi.dev](https://pi.dev/) |
roborev 会自动检测已安装的 agent。
要将 Pi 用作自动设计路由分类器(`classify_agent = "pi"`),
请也安装 JSON Schema 输出扩展:
```
pi install npm:@nqbao/pi-json-schema
```
roborev 在调用分类器时会显式加载此扩展。将其
保留安装在 Pi 中,使得分类器设置在 `pi list` 中可见,并避免
在离线或锁定的环境中出现运行时获取包的意外情况。
### 将 Claude Code 路由到代理(Ollama、LiteLLM 等)
`claude-code` agent 接受 `@` 形式的模型规范。
当 `` 以 `http(s)://` 开头时,roborev 会将 Claude Code 指向
该 endpoint,并将所有层级别名(Opus/Sonnet/Haiku/subagent)固定为
给定的模型。
```
# .roborev.toml — 用于 reviews 的本地 Ollama,用于 fixes 的真实 Anthropic
agent = "claude-code"
review_model = "glm-5.1:cloud@http://127.0.0.1:11434"
fix_model = "sonnet"
```
或通过 CLI:`roborev review --model 'glm-5.1:cloud@http://127.0.0.1:11434'`。
**代理认证。** 设置 `ROBOREV_CLAUDE_PROXY_TOKEN` 以将 bearer token
作为 `ANTHROPIC_AUTH_TOKEN` 转发给代理。如果未设置,roborev 将发送一个占位符
(这对于不检查标头的网关(如 Ollama)来说已经足够了)。
roborev *不会* 将 `ANTHROPIC_API_KEY` 转发到代理 endpoint——这
会将真实的 Anthropic 凭据泄漏给任意的第三方。
**URL 限制。** 代理 URL 不得嵌入 `user:pass@` 凭据
(请使用 `ROBOREV_CLAUDE_PROXY_TOKEN`);`http://` 仅被 loopback
主机(`127.0.0.1`、`::1`、`localhost`)接受,因此明文 endpoint 无法
通过网络接收 token。对于远程代理,请使用 `https://`。完整的 URL
(包括任何路径或查询字符串)将原样转发给
`ANTHROPIC_BASE_URL`,因此请包含你的网关期望的路径(例如
LiteLLM 可能需要末尾的 `/v1`;Ollama 不需要路径)。
**环境行为(此版本中的破坏性更改)。** 当
`claude-code` agent 运行时,roborev 总是从子环境中剥离继承的 `ANTHROPIC_API_KEY`、
`ANTHROPIC_BASE_URL`、`ANTHROPIC_AUTH_TOKEN`、
`ANTHROPIC_DEFAULT_{OPUS,SONNET,HAIKU}_MODEL` 和 `CLAUDE_CODE_SUBAGENT_MODEL`
。如果你以前通过在 shell 中导出这些变量来路由 Claude Code,请改用
`@` 规范。对于原生(非代理)模式,请通过
roborev 的配置配置 `ANTHROPIC_API_KEY`(它是从 roborev 存储的密钥中重新注入的,而不是从
操作员的 shell 继承的)。
## 遥测
当 daemon 启动时,以及 daemon 保持运行时每 24 小时一次,roborev 会向 PostHog 发送有限的匿名遥测数据:带有仓库数量、审查数量、是否启用同步、是否启用
CI 以及是否启用自动设计的 `daemon_started` 和 `daemon_active`,以及
`application=roborev`、版本、OS/arch、
`$process_person_profile=false`、`$geoip_disable=true` 和一个匿名安装
ID。
它不会发送仓库名称、路径、远程地址、提示、审查输出、提供商
token、用户名或 IP 地理位置。设置 `ROBOREV_TELEMETRY_ENABLED=0` 以
禁用它。`TELEMETRY_ENABLED=0` 也会被接受。无论环境变量如何,在
Go 测试进程中,遥测总是被禁用的。
## 安全模型
roborev 将代码审查和修复任务委托给具有
shell 访问权限的 AI 编程 agent。审查 agent 可以执行只读的 git 和 shell
命令来检查 diff;修复 agent 在隔离的 worktree 中运行,拥有
完整的工具访问权限。
**roborev 旨在与受信任的代码库一起使用。** 审查
提示包含仓库中的 diff 内容和提交信息。
如果你正在审查不受信任的代码(例如,来自未知作者的
开源贡献),请在沙盒环境
(容器、VM 或类似环境)中运行 roborev,以限制任何可能导致
agent 执行意外命令的 prompt injection 攻击的影响范围。
## 文档
完整文档可在 **[roborev.io](https://roborev.io)** 获取:
- [快速开始](https://roborev.io/quickstart/)
- [安装](https://roborev.io/installation/)
- [命令参考](https://roborev.io/commands/)
- [配置](https://roborev.io/configuration/)
- [使用 Refine 自动修复](https://roborev.io/guides/auto-fixing/)
- [代码分析与辅助重构](https://roborev.io/guides/assisted-refactoring/)
- [Hook](https://roborev.io/guides/hooks/)
- [Agent Hook](docs/agent-hook.md)
- [Agent 技能](https://roborev.io/guides/agent-skills/)
- [PostgreSQL 同步](https://roborev.io/guides/postgres-sync/)
对于此仓库中的本地开发,请使用 `prek install` 安装 hook,或者运行
`make install-hooks` 作为 `prek install` 的轻量包装器。
## 许可证
MIT 标签:AI编程助手, EVTX分析, Go, Ruby工具, SOC Prime, 代码审查, 开发工具, 日志审计, 网络调试, 自动化