Retour aux mises à jour
New releaseJul 26, 2026

kuri v0.4.14

Automatisation de navigateur, exploration web et contrôle de périphériques iOS + Android pour agents IA. Natif Zig, instantanés CDP économes en tokens, enregistrement HAR, client natif du protocole filaire adb, et un récupérateur autonome.

Partager

Kuri

Kuri 🌰

Stable release License Zig node_modules status

Installation```sh

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

macOS arm64/x86_64 et Linux x86_64/arm64. Binaire unique, aucune dépendance d'exécution.

Téléchargements directs : [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)

---

**Automatisation de navigateur et exploration web pour agents IA. Écrit en Zig. Zéro Node.js.**

Automatisation CDP · Instantanés A11y · Enregistrement HAR · Récupérateur autonome · Navigateur interactif dans le terminal · CLI agentique · Tests de sécurité · Contrôle d'appareils iOS + Android

[Démarrage rapide](#-quick-start) · [Benchmarks](#-benchmarks) · [kuri-agent](#-kuri-agent) · [Tests de sécurité](#-security-testing) · [API](#-http-api) · [Compétences](#-skills) · [Changelog](https://github.com/justrach/kuri/blob/main/CHANGELOG.md)

> **Pourquoi les équipes passent à Kuri :** les builds `ReleaseFast` actuels pour Apple Silicon restent sous 2 Mo par binaire, et une nouvelle exécution Google Flights le 2026-04-23 a mesuré **3,392 tokens** pour une boucle complète `kuri-agent` (`go→snap→click→snap→eval`). Les écarts entre outils doivent être re-mesurés dans le même environnement avant de citer un pourcentage.

---

## Pourquoi Kuri gagne pour les agents

La plupart des outils de navigateur ont été conçus pour les ingénieurs QA. Kuri est conçu pour les boucles d'agents : lire la page, garder un coût en tokens faible, agir sur des références stables, et passer à la suite.

- **135 points de terminaison HTTP** — parité complète avec agent-browser et browser-use, de l'inspection React aux Core Web Vitals.
- **7 à 12 % de tokens en moins** qu'agent-browser sur des pages réelles grâce au format de référence `@eN` et au rendu sans préfixe.
- **Observations 44x plus légères** avec `/page/state` (48 tokens) contre un instantané complet (2,124 tokens) pour la même page Google Flights.
- **Exécution par lots** — `POST /batch` envoie N commandes en un seul appel HTTP, éliminant N-1 allers-retours et N-1 tours LLM.
- **Compatible React** — des événements souris CDP fiables et des événements clavier par caractère déclenchent les `onClick` et `onChange` de React 18/19.

### Tokens d'instantané : Google Flights `SIN → TPE`

Nouvelle exécution le 2026-05-24 dans cet espace de travail, mesurée avec `wc -c` et l'approximation `chars/4`.

| Outil / Mode | Chars | ~Tokens | Note |
|---|---:|---:|---|
| `kuri snap` (complet) | 8,499 | **2,124** | Tous les nœuds + références interactives |
| `kuri snap` (interactif uniquement) | ~3,000 | **~750** | Idéal pour les boucles d'agents |
| `kuri /page/state` | 190 | **48** | Observation légère (url, titre, scroll%, compteurs) |
| agent-browser snap (estimé) | ~9,183 | **~2,295** | Surcoût du format `[ref=e0]` |

### Efficacité des tokens : kuri vs agent-browser

| Page | Tokens kuri | Tokens agent-browser | Économies |
|---|---:|---:|---|
| example.com | 40 | 35 | -13 % (page triviale, agent-browser ignore la racine) |
| Hacker News | 386 | ~440 | **12 % de moins** |
| Google Flights SIN→TPE | 2,124 | ~2,295 | **7 % de moins** |

Les économies proviennent du format compact de kuri :
- Références `@e0` (3 caractères) contre `[ref=e0]` (9 caractères)
- Pas de préfixe `- ` par ligne (économise 2 caractères × nombre de lignes)
- Même indentation, même filtrage des nœuds

### Coût du workflow complet : `go → snap → click → snap → eval`

| Outil | Tokens par cycle |
|---|---:|
| **kuri-agent** | **~3,400** |
| Avec `/page/state` au lieu du second snap | **~1,700** |
| Avec `POST /batch` (tout en un seul appel) | **~1,700** (mêmes tokens, 1 appel HTTP au lieu de 5) |

### kuri vs libretto

[libretto](https://github.com/saffron-health/libretto) (Playwright + Node) est le concurrent le plus proche sur le coût de tokens par étape. Mesuré côte à côte le 2026-07-04 — même Chrome, même onglet, de vrais comptages `tiktoken` `o200k_base` (méthodologie complète et reproduction : **[benchmarks/libretto_comparison.md](https://github.com/justrach/kuri/blob/main/benchmarks/libretto_comparison.md)**). La répartition honnête :

| Axe | Gagnant | Détail |
|---|---|---|
| Latence par appel | **kuri** | 4–117 ms contre 1,344–1,500 ms (**13–376× plus rapide** — serveur persistant contre Node par commande) |
| Tokens d'instantané, page typique | **kuri** | simple 61 contre 151 (2.5×), article 265 contre 363 (1.37×) — grammaire plus compacte |
| Tokens d'instantané, grande liste | partagé | kuri par défaut 4,424 contre 813 — kuri émet les 259 références, libretto tronque par défaut. Avec `limit=5`, kuri rend 555 tokens (**1.46× en dessous de libretto**), 34 références + marqueurs `… +45 more` |
| Trajectoire (flux, 9 clics) | **kuri**, de justesse | 898 contre 939 tokens (base `limit=5` + boucle de diff contre boucle exec) — parité à léger avantage ; la perte de 5.1× du matin provenait de la base non tronquée |
| Exécutions répétées | **libretto** | compile les trajectoires en script Playwright → re-exécutions à 0 token ; kuri repaye la boucle à chaque exécution |

**Ce que kuri a tiré de l'étude de libretto** (tout livré dans cette version) : une boucle diff-first (`take_snapshot_diff`, ~38 tokens/étape) ; un diff adaptatif qui retombe sur un instantané complet avec un en-tête `! page replaced` lors d'une navigation ; des lignes de suppression ne contenant que l'identité ; des captures d'écran écrites sur disque (le chemin est renvoyé, les octets n'entrent jamais dans le contexte) ; `get_page_state` via MCP ; et — après avoir réécrit `parseA11yNodes` comme un véritable parcours arborescent DFS — la **troncature de liste opt-in** (`/snapshot?limit=N`, une ligne `… +K more` par exécution plafonnée), la **re-capture ciblée** (`scope=@ref`) et l'**indentation de hiérarchie**, également exposées sous forme de `uid`/`limit` sur MCP `take_snapshot`. La trajectoire de flux à 9 clics qui coûtait 44,285 tokens avec des re-snapshots complets naïfs coûte **898** avec une base tronquée + diffs — 49× moins chère, et devant les 939 de libretto.

> Les tableaux plus anciens ci-dessus utilisent une approximation de tokens `chars/4` ; la comparaison libretto utilise de vrais comptages `tiktoken`. Re-mesurez les chiffres entre outils dans votre propre environnement avant de citer un pourcentage.

### Taille des binaires et mémoire

Mesuré sur Apple M4 Pro, macOS 26.4.1. Les binaires actuels ont été compilés avec `-Doptimize=ReleaseFast`.

| Binaire | Taille actuelle |
|---|---:|
| `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) |

### Le RSS est resté stable lors de la migration vers Zig 0.16

Mesuré sur le build `ReleaseFast` `v0.4.3` actuel avec `/usr/bin/time -l`.

Catégories