No. 73·中文精读

造了20年编辑器的人说:AI写得越快,你越需要看得见代码的地方

Why IDEs Won't Die in the Age of AI Coding: Zed Founder Nathan Sobo

用 Rust 重写编辑器、GPU 渲染,Nathan Sobo 谈 17 万开发者使用的 Zed 如何在 AI 编程浪潮中定位。

节目音频00:00 / 40:13
中文精读由 AI 基于原始访谈改写,非官方翻译,可能存在偏差或错误;表述以原节目为准。

2006年,Nathan Sobo 大学刚毕业,给自己定了一个目标:做一款心目中理想的代码编辑器。

这一做就是将近20年。中途他在 GitHub 做出了 Atom,顺手造出了 Electron,后来微软用同样的思路做出 VS Code,统治了整个行业。他自己则在2017年推倒重来,用 Rust 从零写 Zed,一个如今有17万左右活跃开发者的 IDE。

然后 AI 来了。所有人都在问同一个问题:终端里敲两句英文,agent 就能把活干了,IDE 是不是要死了?

在红杉资本播客 Training Data 的这期节目里,Sobo 给出了他的答案:只要人还需要读代码,IDE 就死不了。而人需要读代码的时间,会比大多数人以为的长得多。

代码是写给人看的

Sobo 不否认终端加 LLM 的威力。他自己也用 Claude Code,也知道外面有几百万人这么干活。让他受不了的是另一个环节:agent 干完活想给你看成果时,你只能隔着终端里十几行的摘要看它的改动。

想看更多?没门。想看这次改动牵扯到的上下游?自己开编辑器去。

所以他的推理很简单:如果 IDE 会死,前提是人不再需要看源代码。这件事在他看来根本不成立。源代码和自然语言一样,是一门语言,是写给人看的。他引用了 MIT 教授、《计算机程序的构造和解释》合著者 Harold Abelson 的话,这句他记了很多年:

「程序应当写给人读,只是顺便让机器执行。」

这话听着极端,程序写出来总归要跑。但 Sobo 认真对待了它背后的含义:程序的本质,是人用一种极其精确的方式表达某个抽象过程。而表达这类图灵完备的概念,没有比源代码更好的语言。

那最好的界面一定是图形界面吗?他的答案很务实。Vim 算不上 GUI,但 Vim 就是一个围绕源代码优化的界面:展示它、导航它、偶尔亲手改它。因为有时候,表达一个想法最清楚的方式,就是直接把代码写出来。你可以对 LLM 描述「我要一个带这四个字段的结构体」,但如果你已经清楚要表达什么,直接写代码往往更快。他没兴趣手搓重复劳动,能交给模型的他乐意交,可表达权还在自己手里。

他顺口补了一句观察:那些在终端里重度 vibe coding(基本全靠 AI 生成代码)的人,多半旁边也开着一个编辑器,用来看 agent 到底干了什么。

Atom的教训:性能没法事后补

Sobo 对编辑器的执念有来历。2006年他毕业时,TextMate 正火,Rails 之父 DHH 演示框架用的就是它:轻、快、好上手。他试过 Emacs、Eclipse、JetBrains 全家桶,每家都有绝活,有的扩展性强,有的响应快,有的功能全,但没有一家把这些捏进同一个包。

他想要的东西很具体:最强 IDE 的能力,TextMate 的手感,外加不用像养宠物一样,每个周末喂养一份随时会坏的 Vim 配置。他说,Atom 就是在 Vim 里写出来的。

第一站是 Atom。他作为头两名工程师之一加入 GitHub 做这个项目,为了极致扩展性选了 Web 技术。做 Atom 时顺手造的那层外壳,就是后来的 Electron:把 Node.js 和 Chrome 拼在一起,让你能用网页技术做桌面应用。这个主意来自 GitHub 联合创始人 Chris Wanstrath。

结局大家都知道了。微软拿走这套思路,把自己现成的网页版代码搬上来,VS Code 统治了行业。

Atom 给他留下两条硬教训。一条是通用的:怎么设计数据结构,才能高效表示并编辑大段文本。另一条是血泪:别让扩展代码跑在主线程上。Atom 靠极度开放迅速走红,然后被自己过早许下的承诺淹没。

「我们被自己过早许下的承诺淹没了。」

还有一层是私人恩怨:他受够了 Web 技术。打开 Electron 的性能分析器,盯着火焰图里那些线条,他知道自己钻不进去,速度到顶了。

2017年,他决定推倒重来,理由听起来朴素:性能这东西事后补不上,选了什么架构,就等于接受了什么性能上限。Web 不是他要的地基。

Zed的两个赌注:快,和把人拉回代码里

Zed 从第一天起就押了两件事。

第一件是快。按下一个键,像素要在显示器的下一次刷新里响应,零可感知延迟。他说还没做到百分之百,但已经比浏览器里能达成的近得多。技术上最核心的一招:整个 Zed 的界面像游戏渲染3D世界那样,由 GPU 上的着色器画出来。为此他甚至重写过整个图形后端。

第二件是协作方式。他在 GitHub 亲历了如今这套协作流程的流行:异步,各自在角落里干活,拍个快照传上去,别人在网页上留言,一小时或一天后你回复。他说这套邮件式的流程,适合 Linux 那种全球分工、各做各事的场景;大多数坐在同一页上的团队,最好的协作是实时待在代码里,能随时打断彼此,也把彼此当人看。

Zed 团队自己就很少做代码评审,有事直接在代码里实时聊。屏幕共享不行,因为总有一个人坐在副驾驶,按键要绕一圈才能生效。他想要的是 Figma 给设计师的那种东西:你待在创作工具里,看着正在造的东西,队友就在旁边。

