跳到正文
Hacker News· paul_nameless·· 16 小时前AI 评分58

Agweb:面向编码智能体的 macOS 浏览器开源发布

Show HN: Agweb – a browser for agents that stays out of your way

AI 导读

作者发布 Agweb,一个基于 WebKit 的 macOS 浏览器,供编码智能体从命令行驱动,窗口不会抢占焦点。作者称五个空闲页面占用 0% CPU、590 MB 内存,对比 Headless Chrome 的 730 MB 和 Playwright Chrome 的 1.6 GB。

正文 · AI 翻译

一个面向编码代理的 macOS 浏览器,基于 WebKit(Safari 的引擎)构建。我同时运行多个编码代理,Playwright 的 Chrome 窗口总是抢走我的键盘焦点,而无头浏览器又被一些网站屏蔽,让我只能猜测哪里出了问题。agweb 是一个从不获取焦点的窗口:代理通过 shell 用 agweb(一个 playwright-cli 风格的命令)来驱动它,而你可以实时观看它们全部。

The dashboard: every agent's tabs at once

空闲标签页会被挂起:在我的 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