
kuri v0.4.14
Автоматизация браузера, веб-скрапинг и управление устройствами iOS и Android для AI-агентов. Zig-native, эффективные по токенам CDP-снимки, запись HAR, нативный клиент adb wire-protocol и автономный fetcher.
Kuri 🌰
Установка
curl -fsSL https://kuri.trilok.ai/download | sh
macOS arm64/x86_64 и Linux x86_64/arm64. Единый бинарник, без runtime-зависимостей.
Прямые загрузки: macOS arm64 · macOS x86_64 · Linux x86_64 · Linux arm64
Автоматизация браузера и веб-краулинг для AI-агентов. Написан на Zig. Без Node.js.
Автоматизация через CDP · A11y-снимки · Запись HAR · Автономный загрузчик · Интерактивный терминальный браузер · Агентный CLI · Тестирование безопасности · Управление устройствами iOS + Android
Быстрый старт · Бенчмарки · kuri-agent · Тестирование безопасности · API · Навыки · Changelog
Почему команды переходят на Kuri: текущие сборки
ReleaseFastдля Apple Silicon остаются менее 2 МБ на бинарник, а свежий повторный запуск Google Flights 2026-04-23 показал 3 392 токена для полного циклаkuri-agent(go→snap→click→snap→eval). Кросс-инструментальные различия следует перепроверять в том же окружении, прежде чем указывать процент.
Почему Kuri выигрывает для агентов
Большинство браузерных инструментов создавались для QA-инженеров. Kuri создан для агентных циклов: прочитать страницу, сохранить низкую стоимость токенов, действовать по стабильным ссылкам и двигаться дальше.
- 135 HTTP-эндпоинтов — полный паритет с agent-browser и browser-use, от инспекции React до Core Web Vitals.
- На 7-12% меньше токенов, чем agent-browser на реальных страницах, благодаря формату ссылок
@eNи рендерингу без префиксов. - В 44 раза легче наблюдения с
/page/state(48 токенов) против полного снимка (2 124 токена) для той же страницы Google Flights. - Пакетное выполнение —
POST /batchотправляет N команд за один HTTP-вызов, устраняя N-1 круговых обменов и N-1 ходов LLM. - Совместимость с React — доверенные CDP-события мыши и посимвольные события клавиатуры вызывают
onClickиonChangeв React 18/19.
Токены снимка: Google Flights SIN → TPE
Свежий повторный запуск 2026-05-24 в этом рабочем пространстве, измерено с помощью wc -c и аппроксимации chars/4.
| Инструмент / Режим | Символы | ~Токены | Примечание |
|---|---|---|---|
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] |
Эффективность токенов: kuri против agent-browser
| Страница | Токены kuri | Токены agent-browser | Экономия |
|---|---|---|---|
| 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
| Инструмент | Токены за цикл |
|---|---|
| kuri-agent | ~3 400 |
С /page/state вместо второго snap | ~1 700 |
С POST /batch (всё в одном вызове) | ~1 700 (те же токены, 1 HTTP-вызов вместо 5) |
kuri против libretto
libretto (Playwright + Node) — ближайший конкурент по стоимости токенов на шаг. Измерено в прямом сравнении 2026-07-04 — тот же Chrome, та же вкладка, реальные подсчёты tiktoken o200k_base (полная методология и воспроизведение: benchmarks/libretto_comparison.md). Честное разделение:
| Ось | Победитель | Детали |
|---|---|---|
| Задержка на вызов | kuri | 4–117 мс против 1 344–1 500 мс (в 13–376 раз быстрее — постоянный сервер против Node-на-команду) |
| Токены снимка, типичная страница | kuri | простая 61 против 151 (2,5×), статья 265 против 363 (1,37×) — более плотная грамматика |
| Токены снимка, большой список | разделение | kuri по умолчанию 4 424 против 813 — kuri выдаёт все 259 ссылок, libretto по умолчанию усекает. С limit=5 kuri рендерит 555 токенов (в 1,46 раза меньше libretto), 34 ссылки + маркеры … +45 more |
| Траектория (лента, 9 кликов) | kuri, едва | 898 против 939 токенов (база limit=5 + цикл diff против цикла exec) — паритет или небольшое преимущество; утреннее поражение в 5,1× было из-за неусечённой базы |
| Повторные запуски | libretto | компилирует траектории в скрипт Playwright → воспроизведение за 0 токенов; kuri заново платит за цикл при каждом запуске |
Что kuri получил от изучения libretto (всё вошло в этот релиз): цикл с приоритетом diff (take_snapshot_diff, ~38 токенов/шаг); адаптивный diff, который откатывается к полному снимку с заголовком ! page replaced при навигации; строки удаления только по идентичности; скриншоты, записываемые на диск (возвращается путь, байты никогда не попадают в контекст); get_page_state через MCP; и — после переписывания parseA11yNodes как настоящего обхода дерева в DFS — опциональное усечение списка (/snapshot?limit=N, одна строка … +K more на каждый усечённый запуск), ограниченный повторный захват (scope=@ref) и иерархическая индентация, также доступные как uid/limit в MCP take_snapshot. Траектория ленты из 9 кликов, которая стоила 44 285 токенов при наивных полных повторных снимках, стоит 898 с усечённой базой + diff — в 49 раз дешевле, и превосходит 939 у libretto.
Более старые таблицы выше используют аппроксимацию токенов
chars/4; сравнение с 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 |