这套旧执念,撞上了 AI 时代的新需求。现在所有人都开始「在代码里对话」,只是对话对象换成了 agent。问题来了:agent 改完代码,你给了反馈,这些反馈存在哪?

「这种东西,还没有一个对应的 Git。」

你不可能给 agent 吐出的每个 token 都做一次 commit,再走一遍 pull request 评审。所以 Zed 在做一套细粒度追踪机制,大致相当于每按一次键、agent 每写入一段编辑,就自动记一次「提交」,然后把对话直接锚在这些记录上。Sobo 承认 Zed 离完整愿景还很远,但这是他认定的方向。

这套执念也解释了 Zed 的用户画像。主持人按10万活跃用户估算,他纠正说大概17万,开源软件统计口径天然偏低。用户偏硬核,多是写了多年代码的老手。按他们的统计,约一半用户在用 Zed 的编辑预测功能,约四分之一在用某种形式的 agent 编辑。拥抱 AI 时有人跑到评论区骂街,他不在乎:「这事正在发生,我们不会掉头装看不见。」

为什么硬核用户爱 Zed?他的解释:开发者越老练,越在意工具在手上的反馈。一个天天十几个小时摸着的工具,掉帧、跟不上手,是会让人烦的。至于他女儿同学的妈妈,一位牙医,最近正在 vibe coding 自己诊所的管理软件,她知不知道自己需要一个手感好的编辑器?不知道。「让她知道,是我的工作。」

给所有agent当接口

今年早些时候,Zed 也做了自家 agent。他的体会是:真正难的部分居然是 AI。调 prompt、跟模型较劲,和做 IDE 完全是两种难法;图灵完备的软件部分反而容易。

与此同时,每家都在造 agent。Anthropic 有 Claude Code,Google 有 Gemini CLI,是 Zed 接入的第一家。这些 agent 渲染出来的终端体验,在他眼里都相当贫瘠,都需要一个编辑器来补。

Zed 的选择是给所有人当接口。参照物是微软做对的一件事:语言服务器协议(LSP)。VS Code 把原本捆在 JetBrains 式 IDE 里的智能抽出来交给社区,PHP 有语言服务器,TypeScript 有语言服务器,谁都能接。

Zed 想对 agent 做同一件事,这就是他们发起的 ACP(Agent Client Protocol,agent 客户端协议)。逻辑是:agent 会分化,有的擅长某类问题,有的今天领先明天被反超,与其押注某一家,不如让任何 agent 都能在 Zed 里获得好界面。

效果比他预期的好。JetBrains 理论上是竞争对手,也加入了。他说这样挺好的,与其跟所有人的努力对着干,不如站在同一边。

LLM擅长什么,卡在哪

这期节目里最有信息量的部分,是 Sobo 拆解 LLM 的能力边界。起因是 Zed 工程师 Conrad Irwin 那篇冲上 Hacker News 第一的文章《为什么 LLM 造不出软件》。Sobo 说他把文章转给主持人时都有点心虚,他自己比 Conrad 乐观,不太愿意断言 LLM 永远做不了什么,但他能说清哪些好用、哪些糟心。

先说好用的。一个成功案例:Zed 有一批老旧的服务端设施要迁移到 Cloudflare,他花了一个下午,vibe coding 出一个 Cloudflare API 的模拟器。做法是先喂 API 文档,再描述需求:写 Rust 绑定,再抽象出一层,方便插入模拟器。他脑子里有完整的图景,只是没时间亲手写。换作以前,要么自己挤时间写,要么写一份含糊的文档向团队解释。这次他直接把生成的一堆代码交给负责云的同事,附了一句「别嫌弃,里面可能有奇怪的东西」。结果团队顺利跑了下去。

他给自己划了一条线:可以当 vibe coding 的老板,但得当个明白的老板。最怕那种甩手掌柜,以为自己解决了95%的问题,其实只解决了5%,再把一坨半成品扔给团队。

更早的例子,还在 agent 出现之前,用 GPT-4。Zed 的界面全部由 GPU 渲染,他重写图形后端时,配置渲染管线、设置 GPU 各个阶段这些知识他并不掌握,以前得翻 Stack Overflow 和冷门文档,这次直接生成,一次到位。

还有 Rust 的过程宏。他想把 Tailwind CSS 的思路搬进 Zed 的 Rust 图形框架,给每个 Tailwind 类生成对应方法,这需要写他从来没学过的过程宏。LLM 会。他把这些体验总结成一台「知识榨汁机」:知识都在模型的分布里,他不想去读书再慢慢消化,他想让知识被直接挤成他需要的形状。像复制粘贴,但远远超出复制粘贴。

再说糟心的。Zed 正在做一个叫 DeltaDB 的系统,在 Git 之上对每一次编辑做细粒度追踪和实时同步。这是他很久没有体验过的、需要把一堆约束同时装进脑子里硬扛的难题。LLM 帮不上什么忙,至少帮不上写代码的忙。这个系统总共没多少行代码,他引以为傲的恰恰是行数少,每一行都在该在的地方。难的是把所有约束同时想清楚,代码只是把想清楚的东西记下来。

LLM 他照用,只是换了用法:拿它探索想法,甚至让它生成一些他根本不会运行的代码,快速感受一下方向。主持人 Sonya Huang 替他把边界总结得很干净:任务在训练数据分布之内、你脑子里已有清晰的抽象模型,模型实现起来又快又好;一旦出了分布,或者任务的核心是思考而非打字,模型就跟不上了。Sobo 认可这个总结。

