> ## Content Index
> Fetch the complete content index at: https://www.hubwiz.com/blog/llms.txt
> Use this file to discover other available public pages before exploring further.

# FastRender：AI开发的浏览器
- URL: https://www.hubwiz.com/blog/fastrender-a-browser-built-by-ai/
- Published: 2026-01-31T02:12:54.000Z
- Updated: 2026-01-31T02:12:54.000Z
- Description: FastRender是一个Cursor使用代理群体从零开始构建的网络浏览器。
- Author: admin
- Tags: AGENT, FASTRENDER, #Import 2026-10-14 14:41

上周 Cursor 发布了[扩展长期自主编码](https://cursor.com/blog/scaling-agents?ref=hubwiz.com)，这篇文章描述了他们协调大量自主编码代理的研究工作。文章中提到的一个项目是 [FastRender](https://github.com/wilsonzlin/fastrender?ref=hubwiz.com)，这是一个他们使用代理群体从零开始构建的网络浏览器。我想了解更多，所以我问 Wilson Lin（FastRender 背后的工程师）是否可以录制关于该项目的对话。这个 47 分钟的视频现在[在 YouTube 上提供](https://www.youtube.com/watch?v=bKrAcTf2pL4&ref=hubwiz.com)。我在下面包含了一些亮点。

看我[之前的文章](https://simonwillison.net/2026/Jan/19/scaling-long-running-autonomous-coding/?ref=hubwiz.com)了解我自己试用 FastRender 的笔记和截图。

## 1、FastRender 现在能做什么

我们开始对话时，首先演示了 FastRender 加载不同的页面（[03:15](https://www.youtube.com/watch?v=bKrAcTf2pL4&t=195s&ref=hubwiz.com)）。由于 JavaScript 引擎尚未工作，所以我们也加载了 [github.com/wilsonzlin/fastrender](https://github.com/wilsonzlin/fastrender?ref=hubwiz.com)、[Wikipedia](https://en.wikipedia.org/?ref=hubwiz.com) 和 [CNN](https://cnn.com/?ref=hubwiz.com)——所有这些都可用，虽然显示有点慢。

JavaScript 已被其中一个代理禁用，后者决定添加功能标志！[04:02](https://www.youtube.com/watch?v=bKrAcTf2pL4&t=242s&ref=hubwiz.com)

> JavaScript 目前已禁用。代理们做出了这个决定，因为他们目前仍在实现引擎并在其他部分取得进展...他们从技术上决定将其关闭或置于功能标志后。

## 2、从副项目到核心研究

Wilson 开始将 FastRender 作为一个个人副项目来探索 Claude Opus 4.5、GPT-5.1 和 GPT-5.2 等最新前沿模型的能力。这是从[00:56](https://www.youtube.com/watch?v=bKrAcTf2pL4&t=56s&ref=hubwiz.com)开始的。

> FastRender 是我从，我会说，11 月开始的我的个人项目。这是一个实验，目的是看看像 Opus 4.5 和后来的 GPT-5.1 这样的前沿模型如何处理更复杂、更困难的任务。

浏览器渲染引擎是这种理想选择，因为它既*极其*雄心勃勃和复杂，但也定义得非常明确。而且你可以直观地看到它的效果如何！[01:57](https://www.youtube.com/watch?v=bKrAcTf2pL4&t=117s&ref=hubwiz.com)

> 随着实验的进展，我看到能够在该项目上真正取得良好进展的单一代理的结果。在这一点上，我想知道，嗯，下一个水平是什么？我如何进一步推动这一点？

一旦清楚地表明这是尝试多个代理共同工作的机会，它就升级为官方 Cursor 研究项目，可用资源得到了放大。

FastRender 的目标从来不是构建一个与 Chrome 等竞争的浏览器。[41:52](https://www.youtube.com/watch?v=bKrAcTf2pL4&t=2512s&ref=hubwiz.com)

> 我们从未打算让它成为生产软件或可用的，但我们希望观察这个多代理框架的行为，看看它们如何在大规模下工作。

浏览器的优点在于它的范围如此之广，它可以在这个空间中为未来许多年提供持续的实验。JavaScript，然后是 WebAssembly，再然后是 WebGPU……要处理代理面临的新挑战可能需要很多年。

## 3、一次运行数千个代理

关于 FastRender 最有趣的事情是该项目使用多个代理并行工作来构建浏览器的不同部分。我询问同时运行了多少个代理：[05:24](https://www.youtube.com/watch?v=bKrAcTf2pL4&t=324s&ref=hubwiz.com)

> 在高峰期，当我们有一个系统稳定运行一周时，大约有 2,000 个代理同时运行。而且我相信他们每小时有数千次提交。

该项目有[近 30,000 次提交](https://github.com/wilsonzlin/fastrender/commits/main/?ref=hubwiz.com)！

你如何一次运行 2,000 个代理？他们使用了*真正的大型机器*。[05:56](https://www.youtube.com/watch?v=bKrAcTf2pL4&t=356s&ref=hubwiz.com)

> 我们采用的简单基础设施方法是让大型机器运行这些多代理框架之一。每台机器都有充足的资源，每台可以并发运行约 300 个代理。这能够良好地扩展和运行，因为代理花费大量时间思考，而不仅仅是运行工具。

在这一点上，我们切换到了在其中一台大型机器上运行的框架的实时演示（[06:32](https://www.youtube.com/watch?v=bKrAcTf2pL4&t=392s&ref=hubwiz.com)）。代理排列在树结构中，规划代理触发任务，然后是工作代理执行它们。[07:14](https://www.youtube.com/watch?v=bKrAcTf2pL4&t=434s&ref=hubwiz.com)

![终端窗口显示运行"grind-swarm"任务管理器，状态为 RUNNING。页眉显示"grind-swarm – 45:54:15"，统计数据为"planners: 9 (0 done) | tasks: 111 working, 0 pending, 232 done | 12900.9M↑ 514.1M↓"。任务列表包括：p1 Root (main)，p2 CSS selector 匹配性能 + bloom 过滤器集成，p3 CSS 样式表解析语义 & at-rule 处理，p4 自定义属性 (@property) + var() 解析 + 增量重新计算/失效化，p37 CSS at-rule 工件集成，p50 选择器引擎正确性和规范覆盖率，p51 计算值 + 跨 css-cascade 的属性覆盖率，p105 样式共享 / 计算样式缓存在 fastrender-style，p289 CSS 层（@layer）全局排序，w5 修复工作区锁定文件漂移，w7 实现计算样式快照共享，w15 修复 css-properties 命名空间处理，w17 (Stretch) 在 HTML 怪异模式下启用 bloom 快速拒绝，w18 重构 css-properties 样式表解析。活动日志显示包括 cargo check、git status、git push origin main 和各种测试运行的 shell 命令。底部状态栏显示"grind-css0:target/release/grind-swarm*"和"streamyard.com is sharing your screen"通知，带有时间戳"12:02 22-Jan-26"。](https://www.hubwiz.com/blog/content/images/2026/01/wilson-lin-agents-1.jpg)

> 这个代理集群正在致力于构建浏览器的 CSS 方面，无论是解析、选择器引擎还是这些功能。我们通过将浏览器项目分成多个指令或工作流并让每个在自己的机器上运行其中一个框架，设法进一步推动这一点，从而能够进一步并行化并增加吞吐量。

但是所有这些代理在相同的代码库上工作不会导致大量的合并冲突吗？显然不会：[08:21](https://www.youtube.com/watch?v=bKrAcTf2pL4&t=501s&ref=hubwiz.com)

> 我们注意到大多数提交没有合并冲突。原因是框架本身能够非常有效地拆分和划分范围和任务，以便它尽量最小化工作重叠量。这也反映在代码结构中——提交会在不同时间进行，它们通常不会同时触及彼此。

这似乎是从并行代理解锁好处的一个关键技巧：如果规划代理足够好，将工作分解为不重叠的块，您可以让数百甚至数千个代理立即处理一个问题。

令人惊讶的是，Wilson 发现 GPT-5.1 和 GPT-5.2 比编码专家 GPT-5.1-Codex 更适合这项工作：[17:28](https://www.youtube.com/watch?v=bKrAcTf2pL4&t=1048s&ref=hubwiz.com)

> 一些初步发现是这里的指令比仅仅是编码更广泛。例如，如何操作和与框架内交互，或如何在无需用户交互或获得大量用户反馈的情况下自主操作。我们发现这类指令与通用模型配合得更好。

我问他们看到的该系统在无人干预下运行的最长时间是多久：[18:28](https://www.youtube.com/watch?v=bKrAcTf2pL4&t=1108s&ref=hubwiz.com)

> 所以这个系统，一旦你给出一个指令，实际上无法引导它，你不能提示它，你要去调整它的进展方式。唯一能做的就是停止它。所以我们最长的运行基本上都是自主的。我们在执行时不会改变轨迹。 \[...\]

> 所以迄今为止发布时的最长时间大约是一周，这非常接近于最长。当然，研究项目本身只有大约三周，所以你知道我们可能可以更长。

## 4、规范和反馈循环

该项目设计的一个有趣方面是反馈循环。为了让代理长期自主工作，它们需要尽可能多地关于他们正在解决的问题的有用上下文，并结合有效的反馈循环来帮助他们做出决策。

FastRender 仓库[使用 git 子模块来包含相关规范](https://github.com/wilsonzlin/fastrender/tree/19bf1036105d4eeb8bf3330678b7cb11c1490bdc/specs?ref=hubwiz.com)，包括 csswg-drafts、tc39-ecma262（用于 JavaScript）、whatwg-dom、whatwg-html 等等。[14:06](https://www.youtube.com/watch?v=bKrAcTf2pL4&t=846s&ref=hubwiz.com)

> 对系统的反馈循环非常重要。代理在非常长的时间内连续工作，如果没有护栏和反馈来知道他们做的是对还是错，可能会在长期推出中产生重大影响。规范绝对是重要的一部分——你可以在代码库中看到大量注释，AI 专门引用他们在规范子模块中找到的规范。

GPT-5.2 是视觉能力模型，FastRender 反馈循环的一部分包括获取渲染结果的截图并将这些反馈回模型：[16:23](https://www.youtube.com/watch?v=bKrAcTf2pL4&t=983s&ref=hubwiz.com)

> 在该项目的早期演变中，当时只是进行屏幕截图的静态渲染时，这绝对是我们教它做的一件非常明确的事情。而且这些模型是视觉模型，所以它们确实有这种能力。我们有进度指标来告诉它与黄金样本进行比较。

Rust 编译器的严格性也有助于提供反馈循环：[15:52](https://www.youtube.com/watch?v=bKrAcTf2pL4&t=952s&ref=hubwiz.com)

> Rust 的优点是你可以仅从编译中获得大量验证，而这在其他语言中是不可用的。

## 5、代理们选择了依赖项

我们谈到了该项目积累的 [Cargo.toml 依赖项](https://github.com/wilsonzlin/fastrender/blob/19bf1036105d4eeb8bf3330678b7cb11c1490bdc/Cargo.toml?ref=hubwiz.com)，其中几乎所有都是代理们自己选择的。

其中一些，比如 [Skia](https://skia.org/?ref=hubwiz.com) 用于 2D 图形渲染或 [HarfBuzz](https://github.com/harfbuzz/harfbuzz?ref=hubwiz.com) 用于文本整形，是显而易见的选择。其他如 [Taffy](https://github.com/DioxusLabs/taffy?ref=hubwiz.com) 感觉可能违反了项目从头开始的目标，因为该库直接实现了 CSS flexbox 和网格布局算法。这不是预期的结果。[27:53](https://www.youtube.com/watch?v=bKrAcTf2pL4&t=1673s&ref=hubwiz.com)

> 同样这些是代理选择用于引擎小部分的依赖项，可能应该实际上自己实现。我认为这反映了指令的重要性，因为我实际上从未专门编码我们应该自己实现的依赖项水平。

代理们选择了 Taffy 并[对该供应商副本应用了一系列更改](https://github.com/wilsonzlin/fastrender/commits/main/vendor/taffy?ref=hubwiz.com)。[31:18](https://www.youtube.com/watch?v=bKrAcTf2pL4&t=1878s&ref=hubwiz.com)

> 它目前是供应商版本。当代理们对其工作时，他们确实会对其进行更改。这实际上是项目非常早期阶段的产物，在它成为一个成熟的浏览器之前……它正在实现诸如 flex 和网格层之类的东西，但也有其他布局方法，如 inline、block 和 table，而在我们的新实验中，我们要完全删除它。

尽管存在自实现的 ecma-rs，QuickJS 的包含也有一个有趣的起源故事：[35:15](https://www.youtube.com/watch?v=bKrAcTf2pL4&t=2115s&ref=hubwiz.com)

> 我相信它提到它引入 QuickJS 是因为它知道其他代理正在研究 JavaScript 引擎，它需要快速解除自身的阻塞。 \[...\]

> 最终，一旦它完成了，让我们删除它并替换为正确的引擎。

我喜欢这类似于大规模人类团队的动态，你可以绝对看到一个工程师对另一个团队尚未交付而感到沮丧，然后通过引入第三方库解除自己的阻塞。

## 6、间歇性错误实际上是可以的

这里有一些我发现真的令人惊讶的事情：代理们被允许在它们工作时在代码库中引入小错误！[39:42](https://www.youtube.com/watch?v=bKrAcTf2pL4&t=2382s&ref=hubwiz.com)

> 权衡之一是：如果你希望每一次提交都百分之百完美，确保它总是可以编译，那可能是同步瓶颈。 \[...\]

> 特别是你将系统分解为更加模块化的方面时，你可以看到引入了错误，但小错误，对吗？API 更改或某些语法错误，但随后它们在几次提交后很快得到修复。所以在系统中有一点松弛以允许这些临时错误，以便整个系统可以以真正高的吞吐量继续取得进展。 \[...\]

> 人们可能会说，嗯，那不正确的代码。但不是错误在累积。这是一个稳定的错误率。 \[...\] 这似乎是一个值得权衡的权衡。

如果你要拥有数千个并行代理工作，为了吞吐量而不是正确性进行优化，这是值得探索的策略。

## 7、2026年1月的一个工程师加上一群代理

关于 FastRender 我觉得最有趣的是它展示了单个工程师在 2026 年初在代理群体的帮助下可以实现的极端边缘。

FastRender 可能不是生产就绪的浏览器，但它代表了几万行 Rust 代码，在几周内编写，已经可以渲染真正的网页到可用的程度。

浏览器实际上是研究实验这个新的、形状奇怪的软件工程形式的理想项目。

我问 Wilson 他在浏览器渲染方面与代理协调方面投入了多少心智努力。[11:34](https://www.youtube.com/watch?v=bKrAcTf2pL4&t=694s&ref=hubwiz.com)

> 浏览器和这个项目是共同开发的，并且非常共生，仅仅是因为浏览器对我们来说是一个非常有用的目标，用来测量和迭代框架的进度。目标是迭代和研究多代理框架——浏览器只是研究示例或目标。

FastRender 实际上是在使用完整的浏览器渲染引擎作为多代理协调的"hello world"练习！

---

原文链接: [Wilson Lin on FastRender: a browser built by thousands of parallel agents](https://simonwillison.net/2026/Jan/23/fastrender/?ref=hubwiz.com)

汇智网翻译整理，转载请标明出处