浮之静

AI 编程生态:Anthropic 收购 Bun 意味着什么?

前几天刚写完近两万字的《深度思考:聊聊 AI 发展趋势》,探讨了下 AI 发展路径。没想到,Bun 这么快就被 Anthropic 收购了,这也可能只是 AI 生态中的冰山一角。结合这几年前端工具链的演化,我们其实可以梳理出一条更长的时间线:在 ChatGPT 这一波大模型应用爆发之前,前端 / Node.js 世界已经因为“慢”这个核心痛点,悄悄开启了用 Go、Rust、Zig 重写底层工具链的旅程(Rust 在前端、下一代 Web 开发生态)。

当时大家更多是为了解决构建、打包、typecheck 的痛苦,并没有预料到,这些重写最终会为 vibe coding、AI 代理编程,打下几乎完美的基础。现在回头看,会有一种事后诸葛亮式的“命中注定”感。这篇文章我打算分两部分来讲:

  • Anthropic 收购 Bun
  • 未来的 AI 编程生态,会在怎样的工具栈上生长

题外话,Vue、Vite 作者尤雨溪已经在线 @OpenAI 求收购了(https://voidzero.dev)。

Image

Anthropic 收购 Bun

之所以先在此说起,是因为它是这篇文章真正的起点:这是第一起在前端 / Node.js 工具圈,引发大规模讨论的「大模型公司收购底层开发工具」事件。借着它,我们可以顺着往下追问一句:如果连运行时都开始被 AI 厂吃进自家栈里,后面整条工具链会怎么变?

Image

如果下个版本 bun 的执行脚本真变成通过 prompt 运行一个服务,也是有趣。

Image
📌 总结版

如果把以下内容压缩成一个结论,大概是:

  • Bun 原本是一个因为「开发体验太慢」而诞生的高性能 JS 工具栈;
  • 在 AI 编程工具兴起的这两年,它从无心插柳变成了很多 AI CLI / agent 的默认选择;
  • 作为一个 0 收入、融资 2600 万、增长很快的开源项目,它未来迟早要面对「可持续」和「商业化」的问题;
  • Anthropic 一边把 Claude Code 做到 6 个月年化 10 亿,一边大量依赖 Bun 作为分发与执行底座,最终干脆把 Bun 连团队一起收进来,变成自家 AI 编程平台的基础设施;
    • 对 Bun 用户来说,得到的是更长远的资金和场景承诺;
    • 对 Anthropic 来说,得到的是一个贴合 AI 编程时代的 JavaScript 运行时和全套工具链。

2025 年 12 月,Bun 宣布被 Anthropic 收购(Bun is joining Anthropic[1]、Anthropic acquires Bun as Claude Code reaches $1B milestone[2])。表面上看,这是一家 AI 大模型公司买下了一个 JavaScript 运行时;往深一点看,这是 Claude Code 这类 AI 编程产品,开始直接「吃掉」底层开发基础设施的标志性事件。

用官方的话来说,可以概括为:

  • 对 Anthropic 而言,Bun 将成为 Claude Code、Claude Agent SDK,以及未来一系列 AI 编程工具的基础运行时与工具链;
  • 对 Bun 而言,它仍然是一个开源、MIT 协议的通用 JS/TS 工具集,只是从「VC 支持的零收入创业公司」变成了「大型 AI 实验室的长期基础设施」。

什么没有变?

Bun 创造者 Jarred[3] 在公告里回答了用户最关心的问题:

  • 开源协议不变:Bun 继续完全开源,MIT 许可;
  • 开发模式不变:照旧在 GitHub 公开发版、处理 issue 和 PR;
  • 团队不变:原班人马整体加入 Anthropic,全职继续做 Bun;
  • 路线不变:重点还是高性能 JavaScript 工具链、Node.js 兼容,以及「作为服务端 JS 默认运行时」这个长期目标。

Claude Code 今天就是一个直接用 Bun 打包出来的单文件可执行程序,已经发到了几百万开发者手里。这个关系很直白:Bun 挂了,Claude Code 就挂了。所以从利益绑定的角度,Anthropic 有强烈动机把 Bun 打磨好,而不是把它做成某个闭源内核。

什么会变?

真正发生变化的是重心和节奏:

  • 优先级:Bun 会更紧密地围绕 Claude Code、Claude Agent SDK 等 AI 编程产品去做性能和体积优化,让这些工具跑得更快、更小;
  • 迭代速度:多了 Anthropic 的资源和生产场景反馈,Bun 的发布节奏会加快;
  • 视角:Bun 团队不再站在工具链的「外围」猜 AI 需要什么,而是直接坐在 Claude 团队旁边,看下一代 AI 编程工具如何真实使用 runtime。

从 Jarred 的表述里,能明显感到一种「换视角」的兴奋:不再是「做一个快得离谱的 JS 工具,然后看生态怎么用」,而是直接走进 AI coding 的中心,把 Bun 按照这个未来来塑形。

Bun 的前史

从一个卡顿的游戏 demo 开始

要理解这笔收购为什么「顺理成章」,得回头看一下 Bun 是怎么长出来的。

从 45 秒热重载开始

故事起点很具体:大约五年前,Jarred 在浏览器里写一个「Minecraft 风格的体素游戏」。项目越写越大,每次改完代码想看效果,都要等 45 秒,大部分时间消耗在 Next.js dev server 热重载上。对一个习惯高反馈循环的工程师来说,这种感受很直接:太慢了,根本没法迭代。

于是他开始「分心」:不再是优化游戏,而是试图解决开发体验本身。第一步是把 esbuild 的 JSX / TypeScript 转译器从 Go 挪到 Zig,三周之后,一个能用的 JSX/TS 转译器跑起来了。

很多人今天把 Bun 视为「JS 运行时」,但从一开始,它其实就是为了解决:「代码改完要等几十秒」这种极其具体、极其痛苦的开发体验问题。

Image

从转译器,到运行时

要让 Next.js 的服务端渲染真正在 Bun 上跑起来,仅有转译器远远不够,还需要一个完整的 JavaScript 运行时。

这就涉及到另一个核心:JS 引擎。一个运行时要执行 JS/TS 代码,必须嵌入一个引擎,负责解释与 JIT 编译。Bun 选择了 WebKit 里的 JavaScriptCore,而不是主流的 V8。

Jarred 花了大概一个月时间读 WebKit 源码,研究 Safari 是怎么 embed JavaScriptCore 的,才搞出 Bun 的最初运行时版本。这也是 Bun 和 Node / Deno 在底层架构上最大的区别之一:Zig + JavaScriptCore,而不是 C++/Rust + V8。

Image

v0.1:一体化工具链的雏形

2022 年 7 月,Bun v0.1.0 发布。它不是一个单纯的 runtime,而是:

  • 一个打包器(bundler),
  • 一个转译器(transpiler),
  • 一个号称可以直接替代 Node 的运行时,
  • 一个测试框架,
  • 再加上一个包管理器。

五合一工具 一起上线,GitHub 第一周就冲到了 2 万 star,那两周也是 Jarred 个人节奏变化最大的时期:从「每天写代码」变成「每天回消息、见人、聊融资」。

很快,他们拿到了 Kleiner Perkins 领投的 700 万美元种子轮,Jarred 正式领工资,开始组队,搬到旧金山搞 Bun。

v1.0 - v1.3:走向生产环境

随后的时间线很清晰:

  • 2023 年 9 月,Bun v1.0 发布,标志着稳定性开始能撑住生产使用;
  • 紧接着拿下了 Khosla Ventures 领投的 1900 万美元 A 轮,团队扩张到 14 人,办公室也换大了一点;
  • v1.1 补上了社区最经常问的「Windows 什么时候支持?」这个大坑——支持刚出时很粗糙,但之后迭代迅速;
  • v1.2 大幅加强 Node.js 兼容性,内建 PostgreSQL 和 S3 客户端,开始被 X、Midjourney 等公司放进生产环境,Tailwind 独立 CLI 也用 Bun 打包;
  • v1.3 继续加码前后端一体化:内建前端 dev server,提供 Redis / MySQL 客户端,改进 bun install,不断提高 Node 兼容度。

到这里为止,Bun 已经基本从「一个人写的疯狂 side project」走到「可以撑起大公司生产流量的工具链」。

与 AI 编程的交汇

单文件可执行与 Claude Code

转折点出现在 2024 年末:AI 编程工具从「炫酷 demo」变成了「真的能日常使用」,而其中不少产品,底座就是 Bun。

单文件可执行:为 CLI 和 Agent 天生准备的能力

Bun 有个看起来很「工具向」的特性:可以把任意 JavaScript 项目编译成单一可执行文件(single-file executable[4])。这意味着:

  • 不需要预先安装 Bun 或 Node;
  • 包含所有依赖,甚至支持 native addon;
  • 冷启动快,跨平台分发成本极低。

对于 AI 时代的 CLI 和代理(agent)来说,这几乎是完美能力组合:你不想让用户在使用某个 AI 编程工具之前,先装一堆 runtime 和依赖,更不想在复杂企业环境里与 IT 部门就「装 Node 版本」这种问题纠缠。

Claude Code、FactoryAI、OpenCode 等一批 AI coding 工具,都选择了 Bun 来打包和分发自己的命令行与代理。

Claude Code 反过来给 Bun 写代码

更有意思的是,Jarred 自己成了 Claude Code 的重度用户,而且直接「把 Claude 拉进 Bun 的开发流程」。

过去几个月里,在 Bun 仓库中合并 PR 数最多的账号,是一个 Claude Code 机器人。他们内部在 Discord 里挂了一个自动化流程:

  • 当某个 bug 被报告,Claude bot 会拉出一条修复分支;
  • 自动编写回归测试:在旧版本 Bun 上必然失败,在修复后的 debug build 上必然通过;
  • 回应代码 review 的评论,按反馈改 patch。

换句话说,Claude Code 已经是 Bun 团队的「兼职工程师」,而 Bun 也正是在这样的协同中不断调整自己。

Jarred 的判断是:这种工作方式离「未来常态」只差几个月,而不是几年。

Image

商业现实

0 收入、2600 万融资和一条必须回答的问题

故事的另一面比较冷静:到收购时,Bun 的收入还是 0 美元。

可持续性的老问题

Jarred 几乎逢人就会被问两个问题:

  • Bun 到底要怎么赚钱?
  • 如果我把公司技术栈押在 Bun 上,5~10 年后它还在吗?

截至 2025 年 10 月,Bun 的指标其实很好看:

  • 月下载量同比、环比都在快速增长,最近一个月(10 月)甚至 环比增长 25%,总下载数突破 720 万次/月;
  • GitHub star 超过 8 万;
  • 累计融资约 2600 万美元,按照团队规模和燃烧速率(burn rate),手里还有 4 年以上的 runway。

问题在于:「我们融了 2600 万」并不是一个真正回答「10 年之后还在不在」的问题。

VC 迟早要回报,项目最终还是要走向某种「云服务」「托管平台」式的商业化,把 runtime 和 bundler 垂直集成为一个「Bun Cloud」。

这其实也是 Bun 团队之前给出的默认答案——以后会做一个和 Bun 深度耦合的云产品。

AI 改变了问题本身

但 Jarred 的感受是:当他真的开始重度使用 Claude Code,并用它参与 Bun 的开发之后,「做一个传统意义上的 Bun Cloud」这条路,突然变得不那么有吸引力。

AI 编程工具带来的是一种根本性的变化:

  • 大部分新代码可能会由代理写、由代理测、由代理部署;
  • 代码量会显著增加,生成/变更的速度都会加快;
  • 人类对「每一行代码」的直接记忆与把控会下降,环境必须更快、更可预测,出现问题时能智能回溯。

在这种设定下,runtime + 工具链的重要性被放大了:它们不再只是「开发者体验」的一环,而是 AI 代理写代码时赖以生存的「物理环境」。

Bun 从一开始就是为了让开发者更快,而 AI 编程工具也在做同一件事。这两者本身就有天然的耦合度。

走路谈判

从「再走三遍」到「我觉得 Anthropic 会赢」

在公告里,Jarred 讲了一段很具体的决策过程。

过去几个月里,Bun 团队已经开始优先处理 Claude Code 提的 issue,双方合作越来越紧密。随后,他和 Claude Code 团队的 Boris 一起散步,第一次认真聊起:「如果 Bun 团队整体加入 Anthropic,会是什么样子?」

这次散步持续了四个小时。之后,他们又以同样的方式聊了几次——讨论 Bun、本地开发体验、AI 编程的走向。

Jarred 并没有直接选择 Anthropic,他和「很多竞争对手」也都谈过类似的收购/合作可能。最后他给出的判断很直白:「我觉得 Anthropic 会赢。」

在他看来,押注 Anthropic 比自己单干一个云产品,有几个吸引人的点:

  • 可以站在 AI 编程生态的中心,而不是只在外围做一个高性能工具;
  • 可以和做「最好用 AI 编程产品」的人坐在一起,直接影响底层基础设施;
  • 可以跳过「Bun 这家 VC 支持的创业公司要如何变现」这一整章节,专心把工具链做到最好。

完美交易

站在两边视角看这笔交易:为什么说「合理得近乎无聊」?

对 Bun 用户:得到的是一份「长期承诺」

对既有用户来说,这笔交易,最重要的几点承诺是:

  • Bun 继续 MIT 开源,不会转为闭源内核;
  • 仍然在 GitHub 公开开发,issue / PR 流程不变;
  • 原有团队继续全职维护,甚至有更多招聘;
  • Node.js 兼容和「drop-in 替代 Node」的目标不变;
  • 路线会更像 「Chrome 与 V8」「Safari 与 JavaScriptCore」「Firefox 与 SpiderMonkey」 这种关系:绑定很深,但仍然服务广义 Web 开发生态,而不是只为自家产品特化。

换句话说,如果你已经在生产环境里用了 Bun,这次收购反而是一针「稳定剂」—— 未来几年,这个项目的走向不会取决于 VC 对回报周期的焦虑,而是取决于 AI 编程栈的长期发展。

对 Anthropic:买到的是一个为 AI 编程时代优化过的 runtime

从 Anthropic 的新闻稿角度看,逻辑则更直接:

  • Claude Code GA 仅 6 个月,就达到了年化 10 亿美元收入,客户包括 Netflix、Spotify、KPMG、欧莱雅、Salesforce 等一大票企业;
  • 他们需要一个极快、极好用的 JavaScript 运行时和工具链,来支撑这些 AI 编程工作流的分发与执行;
  • Bun 本身已经有:
    • 每月 700 万+ 下载;
    • 82.7k+ GitHub stars;
    • 在 Midjourney、Lovable 等公司被用来提升速度与生产效率。

对 Anthropic 来说,这是一笔非常标准的「技术基础设施收购」:

  • 强化 Claude Code 和 Claude 平台在开发者生态里的基础设施优势;
  • 内化一个已经被事实证明「高性能又好用」的运行时;
  • 继续保持 Bun 的开源形态,让它在更广泛的 JS/TS 社区里持续扩散。

一句话来说:随着越来越多开发者用 AI 构建软件,底层基础设施比以往任何时候都更重要 —— 而 Bun 已经成为其中的关键组成。

AI 编程生态

宏观层面的技术背景很难三言两语讲明白,不如先把视角压到 web 开发这个互联网的基石上:deno、bun、esbuild、biome、swc、tsgo 等工具正在把 javascript 世界的底层一块块重写。之前我总觉得这一切像在乱拳互殴,直到 bun 被收购的那一刻,脑子里忽然串成了一条线——这不就是一整套 AI 编程工具链生态在长出来吗?也正因为这个瞬间,我觉得有必要把这篇文章写出来。

注:以下工具链功能存在重叠部分,本文仅做 AI 工具编排构想,并非提供最佳 AI 工程实践。

Image

上半部分我们讲的是:Anthropic 把 Bun 收到自家体系里,这看起来像一笔收购,实质上更像是给未来 AI 编程铺底的一次「基础设施布局」。要把这件事看清楚,先得承认一个现实:我们已经不再生活在「人偶尔跑一下工具」的时代,而是在「人和一群 agent 一起写代码」的时代。

这对工具链的要求,跟过去完全不同:

  • 反馈回路频率激增:
    • 人类写代码时,一天跑几次 tsc、npm test 可以接受;
    • agent 写代码,一个 PR 可能跑几十次 typecheck / lint / build,它完全不会心疼自己的时间,只会被工具的延迟卡死。
  • 试错空间变大:
    • 人类一般不会在一个分支上试 10 种重构方案;
    • agent 可以很自然地做「多版本尝试」:同一个问题生成 N 个修复方案、N 套拆模块方式,然后用真实构建、真实指标去筛选。
  • 代码所有权变松散:当大部分变更不是你亲手写的,而是 agent 根据约束生成的,你对「每一行」的心智模型会变淡,更关注系统层面:
    • 这个模块的边界是否稳定?
    • 类型 / 测试 / 监控是否覆盖到位?
    • 出问题能不能快速回溯到哪一轮 agent 操作?
  • 工具链的要求从“能用”变成“可编排”:
    • 以前工具可以是「给人用的 CLI」:慢一点、交互复杂一点没关系;
    • 现在工具必须变成「给 agent 用的原语」:要足够快,不拖 feedback loop;要可脚本化,最好有稳定的机器可读输出;要可组合,方便 orchestrator 调用多种工具做 pipeline;要可观测,出问题时能拿到结构化日志。
  • ...

这几件事叠加起来,把原来的 JS/TS 工具链从「开发舒适度优化」推成了「AI 开发负载的基础设施」。现在 Rust / Go / Zig 重写出来的那批东西,凑巧就是在为 AI coding 铺路...

1. 语义层

把 TypeScript / JavaScript / Python 变成「可查询的语义服务」

这一层关心的问题是:“这份代码精确来说在干什么?” 过去这是 IDE + 人脑的工作,现在越来越多交给「语义服务」。

1.1 TypeScript:tsgo 把编译器从 CLI 变成后端服务

TypeScript 传统编译器是用 TS 自举写的,跑在 Node 上,项目一大就会 typecheck 半天。tsgo(TypeScript-Go)改的不只是语言,而是运行形态 (A 10x Faster TypeScript[5]、Progress on TypeScript 7 – December 2025[6]):

  • 实现语言换成 Go:编译成一个原生二进制,可作为独立服务跑;
  • 多核并行:goroutine 把多文件类型检查拆开并行做;
  • 天然适合「长驻进程 + IPC」:IDE、CI、agent 可以通过协议发请求,得到结构化的诊断结果,而不是只能 parse tsc 的字符串输出。
Image

对程序员有两个直接收益:

  • typecheck 或 emit 时间从几十秒降到个位数秒级,大项目体感非常明显;
  • 可以把 typecheck 真正做到「保存即触发」「每轮 agent 操作都触发」,而不会把环境打到 100% CPU 挂那儿十分钟。

对 AI 来说,tsgo 就是一个 「TypeScript 语义 Oracle」:

  • 你可以在每次重写之后问它:
    • 这次 diff 引入了哪些类型错误?
    • 这个 API 的调用图、类型约束是什么?
  • 它以机器可读的形式回答,而不是靠 LLM 自己瞎猜。

人类最终看到的是「类型干净」「诊断清晰」,agent 则通过它获得一套可靠的语义坐标系。

1.2 Biome / Oxc / SWC:统一 AST,提供「静态守门人」

除了类型,你还需要:快速 parse 代码;快速 lint、格式化;快速做简单的重写(比如 import 排序、API 替换)。

  • SWC[7]:Rust 写的编译/转译内核,负责把 ESNext / TS / JSX 之类的东西变成旧环境可跑的 JS。
    • 核心特性:极快,适合作为其他工具的底层 parser + transformer。
  • Oxc[8]:更激进,把 parser + linter + formatter +(部分)bundler glue 全部围绕一套 AST 来做。
    • 核心特性:统一 AST,让所有上层工具看到的树长得一样。
  • Biome[9]:从 Rome 演变来的「一体化 Lint/Format 工具」。
    • 核心特性:Rust 实现,跑起来比 ESLint + Prettier 快几个数量级;
    • 规则集中管理:风格、潜在 bug、import 顺序、命名规范都可以统一收口;
    • 新版开始做类型感知 lint,即使不直接依赖 TS 编译器,也能做一部分类型规则检查。
Image
Image

技术细节上,这些工具的共同特点是:

  • 内部都是高度优化的 AST 表示(结构紧凑、cache 友好);
  • 提供批量访问 API(一次 parse,多次使用);
  • 可以导出非常细粒度的结构信息:节点类型、scope、引用关系、编码规范违背点等。

对 agent 来说,这几件东西拼起来,就是:

源代码 → Oxc / SWC 解析 → AST
               ↓
            Biome 规则引擎
      (lint / format / 命名 / 安全)
               ↓
  结构化的告警 + 修复建议 + auto-fix

这让我们可以设计一种新的 loop:

  1. agent 写/改一段代码;
  2. 调用「语义服务」:tsgo 做类型检查,Biome/Oxc 做 lint + format;
  3. 由 agent 自己处理「可自动修复」的问题,人类只看关键告警和 diff。

把「静态分析」从一堆 CLI,升级成一个对 agent 友好的语义守门层。

1.3 Python 世界的镜像:Ruff + uv

为了避免 JS/TS 看起来太「特例」,我们来瞄一眼 Python 这边的平行世界。

  • Ruff[10]:Rust 写的超快 Python linter/formatter,目标很直白:
    • 把 Flake8 + isort + Black 那一坨,尽可能合并到一个工具里,而且快到离谱。
    • 它同时管:风格、导入排序、多套 E* 规则,以及 auto-fix。
  • uv[11]:同样是 Rust 写的 Python 包/环境管理工具,定位是:
    • pip / pip-tools 的替身(依赖解析、安装同步);
    • virtualenv / venv 的替身(虚拟环境管理);
    • pyenv 的替身(Python 版本管理);
    • 再顺手加上「脚本运行」「项目初始化」等。
Image
Image

对 AI 而言,这一对组合非常像「Python 版的 Biome + Turborepo + Bun-install」:

  • Ruff 提供高速的静态检查和格式化;
  • uv 负责在秒级创建 / 切换虚拟环境、安装依赖、固定解释器版本;
  • agent 可以为每个任务开一个干净的 Python 环境,跑完丢弃,成本足够低。

这说明一件事:「语义服务化 + Rust 化」不是前端独有的冲动,而是多语言同时发生的结构变化。

2. 构建 & CI

给 AI agent 一个不会拖死它的环境

从 AI 视角看构建与 CI,其实只有一个核心问题:「每次验证能不能做到又快又可控」。人类写代码一天跑几次 build / test 还能忍,agent 如果每改一轮都要等三分钟 CI,基本等于自杀式工作流。所以「符合 AI agent」的构建层,不是花里胡哨的新概念,而是两件很朴素的事:

  • 尽量少跑不必要的构建 / 测试(Turborepo);
  • 真要跑的时候,让单次构建尽可能短(Rspack / esbuild / Rolldown)。

2.1 Turborepo:构建图成了第一等公民

在 monorepo 里,Turborepo[12] 这类工具做的事情其实很简单粗暴:

  • 你定义一堆任务:build:app, build:lib, test, lint…
  • 它在背后构出一个 任务 DAG(有向无环图):谁依赖谁、谁的输出会影响谁;
  • 每次改动只重新跑「真正被影响到的那部分」,并且把输出缓存起来(本地 + 远程)。
Image

在 AI 模式下,这个 DAG 和缓存能力变得非常关键:

  • agent 不需要每次都全量构建,只要请求「受影响模块的任务」;
  • Turborepo 根据文件 hash / 任务 DAG 计算影响范围,只跑必要的任务;
  • 远程缓存让团队里的每个人、CI 集群都可以复用之前的构建结果,避免冗余浪费。

结构上,这很像给 agent 提供了一个:干啥都可以,别管我怎么省时间」的构建黑盒。

2.2 Rspack / esbuild / Rolldown:把「单次构建」压缩到可交互时间

即使有构建图和缓存,单次构建时间还是会成为瓶颈。这就是 Rspack[13]、esbuild[14]、Rolldown[15] 这些工具存在的意义。关键点不再是「能不能构建出正确的 bundle」,而是:

  • 冷启动要快;
  • 增量 rebuild 要快;
  • 内部尽量复用 AST / 中间表示,减少重复 parse 和 transform;
  • 出问题时有清晰的 error / warning 结构化输出,方便 agent 理解。
Image
Image

在一个典型的 AI coding 工作流里,构建层会被这样使用:

  • agent 改了一些前端页面、组件、路由;
  • 调用构建服务(内部可能是 Rspack / Rolldown / Vite + esbuild)执行增量构建;
  • 收到 build 报告(成功 / 失败,带结构化错误信息);
  • 如果失败,agent 回头重写代码或配置;
  • 如果成功,还可以继续跑 e2e / 性能测试。

Turborepo 保证你不做无谓的重复工作;Rust / Go bundler 保证「真正需要做的那一部分」快到足以进入交互 loop。

3. 运行时 & 执行环境

Bun、Node、Deno 成为「AI 进程调度层」

这一层解决的是:“这些代码最终在哪儿跑、怎么跑、谁在看着它跑?”

Image

3.1 Bun:AI 负载视角下的 JS 运行时

Bun 原本的卖点是「快 + 一体化」:一个 runtime 搞定 JS 执行、打包、测试、包管理,还能编译成单文件可执行。

被 Anthropic 收购之后,它的角色发生了升级:

  • 对 Claude Code 这类产品来说,它是 agent 代码的默认 runtime;
  • 对 Anthropic 整体来说,它是 AI coding 基础设施的一部分。

具体到技术层,Bun 在 AI 时代有几个特别有用的特性:

  • 单文件可执行
    • 分发 Claude Code / agent CLI 时,只要一个二进制,用户机器上不必提前装 Node/Bun;
    • 对企业环境、受限环境特别友好。
  • 内建测试、打包、install
    • agent 可以在同一个 runtime 里完成「下载依赖 → 打包 → 跑测试」的闭环,不用频繁 fork 出一堆子进程调用不同工具。
  • 更容易做隔离与监控(这一点未来会更突出)
    • 当 Anthropic 把 Bun 深度整合进 Claude 的基础设施时,它可以在运行时层面做更多:对不同 agent 任务做资源配额;注入监控 / logging / profiling;提供更强的沙箱(文件 / 网络 / 权限)。

你可以把 Bun 理解成:给 AI 代理用的「JS 进程管理器 + 工具站」,而不是单纯的 “Node 替身”。

3.2 Node / Deno:传统业务与新负载的边界

Node 和 Deno 不会因为 Bun 的存在就消失,它们会长期并存:

  • Node 继续扛着庞大历史项目和生态,
  • Deno 在安全模型(权限 flag)、现代 API(URL import / 内建 TS 支持)方面持续探索。

对你而言,更现实的结构可能是:

  • 核心业务:短期内依然在 Node / Deno 上跑(稳定、生态成熟);
  • AI 工具 / agent:倾向于用 Bun / Rust 二进制来做(冷启动快、部署轻、易打包)。

运行时层不用教条统一,但需要在架构上统一一件事:agent 调用工具时,通过什么协议、在什么 runtime 中执行,以及如何观测?

4. Agent 表层

从 AI agent 的视角看开发环境,大致分为四块:构建 & CI、IDE、终端、桌面壳。构建 & CI 前面已经聊过了,我们可以继续聊聊剩下的部分。

IDE

IDE 这个赛道也很卷,除了 VS Code 系(Cursor[16]、Antigravity[17]、Windsurf[18] 等都是 fork 版),Zed 算是另辟蹊径,用 Rust 重写整个编辑器。Zed 基本就是「把 agent 写进编辑器内核」的那条路线:

  • 整个编辑器是 Rust 实现,主打低延迟、多文件打开不卡,为高频代码改动打底。
  • Agentic Editing[19]:你开一个线程,用自然语言描述要改什么,Zed 的 AI agent 会自动 patch 相关文件,给出 diff,再让你确认 / 回滚。
  • 内置 Git / diff 视图,改动直接落在当前 repo 上,而不是 Chat 窗里 copy/paste。

对 agent 来说,Zed 提供的是一个很清晰的「入口协议」:

  • 你负责算出怎么改;编辑器负责把改动变成真实 diff 给人看,再帮你跑后续工具。
  • 你不用另起一个独立 UI;人和 agent 都在同一个编辑器上下文里工作

Terminal

Warp 把「多 agent + 命令执行」收束在一个终端里

Warp 2.0[20] 直接把自己叫做 Agentic Development Environment,本质是在终端里做三件事:

  • Blocks:每条命令的输入输出成一个 block,带状态、错误和元数据,方便 AI 精准看某一次执行的上下文。
  • Active AI / Next Command:根据当前命令和历史,给出下一条命令建议;你可以预览、修改、再执行。
  • 多 agent 支持:Warp 本身是平台,不是 CLI 插件,可以同时挂多家模型、多个 agent,一起围绕你的 shell 会话工作。

对「AI agent + 构建工具链」来说,Warp 很适合担当编排界面:

  • agent 在 Warp 里发起 turbo run test / bun test / uv run 这类命令;
  • 每个结果都变成一个 block,可供后续 agent 或你自己引用和分析;
  • 你在同一个窗口里看到「命令 → 输出 → AI 解读 → 下一步命令」,而不是满屏乱滚。

桌面壳

这部分本来和 AI 没啥直接关系,但硬聊的话,也可以扯一点。如果要把 AI 跑在一个应用壳里,Tauri 或许是不错的选择(Rust 后端 + 系统 WebView + 能力模型)。

Tauri

  • 前端 UI 跑在系统 WebView 里(HTML/JS/CSS),后端逻辑是一个 Rust 二进制,通过 IPC 互通。
  • 安全模型把「前端」和「核心逻辑」划成不同信任边界,然后通过 permissions / capabilities 精细控制前端能用哪些命令、访问哪些目录。

Tauri 非常适合做「AI IDE / AI 浏览器」壳:你可以把 tsgo、Biome、Rspack、Turborepo、Bun 之类工具都丢在 Rust 侧,前端 / agent 通过受控 API 调它们,就算 LLM 被 prompt 注入,没开放的能力也动不了磁盘和系统。避免 agent 一言不合 rm -rf /。

Electrobun

Electrobun[21] 这个项目本不想提的,但鉴于它融合了 Bun,也是一个蛮有趣的思路(Bun + Zig 的 TypeScript-first 桌面框架,不稳定项目,建议谨慎使用)。

  • 目标是「用 TypeScript 写桌面应用的一站式方案」,主进程由 Bun 执行,原生绑定则用 Zig/C++/ObjC 实现。
  • 它通过类型化 RPC 在 Bun ↔ Zig、Bun ↔ WebView 之间通信,可以同时利用 Bun 的打包能力和 Zig 的原生性能。

对已经熟悉 Node / Electron 的团队来说,Electrobun 更像是「Bun 版 Electron」,但默认就是 TypeScript-first、Bun-first。

结束语

未来的程序员,可能敲的字会少一点,但要看得更远一点,想得更系统一点。当你把整个开发栈都视作一个可以长期演化的系统时,人和 agent 其实只是在这套系统里扮演不同的角色——而你完全可以是那个做舞台设计的人。

车轱辘废话:

如果把这些变化抽掉细节,只留一个轮廓,其实就是一件事:开发正在从“个人操作一堆命令行工具”,变成“多个主体共同驱动一个持续运行的系统”。过去,编译器、构建脚本、测试框架只是给人偶尔敲一下的 CLI;现在它们更像常驻服务:可以反复调用、按需组合、返回结构化结果,被串成一条长期存在的开发管线。同一套能力,不再只服务一个坐在键盘前的开发者,而是同时服务于人、自动化流程和不同能力的智能代理。与此同时,编辑器、终端、桌面壳也不再是「一个人 + 一个光标」的工作台,而是一个多主体系统的协调层:记录每一步、对齐状态、提供回滚点,在关键节点把决策权还给人类。构建日志、测试结果、变更历史、环境信息,最终都要落在一条能回答「这行代码为什么会变成这样」的时间轴上——这将成为判断一个项目是否健康的基本能力。

站在个人角度,这些变化的落点其实很朴素:写代码的同时,要学会看系统。不要只盯着某个函数、某条命令,而是习惯去追问:一次改动从需求提出,到生成代码、构建测试、上线验证,中间经过了哪些环节,输入输出是什么、跑在什么环境里、是谁在什么规则下做了决定。当你能把这条链路画清楚,就自然知道哪些地方可以交给自动化或 agent,哪些地方必须保留人工裁决。同样地,不要只设计“人能看懂的代码”,还要设计“机器能安全操作的边界”:清晰的模块划分、稳定的接口、统一的检查入口、可预测的失败方式,决定了你能不能放心地说:“这一块可以交给自动化改,只要通过这几道关,我就敢合并。”如果系统一开始就是隐式状态和约定俗成,那不管模型有多强,只能在雾里乱撞。最后,把收拾环境和驯服工具链当成本职的一部分,而不是额外负担——把构建、测试、静态检查、环境管理整理成一条干净、可重复、可调整的通路,本身就是在给未来预留空间:你自己会更轻松,团队会更稳,等哪天想让智能代理介入,也不会无从下手。

References

[1]

Bun is joining Anthropic:https://bun.com/blog/bun-joins-anthropic

[2]

Anthropic acquires Bun as Claude Code reaches $1B milestone:https://www.anthropic.com/news/anthropic-acquires-bun-as-claude-code-reaches-usd1b-milestone

[3]

Jarred:https://x.com/jarredsumner

[4]

single-file executable:https://bun.com/docs/bundler/executables

[5]

A 10x Faster TypeScript:https://devblogs.microsoft.com/typescript/typescript-native-port

[6]

Progress on TypeScript 7 – December 2025:https://devblogs.microsoft.com/typescript/progress-on-typescript-7-december-2025

[7]

SWC:https://swc.rs

[8]

Oxc:https://oxc.rs

[9]

Biome:https://biomejs.dev

[10]

Ruff:https://docs.astral.sh/ruff

[11]

uv:https://docs.astral.sh/uv

[12]

Turborepo:https://turborepo.com

[13]

Rspack:https://rspack.rs

[14]

esbuild:https://esbuild.github.io

[15]

Rolldown:https://rolldown.rs

[16]

Cursor:https://cursor.com

[17]

Antigravity:https://antigravity.google

[18]

Windsurf:https://windsurf.com

[19]

Agentic Editing:https://zed.dev/agentic

[20]

Warp 2.0:https://www.warp.dev/blog/reimagining-coding-agentic-development-environment

[21]

Electrobun:https://github.com/blackboardsh/electrobun