kenn-io/roborev

GitHub: kenn-io/roborev

roborev 是一个本地运行的持续代码审查工具,通过 git hook 在 AI agent 每次提交后自动审查代码并支持自动修复闭环。

Stars: 1563 | Forks: 138

roborev [![Go](https://img.shields.io/badge/Go-1.21+-00ADD8?logo=go&logoColor=white)](https://go.dev/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Docs](https://img.shields.io/badge/Docs-roborev.io-blue)](https://roborev.io) **[文档](https://roborev.io)** | **[快速开始](https://roborev.io/quickstart/)** | **[安装](https://roborev.io/installation/)** 为 AI 编程 agent 提供持续的代码审查。roborev 在后台 运行,在 agent 编写代码时审查每一次提交,并在几秒钟内暴露出 问题——在它们累积之前。在上下文新鲜时将代码审查拉入 你的 agentic 循环。 ![roborev TUI](https://roborev.io/assets/generated/tui-hero.svg) ## 工作原理 1. 运行 `roborev init` 来安装 post-commit hook 2. 每次提交都会触发一次后台审查——agent 编写,roborev 阅读 3. 在 TUI 中查看结果,将其反馈给你的 agent,或者让 `roborev fix` 处理 ### 自动化,两层机制 ![roborev 如何工作](https://roborev.io/assets/static/how-it-works.svg) - **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`。 ![roborev 审查](https://roborev.io/assets/generated/tui-review.svg) ## 功能 - **后台审查** - 通过 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, 代码审查, 开发工具, 日志审计, 网络调试, 自动化