Voltar às atualizações
New releaseJul 26, 2026

kuri v0.4.14

Automação de navegador, web crawling e controle de dispositivos iOS + Android para agentes de IA. Snapshots CDP nativos em Zig, eficientes em tokens, gravação HAR, cliente nativo do protocolo adb e um fetcher independente.

Compartilhar

Kuri

Kuri 🌰

Stable release License Zig node_modules status

Instalação```sh

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

macOS arm64/x86_64 e Linux x86_64/arm64. Binário único, sem dependências de runtime.

Downloads diretos: [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)

---

**Automação de navegador e web crawling para agentes de IA. Escrito em Zig. Zero Node.js.**

Automação CDP · Snapshots A11y · Gravação de HAR · Fetcher autônomo · Navegador de terminal interativo · CLI agêntica · Testes de segurança · Controle de dispositivos iOS + Android

[Início Rápido](#-quick-start) · [Benchmarks](#-benchmarks) · [kuri-agent](#-kuri-agent) · [Testes de Segurança](#-security-testing) · [API](#-http-api) · [Habilidades](#-skills) · [Changelog](https://github.com/justrach/kuri/blob/main/CHANGELOG.md)

> **Por que as equipes migram para o Kuri:** builds `ReleaseFast` atuais para Apple Silicon permanecem abaixo de 2 MB por binário, e uma nova execução no Google Flights em 2026-04-23 mediu **3,392 tokens** para um loop completo de `kuri-agent` (`go→snap→click→snap→eval`). Deltas entre ferramentas devem ser executados novamente no mesmo ambiente antes de citar uma porcentagem.

---

## Por que o Kuri vence para agentes

A maioria das ferramentas de navegador foi construída para engenheiros de QA. O Kuri é construído para loops de agentes: leia a página, mantenha o custo de tokens baixo, aja com base em refs estáveis e siga em frente.

- **135 endpoints HTTP** — paridade total com agent-browser e browser-use, da inspeção React ao Core Web Vitals.
- **7 a 12% menos tokens** do que agent-browser em páginas reais, graças ao formato de ref `@eN` e à renderização sem prefixo.
- **Observações 44x mais leves** com `/page/state` (48 tokens) vs snapshot completo (2,124 tokens) para a mesma página do Google Flights.
- **Execução em lote** — `POST /batch` envia N comandos em uma única chamada HTTP, eliminando N-1 round-trips e N-1 turnos de LLM.
- **Compatível com React** — eventos de mouse CDP confiáveis e eventos de teclado por caractere disparam `onClick` e `onChange` do React 18/19.

### Tokens de snapshot: Google Flights `SIN → TPE`

Nova execução em 2026-05-24 neste workspace, medida com `wc -c` e aproximação `chars/4`.

| Ferramenta / Modo | Chars | ~Tokens | Nota |
|---|---:|---:|---|
| `kuri snap` (completo) | 8,499 | **2,124** | Todos os nós + refs interativos |
| `kuri snap` (somente interativos) | ~3,000 | **~750** | Melhor para loops de agente |
| `kuri /page/state` | 190 | **48** | Observação leve (url, título, scroll%, contagens) |
| agent-browser snap (estimado) | ~9,183 | **~2,295** | Sobrecarga de formato `[ref=e0]` |

### Eficiência de tokens: kuri vs agent-browser

| Página | tokens kuri | tokens agent-browser | Economia |
|---|---:|---:|---|
| example.com | 40 | 35 | -13% (página trivial, agent-browser pula a raiz) |
| Hacker News | 386 | ~440 | **12% menos** |
| Google Flights SIN→TPE | 2,124 | ~2,295 | **7% menos** |

A economia vem do formato compacto do kuri:
- Refs `@e0` (3 caracteres) vs `[ref=e0]` (9 caracteres)
- Sem prefixo `- ` por linha (economiza 2 caracteres × número de linhas)
- Mesma indentação, mesma filtragem de nós

### Custo do fluxo completo: `go → snap → click → snap → eval`

| Ferramenta | Tokens por ciclo |
|---|---:|
| **kuri-agent** | **~3,400** |
| Com `/page/state` em vez do segundo snap | **~1,700** |
| Com `POST /batch` (tudo em uma chamada) | **~1,700** (mesmos tokens, 1 chamada HTTP em vez de 5) |

### kuri vs libretto

[libretto](https://github.com/saffron-health/libretto) (Playwright + Node) é o concorrente mais próximo em custo de tokens por etapa. Medido frente a frente em 2026-07-04 — mesmo Chrome, mesma aba, contagens reais de `tiktoken` `o200k_base` (metodologia completa e reprodução: **[benchmarks/libretto_comparison.md](https://github.com/justrach/kuri/blob/main/benchmarks/libretto_comparison.md)**). A divisão honesta:

| Eixo | Vencedor | Detalhe |
|---|---|---|
| Latência por chamada | **kuri** | 4–117 ms vs 1,344–1,500 ms (**13–376× mais rápido** — servidor persistente vs Node por comando) |
| Tokens de snapshot, página típica | **kuri** | simples 61 vs 151 (2.5×), artigo 265 vs 363 (1.37×) — gramática mais enxuta |
| Tokens de snapshot, lista grande | dividido | padrão do kuri 4,424 vs 813 — o kuri emite todos os 259 refs, o libretto trunca por padrão. Com `limit=5`, o kuri renderiza 555 tokens (**1.46× abaixo do libretto**), 34 refs + marcadores `… +45 more` |
| Trajetória (feed, 9 cliques) | **kuri**, por pouco | 898 vs 939 tokens (base `limit=5` + loop de diff vs loop de exec) — paridade a leve vantagem; a perda de 5.1× da manhã foi devida à base não truncada |
| Execuções repetidas | **libretto** | compila trajetórias em um script Playwright → repetições de 0 tokens; o kuri volta a pagar o loop a cada execução |

**O que o kuri ganhou ao estudar o libretto** (tudo incluído nesta versão): um loop diff-first (`take_snapshot_diff`, ~38 tokens/etapa); um diff adaptativo que recorre a um snapshot completo com um cabeçalho `! page replaced` na navegação; linhas de remoção apenas com a identidade; capturas de tela gravadas em disco (o caminho é retornado, os bytes nunca entram no contexto); `get_page_state` via MCP; e — após reescrever `parseA11yNodes` como um verdadeiro caminhamento de árvore DFS — **truncamento de lista opt-in** (`/snapshot?limit=N`, uma linha `… +K more` por execução limitada), **recaptura com escopo** (`scope=@ref`) e **indentação hierárquica**, também expostos como `uid`/`limit` no `take_snapshot` do MCP. A trajetória de feed de 9 cliques que custava 44,285 tokens com re-snapshots completos ingênuos custa **898** com base truncada + diffs — 49× mais barata, ficando abaixo dos 939 do libretto.

> As tabelas mais antigas acima usam uma aproximação de tokens `chars/4`; a comparação com libretto usa contagens reais de `tiktoken`. Rode novamente os números entre ferramentas no seu próprio ambiente antes de citar uma porcentagem.

### Tamanho do binário e memória

Medido em Apple M4 Pro, macOS 26.4.1. Os binários atuais foram compilados com `-Doptimize=ReleaseFast`.

| Binário | Tamanho atual |
|---|---:|
| `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) |

### O RSS permaneceu estável durante a migração para o Zig 0.16

Medido em relação ao build `v0.4.3` `ReleaseFast` atual com `/usr/bin/time -l`.

| Comando | RSS máximo médio `v0.4.3` |
|---|---:|
| `kuri-fetch --version` | ~2.45 MiB |
| `kuri-browse --version` | ~2.45 MiB |
| `kuri-fetch --quiet --dump markdown http://example.com/` | ~9.17 MiB |

## O Problema

Categorias