开源 · MIT 许可证 · 单一二进制文件

了解谁改了什么。
即使不是人类。

实时代码变更追踪,具备智能差异比对、Git 归因和即时通知功能。 单一二进制文件。零配置。全面可视化。

安装 0diff 在 GitHub 上查看
$ curl -fsSL https://0diff.dev/install.sh | sh copy
0diff watch — ~/project/flin
$ 0diff watch
▸ Watching 847 files across 23 directories...
▸ Git: main branch, 3 contributors tracked
 
[14:32:05] src/parser.rs +12 -3 (alice on feature/parser)
@@ -45,3 +45,12 @@
- fn parse_expression(&mut self) -> Result<Expr> {
+ fn parse_expression(&mut self, precedence: u8) -> Result<Expr> {
+ let left = self.parse_primary()?;
 
[14:33:41] src/typechecker/checker.rs +47 -2 ( Claude Agent on fix/enum-collision)
@@ -189,2 +189,49 @@
+ // Resolve enum variant / entity name collision
+ fn resolve_name_shadowing(&mut self, scope: &Scope) {
 
→ Slack #dev-changes notified
→ Discord #code-watch notified

每个团队都经历过这样的噩梦。
复杂代码库中未追踪的变更会让团队耗费数天进行调试, 错过截止日期,并破坏信任。这些故事每天都在上演。

凌晨 3 点的生产崩溃

生产环境宕机了。你的团队争分夺秒地寻找变更原因。过去 24 小时内,6 个分支中的 47 个文件被修改。没人记得碰过数据库迁移文件。你逐个文件执行 git log。三个小时后,你终于找到一个没人标记过的配置文件中的一行变更。

"谁动了连接池设置?没人记得。git blame 显示它是 3 天前在一个 200 个文件的 PR 中合并的。"

幽灵修改

你的代码昨天运行得完美无缺。今天,一个关键函数返回了错误的值。你什么都没改。但有人改了——一个 AI 助手重新格式化了一个文件,悄悄改变了一个缩进敏感的代码块。差异看起来像"空白清理",实际上是一个隐藏在表面之下的逻辑变更。

"Cursor 自动格式化了我的 Python 文件。看起来只是外观调整。结果它改变了一个嵌套 if 代码块的缩进。我们花了 2 天才找到问题。"

"不是我干的"问题

五名开发者在同一个模块上工作。合并后出现了回归问题。每个人都说没碰过那个文件。Git blame 显示的是一个合并提交——没有帮助。你需要知道谁在什么时候、在哪个分支上改了什么,在它被合并且历史被压缩之前。

"Squash 合并后,git blame 显示一个作者写了 500 行。实际导致问题的修改?在压缩中丢失了。"

失控的 AI 代理

你在不同终端中并行运行 5 个 Claude Code 代理。代理 3 决定"修复"一个工具函数,而代理 1、2、4 和 5 都依赖这个函数。所有代理都以你的名义提交。没有办法知道哪个代理修改了哪个文件,除非手动阅读每一个差异。

"我在一个复杂的 Rust 项目上启动了 100 个代理。一个代理重构了一个共享模块。4 个其他代理开始静默失败。我 45 分钟后才发现。"

没人阅读的 5,000 行文件

你的核心模块超过 5,000 行。经过多年精心调整的关键业务逻辑。一个初级开发者或 AI 助手在第 3,847 行做了一个小改动。没人审查,因为 PR 差异太大了。两周后,一个边界情况浮出水面。在该文件的 40 个变更中找出是哪个导致了问题,变成了一场考古挖掘。

"我们有一个 7,000 行的遗留控制器。我们真的无法审查对它的每一个变更。只能祈祷。"

周五下午 5 点的惊喜

有人在周五下午 4:58 推送了一个"快速修复"。没有审查,没有通知。周一早上:预发布环境无法启动。周末批处理任务因为一个变更的验证规则损坏了 10,000 条记录。如果有人在变更发生时收到实时通知,5 分钟就能修复。结果变成了周一早上的灾难。

"如果那个文件被修改时我收到了 Slack 通知,我 30 秒就能发现问题。结果这让我们丢失了整个周末的数据。"
真实成本
未追踪的变更不仅会导致 Bug,
更会造成真实的经济损失。
23%
开发者时间用于调试因未追踪修改引起的问题
4.2h
定位变更引发的回归问题根本原因的平均时间
$680K
每个工程团队因可预防的变更相关事故造成的年均损失
67%
的生产事故可追溯到绕过正常审查的代码变更

实时洞察每一个变更。
在它成为问题之前。
0diff 监控你的代码库,计算智能差异,识别每个变更的作者,并立即通知你的团队。一切尽在单一二进制文件中。

实时文件监控

使用 inotify (Linux)、FSEvents (macOS) 和 ReadDirectoryChanges (Windows) 进行原生操作系统级监控。去抖处理避免噪音。即时检测,零 CPU 开销。

0diff watch

智能差异引擎

Myers 算法计算精确的行级差异。可选择忽略仅空白变更、注释修改或低于可配置阈值的变更。只看真正重要的内容。

filter.ignore_whitespace = true

Git 归因

自动检测当前分支,对修改的行运行 git blame,并识别作者。准确了解谁更改了哪一行,甚至在提交之前。

0diff log --author "alice"

即时通知

将通知推送到 Slack(Block Kit 格式)、Discord Webhook 或任何 HTTP 端点。按文件分线程,保持频道整洁。在变更发生的那一刻就知道。

0diff test

可搜索的历史记录

每个变更都记录到本地 JSON-lines 文件中。按作者、文件、日期范围或分支查询。完整的审计跟踪,无需依赖 git log 考古。

0diff log --file "parser.rs"

零配置

运行 0diff init 即开始监控。智能默认值处理忽略模式、扩展名和去抖。之后可通过简单的 TOML 文件自定义。适用于任何语言、任何项目。

0diff init

后台守护进程

将 0diff 作为后台守护进程运行,跨终端会话持续工作。启动一次,无需再管。你的团队看门狗始终在线。

0diff watch --daemon

每日摘要

获取定期摘要:"今天,3 位作者修改了 47 个文件。最常修改:parser.rs(12 次变更)。"为技术负责人和 CTO 提供的管理视图。

notifications.digest.interval_hours = 4

单一二进制文件

使用 Rust 编写。编译为不到 10MB 的单一静态二进制文件。无运行时、无依赖、无 node_modules。使用 curl 安装,随处运行。跨平台。

curl -fsSL 0diff.dev/install.sh | sh

为你的实际工作方式而设计。
无论你是独立开发者、分布式团队,还是管理一支 AI 代理大军。

你独自开发。但你不再孤单了。

你使用 Copilot、Cursor、Claude Code。它们在你专注于其他地方时修改你的文件。你切换回来,发现有些东西不同了,但说不出哪里变了。你不断地 git diff 但总是忘记检查。几小时后,一个细微的 Bug 出现了,你完全不知道它是什么时候引入的。

使用 0diff,每个修改在发生的瞬间就会被记录。你可以看到确切的变更内容,即使是跨多个 AI 辅助会话。不再有"等等,这是我写的还是 AI 写的?"的困惑。

场景

你在一个标签页中编辑 auth.rs。Copilot 在另一个标签页中自动补全了 utils.rs 中的一个函数。0diff 立即捕获并在终端通知中显示精确的差异——甚至在你切换标签页之前。

0diff — solo workflow
[09:14:22] src/auth.rs +3 -1 (you)
+ let token = jwt::encode(&claims)?;
 
[09:14:23] src/utils.rs +18 -0 ( Copilot)
+ pub fn validate_token(token: &str)
+ -> Result<Claims, AuthError> {
+ let decoded = jwt::decode(
+ token, &KEY, &Validation::default()
+ )?;
...
 
ℹ 2 files changed in last 5 min

5 个开发者。200 个文件。没人知道其他人在改什么。

你的团队分布在 3 个时区。Alice 在你的凌晨 2 点重构了一个工具函数。Bob 在早上 8 点开始基于旧 API 开发。到中午,出现了一个需要 4 小时才能解开的冲突。Git 显示了合并冲突,但没有显示分歧开始的那一刻。

有了 0diff 推送到共享的 Slack 频道,每个开发者都能实时看到每一个变更。冲突被预防,而不仅仅是被解决。你的团队实时感知彼此的工作。

场景

Alice 修改了 api/routes.rs。Bob 立即收到 Slack 通知,附带精确的差异。他在写出任何冲突代码之前就调整了方案。

#dev-changes — Slack
┌─────────────────────────────────────┐
alice modified api/routes.rs
feature/v2-endpoints
+22 -8 lines · 3 hunks │
- GET /api/users/:id
+ GET /api/v2/users/:id
Bob also has this file open
└─────────────────────────────────────┘

你需要全局视图,而不是每一个差异。

作为技术负责人或 CTO,你不需要看每一行的变更。你需要知道:今天有哪些关键文件被修改了?有多少变更涉及生产敏感代码?新成员是否在接触不该接触的文件?

0diff 的每日摘要正好提供这些信息。按作者和文件分组的所有修改的定期汇总,附带频繁变更文件的热点检测。管理层的可视化,没有噪音。

每日摘要示例

"今天:5 位作者对 34 个文件进行了 127 次修改。热点:core/engine.rs(23 次变更)、db/migrations/(8 次变更)。标记:新成员接触了 security/auth.rs。"

0diff log --summary
═══ Daily Summary — Feb 14, 2026 ═══
 
Authors:
alice +342 -89 │ 14 files
bob +127 -43 │ 8 files
agent-3 +891 -202 │ 12 files
 
Hotspots:
core/engine.rs │ 23 changes │ HIGH
db/schema.rs │ 8 changes │ MEDIUM
security/auth.rs │ 3 changes │ SENSITIVE

有些文件绝不允许静默变更。

数据库迁移。身份验证逻辑。支付处理。加密密钥。这些文件需要不同级别的警惕。对 payment_handler.rs 的一个未经审查的变更可能造成数百万的损失。对 .env.production 的一次静默修改可能泄露密钥。

0diff 允许你配置关键文件警报,带有提升的通知级别——不同的频道、更响亮的警报、强制审查触发器。对敏感路径的变更不可能被遗漏。

配置示例

监控 db/migrations/*security/*.env*,立即向技术负责人发送 Slack 私信 + 向 #security-audit 发送 Discord 警报。对静默变更零容忍。

.0diff.toml — critical paths
# Critical file monitoring
[[watch.critical]]
paths = ["db/migrations/", "security/"]
alert_level = "urgent"
notify = ["slack-dm:@cto", "discord:#security"]
 
[[watch.critical]]
paths = [".env*", "secrets/"]
alert_level = "critical"
notify = ["slack-dm:@cto", "webhook:pagerduty"]
block_unreviewed = true

AI 辅助开发
时代而生。

你使用 Copilot、Cursor、Claude Code、Codex。它们以你的名义在你的文件中编写代码,无需询问。传统工具是为人类是唯一作者的世界而构建的。0diff 是第一个为人类 + AI 代码库设计的工具。

代理检测

检测已知 AI 工具(Claude、Cursor、Copilot)的模式。自动标记非人类变更,附带 标记。

多代理追踪

在并行终端中运行 5 个代理?0diff 独立追踪每一个,并显示哪个代理修改了哪个文件。

冲突检测

当代理 A 修改了代理 B 依赖的文件时,0diff 立即发出警报——在级联故障开始之前。

对比
为什么不直接用 git diff?
你可以。但以下是你会错过的。
功能 git diff watchexec fswatch 0diff
实时文件监控
智能差异(显示变更内容)
作者归因 (手动)
Slack / Discord 通知
可搜索的变更历史
空白 / 注释过滤 (标志)
AI 代理检测
单一二进制文件,零依赖 (需编译)
后台守护进程模式

10 秒安装。20 秒监控。
单一二进制文件。无依赖。无运行时。没有多余的东西。

快速安装(macOS / Linux)

curl -fsSL https://0diff.dev/install.sh | sh copy

从源码构建

git clone https://github.com/zerosuite-inc/0diff.git && cd 0diff && cargo install --path . copy

Cargo(从 GitHub)

cargo install --git https://github.com/zerosuite-inc/0diff.git copy

卸载

rm $(which 0diff) copy

单一二进制文件,项目外无配置文件。删除二进制文件即完成卸载。

First run
$ cd my-project
$ 0diff init
✓ Created .0diff.toml with smart defaults
✓ Detected: Rust project, 847 files
 
$ 0diff watch
▸ Watching 847 files...
▸ Ready. Edit a file to see 0diff in action.

不再猜测。
开始监控。

开源。永久免费。使用 Rust 构建。
ZeroSuite 产品。

安装 0diff 在 GitHub 上加星