Agweb:面向编码智能体的 macOS 浏览器开源发布
Show HN: Agweb – a browser for agents that stays out of your way
作者发布 Agweb,一个基于 WebKit 的 macOS 浏览器,供编码智能体从命令行驱动,窗口不会抢占焦点。作者称五个空闲页面占用 0% CPU、590 MB 内存,对比 Headless Chrome 的 730 MB 和 Playwright Chrome 的 1.6 GB。
一个面向编码代理的 macOS 浏览器,基于 WebKit(Safari 的引擎)构建。我同时运行多个编码代理,Playwright 的 Chrome 窗口总是抢走我的键盘焦点,而无头浏览器又被一些网站屏蔽,让我只能猜测哪里出了问题。agweb 是一个从不获取焦点的窗口:代理通过 shell 用 agweb(一个 playwright-cli 风格的命令)来驱动它,而你可以实时观看它们全部。
空闲标签页会被挂起:在我的 Mac 上,五个打开的页面 CPU 占用为 0%,而 Chrome 的 GPU 进程却让五到七个核心保持忙碌。
| 五个空闲页面 | 内存 |
|---|---|
| agweb | 590 MB |
| 无头 Chrome | 730 MB |
| Playwright Chrome | 1.6 GB |
- 从不抢焦点。 没有窗口会来到前台,也不会弹出任何东西。对话框、切换标签页、文件选择器和下载都在代码中应答。
- 你始终能看到它。 仪表盘(⌘D)同时实时显示每个代理的每个标签页,并附有每个代理的最后一条命令。而且它始终是一个真实窗口:一些网站会屏蔽无头浏览器,而无头模式只会让你猜测哪里出了问题。
- 同时运行多个代理。 每个代理在自己的工作区中拥有自己的标签页,并在侧边栏中按代理分组。
- 登录一次即可。 命名配置文件(
-p work)会保留其登录状态,并由所有使用它的代理同时共享。 - 轻量。 空闲标签页会被限流然后挂起,因此一旦无人使用,打开的页面几乎不产生开销。
- 行为像人。 点击和按键是原生 macOS 事件,指针像手一样移动,因此悬停菜单和拖放都能正常工作。
- 为代理而造。 快照会为每个元素分配一个引用,该引用在元素位于页面上期间持续有效。
snapshot --diff和find只显示重要内容,并且每个操作都会报告它改变了什么。 - 密码不会进入记录。
fill --secret-cmd 'pass show site'输入一个代理在回复中永远看不到的秘密。1Password 和 Bitwarden CLI 也可用。 - 无广告。 广告和跟踪器通过 uBlock Origin 的列表被拦截,agweb 每 4 天下载一次这些列表。测试分析功能的代理可以为其自己的工作区关闭它(
agweb -w task adblock off)。 - 演示视频。
video-start将标签页录制为 MP4,并绘制出指针和点击。
安装
需要 macOS 26 或更高版本。从 Releases 下载 Agweb.dmg,将 Agweb 拖到 Applications 并打开它。然后依次选择 Help ▸ Install Command Line Tool 和 Help ▸ Install Agent Skill(用于 Claude Code 和 Codex)。两者都是指向应用内的链接,因此会随应用一起更新。
若要从源码构建(Xcode 26 或更高版本):
./scripts/build.sh build/Agweb.app/Contents/Helpers/agweb install-cli agweb install-skill
使用
agweb -w task open en.wikipedia.org/wiki/WebKit # a workspace for this task; starts the app if needed agweb -w task snapshot # the page as a tree with [ref=eN] handles agweb -w task click 'role=button[name="Main menu"]'
点击的回复已经说明了它做了什么,因此代理不需要第二次快照:
### Changes
- navigation "Site" [ref=e2]
- - button "Main menu" [ref=e3]
+ - button "Main menu" [checked] [expanded] [ref=e3]
+ - list [ref=e1167]
+ - listitem [ref=e1168]
+ - link "Main page" [ref=e1169]
agweb help 列出所有命令。设置(⌘,)中有文字大小、仪表盘列数、CPU 和内存读数以及广告拦截开关。
与 playwright-cli 相比
尽可能使用相同的命令,因此代理已经熟悉它们;对于它缺少的 Playwright 名称,会建议其自己的名称(scroll-to → scroll-into-view)。此外还有:
- 回复说明改变了什么:发起的请求、添加或删除的行、对话框、弹窗、下载、控制台错误。无需在每一步之后都做快照,因此 token 少得多。
- 引用持续有效,只要元素还在页面上。
ask将标签页交给你进行登录、MFA 验证码或 CAPTCHA,而不获取焦点。- 操作会等待它们引发的请求,因此代理很少需要休眠。
text以 markdown 形式返回页面的文章。- 共享登录:同一配置文件上的代理可同时运行;而 Chrome 配置文件只能在一个浏览器中打开。
限制
- 仅限 WebKit:没有 Chrome DevTools Protocol,因此 Playwright 和 Chrome 扩展无法附加,仅支持 Chrome 的网站可能表现异常。
route仅模拟 fetch 和 XHR;requests仅按 URL 列出图片、脚本和样式(--static)。- 该广告拦截器无法运行 uBlock 的脚本,因此 YouTube 广告和部分“关闭你的广告拦截器”提示墙会被放行。
- 对于它无法做到的事情,请使用 Playwright。
开发
./scripts/selftest.sh 在独立实例中对本地页面运行每条命令;swift test 运行单元测试。AGWEB_ROOT=/tmp/dir 在你自己的实例旁启动第二个实例,将所有内容保留在该文件夹中。Defuddle(MIT)已捆绑用于text。
来源:Hacker News · github.com
