本地 PR 评审闭环 · 人类 LLM

像评审 PR 一样评审你的分支。把这些讨论交给你的 agent。

在任意 git 仓库中运行:在 diff 上留下行内评论,再通过内置 skill 把这些讨论交给你的 LLM,让它充当评审者或被评审者。评论就是 .reviews/ 下的纯 JSON — 无需剪贴板交接,agent 闭环也不需要任何服务器。

$ npx slop-review
开始使用
0 运行时依赖 Node ≥ 20 浏览器 终端 node:http only
localhost:9410 — slop-review — feat/search-ranking
slop-review 完整 diff 视图:按重要性排序的文件、带行内评论讨论的并排 diff
一套页面,两种渲染

在浏览器里。或者直接在终端里。

同一套键盘驱动的评审界面,既可作为本地 web 应用运行,也可通过 Carbonyl 完整运行于你的终端 — 它是一个把画面绘制到 TTY 的 Chromium 分支。无需切换窗口,不会丢失上下文。几乎所有快捷键都能照常使用(两个修饰键组合改用了对终端更友好的替代方案)。

浏览器

完整的图形界面,零配置

localhost:9410
浏览器中 slop-review 的逐 commit diff
终端

--carbonyl 让一切留在同一个窗格

zsh — carbonyl
通过 Carbonyl 在终端内渲染的 slop-review diff
亮点

为评审闭环而生,不只是盯着 diff 看。

普通 diff 查看器做不到,而 slop-review 能做到的九件事。

01 / 按重要性排序的文件

先落在最关键的改动上。

每个 diff 都按文件对整组改动的核心程度排序,而非按字母顺序。你从最重要的代码开始,再逐步走向测试和文档。

  • 被引用次数:有多少其他已改动的文件 import 了这个文件
  • 其次是状态(modified 优先于 added,added 优先于 removed)
  • 再是源码优先于辅助文件(tests、docs、fixtures、configs),最后是路径
localhost:9410 — 完整 diff
按被引用次数排序的文件:parser.ts 和 types.ts 居前
02 / Vim 快捷键 + which-key 提示栏

不离开主键位,完成整场评审。

单字母命令即可完成评论、复制、深链、窥视和删除,全程不离开键盘。which-key 提示栏在你第一次按键时出现,并在每次状态变化时重新渲染,只显示当前行可用的快捷键。

  • 隐藏的提示是严格的空操作,因此提示栏绝不会宣传一个失效的按键
  • j/k 移动,c 评论,n 下一条讨论,r 标记已评审,p 窥视 HEAD
localhost:9410
diff 底部随上下文变化的 which-key 提示栏
03 / 在任意位置评论

新侧或旧侧都能开行内讨论。

c 在光标所在行打开评论编辑器,或先按 v 选中一段范围。无论单行还是多行、新侧还是旧侧,讨论在三种 diff 模式下的表现完全一致。

localhost:9410 — src/search.ts
在某一 diff 行上打开的行内评论编辑器
04 / 闭环中的 LLM

把这些讨论交给你的编码 agent。

内置的 Claude Code skill 让 agent 直接读写 .reviews/ 中的 JSON,从而充当评审者(留下行内评论)或被评审者(处理未结讨论、修改源码、回复)。无需 HTTP API,无需运行服务器。

# 安装 skill,然后直接用自然语言提出请求 npx skills add genkio/slop-review # “处理 slop-review 中尚未结的讨论” # “为这个分支担任评审者”
localhost:9410 — 讨论
一条评审讨论:评审者的提问和 agent 的回复
05 / 按 blob 绑定的已评审标记

对某个文件签字确认。在它真正改动之前一直保持绿色。

点击文件头即可将其标记为已评审(并折叠)。该标记绑定到标记当时该文件的 blob SHA,因此之后只触及某一个文件的 push 只会使该文件的标记失效。所有未被触及的文件依然保持绿色。

  • 逐 commit 的标记受“此后无更改”约束,因此你绝不会对自己没看过的内容签字确认
  • p 在不离开 commit 视图的情况下窥视该文件在 HEAD 处的状态
