
kuri v0.4.14
浏览器自动化、网络爬取以及iOS + Android设备控制,专为AI智能体打造。基于Zig原生开发,提供令牌高效的CDP快照、HAR记录、原生ADB有线协议客户端及独立抓取器。
Kuri 🌰
安装
curl -fsSL https://kuri.trilok.ai/download | sh
macOS arm64/x86_64 和 Linux x86_64/arm64。单一二进制文件,无运行时依赖。
直接下载:macOS arm64 · macOS x86_64 · Linux x86_64 · Linux arm64
面向 AI 代理的浏览器自动化与网页抓取。使用 Zig 编写。零 Node.js。
CDP 自动化 · A11y 快照 · HAR 录制 · 独立抓取器 · 交互式终端浏览器 · 代理式 CLI · 安全测试 · iOS + Android 设备控制
快速开始 · 基准测试 · kuri-agent · 安全测试 · API · 技能 · 更新日志
团队为何转向 Kuri: 当前 Apple Silicon
ReleaseFast构建的每个二进制文件均保持在 2 MB 以下,2026-04-23 重新运行 Google Flights 测得完整kuri-agent循环(go→snap→click→snap→eval)消耗 3,392 个 token。在引用百分比之前,应在相同环境中重新运行跨工具对比数据。
为什么 Kuri 在代理场景中胜出
大多数浏览器工具是为 QA 工程师构建的。Kuri 是为代理循环构建的:读取页面、保持低 token 成本、基于稳定引用执行操作,然后继续。
- 135 个 HTTP 端点 — 与 agent-browser 和 browser-use 完全对等,从 React 检查到 Core Web Vitals。
- 比 agent-browser 少 7-12% 的 token,得益于
@eN引用格式和零前缀渲染。 - 观测数据轻 44 倍,使用
/page/state(48 个 token)对比完整快照(2,124 个 token),针对同一 Google Flights 页面。 - 批量执行 —
POST /batch在一次 HTTP 调用中发送 N 条命令,消除 N-1 次往返和 N-1 轮 LLM 交互。 - React 兼容 — 可信的 CDP 鼠标事件和逐字符键盘事件可触发 React 18/19 的
onClick和onChange。
快照 token:Google Flights SIN → TPE
2026-05-24 在此工作区重新运行,使用 wc -c 和 chars/4 近似值测量。
| 工具 / 模式 | 字符数 | ~Token 数 | 备注 |
|---|---|---|---|
kuri snap(完整) | 8,499 | 2,124 | 所有节点 + 交互引用 |
kuri snap(仅交互) | ~3,000 | ~750 | 最适合代理循环 |
kuri /page/state | 190 | 48 | 轻量观测(url、title、scroll%、计数) |
| agent-browser snap(估算) | ~9,183 | ~2,295 | [ref=e0] 格式开销 |
Token 效率:kuri vs agent-browser
| 页面 | kuri token 数 | agent-browser token 数 | 节省 |
|---|---|---|---|
| example.com | 40 | 35 | -13%(简单页面,agent-browser 跳过根节点) |
| Hacker News | 386 | ~440 | 少 12% |
| Google Flights SIN→TPE | 2,124 | ~2,295 | 少 7% |
节省来自 kuri 的紧凑格式:
@e0引用(3 字符)对比[ref=e0](9 字符)- 每行无
-前缀(节省 2 字符 × 行数) - 相同的缩进,相同的节点过滤
完整工作流成本:go → snap → click → snap → eval
| 工具 | 每周期 token 数 |
|---|---|
| kuri-agent | ~3,400 |
使用 /page/state 替代第二次 snap | ~1,700 |
使用 POST /batch(全部在一次调用中) | ~1,700(相同 token 数,1 次 HTTP 调用而非 5 次) |
kuri vs libretto
libretto(Playwright + Node)是每步 token 成本方面最接近的竞争对手。2026-07-04 进行头对头测量 — 相同 Chrome、相同标签页、真实 tiktoken o200k_base 计数(完整方法和复现:benchmarks/libretto_comparison.md)。诚实的对比:
| 维度 | 胜者 | 详情 |
|---|---|---|
| 每次调用延迟 | kuri | 4–117 ms vs 1,344–1,500 ms(快 13–376 倍 — 持久服务器 vs 每条命令启动 Node) |
| 快照 token,典型页面 | kuri | 简单页面 61 vs 151(2.5 倍),文章 265 vs 363(1.37 倍)— 更紧凑的语法 |
| 快照 token,大型列表 | 各有胜负 | kuri 默认 4,424 vs 813 — kuri 输出全部 259 个引用,libretto 默认截断。使用 limit=5 时 kuri 渲染 555 个 token(比 libretto 少 1.46 倍),34 个引用 + … +45 more 标记 |
| 轨迹(信息流,9 次点击) | kuri,微弱优势 | 898 vs 939 个 token(limit=5 基础 + diff 循环 vs exec 循环)— 持平至微弱优势;早上的 5.1 倍差距是未截断的基础快照 |
| 重复运行 | libretto | 将轨迹编译为 Playwright 脚本 → 0 token 重放;kuri 每次运行都重新支付循环成本 |
kuri 从研究 libretto 中获得的改进(均在本版本中发布):diff 优先循环(take_snapshot_diff,约 38 token/步);自适应 diff,在导航时回退到带 ! page replaced 头的完整快照;仅身份移除行;截图写入磁盘(返回路径,字节永不进入上下文);MCP 上的 get_page_state;以及 — 在将 parseA11yNodes 重写为真正的 DFS 树遍历之后 — 可选列表截断(/snapshot?limit=N,每个被截断的运行一行 … +K more)、范围重新捕获(scope=@ref)和层级缩进,也作为 MCP take_snapshot 上的 uid/limit 暴露。9 次点击的信息流轨迹,使用朴素完整重新快照时消耗 44,285 个 token,使用截断基础 + diff 后仅消耗 898 个 — 便宜 49 倍,且超过 libretto 的 939。
上述较旧的表格使用
chars/4token 近似值;libretto 对比使用真实的tiktoken计数。在引用百分比之前,请在自己的环境中重新运行跨工具数据。
二进制大小和内存
在 Apple M4 Pro、macOS 26.4.1 上测量。当前二进制文件使用 -Doptimize=ReleaseFast 构建。
| 二进制文件 | 当前大小 |
|---|---|
kuri | 1,093,840 B (1.04 MiB) |
kuri-agent | 629,904 B (615 KiB) |
kuri-browse | 1,089,120 B (1.04 MiB) |
kuri-fetch | 2,063,488 B (1.97 MiB) |
RSS 在 Zig 0.16 迁移期间保持平稳
使用 /usr/bin/time -l 针对当前 v0.4.3 ReleaseFast 构建测量。
| 命令 | v0.4.3 平均最大 RSS |
|---|---|
kuri-fetch --version | ~2.45 MiB |
kuri-browse --version | ~2.45 MiB |
kuri-fetch --quiet --dump markdown http://example.com/ | ~9.17 MiB |
问题所在
每个浏览器自动化工具都会拖入 Playwright(约 300 MB)、Node.js 运行时以及一连串 npm 依赖。你的 AI 代理只想读取页面、点击按钮,然后继续。 Kuri 是一个单一的 Zig 二进制文件。 四种模式,零运行时:
kuri → CDP server (Chrome automation, a11y snapshots, HAR)
kuri-fetch → standalone fetcher (no Chrome, QuickJS for JS, ~2 MB)
kuri-browse → interactive terminal browser (navigate, follow links, search)
kuri-agent → agentic CLI (scriptable Chrome automation + security testing)
📦 安装
一行安装(macOS / Linux)
curl -fsSL https://raw.githubusercontent.com/justrach/kuri/release-channel/stable/install.sh | sh
检测你的平台,下载对应的二进制文件,安装到 ~/.local/bin。
下载来自 Kuri 自行管理的 release-channel 分支。macOS 二进制文件使用 Developer ID 证书进行本地签名。GitHub Release 资产与这些 tarball 相同。
bun / npm
bun install -g kuri-agent
# or: npm install -g kuri-agent
在安装时下载适用于你平台的正确原生二进制文件。
发布渠道
Kuri 的稳定二进制文件位于 release-channel 分支,并直接从 GitHub raw URL 提供。
- 稳定版安装脚本:
https://raw.githubusercontent.com/justrach/kuri/release-channel/stable/install.sh - 稳定版清单:
https://raw.githubusercontent.com/justrach/kuri/release-channel/stable/latest.json - 分支视图:
https://github.com/justrach/kuri/tree/release-channel/stable - 直接下载模式:
https://raw.githubusercontent.com/justrach/kuri/release-channel/stable/<version>/kuri-<version>-<target>.tar.gz
手动安装
从稳定版发布清单或 GitHub Releases 页面下载适用于你平台的 tarball,并将其解压到你的 $PATH 中。
稳定版安装 URL:
curl -fsSL https://raw.githubusercontent.com/justrach/kuri/release-channel/stable/install.sh | sh
清单包含精确的资源 URL 以及针对 aarch64-linux、x86_64-linux、aarch64-macos 和 x86_64-macos 的 SHA-256 校验和。
平台支持
| 平台 | 状态 |
|---|---|
macOS(aarch64、x86_64) | 预构建二进制文件,已签名并公证 |
Linux(aarch64、x86_64) | 预构建二进制文件 |
Windows(x86_64) | 实验性——仅限交叉编译。 zig build -Dtarget=x86_64-windows-gnu 已通过 CI 验证,但 Chrome 自动化、守护进程化、基于信号的关闭、HAR 录制以及基于文件的认证存储均在运行时以 error.UnsupportedOnWindows 打桩。如果你需要完整功能集,请使用 WSL2。跟踪于 #153。 |
Kuri 在多个地方依赖 POSIX 原语(fork、clock_gettime、原始套接字),因此完整的原生 Windows 移植是实打实的工作。上述编译级基线允许 --version/--help 路径和纯内存操作运行;那些棘手的部分(Chrome、套接字、守护进程化)需要真正的 Win32 实现才能从打桩列表中移除。如果你想接手其中任何一项,请 +1 #153 或提交 PR。
从源码构建
需要 Zig ≥ 0.16.0。
git clone https://github.com/justrach/kuri.git
cd kuri
zig build -Doptimize=ReleaseFast
# Binaries in zig-out/bin/: kuri kuri-agent kuri-fetch kuri-browse