开源terminal-browser终端浏览器:Claude Code直接操作你的网页


terminal-browser 是由 Zenbu Labs 开发的一个开源工具,它能在你的终端窗口内直接运行一个真实的 Chromium 浏览器。它的核心理念是让开发者无需离开终端即可预览和调试网页,尤其适合与 AI 编程助手协同工作的场景。

Claude Code 插件 可以直接在 Claude Code 中打开终端浏览器了。


核心特性与适用场景

  • 真实的浏览器体验:它并非 Lynx 之类的文本模式浏览器,而是渲染来自 Chromium 的真实像素,因此 JavaScript、CSS 布局和样式表现与桌面浏览器完全一致,甚至能流畅滚动无限画布(infinite canvas)类型的网站。
  • 为 AI 智能体设计:这是它的一个重要特点。通过 terminal-browser action 命令,它暴露了一个与智能体兼容的 CLI 接口。这意味着,在你的终端中运行的 AI 编程助手(如 Claude Code)可以直接打开网页、读取渲染结果并进行点击操作,从而自主验证其代码修改效果,无需你手动截图或切换工具。
  • SSH 远程预览:它原生支持 SSH。你可以直接预览运行在远程机器上的网站(如 terminal-browser open localhost:8080),而无需配置端口转发。浏览器本身运行在你的本地机器上,只有变化的页面部分会通过网络传输,保证了流畅性。
  • 分屏与一体化工作流:你可以使用 --split right 等参数,将浏览器置于编辑器或智能体会话旁边的分屏窗格中,实现“编码-预览”的无缝衔接,减少在不同窗口间切换的上下文损耗。

⚙️ 工作原理简述

它的实现依赖于终端对 Kitty 图形协议(Kitty graphics protocol) 的支持(兼容 Ghostty、Kitty、WezTerm 等 50 多种终端)。具体流程如下:

  1. 像素渲染:利用 Electron 的离屏渲染 API,直接从 GPU 读取 Chromium 生成的像素数据。
  2. 终端显示:将这些像素通过 Kitty 图形协议发送到终端进行显示。
  3. 输入转发:终端捕获鼠标点击、键盘事件等,并将其作为合成事件发送回 Chromium。对于终端无法获取的输入(如触控板手势),则通过一个后台 Swift 应用从操作系统直接读取。
  4. UI 层:浏览器外部的界面(如标签页、地址栏)由一个基于 Rust 的图形引擎驱动,并使用 React 进行渲染。


终端里的浏览器让AI和你操作同一个网页实例,但这东西有一个反常识的坑!

你以为AI编程助手最缺的是更强的模型?错,它缺的是一双能和你看到同一块屏幕的眼睛!

terminal-browser终端浏览器把真实Chromium引擎塞进你的终端标签页,AI编程助手通过agent-browser兼容CLI直接操控同一个可见的网页实例,开发者不用Alt-Tab就能实时验证AI生成的页面效果。这个2026年7月30日由Zenbu Labs发布的开源项目,正在重新定义终端开发者和AI协作的方式。

终端里那个浏览器到底装了什么

terminal-browser跑的是货真价实的Chromium内核,不是Lynx那种文字排版的替代品!

开发者Rob Pruzan用Electron的离屏渲染API读取GPU生成的像素,再通过Kitty图形协议把这些像素贴到终端窗口里。网页里的JavaScript、CSS布局、字体渲染,和你桌面浏览器里看到的一模一样,连无限画布(infinite canvas)那种滚动起来让文字浏览器直接卡死的网页,它也能流畅操作。

但是,它跟Awrit长得太像了,这东西凭什么说自己不一样?

Awrit是Chase开发的一个终端图形浏览器,同样用Electron渲染Chromium、同样通过Kitty协议把像素塞进终端,连支持的终端列表都高度重合。区别在于:Awrit的定位就是一个浏览器,你在里面手动点链接、填表单、看网页,跟用桌面Chrome没本质区别。terminal-browser多出来的东西是它的action子命令,一个agent-browser兼容的CLI接口,让AI编程助手直接操控你正在看的那个浏览器实例。一个人看的浏览器,和一个人加一个AI共同操作的浏览器,这是两个物种!

你的AI助手能看到你正在看的页面

程序员最烦的事情不是代码写不出来,是AI改完代码之后你不知道它改对了没有。

传统流程是这样的:你让Claude Code改了一个前端组件,它说搞定了,然后你得Alt-Tab切到浏览器,手动刷新页面,用肉眼检查布局有没有崩。如果崩了,你再切回终端告诉它哪里不对,它改完你再切回去看,如此反复。这中间每一次切换都会打断你的思路,而且AI完全不知道你看到了什么,它只是在盲改。

terminal-browser把这条回路砍掉了一半。它的action命令让AI编程助手直接对打开着的浏览器页面执行操作:截取页面快照、点击元素、填写表单、执行JavaScript。Claude Code在终端里跑一条terminal-browser action -- snapshot,就能拿到页面当前的渲染状态,它看到的和你看到的完全一致。

