Cloudflare面向AI Agent的Kitesurf浏览器获重大更新,新增WebMCP支持与终端渲染,DOM性能显著提升。超73万Web平台子测试通过,Agent可更快完成复杂站点导航。
八月,我们发布了 Kitesurf,这是一款面向 Agent 时代的浏览器,完全运行在 Cloudflare Workers 上。我们在设计时围绕 Agent 对网页的需求,而非照搬那些为人设计的浏览器所携带的所有功能和臃肿代码。如果这是你第一次听说 Kitesurf,强烈建议你先阅读发布时的博文,里面有这项技术实现的所有技术细节。
自那以后,我们让 Kitesurf 经历了越来越真实的任务场景,并结合客户和外部的反馈,不断提升其能力和效率。以下是这段时间的变化、如何在今天体验它,以及我们接下来的方向。
网站并非为 Agent 使用而构建。当下的浏览是一个混乱的过程——点击像素并祈祷正确的元素加载。在编程世界里,这既缓慢又脆弱。WebMCP 通过允许开发者将网站功能直接暴露给 Agent 来解决这个问题,Agent 可以调用类似 searchFlights() 这样的函数,而不是模拟点击。
Cloudflare 从很早就开始支持 WebMCP。就在几周前,我们宣布网站所有者现在可以一键开启 WebMCP,这样浏览器 Agent 就能发现并使用网站上的工具,而无需修改网站代码。Browser Run 在使用 Chrome beta 时也已经支持 WebMCP。
今天我们宣布 Kitesurf 现已支持 WebMCP。
你可以通过访问我们公开的 Kitesurf playground,打开 Cloudflare Radar,然后在 DevTools 面板的 Application 标签页中导航到 WebMCP 来测试。如你所见,Radar 暴露了一系列 WebMCP 工具,如 navigate-to 或 set-location,允许客户端与页面交互并以编程方式探索 Radar。

如果用 AI Agent 指向 Kitesurf:
{
"mcp": {
"kitesurf": {
"type": "local",
"command": [
"npx",
"-y",
"chrome-devtools-mcp@latest",
"--wsEndpoint=wss://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/browser-run/devtools/browser?browser=kitesurf",
"--wsHeaders={\"Authorization\":\"Bearer <BEARER_TOKEN>\"}",
"--category-experimental-webmcp"
],
"enabled": true
}
}
}
你可以看到 AI 模型可以与暴露的 WebMCP 工具交互,用它可以更可靠地完成任务。

你可以在这里阅读更多关于如何将 WebMCP 与 Kitesurf 和 Browser Run 结合使用的内容。
自首次发布以来,我们一直在添加更多浏览器标准,让 Agent 能够渲染更复杂的页面。Kitesurf 支持的 API 列表已经增加,现在包括:
CSS Object Model(CSSOM)
我们添加了基于 URL 的模块解析、JSON modules 和 import map 处理——这对于分块加载 JavaScript 的网站很重要。此外,我们正在使用新的 Cloudflare Workers 模块注册表来支持从 URL 导入。
iframe 行为也得到了改进:现在它们在正确的时间加载,保持更好的隔离性,并在更多语言和编码下正确显示文本。
正如我们在发布时所说,运行测试是我们在不丢失速度的同时控制代码和结果质量、改进 Kitesurf 的方式。Web Platform Tests(WPT)是一个共享的开源测试套件,用于检查浏览器是否一致地实现了 web 标准。
我们现在通过了 730,000+ 个 WPT 子测试,而且还在增长。这比发布时多了 500,000 个子测试。下图展示了我们自项目启动以来的演进过程,一直到最新版本:

对于 AI Agent 来说,效率与其说是页面加载速度快,不如说是 Agent 循环的延迟。为了让 Kitesurf 真正成为 Agent 友好型,我们积极优化了浏览器引擎的内部结构,使每次 DOM 遍历、计时器和字体获取都尽可能轻量,确保 Agent 将其计算周期用于推理,而不是等待浏览器跟上。
这些优化包括:
改进了 JavaScript 执行,减少了 Boa 与 DOM 之间的交互,使边界与真实 Web 框架更兼容。常见的读取操作如 getAttribute、id 和 parentNode 现在可以在 Wasm DOM 内部完成,而无需反复进行 Boa → JavaScript shim → Wasm 的往返。
Kitesurf 在运行计时器和加载脚本时减少了重复工作,并从不再需要的对象中释放内存。当代码在两个 JavaScript 引擎之间移动时,它也更加一致地处理对象和类,从而使繁忙页面的运行更加高效。
Kitesurf 现在在需要时才加载字体,获取更少页面不会使用的字体,在获取语言特定的字体文件前检查页面出现哪些字符,并更忠实地渲染合成斜体。
这些优化共同帮助 Kitesurf 保持了对 Agent 的高效率。尽管增加了对更多 web 标准支持——并且让 Kitesurf 更接近 Chrome 等功能完整的浏览器——但它的墙钟时间和 CPU 使用率仍大致与我们发布时的基准持平,在某些情况下甚至有所改善。

