meat は、git の unified diff を「reading diff」に圧縮する Go ツールです。モデルにスタイルや nil-check を再レビューさせるのではなく、概念・アルゴリズム・アーキテクチャを確認するための変更だけを残します。
meat
boldsoftware/meat · reading diff for senior review
CLI はまず差分を決め、同じ差分・モデル名・rubric/compiler のハッシュからキャッシュキーを作ります。キャッシュミスのときだけモデルを生成するため、再実行では認証情報やネットワークに触れずに結果を表示できます。
CLI は現在の git root を RepoRoot として渡します。モデルの read_file と grep はそのルート内に閉じ、絶対パスと .. による脱出を拒否します。
モデルは完成済みの diff を書きません。番号付きの元 diff に対する計画を tool call で提出し、ローカルのコンパイラが最終表示を作ります。
| 操作 | 対象 | コンパイラが守ること |
|---|---|---|
remove | 元 diff の inclusive 行範囲 | 座標は常に元の番号。重複範囲・範囲外を拒否。 |
replace | 1 行の一部 | old は一意に一致し、省略部分は ... / … で可視化。 |
fold | 同じ極性の連続した変更行 | インデントを保つ 1 行の省略マーカーへ変換。import を跨ぐ fold は拒否。 |
自動で削除される機械的ノイズ
- import / include / require / use 宣言(複数行や埋め込みソース内も対象)
- 同一ブロックの exact move は両側を同じ扱いにする
- ファイル・hunk ヘッダーは、本文を残すときだけ一緒に残す
- 元の diff を変更せず、候補を検証してから SmartDiff を生成する
大きな計画はまず preview_plan に送り、保持行数・fold 数・省略量を確認します。最終 submit では 1 行の summary も検証し、非対称な move、壊れた hunk 構造、空の計画をエラーにします。
番号付き diff が 1 回の予算に収まらない場合、meat はファイル・hunk・言語構造の境界を使って分割します。1 つの巨大ファイルを文字数だけで切らず、文字列リテラルや Python の owner/body、import ブロックを途中で切らないようにします。
各 chunk の結果はファイルメタデータを重複排除して結合します。全体で検出した move は、両側が同じ chunk に収まる場合だけ座標を写して強制します。chunk をまたぐ move は、設計上の既知の境界です。
raw unified diff
└─ structural splitter (file → hunk → language-safe unit)
├─ model run: chunk 1
├─ model run: chunk 2
└─ ...
└─ merge metadata + summaries → reading diff| 呼び出し | 読むもの |
|---|---|
meat | 現在の HEAD |
meat REV | 単一 revision |
meat A..B | commit range |
meat -staged / -w | index / working tree |
git diff | meat | stdin の unified diff |
| 選択 | 経路 |
|---|---|
| 既定 | gpt-5.6-sol / OpenAI Responses |
claude-* | Anthropic Messages |
MEAT_MODEL | 明示指定がない場合の環境変数 |
| 埋め込み | Model interface を実装 |
キャッシュは SHA-256(rubric + model + diff) で命名した JSON を ~/.meat に保存します。rubric はプロンプトだけでなく、編集計画コンパイラがモデルに見せる静的 surface とバージョンを含むため、仕様変更時に古い結果を再利用しません。書き込みは一時ファイルから rename する best-effort です。
go install meat.dev/cmd/meat@latest
meat # latest commit
meat -w # unstaged changes
git show HEAD | meat # any unified diffリポジトリに同梱された 2026-08-02 の評価では、実際のモデル実行で反復変更を 2 変更行まで圧縮した例が記録されています。これは「どの diff でも最小化できる」という保証ではなく、生成コードや同じ修正が多くの hunk に広がるケースでの測定結果です。
| 言語 / 例 | 入力の変更行 | Meat 出力 | 省略率 | 残る意味 |
|---|---|---|---|---|
| Go / DNS エラー | 16 | 2 | 87.5% | 8 つの同型エラー経路から代表 1 箇所 |
| Python / Transformers | 18 | 2 | 88.9% | 生成コピーではなく modular source の修正 |
| Rust / Helix LSP | 22 | 2 | 90.9% | ordered → unordered の concurrency choice |
- boldsoftware/meat — ソースリポジトリ
- README.md — install と CLI の最短手順
- site-demo-commits-2026-08-02 — Go / Python / Rust の実測データ
- meat/chunk.go — 構造境界での分割と結合
- meat/editplan.go — remove / replace / fold の検証