但是这里有一个问题值得琢磨。AI看到的页面快照,和它在无头浏览器(headless browser)里看到的有什么本质区别吗?

区别大了!无头浏览器里AI操作的页面是一张白纸,没有登录状态、没有cookie、没有你之前手动浏览留下的会话。terminal-browser的action命令操作的是你终端里那个可见的实例,你的登录态、你的滚动位置、你刚填了一半的表单,全都在那儿。AI不是在一个隔离的沙箱里模拟,它直接接管了你正在用的那个浏览器。

AI的浏览器和你的浏览器原来是两个世界

你以为AI编程助手不会用浏览器?它会用,只不过它用的浏览器你看不见!

Vercel的agent-browser是一个专门给AI用的无头浏览器CLI,AI通过它打开网页、截图、提取DOM结构,整个过程全在后台跑,你只能看到AI返回的文字结果。这就像让一个实习生帮你检查网页,但他不给你看截图,只告诉你“我觉得还行”——你信吗?

terminal-browser把agent-browser的接口协议搬过来了,但指向的对象换了。不再是启动一个隐藏的浏览器进程,而是让AI操作你已经打开的那个可见窗口。你在终端分屏左边跑着AI编程助手,右边跑着terminal-browser里的网页预览,AI改完代码直接通过action命令刷新页面,你在右边实时看到变化。

但是,分屏这件事本身也是有代价的。你得先把浏览器和AI塞进同一个终端标签页,这要求你的终端支持Kitty图形协议。Ghostty、Kitty、cmux、WezTerm都行,标准的macOS Terminal.app不行,Alacritty也不行,Warp也不行。如果你的终端不支持,这东西连启动都启动不了。

你的浏览器进程根本不在你电脑上

远程开发的工程师有一个被折磨了很多年的痛点:你在SSH连着的远程服务器上跑了一个开发服务器,想预览一下页面效果,得折腾端口转发!

terminal-browser有一个--ssh参数,直接解决这个问题。你在本地终端里跑terminal-browser open --ssh user@host ,所有网络请求都通过远程服务器发起,但浏览器进程本身仍然跑在你本地机器上。远程服务器只负责转发请求和返回数据,像素渲染完全在你本地完成,不经过网络传输。这意味着你在远程服务器上跑的开发服务器,在本地终端里打开预览页面的体验,跟在本地跑一模一样。

但是,这个设计也带来了一个有意思的悖论。既然浏览器进程在本地,那远程服务器上的网站如果依赖了服务器端渲染(SSR)或者特定的服务器环境变量,本地渲染出来的结果真的和服务器上一样吗?

答案是:不完全一样。terminal-browser的SSH模式让你能预览远程服务器的页面,但它本质上是在本地Chromium里加载远程请求返回的HTML。如果页面依赖服务器端的运行时环境(比如Node.js进程变量),本地渲染的结果可能和真实服务器有差异。不过对于大多数前端调试场景——检查CSS、调试JS交互、验证布局——这个方案已经够了,因为你调试的本来就是浏览器端的行为。

这套工具链现在还撑不住所有人

terminal-browser的GitHub仓库拿了超过2400颗星,用的是MIT许可证,代码全公开。Rust写的图形引擎、React的自定义渲染器、Swift的后台输入捕获,技术栈不可谓不扎实。Pruzan在Vercel的Next.js团队待过,还参与过React Scan这个两万多星的开源项目,履历摆在那里。

但是,有几个硬伤绕不过去。第一个是终端兼容性,前面已经说了,不支持Kitty图形协议的终端用不了。第二个是平台,最初只支持Apple Silicon Mac,后来v0.5.0才加上Linux支持,还只覆盖了x86_64和aarch64两个架构。第三个是项目的成熟度,2026年7月才发布,到现在一年出头,issue列表里还有25个未解决。

最值得警惕的是安全模型。terminal-browser的action命令让AI有权限操作你打开着的浏览器,包括点击按钮、填写表单、执行JavaScript。如果AI正在处理一个你不完全信任的网页,它执行的JavaScript可能触发一些你不想发生的操作。社区已经在讨论跨域请求、cookie处理和沙箱隔离的问题,但官方的公开材料里没有给出完整的安全策略说明。

你现在打开终端,敲下curl -fsSL https://terminal-browser.sh/install | bash,等它装完,再敲terminal-browser open localhost:3000 --split right,右边就会弹出一个分屏,里面是你本地开发服务器的真实渲染页面。然后你问你的AI编程助手:“帮我改一下登录按钮的样式,改完直接刷新给我看。”它在左边改代码,在右边用action命令刷新页面,你同时看到两边在变。

但有一个问题你永远无法确定:当AI通过action命令操作那个浏览器的时候,它执行的JavaScript有没有在你不知情的情况下,向某个第三方服务器发送了你的登录凭证?这个问题的答案,藏在terminal-browser的代码里,而那段代码,你还没读过。