一个 AI Agent 一晚上能改 3000 行代码,但第二天人类看 Git diff 的感觉,就像考古学家面对一堆碎片,光文件名就得猜半小时。
ndrstnd 这个开源工具,就是给代码变化配个翻译官,把 AI 几千行的修改,讲成一个你能听懂的故事。它不会帮你写代码,但它能让你看懂 AI 到底对你的代码干了什么。
ndrstnd解决代码审查的新问题
你的 AI 编程助手一晚上跑了三千行代码。第二天早上你泡好咖啡打开电脑,盯着屏幕上那个巨大的 Git diff,心里只有一个问题:它到底对我的代码做了什么?这三千行改动里,哪些是核心逻辑,哪些只是格式化,哪些埋着随时可能引爆的雷,你完全不知道。更麻烦的是,现有的代码审查工具只会按文件名的字母顺序把改动列出来,看着特别完整,但你根本没法消化。
以前看 Pull Request,流程基本是固定的。打开网页,从文件列表开始看,这个文件改了,那个函数动了,这里加了 200 行。看起来挺认真,但大脑其实一直在自己编剧情。因为代码 diff 这个东西,只告诉你“哪里变了”,却从来不告诉你“为什么这么变”。到了 AI 时代,这个问题直接被放大了无数倍。以前一个程序员一天改几百行,人还能记住上下文。现在 Agent 几小时生成几千行代码,如果还靠肉眼去翻文件,就像让一个人去检查高速打印机吐出来的百科全书,根本不可能。
ndrstnd 做的事情很简单,就是给代码变化加上一层解释。它会把一个分支的改动,整理成几个你能看懂的模块,比如故事、时间线和完整差异。以前你看代码像看装修完的房子,只看到墙变白了、门换了个方向,但设计师为什么这么搞,你完全不知道。ndrstnd 就像把装修方案、施工顺序和验收标准一起扔到你面前,告诉你为什么这块要砸掉,为什么那面墙要留着。它的目标就是创造一个体验,像旁边坐着个同事,一边指着屏幕一边跟你说,这个地方改了是因为要支持新功能,那边调整是为了修复一个隐藏的 Bug。
ndrstnd的故事视图与缩放控制
ndrstnd 里最核心的模块叫故事视图。它会把所有改动按语义分组,而不是按文件名分组。你拿到一份改动,先看它大致分成了几类,比如数据库相关、前端界面调整、API 接口变化,然后每一类下面再展开细节。这背后有一个很巧妙的设计,叫缩放控制。用过地图导航的人都知道,你到一个陌生城市,不会直接放大到街道级别。你会先看城市整体,再找主要区域,最后才看具体街道。代码审查也是这个道理,你不需要一开始就扎进每一行代码的变化里。
ndrstnd 提供了五个缩放级别。地图级别给你看整体概览,哪些目录改动最大,哪些模块被碰得最多。摘要级别给每个分组一句简短描述,让你知道这组改动大概干了什么。解释级别用大白话告诉你代码原来是干什么的,现在变成干什么的了,相当于一个文字版的改动对比。证据级别直接贴出相关的代码片段,去掉了那些无关的格式变化和空行调整。原始级别就是完整的 diff,你想看每一行代码具体怎么改的,也能看到。
而且每个变化还带颜色标签。绿色的是常规调整,比如重命名变量、调整缩进,扫一眼就行。红色的表示你得重点关注,比如核心逻辑被重写了,或者公共接口的签名变了。如果时间不够,你直接盯着红色部分看就行了,知道自己应该把精力放在哪里。这个设计特别适合那种 AI 改了几千行、你只有半小时 Review 的场景,扫一眼颜色就知道哪些地方必须细看。
ndrstnd的时间线视图
故事视图是按照逻辑分组来组织改动,但有时候你可能更想知道代码实现的过程。比如 AI 是先写了核心功能,再补充边界情况,还是先搭了框架最后填具体逻辑。这时候就需要时间线视图了。Git 的提交历史通常很乱,充满了来回修改和调试提交,一会儿加个功能,一会儿又删掉重写,根本没法顺着看。
时间线视图的做法是“伪造”一个合理顺序。它会分析所有改动之间的依赖关系,然后重新排列出一个你能一步一步跟着走的顺序。这一步做了什么,下一步又做了什么,哪些东西被推迟到后面才处理,都标得清清楚楚。你可以像看一个教学视频那样,回放 AI 是如何一步步把代码写出来的,而不是面对一堆乱七八糟的提交记录自己脑补。
更棒的是,时间线视图还能跟缩放控制组合使用。你看每一步改动的时候,可以选择只看摘要,也可以放大到证据级别看具体代码。这样既不会漏掉关键细节,也不会被无关信息淹没。如果你想重点检查某一步里有没有红色标记的改动,直接切换过去看就行了。
ndrstnd的完整差异视图
有些人可能觉得,不管你怎么分组、怎么整理,我还是想看一眼完整的 diff。这个需求 ndrstnd 也考虑了。它专门准备了一个完整差异选项卡,会把所有文件的改动汇总在一起,带语法高亮和彩色 diff 显示。跟 GitHub 或 GitLab 上看到的 diff 差不多,但体验稍微好一点,因为加载更快,颜色更清晰。
说到这个,其实有一个挺有意思的事情。很多年前我们发明了 diff 格式,是为了给计算机之间传补丁用的。后来不知道怎么回事,大家就觉得这玩意儿也适合给人类审查代码。然后我们就一直用到现在,几乎没人质疑过这个决定。但你仔细想想,给计算机看的东西,人看了能舒服吗?一串加号和减号,前面还有一堆看不懂的上下文标记,读起来特别费劲。ndrstnd 挑战的就是这个假设,它觉得人类不应该被迫用这种原始方式去理解代码变化。
ndrstnd连接AI Agent和工程师
ndrstnd 本身是用 TypeScript 开发的,仓库结构包含源码目录、网站目录、示例目录和测试目录。核心逻辑分成几块,Git 信息解析负责读取和分类文件改动,分析核心负责构建提示词并验证 AI 返回的结果,连接模块负责调用 Codex 或 Claude Code,网页部分负责把分析结果渲染成可阅读的 HTML 页面。安装后可以通过命令行运行 review 命令,它会分析目标分支并生成一个独立的审查结果页面,保存在项目的 .ndrstnd 目录里。
这个架构挺能代表未来 AI 软件工具的发展方向。底层负责收集事实数据,中间层负责调用模型去理解这些数据,上层负责把复杂的分析结果变成人类能轻松消费的信息。以前软件工具的关注点是执行,编译器负责转换代码,数据库负责存数据,IDE 负责帮你打字。现在 AI 工具的关注点开始转向解释,因为机器越来越会做事情,人类反而越来越需要知道机器为什么这么做。
ndrstnd展示未来开发协作模式
AI 编程最大的变化,不只是代码生成速度变快了,而是写代码这件事的生产关系彻底变了。过去是产品经理提需求,程序员设计方案、写代码、再解释代码。未来可能变成人提出一个目标,Agent 去设计和实现,另一个 Agent 帮忙整理过程,人类最后负责判断方向。这时候新的问题就冒出来了,如果代码是 AI 写的,人类怎么保持掌控感?答案肯定不是让人重新读一遍所有代码,数量已经超过人的耐心了。
更合理的方法,是让 AI 帮人建立一个理解层。ndrstnd 不负责判断代码好不好,判断这件事应该由人类的大脑来做。它只是一个帮手,帮你建立关于这次改动的心理模型,让你脑子里有个清晰的地图,然后你再决定代码到底行不行。这个定位非常克制,因为市面上已经有太多工具试图自动评判代码质量了,但那些工具经常误判,产生各种奇怪的幻觉。
在 AI 能写几万行代码的未来,看懂代码这件事,比写出代码更稀缺。ndrstnd 还处于实验阶段,但它的思路很清晰,就是在 AI 的生成速度和人的理解速度之间搭一座桥。你看不懂 AI 的操作,你就无法掌控它。而能掌控 AI 生成代码的人,才是未来软件工程里最有话语权的人。
AI 生成代码的速度只会越来越快,人类理解代码的能力才是真正的瓶颈。ndrstnd 这样的工具,就是给未来的开发者配了一副眼镜,让你在代码洪流里还能看清楚方向。