
Nuevo releaseJul 26, 2026
kuri v0.4.14
Automatización de navegadores, rastreo web y control de dispositivos iOS y Android para agentes de IA. Instantáneas CDP nativas en Zig y eficientes en tokens, grabación HAR, cliente nativo del protocolo de cable adb y un descargador independiente.
Kuri 🌰
Instalación```sh
curl -fsSL https://kuri.trilok.ai/download | sh
macOS arm64/x86_64 y Linux x86_64/arm64. Un único binario, sin dependencias de runtime.
Descargas directas: [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)
---
**Automatización de navegador y rastreo web para agentes de IA. Escrito en Zig. Cero Node.js.**
Automatización CDP · Instantáneas A11y · Grabación HAR · Descargador independiente · Navegador de terminal interactivo · CLI agéntico · Pruebas de seguridad · Control de dispositivos iOS y Android
[Inicio rápido](#-quick-start) · [Benchmarks](#-benchmarks) · [kuri-agent](#-kuri-agent) · [Pruebas de seguridad](#-security-testing) · [API](#-http-api) · [Habilidades](#-skills) · [Registro de cambios](https://github.com/justrach/kuri/blob/main/CHANGELOG.md)
> **Por qué los equipos cambian a Kuri:** las compilaciones actuales de Apple Silicon con `ReleaseFast` siguen por debajo de 2 MB por binario, y una nueva ejecución de Google Flights del 23 de abril de 2026 midió **3,392 tokens** para un bucle completo de `kuri-agent` (`go→snap→click→snap→eval`). Las diferencias entre herramientas deben volver a ejecutarse en el mismo entorno antes de citar un porcentaje.
---
## Por qué Kuri gana para los agentes
La mayoría de las herramientas de navegador se crearon para ingenieros de QA. Kuri está construida para bucles de agente: lee la página, mantén bajo el coste de tokens, actúa sobre referencias estables y sigue adelante.
- **135 endpoints HTTP** — total paridad con agent-browser y browser-use, desde la inspección de React hasta Core Web Vitals.
- **7-12% menos tokens** que agent-browser en páginas reales gracias al formato de ref `@eN` y al renderizado sin prefijo.
- **Observaciones 44 veces más ligeras** con `/page/state` (48 tokens) frente a la instantánea completa (2,124 tokens) para la misma página de Google Flights.
- **Ejecución por lotes** — `POST /batch` envía N comandos en una sola llamada HTTP, eliminando N-1 round-trips y N-1 turnos de LLM.
- **Compatible con React** — los eventos de ratón CDP fiables y los eventos de tecla por carácter disparan `onClick` y `onChange` de React 18/19.
### Tokens de instantánea: Google Flights `SIN → TPE`
Nueva ejecución el 24 de mayo de 2026 en este espacio de trabajo, medida con `wc -c` y la aproximación `chars/4`.
| Herramienta / Modo | Caracteres | ~Tokens | Nota |
|---|---:|---:|---|
| `kuri snap` (completo) | 8,499 | **2,124** | Todos los nodos + refs interactivas |
| `kuri snap` (solo interactivo) | ~3,000 | **~750** | Lo mejor para bucles de agente |
| `kuri /page/state` | 190 | **48** | Observación ligera (url, título, scroll%, recuentos) |
| agent-browser snap (estimado) | ~9,183 | **~2,295** | Sobrecarga del formato `[ref=e0]` |
### Eficiencia de tokens: kuri vs agent-browser
| Página | tokens de kuri | tokens de agent-browser | Ahorro |
|---|---:|---:|---|
| example.com | 40 | 35 | -13% (página trivial, agent-browser omite la raíz) |
| Hacker News | 386 | ~440 | **12% menos** |
| Google Flights SIN→TPE | 2,124 | ~2,295 | **7% menos** |
El ahorro proviene del formato compacto de kuri:
- refs `@e0` (3 caracteres) frente a `[ref=e0]` (9 caracteres)
- Sin prefijo `- ` por línea (ahorra 2 caracteres × número de líneas)
- La misma sangría, el mismo filtrado de nodos
### Coste del flujo de trabajo completo: `go → snap → click → snap → eval`
| Herramienta | Tokens por ciclo |
|---|---:|
| **kuri-agent** | **~3,400** |
| Con `/page/state` en lugar del segundo snap | **~1,700** |
| Con `POST /batch` (todo en una llamada) | **~1,700** (mismos tokens, 1 llamada HTTP en lugar de 5) |
### kuri vs libretto
[libretto](https://github.com/saffron-health/libretto) (Playwright + Node) es el competidor más cercano en coste de tokens por paso. Medido cara a cara el 4 de julio de 2026 — mismo Chrome, misma pestaña, recuentos reales de `tiktoken` `o200k_base` (metodología completa y reproducción: **[benchmarks/libretto_comparison.md](https://github.com/justrach/kuri/blob/main/benchmarks/libretto_comparison.md)**). El desglose honesto:
| Eje | Ganador | Detalle |
|---|---|---|
| Latencia por llamada | **kuri** | 4–117 ms frente a 1,344–1,500 ms (**13–376× más rápida** — servidor persistente frente a Node por comando) |
| Tokens de instantánea, página típica | **kuri** | simple 61 frente a 151 (2.5×), artículo 265 frente a 363 (1.37×) — gramática más ajustada |
| Tokens de instantánea, lista grande | dividido | kuri por defecto 4,424 frente a 813 — kuri emite los 259 refs, libretto trunca por defecto. Con `limit=5` kuri genera 555 tokens (**1.46× por debajo de libretto**), 34 refs + marcadores `… +45 more` |
| Trayectoria (feed, 9 clics) | **kuri**, por poco | 898 frente a 939 tokens (`limit=5` base + bucle de diff frente a bucle exec) — paridad con ligera ventaja; la pérdida de 5.1× de la mañana fue la base sin truncar |
| Ejecuciones repetidas | **libretto** | compila las trayectorias a un script de Playwright → reproducciones de 0 tokens; kuri vuelve a pagar el bucle en cada ejecución |
**Lo que kuri aprendió al estudiar libretto** (todo incluido en esta versión): un bucle de diff primero (`take_snapshot_diff`, ~38 tokens/paso); un diff adaptativo que recurre a una instantánea completa con un encabezado `! page replaced` al navegar; líneas de eliminación solo por identidad; capturas de pantalla escritas en disco (se devuelve la ruta, los bytes nunca entran en el contexto); `get_page_state` a través de MCP; y — después de reescribir `parseA11yNodes` como un recorrido real de árbol DFS — **truncamiento de listas opt-in** (`/snapshot?limit=N`, una línea `… +K more` por ejecución limitada), **recaptura con alcance** (`scope=@ref`) y **sangría jerárquica**, también expuestas como `uid`/`limit` en `take_snapshot` de MCP. La trayectoria de feed de 9 clics que costaba 44,285 tokens con reintentos completos ingenuos cuesta **898** con una base truncada + diffs — 49× más barata, y por debajo de los 939 de libretto.
> Las tablas anteriores usan una aproximación de tokens `chars/4`; la comparación con libretto usa recuentos reales de `tiktoken`. Vuelve a ejecutar las cifras entre herramientas en tu propio entorno antes de citar un porcentaje.
### Tamaño del binario y memoria
Medido en Apple M4 Pro, macOS 26.4.1. Los binarios actuales se compilaron con `-Doptimize=ReleaseFast`.
| Binario | Tamaño actual |
|---|---:|
| `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) |
### El RSS se mantuvo estable durante la migración a Zig 0.16
Medido contra la compilación actual `v0.4.3` `ReleaseFast` con `/usr/bin/time -l`.