localhost:9410 — 4/8 已评审
折叠为绿色已评审文件头的文件
peek HEAD
从 commit 视图中弹出的 Peek HEAD 模态框,显示该文件的当前状态
06 / 跨文件符号面板

双击一个标识符,看到它的每一处出现。

双击 diff 中的任意标识符,即可列出它在所有已改动文件中的每一处出现,当前所在行就地高亮。打开第二个符号时,第一个会停靠到右侧边条,匹配列表和跳转历史都被保留,于是你可以在多个并行搜索之间切换而不丢失上下文。

localhost:9410 — symbol: Note
跨文件符号面板,列出某个标识符在各文件中的出现
07 / 三种 diff 模式,同一页面

整个分支、任意 commit,或你的工作副本。

相对 base 的累积 diff、任意单个 commit,或本地工作副本的 diff。Shift+← / Shift+→ 在它们之间切换;评论在三种模式下都有效。冷启动会恢复该分支上次的视图,或回退到一个合理的逐 commit 默认值。

localhost:9410 — 本地工作副本
本地工作副本的 diff 视图
08 / 单向 GitHub 同步

把未结的 PR 讨论拉到本地。

slop-review --sync 把你分支对应的 GitHub PR 中未结的评审讨论镜像到本地讨论,并保留各自的 GitHub 作者。再次运行会以 GitHub 为准:新回复流入,已解决的讨论在本地被删除,而你在本地动过的内容会被标记,以便你的编辑保持原样 — GitHub 的新回复仍会追加,但你的成果绝不会被覆盖。

  • 同步而来的讨论带有 GitHub 徽章,并链接回原始评论
  • 只要界面保持打开,每 5 分钟就会持续重新同步
localhost:9410 — 已同步的讨论
一条 GitHub 同步而来的讨论,显示 GitHub 徽章和原始作者
09 / 按需生成的分支总览

一张由 LLM 生成的改动地图。

Overview 模态框使用 codex execclaude 按需生成分支摘要:改了什么、心智模型、前后行为对比,以及一张渲染成图示的小型架构草图。

localhost:9410 — 总览
带编号“改了什么”卡片的分支总览模态框
overview — 草图
渲染成节点图的总览架构草图
无论你在哪里评审

在手机上阅读体验出色。在终端里评审体验出色。

在小屏幕上 diff 会收起为单列以便阅读,而整个评审闭环(讨论、回复、;; 提交组合键)都能在 Carbonyl 内运行。

移动端 web
手机上的 slop-review diff
终端中的讨论
zsh — carbonyl
通过 Carbonyl 在终端内打开的一条评审讨论
键盘优先

整个闭环,都在主键位上。

同一套快捷键在普通浏览器和 Carbonyl 中都能用。

jk光标下移 / 上移一行(JK 移动五行)carbonyl ✓
cC在新侧 / 旧侧的行上评论
vV开始按行的可视选择
y复制光标所在行的 path:line 引用
r切换光标所在行所属文件的已评审状态
nN跳到视图中的下一条 / 上一条讨论
p窥视光标所在行的 HEAD 状态(commit 视图)
e展开 hunk 周围的上下文行
⌘/Ctrl提交评论编辑器;;
在 commit / 完整 / 本地之间切换
开始使用

在任意 git 仓库中,一条命令搞定。

当前工作目录会被自动初始化为评审目标,服务器挑选一个空闲端口,然后打开你的浏览器。讨论存放在 .reviews/ 中,把它加入 gitignore 即可让它们保持本地。

运行它

无需安装,无需配置。Node ≥ 20 且 PATH 中有 git

cd /path/to/your-feature-branch npx slop-review

终端模式

通过 Carbonyl 把界面直接渲染到你的 TTY。

# macOS,通过 genkio/tap homebrew tap brew install genkio/tap/carbonyl slop-review --carbonyl

教会你的 agent

安装内置 skill,让 LLM 可以充当评审者或被评审者。

npx skills add genkio/slop-review

同步一个 GitHub PR

把未结的 PR 讨论镜像到本地,然后打开界面。

slop-review --sync --browser