返回更新列表
新发布Jul 26, 2026

kuri v0.4.14

浏览器自动化、网络爬取以及iOS + Android设备控制,专为AI智能体打造。基于Zig原生开发,提供令牌高效的CDP快照、HAR记录、原生ADB有线协议客户端及独立抓取器。

分享

Kuri

Kuri 🌰

稳定版 许可证 Zig node_modules 状态

安装```sh

curl -fsSL https://kuri.trilok.ai/download | sh

支持 macOS arm64/x86_64 与 Linux x86_64/arm64。单二进制文件,无运行时依赖。

直接下载:[macOS arm64](https://kuri.trilok.ai/download/v0.6.0/kuri-v0.6.0-aarch64-macos.tar.gz) · [macOS x86_64](https://kuri.trilok.ai/download/v0.6.0/kuri-v0.6.0-x86_64-macos.tar.gz) · [Linux x86_64](https://kuri.trilok.ai/download/v0.6.0/kuri-v0.6.0-x86_64-linux.tar.gz) · [Linux arm64](https://kuri.trilok.ai/download/v0.6.0/kuri-v0.6.0-aarch64-linux.tar.gz)

---

**面向 AI 智能体的浏览器自动化与网页爬取。使用 Zig 编写。零 Node.js 依赖。**

CDP 自动化 · A11y 快照 · HAR 录制 · 独立抓取器 · 交互式终端浏览器 · Agentic CLI · 安全测试 · iOS + Android 设备控制

[快速开始](#-quick-start) · [基准测试](#-benchmarks) · [kuri-agent](#-kuri-agent) · [安全测试](#-security-testing) · [API](#-http-api) · [技能](#-skills) · [更新日志](https://github.com/justrach/kuri/blob/main/CHANGELOG.md)

> **为什么团队转向 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 倍的观察** — 同一 Google Flights 页面,使用 `/page/state`(48 个 token)对比完整快照(2,124 个 token)。
- **批量执行** — `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、标题、滚动百分比、计数) |
| 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](https://github.com/saffron-health/libretto)(Playwright + Node)是每步 token 成本上最接近的竞争对手。2026-07-04 进行了同台对比 — 相同的 Chrome、相同的标签页、真实的 `tiktoken` `o200k_base` 计数(完整方法与复现:**[benchmarks/libretto_comparison.md](https://github.com/justrach/kuri/blob/main/benchmarks/libretto_comparison.md)**)。诚实的对比结果:

| 维度 | 胜者 | 详情 |
|---|---|---|
| 每次调用的延迟 | **kuri** | 4–117 ms 对比 1,344–1,500 ms(**快 13–376 倍** — 常驻服务器对比每条命令一个 Node 进程) |
| 快照 token 数,典型页面 | **kuri** | 简单页面 61 对比 151(2.5 倍),文章 265 对比 363(1.37 倍)— 更紧凑的语法 |
| 快照 token 数,大型列表 | 平分 | kuri 默认 4,424 对比 813 — kuri 输出全部 259 个引用,libretto 默认截断。使用 `limit=5` 时 kuri 渲染 555 个 token(**比 libretto 少 1.46 倍**),34 个引用 + `… +45 more` 标记 |
| 轨迹(feed,9 次点击) | **kuri**,勉强 | 898 对比 939 个 token(`limit=5` 基线 + 差异循环对比执行循环)— 持平到微弱优势;早间 5.1 倍的劣势来自未截断的基线 |
| 重复运行 | **libretto** | 将轨迹编译为 Playwright 脚本 → 0 token 重放;kuri 每次运行都要重新支付循环成本 |

**kuri 从研究 libretto 中获得的改进**(均随本版本发布):差异优先循环(`take_snapshot_diff`,约 38 个 token/步);自适应差异在导航时回退为带 `! page replaced` 头部的完整快照;只含身份信息的删除行;截图写入磁盘(返回路径,字节永不进入上下文);通过 MCP 提供 `get_page_state`;以及在将 `parseA11yNodes` 重写为真正的 DFS 树遍历之后 — **可选列表截断**(`/snapshot?limit=N`,每次截断运行输出一行 `… +K more`)、**限定作用域的重新捕获**(`scope=@ref`)和**层级缩进**,这些同时以 `uid`/`limit` 形式暴露在 MCP `take_snapshot` 中。那个用朴素的完整重新快照需要 44,285 个 token 的 9 次点击 feed 轨迹,使用截断基线 + 差异后只需 **898** 个 token — 便宜 49 倍,并超过了 libretto 的 939。

> 上方的旧表格使用 `chars/4` token 近似值;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 迁移期间保持平稳

以当前 `v0.4.3` `ReleaseFast` 构建为基准,使用 `/usr/bin/time -l` 测量。

| 命令 | `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)```sh

curl -fsSL https://raw.githubusercontent.com/justrach/kuri/release-channel/stable/install.sh | sh

检测您的平台,下载正确的二进制文件,并安装到 `~/.local/bin`。
下载内容来自 Kuri 自行管理的 `release-channel` 分支。macOS 二进制文件使用开发者 ID 证书进行本地签名。GitHub Release 资产镜像了这些相同的 tarball。

### bun / npm```sh
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:```sh curl -fsSL https://raw.githubusercontent.com/justrach/kuri/release-channel/stable/install.sh | sh

The manifest includes exact asset URLs plus SHA-256 checksums for `aarch64-linux`, `x86_64-linux`, `aarch64-macos`, and `x86_64-macos`.

### Platform support

| Platform | Status |
|---|---|
| macOS (`aarch64`, `x86_64`) | Prebuilt binaries, signed + notarized |
| Linux (`aarch64`, `x86_64`) | Prebuilt binaries |
| Windows (`x86_64`) | **Experimental — cross-compile only.** `zig build -Dtarget=x86_64-windows-gnu` is CI-verified, but Chrome automation, daemonization, signal-based shutdown, HAR recording, and the file-backed auth store are all stubbed with `error.UnsupportedOnWindows` at runtime. Use **WSL2** if you need the real feature set. Tracked at [#153](https://github.com/justrach/kuri/issues/153). |

分类