R3 实战:用本地代码审查工具给你的 AI 编码 Agent 装上反馈闭环
你和 AI 编码 Agent 的工作流是什么样的?Agent 写完代码,你扫一眼,发现有不对劲的地方,复制粘贴到聊天框里打字反馈,Agent 修改,你再扫一眼……如此循环。
这个模式有个隐藏问题:Chat 窗口是线性、无序的——你的反馈和 Agent 的修改混在对话历史里,你很快就不记得哪些意见已经处理了、哪些还在待办。审查长文档(设计文档、重构计划)时尤其痛苦,一个段落要来回引用好几次,最后一头雾水。
R3(Review. Revise. Resolve.) 就是为了填补这个空白而诞生的。它把代码审查的范式引入 Agent 协作:Agent 把变更提交到本地 Web 审查面板,你在上面留下锚定到具体行/段落的反馈,Agent 逐条回复,直到你批准或放弃。全本地运行,零配置。
一分钟上手
R3 的核心设计理念是”由 Agent 驱动”。你很少需要自己敲命令——把下面这段粘贴到你的 Agent 指令文件(CLAUDE.md / AGENTS.md / 或直接告诉 Agent)里:
This project uses r3 for review. Run it with: `npx @hyperlogue/r3@latest` `r3 guide` will show how to use it.
然后对 Agent 说一句:”把你的变更提交审查。” Agent 就会执行 npx @hyperlogue/r3@latest create,启动本地 Web 服务器(端口 8791),生成一个审查链接,把 URL 分享给你。
你也可以全局安装以便在任何目录下使用:
npm install -g @hyperlogue/r3
安装后 r3 命令全局可用,无需每次 npx。
核心工作流:三轮对话替代十轮拉扯
R3 定义了一个紧凑的审查循环,整个流程只有 3 个核心命令:
1. Agent 提交审查
r3 create
这会打开一个新的审查会话,返回一个 URL。Agent 把这个 URL 给你——你在浏览器中打开,就能看到 Agent 提交的代码变更或文档草稿。
2. 你留下精准反馈
在 Web 面板里,你可以把反馈精确地锚定到某一行代码或某一段落上——不是凭记忆说”第三个函数那有个问题”,而是直接在那个函数旁边写下批注。
提交反馈后,等待中的 Agent 会立即在终端里看到你的意见。
3. Agent 逐条回复
r3 reply-m "what I changed"
Agent 逐条处理你的批注,回复修改了什么、为什么没改。每一条回复都实时呈现在 Web 面板上,你可以一边看一边决定是否批准。
循环继续:Agent 再次 r3 watch,你继续提意见,直到你点击 Approve(批准) 或 Abandon(放弃)。
整个流程可以直观地用这样一张时序图来理解:
你 Agent │ │ │ Agent 提交审查 (r3 create) │ │ ←──────────── URL ────────────── │ │ │ │ Agent 等待反馈 (r3 watch) │ │ ←────── 打开审查面板 ─────────── │ │ 在具体行/段落上留下批注 │ │ ─────── 提交反馈 ──────────────→ │ │ Agent 逐条回复 (r3 reply) │ │ ←──── Web UI 实时更新 ────────── │ │ (重复直到批准) │ │ │ │ 你点击 Approve │ │ ──────── 审查完成 ──────────────→ │
关键是,你不需要在聊天框里复制粘贴引用。批注跟在代码行后面,不会因为上下文翻滚而丢失。
两种审查模式:实况文件和冻结差异
R3 支持两种审查类型,分别对应不同的场景:
文件审查(Files Review):实时查看文件的最新状态。Agent 一边修改你一边看,R3 会追踪文件变更并重新渲染。适合正在编写中的设计文档、或你想亲眼看着 Agent 逐行调整代码的场景。对 Agent 说一句”把设计文档开个审查,我要边看边改”,它就会用文件审查模式启动。
差异审查(Diff Review):冻结某个时刻的代码变更快照,生成一个不可变的差异记录。Agent 后续的修改会进入新的”轮次”,你可以对比不同轮次之间的变化。对 Agent 说”把工作区的变更提交审查”或”审查 main 和当前分支的差异”,Agent 会自动选择差异审查模式。
差异审查的好处是反馈不会漂移——你针对某一行代码的批注,不会因为 Agent 修改了别的部分而跑偏位置。反馈锚定在引用的文本段落上而非行号。
远程开发场景
如果你在远程开发服务器上工作,R3 默认只监听本地回环地址(127.0.0.1),你可以通过 SSH 隧道把 Web 面板带到本地:
ssh -L 8791:localhost:8791 devbox
然后在本地浏览器打开 http://127.0.0.1:8791/ 就能看到所有项目的审查面板。也支持 Tailscale Serve 或 Cloudflare Tunnel。
环境变量控制网络行为:
| 变量 | 默认值 | 说明 |
|---|---|---|
R3_PORT | 8791 | Web 服务端口 |
R3_BIND | 127.0.0.1 | 绑定地址 |
R3_ALLOWED_HOSTS | 无 | 允许的 Host 头(逗号分隔,决不能用 *) |
R3_PUBLIC_URL | 无 | 对外公开 URL |
安全提示:R3 没有内置认证。永远不要把它绑定到
0.0.0.0或暴露在公网上。如果你需要通过公网访问,使用 SSH 隧道或 Tailscale Serve 这类安全通道。
无配置设计
R3 不需要任何配置文件。审查记录存储在 $XDG_STATE_HOME/r3/r3.sqlite 中(macOS 通常是 ~/.local/state/r3/),Web 服务器的守护进程信息写在 $XDG_RUNTIME_DIR/r3/daemon.json。所有命令通过 Git 仓库自动发现项目上下文——你从一个目录运行 r3 create,它就知道哪个项目要审查。
如果你需要手动管理服务器:
r3 start # 启动 r3 stop # 停止 r3 status # 查看状态 r3 restart # 重启
第一次调用 r3 create 时,服务器会自动启动,所以你通常不需要手动执行这些命令。
实战场景:审查 Agent 的设计文档
假设你的 Agent 写了一份 API 重构设计文档,你想在实施前仔细审查。传统方式是逐段复制粘贴到聊天框里,标记问题。用 R3:
- 你告诉 Agent:”把
design/api-refactor.md开个审查,我要看一下” - Agent 执行
r3 create(文件审查模式),生成审查 URL - 你打开 URL,看到文档的实时版本
- 你在”数据库迁移方案”段落下批注:”这个方案在数据量超过 1TB 时回滚时间太长,考虑分片迁移”
- Agent 看到反馈,回复了一个分片迁移的方案并修改了文档
- 你看到 Web 面板实时更新,确认修改到位,点击 Approve
整个过程不用切出编辑器,不用复制粘贴,反馈与文档同行,不会遗漏。
小结
R3 解决的不是 Agent 能不能写代码的问题——现在的 Agent 已经写得很好了。它解决的是你如何高效地与 Agent 协作的问题:把无序的聊天反馈升级为结构化的审查流程。
- 零配置安装,
npx即可使用 - 两种审查模式覆盖实况编辑和变更快照
- 反馈锚定到具体文本,随文档变化而追踪
- Agent 驱动的设计让接入成本降到最低
如果你也在和编码 Agent 协作,R3 可能是那个让你的”审阅-修改”循环效率翻倍的工具。
相关链接: