ローカルPRレビューループ · 人間 LLM

ブランチをPRのようにレビュー。 スレッドはエージェントに引き渡す。

どんなgitリポジトリでも実行可能: 差分にインラインコメントを残し、同梱のスキル経由でレビュアーまたはレビュイーとして振る舞うLLMにスレッドを引き渡す。コメントは .reviews/ 配下のプレーンなJSON — クリップボードでの受け渡しも、エージェントループのためのサーバーも不要。

$ npx slop-review
はじめる
ランタイム依存ゼロ Node ≥ 20 ブラウザ または ターミナル node:http only
localhost:9410 — slop-review — feat/search-ranking
slop-review の全差分ビュー: 重要度順に並んだファイル、インラインコメントスレッド付きの並列差分
1つのページ、2つのレンダラー

ブラウザの中で。あるいはそのままターミナルの中で。

同じキーボード駆動のレビューUIが、ローカルWebアプリとして動作し、Carbonyl 経由でターミナル内でも完全に動作します — TTYに描画するChromiumフォークです。ウィンドウの切り替えも、コンテキストの喪失もありません。ほぼすべてのキーバインドがそのまま使えます(2つの修飾キーコードはターミナルに優しい代替を使用)。

ブラウザ

フル機能のGUI、セットアップ不要

localhost:9410
ブラウザでの slop-review のコミット単位の差分
ターミナル

--carbonyl で1つのペインに収める

zsh — carbonyl
Carbonyl 経由でターミナル内に描画された slop-review の差分
ハイライト

差分を眺めるだけでなく、レビューループのために作られた。

ただの差分ビューアにはできない、slop-review の9つの機能。

01 / 重要度順のファイル

まず核心となる変更にたどり着く。

すべての差分は、アルファベット順ではなく、変更セットにおける中心度でファイルを並べ替えます。重要なコードから始め、テストやドキュメントへと外側に進んでいきます。

  • 被参照数: 他のいくつの変更ファイルがこのファイルをインポートしているか
  • 次にステータス(修正、追加、削除の順)
  • 次にサポートファイル(テスト、ドキュメント、フィクスチャ、設定)よりソースを優先、その後パス順
localhost:9410 — full diff
被参照数で並べ替えられたファイル: parser.ts と types.ts が先頭
02 / Vimキー + which-keyヒントバー

レビュー全体をホームポジションから操作。

1文字の動詞でコメント、コピー、ディープリンク、ピーク、削除を処理。キーボードから手を離す必要はありません。which-keyヒントバーは最初のキー入力で現れ、状態が変わるたびに再描画され、現在の行で有効なキーだけを表示します。

  • 隠れたヒントは厳密に何もしないため、バーが死んだキーを案内することはありません
  • j/k 移動、c コメント、n 次のスレッド、r レビュー済み、p HEADをピーク
localhost:9410
差分の下部に表示される、コンテキストに応じた which-key ヒントバー
03 / どこにでもコメント

新しい側にも古い側にもインラインスレッド。

c を押すとカーソル行でコメントエディタが開きます。あるいは先に v で範囲を選択します。単一行でも複数行でも、新しい側でも古い側でも、スレッドは3つの差分モードすべてで同じように機能します。

localhost:9410 — src/search.ts
差分の行で開いたインラインコメントエディタ
04 / ループの中のLLM

スレッドをコーディングエージェントに引き渡す。

同梱の Claude Code スキルにより、エージェントが .reviews/ のJSONを直接読み書きして、レビュアー(インラインコメントを残す)またはレビュイー(未解決スレッドに対応し、ソースを編集し、返信する)として振る舞えます。HTTP APIも、稼働中のサーバーも不要。

# スキルをインストールし、あとは普通の言葉で頼むだけ npx skills add genkio/slop-review # "未解決の slop-review スレッドに対応して" # "このブランチのレビュアーとして振る舞って"
localhost:9410 — thread
レビュースレッド: レビュアーの質問とエージェントの返信
05 / blob単位のレビュー済みマーク

ファイルを承認。実際に変更されるまで緑のまま。

ファイルヘッダーをクリックしてレビュー済みにマーク(そして折りたたみ)します。マークはマーク時点のそのファイルのblob SHAに紐づくため、後で 1つ のファイルに触れるプッシュがあっても、そのマークだけが無効になります。触れられていないファイルはすべて緑のままです。

  • コミット単位のマークは「以降の変更がない」ことが条件なので、見ていなかった内容を承認してしまうことはありません
  • p でコミットビューを離れずにHEADのファイルをピークできます
