内容
# diffler
[](https://crates.io/crates/diffler)
[](https://www.npmjs.com/package/@mattfillipe/diffler)
[](https://chat.h4ks.com)
用于 AI 编程代理的终端代码评审。一个类似 neogit 的 TUI,您可以在仓库中与 Claude Code 或任何 MCP 兼容的代理一起启动它:它显示代理正在执行的操作的实时差异,您可以暂存、提交和留下评论,代理通过嵌入式 MCP 服务器读取您的反馈并原地响应。一个二进制文件,无需浏览器,无需守护进程。
## 安装
已安装的命令始终为 `diffler`。请选择适合您的安装方式:
```sh
# Rust — 从源代码编译,或使用 cargo-binstall 获取预编译版本
cargo install diffler
cargo binstall diffler
# Homebrew(macOS / Linux)
brew tap matheusfillipe/diffler https://github.com/matheusfillipe/diffler
brew install diffler
# Scoop(Windows)
scoop bucket add diffler https://github.com/matheusfillipe/diffler
scoop install diffler
# Arch(AUR)
yay -S diffler-bin
# Nix(flake — 运行预编译二进制文件)
nix run github:matheusfillipe/diffler
nix profile install github:matheusfillipe/diffler
# npm — 预编译二进制文件,一次性或全局安装
npx @mattfillipe/diffler
npm install -g @mattfillipe/diffler
```
或者,从 [发布页面](https://github.com/matheusfillipe/diffler/releases) 下载预编译二进制文件(macOS、Linux、Windows;x86_64 和 arm64)——任何 GitHub 发布安装程序(`eget`、`ubi`等)也适用于它。
## 快速入门
在仓库中运行 `diffler`。它启动 TUI 和一个 MCP 服务器,监听端口 8417。连接您的代理:
```sh
claude mcp add --transport http diffler http://127.0.0.1:8417/mcp
# 或者,通过 stdio,自动发现端口:
claude mcp add diffler -- npx -y diffler-mcp
```
循环:代理编辑文件,差异实时更新。您可以在差异视图中注释行或范围,并按 `Z` 发送反馈。代理通过 `wait_for_feedback` 读取评论,回复或提出解决方案,您在 TUI 中确认。`y`/`Y` 复制相同的反馈作为 Markdown,如果您想将其粘贴到提示符中。
## 键位
| 键位 | 操作 |
| --- | --- |
| `j` / `k` | 向下 / 向上移动(状态行、侧边栏文件或差异行) |
| `TAB` | 折叠(状态)/ 切换侧边栏 ⇄ 差异焦点(差异视图) |
| `<cr>` | 打开文件的差异、章节或提交;在差异视图中,切换窗格焦点 |
| `D` | 打开完整的评审差异 |
| `<c-n>` / `<c-p>` | 差异视图中的下一个 / 上一个文件 |
| `s` / `u` | 暂存 / 取消暂存 |
| `S` / `U` | 暂存所有 / 取消暂存所有 |
| `x` | 丢弃(需确认) |
| `cc` | 提交 |
| `b` | 分支弹出窗口 |
| `ll` | 日志 |
| `c` | 在光标行注释 |
| `V` | 选择一行范围,然后 `c` 注释它 |
| `r` / `R` | 回复 / 解决评论 |
| `v` | 标记文件已查看 |
| `y` / `Y` | 复制反馈 Markdown(文件 / 所有) |
| `e` | 在 `$EDITOR` 中打开文件 |
| `Z` | 向代理发送反馈 |
| `q` | 返回 / 退出 |
差异视图有两个窗格:文件侧边栏和选定文件的差异。`TAB` 在它们之间移动焦点;`j`/`k` 从侧边栏更改选定文件或在焦点处滚动差异;`<c-n>`/`<c-p>` 从任一侧边栏切换文件。
`?` 显示当前屏幕的完整键位图。`<c-d>`/`<c-u>` 滚动半页;`<c-f>`/`<c-b>` 在差异和日志视图中滚动整页。
鼠标也支持(包括 tmux):鼠标滚轮滚动指针下的窗格,左键单击选择一行 — 单击章节、目录或最近提交的标题会折叠它,单击侧边栏文件会打开它。鼠标捕获意味着终端自己的文本选择需要通常的重写(`Shift` 或 `Option` 在 iTerm2 中)。
## MCP 工具
在 TUI 运行期间,diffler 提供一个 MCP 服务器,代理使用它读取您的评审并原地响应。参见 [docs/mcp.md](docs/mcp.md)。
## 配置
分层 TOML:默认值,然后 `~/.config/diffler/config.toml`(XDG 尊重,macOS 包括),然后 `<repo>/.diffler/config.toml`,然后 CLI 标志。检查合并结果以及每个值来自哪里:
```sh
diffler config --dump
```
所有键及其默认值:[docs/config.example.toml](docs/config.example.toml)。
## 开发
```sh
just ci # fmt + clippy + tests,与 CI 相同的门控
just e2e # PTY 端到端套件(需要 uv)
```
需要 Rust 1.88+、`just`、`cargo-nextest`。钩子:`prek install`。
## 许可证
MIT 或 Apache-2.0,按您的选择。