另一个痛点是等。agent 跑任务时,你可以盯着看,可以去做别的,可以跟它赛跑,哪种都别扭。盯着看有时必要,比如及时喊停:「住手,我要的那个测试还没跑通,你倒好,跑去写我没让你写的测试,还把它跑通了。」他这个做编辑器的人,连按键反馈都要卡在下一帧,最受不了的就是干等。所以他盼着模型变快,比如 Claude Haiku 这类小模型,工具开发者的职责是搞清楚什么时候切快模型、什么时候切聪明模型。如果十分之一的时间能拿到一个八九成正确的结果,整个工作方式可能又要变一次。至于终局会怎样,他自己的说法是,陪审团还没退庭。

对话不该只是聊天记录

聊到 IDE 的最终形态,Sobo 先吐槽了一个事实:IDE 长得一模一样已经不知道多少年了。左边文件树,中间标签页,右边 Git 面板或者 agent 面板。这套布局是为一个场景设计的:一个人,一份工作副本,一个问题,手动解决。

如果 agent 成为主要工作方式,这个布局就得重想。他在 Zed 的原型里推几件事:

  • 对话即文档。现在 agent 对话被渲染成聊天记录,但它同时是一份随时间演化的文档:里面不断注入代码引用,不断发生编辑,随日志展开。他想让这份文档从只读变成可编辑,光标往上移,进入之前的对话,直接干活。
  • 渲染出来的代码可以直接改。对话里展示的代码窗口,只要内容是新鲜的,就应该能就地编辑,并且和真实文件同步,还能像 GitHub 的 pull request 那样展开上下文。
  • multi buffer(多缓冲区)。Zed 已有的概念:把散落在代码库各处的代码片段拼进同一个界面,像编辑一个文件那样编辑它们。他想把对话也变成这种东西:对话把代码拉到你面前,你直接伸手改。
  • 时间轴回放。在对话里选两个点,能不能直接看这段时间里发生了哪些改动?

再往深一层,是他对代码库本身的想象。今天的代码库几乎是裸的:代码里可以有注释,GitHub 的快照上可以挂讨论,但代码本身不带元数据。他想把代码库变成一根主干,让所有相关数据都挂在上面:对话、编辑、上下文,全部稳定地锚在代码的具体位置上,形成对代码演化的连续记录,而非一张张快照。

到那时,LLM 可以对着某段代码问:这底下发生过哪些对话?然后把上下文全部捞出来。人拉同事进对话时,agent 的交流记录就是现成的背景材料,帮对方把该看的代码快速装进脑子。

他管这套东西叫「根本性的抽象」,认为它是围绕 LLM 构建一切交互的地基。

明天就能用上的几件事

节目听完,有几件事不用等 Zed 更新,明天就能照做:

  • 开双窗口。用终端 agent 干活时,旁边开一个编辑器同步看改动。Sobo 断言重度用户都在这么干,终端里那十几行摘要,不够你判断一次改动的好坏。
  • 先分类,再派活。任务在模型的能力分布之内、你脑子里已有清晰结构,就放手让它生成,像 Cloudflare 模拟器那样;任务的核心是权衡和思考,就把它当讨论对象和草稿机,别让它碰正式代码。
  • 给 agent 的反馈留痕。别让修改意见散在终端历史里,尽量留在代码旁边,能锚定到具体位置就锚定。你未来的自己和你的队友,都会感谢这些记录。
  • 选型时盯住开放协议。团队挑 coding agent 时,优先考虑支持 ACP 这类开放协议的。今天领先的产品未必明年还领先,接口比产品耐用。

主持人最后把 Sobo 总结为「为手艺寻找完美工具的人」。从2006年到现在,工具换了两代,问题没换过:人和代码之间,该有一个更好的界面。AI 只是让这个界面上多了一个对话者,问题本身还在。