Browser Run 是我们的开发者平台产品,让你能够以编程方式控制和管理无头浏览器实例。当你使用这个 API 时,可以从我们支持的浏览器列表中选择,包括 Kitesurf。
这意味着我们必须确保所有浏览器在整个 API 层面都得到支持。从今天开始,Kitesurf 已具备完整的 Browser Run API 覆盖。你可以将 Kitesurf 与 CDP、Playwright、Puppeteer 或 MCP 一起使用。
最受欢迎的 Browser Run 功能之一是 Quick Actions,它为常见浏览器任务提供简单接口,如截取屏幕截图、提取 HTML 内容、生成 PDF 等。当我们发布 Kitesurf 时,你可以从 REST API 使用 Quick Actions。现在你也可以在 Worker 脚本内部使用 env.BROWSER.quickAction() 绑定:
interface Env {
BROWSER: BrowserRun;
}
export default {
async fetch(request, env): Promise<Response> {
return await env.BROWSER.quickAction("screenshot", {
url: "https://example.com",
browser: "kitesurf"
});
},
} satisfies ExportedHandler<Env>;
正如我们在发布博文的「我们如何构建」一节中详细说明的那样,Kitesurf 将 PageScript(处理页面会话并运行页面代码的隔离区)与 PageRenderer(负责从计算出的页面对象生成实际像素)分开。
Kitesurf 请求的生命周期

这不仅提供了出色的隔离性和灵活性,还允许我们将渲染逻辑分离并移到 Kitesurf 之外(例如移到客户端或另一个 Worker),同时将安全关键部分保留在服务器端,运行在我们的网络上。
如果这个模式听起来很熟悉,可能是因为 Cloudflare 还有另一个 SASE 产品叫 Cloudflare Browser Isolation,它在我们的全球网络边缘运行所有不受信任的 web 代码,同时将渲染数据「流」回客户端。
我们可以用 Kitesurf 做类似的事情。为了证明这一点,我们将 PageRenderer 移到了我们的 Playground Worker,并修补了这个版本,让它不将场景数据转换为图像,而是输出到 Kitty——这是一种现代终端支持的图形协议,如 Kitty 本身、Ghostty、WezTerm 等。我们甚至更进一步,添加了纯 ANSI 文本模式,以适应没有 Kitty 的环境。
结果是,你现在可以快速打开并使用 Kitesurf 渲染页面,而无需离开你的终端应用。这不仅非常有用——因为你现在可以一目了然地浏览现代 Web 而无需切换上下文——而且你还可以用这个工具来查看使用 Kitesurf 的 Agent 是如何「看到」页面的。
安装终端版 Kitesurf:
$ brew install cloudflare/cloudflare/kitesurf
从现在起,只需在终端中输入:
$ kitesurf https://blog.cloudflare.com
$ kitesurf --help
以下是运行演示。

终端也会发回滚动和点击事件,所以你可以正常使用键盘、方向键或鼠标,就像在专用浏览器应用程序窗口中一样。
这是我们的 Silent Space Marine Doom 在终端中运行的 Kitesurf 中的演示:

我们继续在打造最适合客户和开发者的 Agent 浏览器道路上快速迭代。预计性能基准会越来越好,支持的 Web 标准和 WPT 测试覆盖率将快速增长。事实上,我们决定在这里和这里公开发布结果,这样你就可以实时跟踪我们的进展。
我们将继续探索将 Kitesurf 解耦并将 PageRenderer 从 PageScript 移走对 Agent 有优势的场景,或者高帧率重要的场景。我们可能正在写这篇文章的同时,运行着一个 30fps 的 Doom 版 Kitesurf。
我们还想直面房间里的大象:虽然我们目前优先考虑快速开发,但我们仍然致力于将 Kitesurf 开源。这很快就会到来,但我们希望做好这件事,以便我们能够长期支持它。
Kitesurf 坚守其最初的设计目标:它像任何其他客户应用程序一样完全运行在 Workers 之上;这意味着我们只使用公开可用的功能和 API,没有任何特殊权限。这不仅是用自己的平台自研自用、证明自己平台的好方法,也是让 Kitesurf 非常廉价并能在 Cloudflare 全球网络上自动扩展的唯一方法。
在更新的 kitesurf.dev playground 中试用 Kitesurf,并通过 Browser Run 在你的项目中使用它。Beta 阶段免费提供,受每个账户的限制。关注我们的更新日志,来 Discord 上与团队聊天。分享你的体验并发送反馈——我们会倾听。