localhost:9410 — 4/8 reviewed
緑のレビュー済みヘッダーに折りたたまれたファイル
peek HEAD
コミットビューからファイルの現在の状態を表示する Peek HEAD モーダル
06 / ファイル横断のシンボルパネル

識別子をダブルクリックすれば、すべての出現箇所が見える。

差分内の任意の識別子をダブルクリックすると、変更されたファイル全体での出現箇所がすべて一覧表示され、アクティブな行はその場でハイライトされます。2つ目のシンボルを開くと、1つ目は右端のストリップに退避し、マッチ一覧とジャンプ履歴は保持されるため、コンテキストを失わずに同時進行の検索を切り替えられます。

localhost:9410 — symbol: Note
ファイル横断で識別子の出現箇所を一覧表示するシンボルパネル
07 / 3つの差分モード、1つのページ

ブランチ全体、任意のコミット、あるいは作業コピー。

ベースとの累積差分、任意の単一コミット、またはローカルの作業コピーの差分。Shift+← / Shift+→ でこれらを切り替えられ、コメントは3つすべてで機能します。コールドスタート時はそのブランチの最後のビューを再開するか、適切なコミット単位のデフォルトにフォールバックします。

localhost:9410 — local working copy
ローカルの作業コピーの差分ビュー
08 / 一方向のGitHub同期

未解決のPRスレッドをローカルに取り込む。

slop-review --sync は、ブランチのGitHub PRから未解決のレビュースレッドをローカルスレッドにミラーし、各GitHubの作者を保持します。再実行するとGitHubをミラーします: 新しい返信が流れ込み、解決済みのスレッドはローカルで削除され、ローカルで触れたものはフラグが立てられて編集内容が保持されます — 新しいGitHubの返信は引き続き追記されますが、あなたの作業が上書きされることはありません。

  • 同期されたスレッドには GitHub バッジが付き、元のコメントへリンクします
  • UIを開いている間は5分ごとに再同期し続けます
localhost:9410 — synced thread
GitHubバッジと元の作者を表示する、GitHub同期されたスレッド
09 / オンデマンドのブランチ概要

LLMが生成する変更セットのマップ。

概要モーダルは、codex exec または claude を使ってオンデマンドでブランチの要約を生成します: 何が変わったか、メンタルモデル、変更前後の挙動、そして図として描画された小さなアーキテクチャのスケッチ。

localhost:9410 — overview
番号付きの変更内容カードを備えたブランチ概要モーダル
overview — sketch
ノード図として描画された概要のアーキテクチャスケッチ
レビューする、あらゆる場所で

スマホで読みやすく。ターミナルでレビューしやすく。

小さな画面では差分が読みやすい1カラムに折りたたまれ、スレッド、返信、;; の送信コードを含むレビューループ全体が Carbonyl 内で機能します。

モバイルWeb
スマホ上の slop-review の差分
ターミナルのスレッド
zsh — carbonyl
Carbonyl 経由でターミナル内に開かれたレビュースレッド
キーボードファースト

ループ全体を、ホームポジションで。

同じバインドが通常のブラウザでも Carbonyl でも機能します。

jkカーソルを1行下 / 上へ移動(JK で5行)carbonyl ✓
cC新しい側 / 古い側の行にコメント
vVビジュアル行選択を開始
yカーソル行への path:line 参照をコピー
rカーソル行のファイルのレビュー済みを切り替え
nN表示内の次 / 前のスレッドへジャンプ
pカーソル行のHEADをピーク(コミットビュー)
eハンク周辺のコンテキスト行を展開
⌘/Ctrlコメントエディタを送信;; を使用
コミット / 全体 / ローカルを切り替え を使用
はじめる

どんなgitリポジトリでも、コマンド1つ。

cwdが自動でレビュー対象としてブートストラップされ、サーバーが空きポートを選び、ブラウザが開きます。スレッドは .reviews/ に保存されます。ローカルに留めておくにはgitignoreしてください。

実行する

インストール不要、設定不要。Node ≥ 20 とPATH上の git があればOK。

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

ターミナルモード

Carbonyl 経由でUIをそのままTTYに描画します。

# macOS、genkio/tap の homebrew tap 経由 brew install genkio/tap/carbonyl slop-review --carbonyl

エージェントに教える

同梱のスキルをインストールして、LLMがレビュアーやレビュイーとして振る舞えるようにします。

npx skills add genkio/slop-review

GitHub PRを同期する

未解決のPRスレッドをローカルにミラーし、UIを開きます。

slop-review --sync --browser