文稿来源:sequoiacap.com;机器转写可能有识别错误,人名与数字请以音频为准。
id="podcast-transcript" data-framer-component-type="RichTextContainer" style="transform:none">IntroductionNathan Sobo: It just doesn’t make sense to me that human beings would stop interacting at all with source code until we get to, like, AGI, I guess, where human beings aren’t going to be doing a lot of different things. But until then, I think we need to. We need to look at code. And so then the question is: what’s the best user interface for doing that? Sonya Huang: Today we’re talking with Nathan Sobo, founder of Zed, who spent nearly two decades building IDEs, first building Atom at GitHub and now Zed. Zed is a modern IDE written in Rust, used by more than 150,000 active developers, and also creates and maintains the ACP, or agent client protocol, which connects different coding agents to different coding surfaces, including Zed. Nathan shares a contrarian take. Despite all the hype around chat- and terminal-based AI coding tools, he argues that source code itself is a language meant for humans to read, and that we’ll always need visual interfaces to understand what AI agents are doing. We dig into whether LLMs can actually code, what the richer collaboration layer between humans and AI might look like for coding, and Nathan’s vision for turning code into a metadata backbone where conversations, edits and context all hang together. Enjoy the show. Main conversationSonya Huang: Nathan, thank you for joining us here today. Nathan Sobo: Yeah, thanks for having me on. Sonya Huang: I want to start with a hard hitting question. There is a lot of internet talk, chatter about is this the death of the IDE? So if you roll back two years, everyone was coding primarily in the IDE. Nathan Sobo: Right. Sonya Huang: And now it seems like as people move towards the terminal and more of these conversational experiences, there’s a question in the air: is this the death of the IDE? Nathan Sobo: Yeah. And I’ve actually asked myself that question at different times and different states of anxiety of, like, is it death of the IDE? I’ve spent my entire life grinding toward building the ultimate tool for this, and is it not going to matter? Are these people right? But after mulling it over seriously—because I definitely don’t want to be gold plating a buggy whip, I think that those takes are not realistic. It is mind blowing that you can sit down at a terminal and speak English with a script, talking to an LLM, and make real progress on a code base. And there are millions of people doing that apparently—including me on occasion. But the problem I ran into whenever I used—you know, Claude code was the thing I think I spent the most time with, is when it wants to show you what it just did and you’re reviewing it, you sort of view it through this 10 line or tiny little excerpt in the terminal. And as soon as you want to see more, what do you do? And so I think if you believe that the IDE is going to die, then I think that requires you to believe that human beings are not going to need to interact with source code anymore. Like, I don’t need to take a look and see the context of this edit that the agent just made and all the different things that it’s connected to, and understand that and load that into my brain. And I just fundamentally think that source code is a language, just like natural language is a language. So we have this revolutionary new tool for processing natural language that we’ve never had. But it’s not like source code is binary, that we feed to a processor, right? Like, it is intended for human consumption. Like, one of my heroes that I learned a lot from, Harold Abelson, he’s a computer science professor, I think he was at MIT. He has this great quote that I’ve always loved, which is like, “Programs should be written for people to read and only incidentally for machines to execute.” Pat Grady: Hmm. Nathan Sobo: Which is an extreme stance, because it’s like why are you writing the program if you don’t want a machine to execute it? There are, like, a lot of people that program in Haskell and stuff that seem to not actually care about what gets done with all of this programmatic machination. I tend to, but I also see a lot of wisdom in that, and that fundamentally programs are about us expressing some abstract process in a very precise way, and there is no better language for talking about a lot of different sort of Turing complete programmatic concepts than source code itself. So it just doesn’t make sense to me that human beings would stop interacting at all with source code until we get to, like, AGI, I guess, where human beings aren’t going to be doing a lot of different things. But until then, I think we need to. We need to look at code. And so then the question is: what’s the best user interface for doing that? Sonya Huang: And is the best user interface a GUI then? Nathan Sobo: I think so. There are a lot of different ways of representing an interface to code. Does it need to be graphical? I mean, there are a lot of people that are using Vim, for example. Vim’s not a graphical user interface, but is an interface that’s optimized around presenting source code, navigating source code, and yes, sometimes editing that source code manually. Because I think in the same way that the best way to understand software is often looking at the software, looking at the best human-engineered synthetic language we can derive for expressing this abstract process, sometimes the best way of expressing it is just to write it directly. And I’m not here to say that I’m particularly a big fan of grinding through repetitive work, or having something that could be written by an LLM. I have no desire to write that necessarily, but I do think that there are oftentimes still in software where the clearest way to articulate something is just to write the code, define a data structure. I could write a sentence to an LLM describing “I want a struct with the following four fields,” or even zoom out and describe that on a more abstract level. But if I know what I want to express, sometimes source code really is the most efficient way to do it. And in that world, a tool designed for navigating and editing source code still seems like a really relevant tool. And I have a feeling that even people that are heavily vibe coding with a tool in the terminal are probably running an editor alongside that tool to inspect what’s going on. Sonya Huang: You mentioned at the start that you’ve been working on IDEs for your whole career. You are a legend in the IDE space. Just maybe for our listeners, just say a word on your background. Nathan Sobo: When I graduated from college, I decided I wanted to build my own editor. That was 2006, the year after I graduated college. And I’ve been working my whole career to build the editor I envisioned, which was always sort of—at the time, TextMate was a really popular tool. I learned about TextMate from DHH  demoing Rails or whatever. It was just lightweight, simple, approachable, fast. I’d used Emacs, I’d used Eclipse, I’d used the JetBrains products, which are still really powerful. And all of them brought something to the table in terms of either extensibility or responsiveness or feature richness, but none of them synthesized all those things into one package. And so it was, like, 2006 when I decided I want to build an editor that has the same power or more power as the most capable IDEs that take 10 years to start up and feel kind of sluggish under my fingertips, but then have the same kind of responsiveness as a TextMate or a Vim, but also be really extensible, but not have to be extensible in this arcane Vim script language where I’m having to have this, like, pet that I’m feeding every weekend or whatever in my spare time to make sure that my Vim configuration doesn’t break. I wrote Atom in Vim. So anyway … Sonya Huang: Talk about Adam, actually, and then lessons from that and then why you started Zed. Nathan Sobo: Yeah. The first attempt at delivering this IDE of my dreams was Atom. And I joined GitHub as one of the first two engineers to work on that project. And we wanted it to be extremely extensible, and so we decided, why don’t we build it on web technology? So in the process of creating Atom, we built the shell around Atom, which we ended up naming Electron. And Electron went on to be the foundation … Sonya Huang: That’s clever. I just caught that reference. Nathan Sobo: Yeah. That was Chris Wanstrath’s idea, actually, but not mine. Yeah, and so what we did is we sort of married Node.js, which was getting really popular at the time, with Chrome, and then delivered this framework that kind of let you build a webpage that looked like a desktop app. Pat Grady: Hmm. Nathan Sobo: And it went on to be really successful. Atom had its day in the sun. Then Microsoft kind of copied our idea, took Electron, took code they already had that was running on the web, and moved it over, and then the rest was history. I mean, VS code went on to take over the industry. But at some point I had kind of gotten to the point where I felt like Atom had run its course. I had learned some hard lessons there. Some of them were just about, like, how do you design a data structure to efficiently represent large quantities of text and edit it? Which is a language-neutral lesson, honestly, to some extent. And some of the lessons were about not inviting people to bring code onto the main thread and destroy the performance of the application by just running random extension code. We made it very extensible. We were very open, which sort of made it very popular quickly. And then we drowned under the promises we had made that were kind of premature. But one of the things was I was just sick of web technology. Like, I remember opening up the performance profile that was built into Electron—Chrome’s dev tools, basically—and just looking at something that I was trying to optimize, and I’m just like, I need to get inside of whatever these little lines are in this flame graph and figure out what’s going on inside there. And I just hit the ceiling, I guess, on how fast I could make this thing. And so it was yeah, I think, 2017 that I decided we need to start over, that a web browser is actually not a suitable foundation for the tool that I really wanted to build. Which had a lot to do with performance, which sounds like no big deal. I mean, but performance is not a feature that you can really go back and add later. If you’ve chosen an architecture, you’re going to accept the performance capabilities of that architecture. And the web wasn’t it for me. Sonya Huang: You built Zed originally to make it easier for humans to pair program with other humans. Nathan Sobo: Right. Sonya Huang: That ended up being very convenient as AI agents came about and humans started to need to collaborate with AI agents. Talk about that dynamic a bit. Nathan Sobo: I think the whole industry has this idea of how we should all be collaborating together. And I was actually at GitHub for the current way that we collaborate becoming popular, and it’s all about being asynchronous, that you kind of go off in your corner and do a bunch of work, take a snapshot of that, upload it, and then in a web browser someone writes comments on your snapshot, and then maybe an hour or maybe a day later you reply. And it’s this very, like, email-oriented experience, asynchronous experience, which when you’re all on the same page or maybe when you’re working on Linux, which is what Git was designed for originally, and there’s people all over the world working on these very disparate things, maybe that’s an appropriate modality. But I always believed that the best way to collaborate on software was including a lot more times where we’re in the code together, writing code together, or talking through code together, and getting on the same page in a format where we’re actually talking to each other and can interrupt each other, and also relate to each other as human beings in a way that I just don’t see happening on top of the Git-based flow. We use Git all the time, and we don’t do as much code review as a lot of teams because what we prefer to do is just talk to each other in real time in the code. But there just wasn’t a good tool that enabled that. You could use screen sharing, but the problem with screen sharing is one person is very much in the passenger seat, because you got round trip keystrokes. And so yeah, the two big problems—not knowing that AI was coming, right? The two big problems I wanted to solve at the outset were fundamentally better performance. You know, when you type a key, I want pixels responding to you on the next sync of the monitor, so there’s zero perceptible lag. We’re pretty close. I can’t say we’re 100 percent perfect, but we’re a hell of a lot closer than you could ever get in a web browser. Pat Grady: And can you say a word about how you’ve achieved that? Nathan Sobo: Yes, I’m on a digression here, but … Pat Grady: Go ahead and say your second thing, and then say a word about how you achieve performance. Nathan Sobo: But then the other big pillar other than performance at the outset was changing the way that developers collaborate on software. And so to do that, I really feel like we need to bring the presence of your teammates into the authoring environment itself in much the way that Figma did for designers. Now designers didn’t have a lot of good options. They didn’t have anything as good as Git, for example, as a compelling alternative. But I still think that vision of you’re in the tool, looking at the actual thing you’re creating and there are other people there with you, was something that even before I saw Figma, I wanted to bring to the experience of creating software. And so that’s why it felt appropriate to own the UI on this deep level. Now onto the rest of your question about what are the implications of that for AI? The vision with Zed was always, I want to link conversations to the code in the authoring environment where the code’s being written. And so I actually think that conversations in the code, that used to be kind of a weird idea, right? Because, oh, why would you need to have a conversation in the code? You write it by yourself and you push a snapshot, and then we’ll have a conversation on a website about the code you wrote. But it’s starting to feel a lot more relevant in a world where you’re having this conversation all the time with this, like, spirit being or whatnot, right? Sonya Huang: Ghost? Nathan Sobo: [laughs] Yeah. All of us, even me included as a big fan of this more synchronous mode of collaboration, are having a lot more conversations about code in the code. And that’s where I see sort of this snapshot-oriented paradigm really breaking down. Like, when I’m interacting with an agent, and it goes off and makes some changes and I want to give it feedback on those changes, ideally, I want to kind of permanently store the feedback that I gave on those changes and have a record of that. What tools? There’s no sort of Git for that, if that makes sense, right? I’m not going to commit on every token the thing emits and then, like, do a pull request review on that. And so to be real, Zed is very much a work in progress. And I think to earn the right to deliver this experience, we first just had to build a capable editor that someone would just want to use to create software on their own. I think we’ve made a ton of progress there, and are now starting more earnestly on this phase two of this fine-grained tracking mechanism that’s sort of the equivalent—it’s not exactly how it works, but it’s kind of the equivalent of having a commit on every keystroke, or a commit on every edit that the agent streams in, and then being able to anchor interaction or conversation directly to that. So that’s something that—the tech we’re building I think is something maybe we could have built in isolation, but then the problem is well, what experience do you deliver on top of that? And I always thought the best possible experience would be this vertically integrated—we designed the UI and all the infrastructure top to bottom to deliver this immersive ability to interact directly in the code with another being. Sonya Huang: And so you’ve made the choice to make the IDE almost this Switzerland for humans to collaborate with different AI agents. Nathan Sobo: Right. Sonya Huang: Talk about the role that agentic coding protocol—is that what it is? Nathan Sobo: Yeah. Sonya Huang: ACP plays in that vision? Nathan Sobo: I really view our job as to provide the ultimate interface between the human being, the source code, other human beings, or other artificial human beings, basically. And we built a first party agent earlier this year, but as we’re doing that—and it’s quite challenging, as tuning the prompts—none of it feels, like, challenging in the same ways that building an IDE is in terms of algorithmic complexity and getting the data structures just right, and making sure that things are performant. The actual Turing complete software parts of that are fairly easy. The hard parts are the AI parts. And that’s still something that I think we’re learning as a team. We come from a very different perspective. Meanwhile, I see all these teams that all seem to be quite well funded from some of the big AI labs like Anthropic and Google. Google with Gemini-cli, they were the first people that we integrated with. Claude code. Everyone’s building an agent, it seems, and all these agents are rendering what I consider to be a fairly impoverished kind of terminal-based experience that would need to be supplemented with an editor. So the thought is okay, we’ve got a great editor, and all these people are trying to solve this problem. Like, what needs to happen here is the same thing that the language server protocol did. So one great thing that Microsoft did with VS code is they took all the intelligence of the IDE that was typically bundled in like Jetbrains style, where the IDE comes preconfigured knowing everything, and they moved it out to the community. So the PHP has a language server now, and there’s the TypeScript language server, et cetera. We wanted to do the same thing with agents. The thought being there’s probably going to be different kinds of agents experimenting in different domains. Maybe there’s certain agents that are optimized for particular problems, there are agents competing with each other, so sometimes one will be the best only to be leapfrogged by another. Externalizing all that and trying to democratize that and say, “Hey, whatever agent you want to use, we want to deliver a great UI for you to interact with that agent and your software.” That was the thinking behind it. And so far it’s working out better than I might have expected, actually. Like, I didn’t really know how many people are going to resonate with this idea, but JetBrains got on board. And so that I think is really exciting. They’re theoretically a competitor, but it’s nice to have someone on the other side. And now there are a bunch of different agent developers that are getting on board on the other side. We’re going to continue working on our own agent, but it’s nice to be aligned with all that effort instead of competing with it. Sonya Huang: Do you vibe code? Nathan Sobo: Sometimes. [laughs] But yeah, I mean, I have. So one successful case of vibe coding is we had some very old, like, server-side infrastructure that needed to be replaced. And so I decided to move all of our server-side infrastructure to Cloudflare, and I vibe coded a simulator for the Cloudflare API. And so basically we have a trait in Rust that abstracts away everything Cloudflare can do. And I had an afternoon, basically, and an idea. And that was an amazing use case of agentic coding of just like—pop pop pop pop pop. Pat Grady: What did you use for it? Nathan Sobo: I just described the idea to the agent. I think I fed it some API docs from Cloudflare’s JavaScript APIs. And I said, “I want to build Rust bindings to these APIs, but then I want to build an abstraction that sort of lets me then plug in a simulator for these APIs as well.” And I knew exactly what I wanted. I had a vision, and I didn’t have a ton of time to express that vision. So in the past, maybe I would have either done it myself—which I definitely didn’t have time for, there were other things going on at the time—or written some amorphous document, or try to explain it to engineers on my team what I had in mind. But what this vibe-coding session enabled me to do was get somewhere in between, if that makes sense. So I apologetically handed this pile of generated code to the guys working on cloud and was like, “I generated this. This is directionally the way that I want to go, don’t judge me too hard if you find some weird stuff in here that doesn’t quite make sense. Like, it’s generated. Just so you know.” That was a huge success, though. I mean, they were able to run forward with it. Yeah, I think I maybe avoided the, like—I never want to be like, you know, the boss, the vibe-coding boss or whatever, you know? Sonya Huang: Why not? Nathan Sobo: [laughs] What I mean is I want to be the vibe-coding boss that’s doing it well, but I don’t want to be the vibe-coding boss who’s sort of clueless and thinks that they’ve solved 95 percent of the problem when really they’ve solved five of the problem and they’re just deluding themselves. I want to do it in an aware way and make sure that I’m actually moving the ball forward and not being annoying, handing off a big mess of slop to somebody and being like, “Here you go, clean it up, my great idea.” Sonya Huang: Actually, speaking of—so your user base is on the order of 100,000 active developers in Zed. Nathan Sobo: It’s 170, I think. Well, anyway, depends how you measure. Sonya Huang: Okay. 170,000 active developers at the time. And they tend to be pretty hardcore, engineers, like elites, have been coding for a long time. What is your user base’s overall perspective on AI, and are they embracing it? Are they using—I just listened to the Karpathy interview where he uses autocomplete but doesn’t really use the agentic loop as much. What are your users doing in terms of adopting AI? Nathan Sobo: Based on the metrics we have, which are not perfect because it’s an open source IDE, it makes it very easy for people to opt out, about half of the people using Zed are using our edit prediction capability, which is, you know, I’m coding along and it suggests the next thing. So very much programmer in the driver’s seat. And about a quarter of our active users are using agentic editing in some shape or form. You know, we had some haters in the crowd, and I think as we began to embrace AI, there were definitely people who let us know what they thought about that, you know, that we weren’t—whatever. But I don’t care about that. It’s like, hey, this is happening. Something’s happening here. Like, we’re not going to just not go toward that. Like, I’m not like that. And so if they signed up for Zed for being a Luddite or head in the sand or, like—or I don’t know, just clinging to tradition with all our might, like, we’re not on board. Like, I want to move toward the future. We attract a more professional—yeah, like you’re saying, hardcore audience. Because I think, at least at the moment—and again, the full vision isn’t built yet—one of the things we have to offer is this extreme performance, while with every passing day the same features as the other things, but just much better performance. And so I think as a developer becomes more seasoned, they start to care about the tactile experience of the tool they’re using under their hands. You use something 40 hours a day, it starts to bother you when it’s dropping frames or just not being able to keep up with your hands, basically. Pat Grady: Yeah. Nathan Sobo: So just the kind of people that tend to gravitate towards Zed now are the kind of people that just care about a really well-crafted, fast tool. My daughter goes to school with a girl, her mom is a dentist, and she’s vibe coding some software for her dental practice right now, right? Does she know that she needs a fast editor that feels good under her fingers? I don’t know. I’d like her to. It’s kind of my job to. I think we have bigger plans, and there are going to be things that speak to that wider audience over time, but for now the people that really care tend to be people that are quite experienced. Sonya Huang: I remember one of your engineers, Conrad, wrote this article, and you texted it to me almost, like, sheepishly or apologetically. It was number one in Hacker News. “Why LLMs Can’t Build Software.” What is your kind of mental model for what LLMs are good at in software, versus where they’re lacking? And how quickly do you think that’s changing? Nathan Sobo: I’m less convinced than Conrad that LLMs can’t build software. I think his mental model of the things they’re incapable of is maybe better than mine, or he’s just more confident than I am in his take. I’m less convinced of what they’re not ever going to be capable of doing, but I can tell you what they’ve worked well at in my own experience, and where things get frustrating or go wrong for me. I mentioned earlier that generating the Cloudflare, another earlier experience that I had pre-agentic, pre-agent, anything, it was just with GPT-4, and I generated a new backend for our graphics framework that we had to write, Like, so you were asking earlier about how we achieve our performance. One of the things we do is the entire Zed application is organized around delivering data to shaders that run on the GPU that render the entire UI in much the same way that a video game would render frames of its UI—or its experience, I guess. It’s not a UI. Rendering a 2D UI, and with some of the same techniques that video games use to render their 3D worlds. Pat Grady: Interesting. Nathan Sobo: So anyway, I was rewriting the graphics backend, and though I did write the original graphics backend, I was rewriting it. The old one was working well enough, but it wasn’t in the shape I quite wanted. And so I was able to just generate a rendering pipeline that configured the GPU and all the different stages, and all these things that I would have in the past been searching around on Stack Overflow or digging around in obscure documentation to do, I was able to just go—voop! Because all that knowledge, I didn’t have it, but it’s definitely out there in the distribution of these models. Another thing I did during that same rewrite or fundamental change of our UI framework was I wrote a bunch of procedural macros. And macros in Rust are really powerful. They’re ways to do things that you can just put a little annotation on the top of something, and it’ll generate all this code behind the scenes before the compiler runs. But I never really learned to write Rust macros, definitely not these procedural macros that I needed to write in order to basically pull all the ideas from Tailwind CSS into our Rust graphics framework, which really delighted me, this idea that, like, we’re pulling these pop culture kind of Tailwind web ideas into the systems programming language and combining these two things together But Tailwind’s definitely in the distribution of the LLM. It knows Rust well enough, and it knew how to generate these procedural macros that I didn’t know how to generate. And so faster than—I never would have even attempted to do what I did of, like, okay, I’m going to write some macros that generate a method for every single Tailwind class, but by kind of feeding some docs into it here, I view it as like a knowledge extruder of, like, there’s all this sort of generalized knowledge out there. And sure, I could go read about it and learn about it, but no, I want it to be, like, squeezed out in exactly the shape that I want it. And so that was like a perfect use case for it, I think, of it was all pretty well known, standard stuff, but I just didn’t have it in the shape that I needed. So that was like—I think what they’re really good at is it’s like copy and paste, but way, way beyond. But you’re still sort of borrowing from the global knowledge set. Sonya Huang: Yeah. Nathan Sobo: Where I’ve gotten more frustrated is, like, right now we’re working on this Delta DB system which is trying to do fine grain tracking and real time syncing of individual edits as they occur that layers on top of Git. It’s fun because it’s been a while since I had some of these moments of just sitting in front of a problem and just struggling to load all the different constraints that need to be solved simultaneously in my head and hold that all in there long enough. LLMs have not been that helpful, at least not in writing the code, because the code is not the constraint when we’re solving this. Like, yes, we’re writing code, but much more important is the thinking going behind what is actually not that many total lines of code, they’re just the right lines. And I’m proud of how few lines there are. It’s like people get excited about how many lines of code they’re generating, and for different kinds of software, maybe that makes sense. But I’m still using LLMs, I’m just not using them to write the code. I’m using them to go explore an idea or even have it generate some code that I never intend to run, to just see how it feels, quickly. So it’s not that I don’t use them as an inherent part of my process, it’s just like depending on what I’m doing, I’m not always so sure it’s going to make me faster writing code. Sonya Huang: So just to read that back to you, when the LLMs are doing something that’s kind of in distribution of their training data, and where you have a good abstract model of almost the pseudocode of what you want it to do, the models are actually very good at implementing the code. Nathan Sobo: Yeah. Sonya Huang: Once you sort of go out of distribution, or when writing the code is not actually the task at hand, it’s actually the thinking of what you want the code to accomplish, then LLMs are just not there yet. Nathan Sobo: I think that’s right. And another thing I’ll say is I think I’m excited for LLMs to get faster. I don’t know that Haiku, for example, is intended to be used just directly. Like, we have some work to do as tool builders to figure out when to switch to the faster model or the smarter model, but in general, I think the faster they can go whilst not being totally silly, unintelligent, that’s the trick. But I’m excited for being able to kind of conjure a diff on demand, because I think some of it is just like, if I’m asking the agent to do this thing, I have a couple different choices. Like, I can kind of sit there and watch it, which can sometimes be helpful and sometimes is important because I’m like, “Stop! Like, whatever you’re doing right now, like, writing tests I didn’t ask you to write that you make pass while the tests I want to make pass is still not passing.” I can go make a coffee or go take care of some other task, or maybe context switch to some company-level concern or whatever. I could go try to compete with it and let it do its thing. But all of them are a little annoying. Again, I’m someone who’s obsessed with getting fast feedback. I literally engineered the tool to give me keystroke feedback on the next frame. And so it’s that waiting that I think has been frustrating for me. But I think if I could get something almost correct in a tenth of the time, okay, maybe we’re talking about a shift again. That’s why the jury is very much still out for me around where it’s all going. Sonya Huang: What do you think is the vision for how the IDE ultimately will evolve? We’re going to have lots of these agents, they’re going to become increasingly capable. How does the GUI evolve? Nathan Sobo: So there’s a couple different pieces of it. I mean, for me, the deeper piece is this notion of treating the IDE as this fundamentally collaborative environment. And honestly, what’s deployed in Zed today is still pretty alpha quality on that front. But we’re taking all those lessons and have very good progress on a new way of representing collaboration. And the IDE is going to be the place where that’s all surfaced. So an inherently collaborative experience. To me, multiple humans and multiple agents, the idea that when you’re having a conversation with an agent, that’s potentially something you could pull other humans into and use the conversation with the agent as background context or as a fast track to getting all the relevant code you want to talk about or the problem you want to discuss loaded up in a very easy-to-digest way to then pull in a teammate and have that conversation. And then the idea of permanence, being able to reference locations in the code in a stable way, having a continuous representation of the evolution of the code, rather than this punctuated snapshot-based representation, to me is going to be a fundamental abstraction that we’re going to need to build any kind of interaction with the LLMs around so that we can remember everything, and so that an LLM will be able to ask about a section of the code, what are all the conversations that happen behind this code, to go plumb that context. And I guess the idea is having the code base be this, like, backbone on which all the data related to the code can hang in a way that it just isn’t today. You can have comments in your code and you can have stuff tied to snapshots of your code in GitHub, but for the most part, the code itself is devoid of metadata. Pat Grady: Yeah. Nathan Sobo: And so really unlocking that, turning the code into this metadata backbone in the UI is a big piece of it. Some of the stuff I was showing you is asking ourselves the question that I think a lot of people are asking. IDEs have looked the same for who knows how long, right? Like, it’s the typical thing: you got the tree on the left, the tabs in the middle, maybe some Git stuff on the right, or maybe the agent panel—that’s where we have our agent panel today. And it’s this very—it’s evolved over time to solve kind of one human in one working copy, solving one problem manually, maybe with some edit prediction in the middle. But if someone really is working agentically as their primary means of working, what does it mean to put the conversation front and center? And we’re not the only ones thinking about this, obviously. There are other tools that are also exploring this. The cool thing about us though is we are a full-blown IDE. And so I really view it as there’s a place for all these different ways of working, and I definitely think that there’s a very long-lived place for this traditional way of what’s going on in this one working copy, and I need to evolve the state of this copy forward until it solves my problem. There’s a place for that, but then there is a place, I think, for all right, you’ve got several potential conversations, maybe on different projects going on at the same time. Maybe that becomes less of an issue when the LLMs get faster, but even so, I think, then you’re going to be wanting to do even bigger things. And so once you have this process that takes time, there’s this natural desire to multitask. And so there’s that, like, how do we manage multiple conversations with multiple agents, and then how do we make that conversation more valuable? And so that’s really what we’re pushing on in the mockups we’ve been doing. And right now I think we model these conversations as very much like a chat. There’s more we can do, let’s put it that way, in the sense that as this conversation’s evolving, you could view it as a chat, but it’s also sort of a document that’s evolving over time. Model is a conversation, but you could also view it as a document. And so inside that document there are all these references that are being injected from different spots in your code base, edits are occurring. And that’s all kind of getting unrolled over time as this log. What I really want to do is make that document surface less of a read-only artifact, if that makes sense. Like, more useful as a primary editing surface, where you could move your cursor up out of the what do you want to say to the agent next, and up into the previous conversation to do useful things. So one of the useful things I want to do is right now, when we’re rendering code, it’s like read only. What we’re working to do now is when we render a window into the code and that code’s fresh, you should be able to edit right there, and have that synchronized with the actual location, expand the context like you can on a GitHub pull request, for example. So in Zed, we have this concept of a multi buffer, which is taking little pieces of the code from all over your code base and combining them together into one user interface that you can edit as if it’s a single buffer, basically. And so I’m really intrigued at the idea of to what extent is this conversation that I’m having pulling code toward me, potentially making some edits, and why can’t I just reach out and interact with the code directly inside the conversation? And then also, like, when I select between two points, can I review the changes that occurred in that period of time? So it’s really like trying to make that conversation more than just a chat, and more keyboard navigable in a way that someone with their Vim bindings could just, like, quickly navigate up through the conversation and make it feel kind of like an editor, a new kind of editor. Having built this thing from scratch and having deep control of all the primitives, an opportunity I’m excited to go grab is, like, how can we have this new kind of editor? It’s not just showing you a file in your code base, but it’s showing you a conversation and pieces of all these different files. And you can just reach out and interact with that as you could in an editor. Sonya Huang: Super cool. Thanks, Nathan. You’ve been on a quest to build the perfect tool for your craft for a long time now, and it’s exciting to see what you’ve done with Zed. And I can’t wait to see what you do with agents in the interface and with Delta DB. Nathan Sobo: Thank you. Sonya Huang: Thanks for joining us today. Nathan Sobo: Yeah, you’re most welcome. Yeah, really had fun. <div class="framer-mcvrsd" id="

Nathan Sobo has spent nearly two decades pursuing one goal: building an IDE that combines the power of full-featured tools like JetBrains with the responsiveness of lightweight editors like Vim. After hitting the performance ceiling with web-based Atom, he founded Zed and rebuilt from scratch in Rust with GPU-accelerated rendering. Now with 170,000 active developers, Zed is positioned at the intersection of human and AI collaboration. Nathan discusses the Agent Client Protocol that makes Zed "Switzerland" for different AI coding agents, and his vision for fine-grained edit tracking that enables permanent, contextual conversations anchored directly to code—a collaborative layer that asynchronous git-based workflows can't provide. Nathan argues that despite terminal-based AI coding tools visual interfaces for code aren't going anywhere, and that source code is a language designed for humans to read, not just machines to execute.

Hosted by Sonya Huang and Pat Grady, Sequoia Capital

本集资源与出处