Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
kuri — Автоматизация браузера, веб-краулинг и управление устройствами iOS и Android для AI-агентов. Написанные на Zig токеноэффективные CDP-снимки, запись HAR, нативный клиент wire-протокола adb и автономный загрузчик. | Kitploit
Инструменты/GitHubGitHub/justrach/kuri
Сбор информацииВеб-безопасностьТестирование на ПроникновениеМобильная безопасностьКраулер
GitHubjustrach/kuri

kuri

Автоматизация браузера, веб-краулинг и управление устройствами iOS и Android для AI-агентов. Написанные на Zig токеноэффективные CDP-снимки, запись HAR, нативный клиент wire-протокола adb и автономный загрузчик.

Репозиторий
350184411 дней назадПроверено Kitploit
Сайт

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
<p align="center">
  <img src="https://assets.kitploit.com/production/public/readmes/13639/7915bba5fb25229c11f59482cfcd4a0eaf2945ee066dbf5cec395df880b53268.png" alt="Kuri" width="200" />
</p>

<h1 align="center">Kuri 🌰</h1>

<p align="center">
  <a href="https://kuri.trilok.ai/download/latest.json"><img src="https://img.shields.io/badge/stable-v0.6.1-brightgreen?style=flat-square" alt="Stable release"></a>
  <a href="https://github.com/justrach/kuri/blob/main/LICENSE"><img src="https://img.shields.io/github/license/justrach/kuri?style=flat-square" alt="License"></a>
  <img src="https://img.shields.io/badge/zig-0.16.0-f7a41d?style=flat-square" alt="Zig">
  <img src="https://img.shields.io/badge/node__modules-0_files-brightgreen?style=flat-square" alt="node_modules">
  <img src="https://img.shields.io/badge/status-stable-brightgreen?style=flat-square" alt="status">
</p>

## Установка

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

macOS arm64/x86_64 и Linux x86_64/arm64. Единый бинарник, без runtime-зависимостей.

Прямые загрузки: [macOS arm64](https://kuri.trilok.ai/download/v0.6.1/kuri-v0.6.1-aarch64-macos.tar.gz) · [macOS x86_64](https://kuri.trilok.ai/download/v0.6.1/kuri-v0.6.1-x86_64-macos.tar.gz) · [Linux x86_64](https://kuri.trilok.ai/download/v0.6.1/kuri-v0.6.1-x86_64-linux.tar.gz) · [Linux arm64](https://kuri.trilok.ai/download/v0.6.1/kuri-v0.6.1-aarch64-linux.tar.gz)

---

**Автоматизация браузера и веб-краулинг для AI-агентов. Написан на Zig. Без Node.js.**

Автоматизация через CDP · A11y-снимки · Запись HAR · Автономный загрузчик · Интерактивный терминальный браузер · Агентный CLI · Тестирование безопасности · Управление устройствами iOS + Android

[Быстрый старт](#-quick-start) · [Бенчмарки](#-benchmarks) · [kuri-agent](#-kuri-agent) · [Тестирование безопасности](#-security-testing) · [API](#-http-api) · [Навыки](#-skills) · [Changelog](https://github.com/justrach/kuri/blob/main/CHANGELOG.md)

> **Почему команды переходят на 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](https://github.com/saffron-health/libretto) (Playwright + Node) — ближайший конкурент по стоимости токенов на шаг. Измерено в прямом сравнении 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 мс против 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 |

## Проблема

Каждый инструмент автоматизации браузера тянет за собой Playwright (~300 МБ), среду выполнения Node.js и каскад npm-зависимостей. Вашему AI-агенту нужно всего лишь прочитать страницу, нажать кнопку и двигаться дальше.
**Kuri — это единый бинарник на Zig.** Четыре режима, ноль runtime:

```
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`.
Загрузки происходят из самостоятельно управляемой ветки `release-channel` Kuri. Бинарные файлы macOS локально подписаны сертификатом Developer ID. Ресурсы GitHub Release зеркалируют эти же tarball-архивы.

### bun / npm

```sh
bun install -g kuri-agent
# or: npm install -g kuri-agent
```

Скачивает правильный нативный бинарный файл для вашей платформы во время установки.

### Канал релизов

Стабильные бинарные файлы Kuri находятся в ветке `release-channel` и раздаются напрямую через raw-URL-адреса GitHub.

- Стабильный установщик: `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`

### Вручную

Скачайте tarball для вашей платформы из [манифеста стабильного релиза](https://raw.githubusercontent.com/justrach/kuri/release-channel/stable/latest.json) или со [страницы GitHub Releases](https://github.com/justrach/kuri/releases) и распакуйте его в ваш `$PATH`.

URL-адрес стабильной установки:

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

Манифест включает точные URL-адреса ресурсов и контрольные суммы SHA-256 для `aarch64-linux`, `x86_64-linux`, `aarch64-macos` и `x86_64-macos`.

### Поддержка платформ

| Платформа | Статус |
|---|---|
| macOS (`aarch64`, `x86_64`) | Готовые бинарные файлы, подписанные + нотариально заверенные |
| Linux (`aarch64`, `x86_64`) | Готовые бинарные файлы |
| Windows (`x86_64`) | **Экспериментально — только кросс-компиляция.** `zig build -Dtarget=x86_64-windows-gnu` проверяется в CI, но автоматизация Chrome, демонизация, завершение по сигналу, запись HAR и файловое хранилище аутентификации — всё это заглушено с `error.UnsupportedOnWindows` во время выполнения. Используйте **WSL2**, если вам нужен реальный набор функций. Отслеживается в [#153](https://github.com/justrach/kuri/issues/153). |

Kuri опирается на примитивы POSIX (`fork`, `clock_gettime`, необработанные сокеты) в нескольких местах, поэтому полноценный нативный порт для Windows — это реальная работа. Базовый уровень компиляции выше позволяет работать путям `--version`/`--help` и чисто in-memory операциям; сложные части (Chrome, сокеты, daemonize) требуют реальных реализаций Win32, прежде чем они покинут список заглушек. Если вы хотите взяться за что-то из этого, поставьте +1 в [#153](https://github.com/justrach/kuri/issues/153) или откройте PR.

### Сборка из исходного кода

Требуется [Zig ≥ 0.16.0](https://ziglang.org/download/).

```bash
git clone https://github.com/justrach/kuri.git
cd kuri
zig build -Doptimize=ReleaseFast
# Binaries in zig-out/bin/: kuri  kuri-agent  kuri-fetch  kuri-browse
```

---

## ⚡ Быстрый старт

**Требования:** [Zig ≥ 0.16.0](https://ziglang.org/download/) · Chrome/Chromium (для режима CDP)

```bash
git clone https://github.com/justrach/kuri.git
cd kuri

zig build              # build everything
zig build test         # run 252+ tests

# CDP mode — launches Chrome automatically
./zig-out/bin/kuri

# Standalone mode — no Chrome needed
./zig-out/bin/kuri-fetch https://example.com

# Interactive browser — browse from your terminal
./zig-out/bin/kuri-browse https://example.com

# Experimental standalone browser runtime — separate build, not production
(cd kuri-browser && zig build run -- render https://example.com)
(cd kuri-browser && zig build run -- bench --offline)
```

### Первый запуск, кратчайший путь

```bash
# start the server; if CDP_URL is unset, kuri launches managed Chrome for you
./zig-out/bin/kuri

# discover tabs from that managed browser
curl -s http://127.0.0.1:8080/discover

# inspect the discovered tab list
curl -s http://127.0.0.1:8080/tabs
```

### Цикл агента с приоритетом сессии

Для HTTP-использования в стиле агента предпочитайте заголовок сессии вместе с `/tab/new`, `/page/info` и `/snapshot` вместо повторения `tab_id` при каждом вызове.

```bash
SESSION=hn-demo
BASE=http://127.0.0.1:8080

curl -s -H "X-Kuri-Session: $SESSION" \
  "$BASE/tab/new?url=https%3A%2F%2Fnews.ycombinator.com"

curl -s -H "X-Kuri-Session: $SESSION" "$BASE/page/info"
SNAP=$(curl -s -H "X-Kuri-Session: $SESSION" "$BASE/snapshot?filter=interactive&format=compact")
MORE_REF=$(printf '%s' "$SNAP" | python3 -c 'import re,sys; print(re.search(r"\"More\" @(e\\d+)", sys.stdin.read()).group(1))')
curl -s -H "X-Kuri-Session: $SESSION" "$BASE/action?action=click&ref=$MORE_REF"
curl -s -H "X-Kuri-Session: $SESSION" "$BASE/page/info"
```

Также имеется тонкая экспериментальная обёртка в `tools/kuri_harness.py`, если вы хотите использовать Python-хелперы поверх того же HTTP-интерфейса.

Если у вас уже запущен Chrome с удалённой отладкой, установите `CDP_URL` в WebSocket- или HTTP-эндпоинт:

```bash
CDP_URL=ws://127.0.0.1:9222/devtools/browser/... ./zig-out/bin/kuri
# or
CDP_URL=http://127.0.0.1:9222 ./zig-out/bin/kuri
```

### Просмотр vercel.com в 4 командах

```bash
# 1. Discover Chrome tabs
curl -s http://localhost:8080/discover
# → {"discovered":1,"total_tabs":1}

# 2. Get tab ID
curl -s http://localhost:8080/tabs
# → [{"id":"ABC123","url":"chrome://newtab/","title":"New Tab"}]

# 3. Navigate
curl -s "http://localhost:8080/navigate?tab_id=ABC123&url=https://vercel.com"

# 4. Get accessibility snapshot (token-optimized for LLMs)
curl -s "http://localhost:8080/snapshot?tab_id=ABC123&filter=interactive"
# → [{"ref":"e0","role":"link","name":"VercelLogotype"},
#    {"ref":"e1","role":"button","name":"Ask AI"}, ...]
```

---

## 🌐 HTTP API

Все эндпоинты возвращают JSON. Опциональная аутентификация через переменную окружения `KURI_SECRET`. **135 эндпоинтов** — полный паритет с agent-browser и browser-use.

### Core

| Path | Description |
|------|-------------|
| `GET /health` | Статус сервера, количество вкладок, версия |
| `GET /tabs` | Список всех зарегистрированных вкладок |
| `GET /discover` | Автообнаружение вкладок Chrome через CDP |
| `GET /tab/current` | Получить или установить текущую вкладку для `X-Kuri-Session` |
| `GET /page/info` | Актуальные URL/заголовок/ready-state/viewport/scroll для активной вкладки |
| `GET /page/state` | Компактное наблюдение за страницей: url, title, scroll%, viewport, количество форм/ссылок/изображений/полей ввода |
| `POST /batch` | Выполнить несколько команд за один HTTP-вызов — возвращает массив результатов |
| `GET /browdie` | 🌰 (пасхалка) |

### Browser Control

| Path | Params | Description |
|------|--------|-------------|
| `GET /navigate` | `tab_id`, `url` | Перейти по URL во вкладке |
| `GET /tab/new` | `url`, `activate`, `wait` | Создать новую вкладку и опционально гидратировать/сделать текущей |
| `GET /tab/close` | `tab_id` | Закрыть вкладку |
| `GET /window/new` | `url`, `activate`, `wait` | Создать новое окно/цель вкладки |
| `GET /snapshot` | `tab_id`, `filter`, `format` | Снимок дерева доступности с ссылками `eN`. Используйте `filter=interactive&format=compact` для низкотокенных агентных циклов. |
| `GET /text` | `tab_id` | Извлечь текст страницы |
| `GET /screenshot` | `tab_id`, `format`, `quality`, `save` | Сделать скриншот (base64); `save=true` записывает PNG в `STATE_DIR/screenshots` и возвращает `{path,bytes}` вместо этого |
| `GET /screenshot/annotated` | `tab_id` | Скриншот с пронумерованными метками элементов |
| `GET /screenshot/diff` | `tab_id`, `baseline` | Визуальный diff между текущим и базовым скриншотами |
| `GET /action` | `tab_id`, `ref`, `action`, `value` | Click/type/fill/select/scroll/hover/dblclick/check/uncheck/blur по ref |
| `GET /evaluate` | `tab_id`, `expression` | Выполнить JavaScript |
| `GET /evalhandle` | `tab_id`, `expression` | Выполнить JS, вернуть handle objectId (не значение) |
| `GET /close` | `tab_id` | Закрыть вкладку + очистка |
| `GET /bringtofront` | `tab_id` | Вывести вкладку на передний план |

### Actions

| Path | Params | Description |
|------|--------|-------------|
| `GET /clear` | `ref` | Очистить значение поля ввода |
| `GET /selectall` | `ref` | Выделить весь текст в input/contenteditable |
| `GET /setvalue` | `ref`, `value` | Установить значение input напрямую (в обход событий клавиш) |
| `GET /dispatch` | `ref`, `type` | Отправить пользовательское DOM-событие на элемент |
| `GET /boundingbox` | `ref` | Получить ограничивающий прямоугольник элемента (x, y, width, height, centerX, centerY) |
| `GET /getattribute` | `ref`, `name` | Получить атрибут элемента по имени |
| `GET /inputvalue` | `ref` | Получить текущее значение элемента ввода |
| `GET /element/state` | `ref`, `check` | Быстрый boolean: `exists`, `visible`, `enabled`, `checked` |
| `GET /find-element` | `text`/`role`/`label`/`placeholder`/`testid` | Семантический локатор — найти элемент без снимка |
| `GET /highlight` | `ref` или `selector` | Подсветить элемент оверлеем |

### Mouse & Touch

| Path | Params | Description |
|------|--------|-------------|
| `GET /mouse/move` | `x`, `y` | Переместить мышь в координаты |
| `GET /mouse/down` | `x`, `y`, `button` | Нажатие кнопки мыши |
| `GET /mouse/up` | `x`, `y`, `button` | Отпускание кнопки мыши |
| `GET /mouse/wheel` | `x`, `y`, `deltaX`, `deltaY` | Прокрутка колесом мыши |
| `GET /tap` | `x`, `y` | Касание (touchStart + touchEnd) |
| `GET /swipe` | `startX`, `startY`, `endX`, `endY` | Жест свайпа касанием |
| `GET /drag` | `src_ref`, `tgt_ref` | Перетащить элемент к цели |

### Keyboard

| Path | Params | Description |
|------|--------|-------------|
| `GET /keyboard/type` | `tab_id`, `text` | Ввести текст через события клавиш |
| `GET /keyboard/inserttext` | `tab_id`, `text` | Вставить текст напрямую |
| `GET /keydown` | `tab_id`, `key` | Событие нажатия клавиши |
| `GET /keyup` | `tab_id`, `key` | Событие отпускания клавиши |

### Content Extraction

| Path | Description |
|------|-------------|
| `GET /markdown` | Преобразовать страницу в Markdown |
| `GET /links` | Извлечь все ссылки |
| `GET /dom/query` | Запрос по CSS-селектору |
| `GET /dom/html` | Получить HTML элемента |
| `GET /dom/attributes` | Получить атрибуты элемента |
| `GET /pdf` | Напечатать страницу в PDF |
| `GET /find` | Поиск текста на странице |

### Waiting

| Path | Params | Description |
|------|--------|-------------|
| `GET /wait` | `selector`, `text`, `url`, `state`, `visible`, `timeout` | Ожидать селектор/текст/шаблон URL/networkidle/состояние загрузки |
| `GET /wait/function` | `expression`, `timeout` | Ожидать, пока произвольное JS-выражение станет истинным |
| `GET /wait/download` | `timeout` | Ожидать завершения загрузки файла |

### Dialog Handling

| Path | Description |
|------|-------------|
| `GET /dialog/auto` | Автообработка всех JS-диалогов (принять или отклонить) |
| `GET /dialog/accept` | Принять текущий диалог (с опциональным текстом prompt) |
| `GET /dialog/dismiss` | Отклонить текущий диалог |

### Network & HAR

| Path | Description |
|------|-------------|
| `GET /har/start` | Начать запись сетевого трафика |
| `GET /har/stop` | Остановить + вернуть HAR 1.2 JSON |
| `GET /har/status` | Состояние записи + количество записей |
| `GET /har/replay` | Карта API со сниппетами кода curl/fetch/python |
| `GET /cookies` | Получить cookies |
| `GET /cookies/set` | Установить cookies |
| `GET /cookies/delete` | Удалить cookies |
| `GET /cookies/clear` | Очистить все cookies |
| `GET /headers` | Установить пользовательские заголовки запросов |
| `GET /intercept/start` | Начать перехват запросов |
| `GET /intercept/stop` | Остановить перехват запросов |
| `GET /intercept/requests` | Список перехваченных запросов |
| `GET /request/detail` | Получить тело ответа для ID запроса |
| `GET /response/body` | Запросить URL и вернуть тело ответа |
| `GET /network` | Статистика сетевого трафика |
| `GET /download` | Инициировать загрузку файла |

### Navigation & State

| Path | Description |
|------|-------------|
| `GET /back` | Назад в браузере |
| `GET /forward` | Вперёд в браузере |
| `GET /reload` | Перезагрузить страницу |
| `GET /stop` | Остановить загрузку страницы |
| `GET /pushstate` | SPA-навигация через history.pushState |
| `GET /storage/local` | Получить/установить localStorage |
| `GET /storage/session` | Получить/установить sessionStorage |
| `GET /storage/local/clear` | Очистить localStorage |
| `GET /storage/session/clear` | Очистить sessionStorage |
| `GET /session/save` | Сохранить сессию браузера |
| `GET /session/load` | Восстановить сессию браузера |
| `GET /session/list` | Список сохранённых сессий |
| `GET /setcontent` | Установить HTML страницы напрямую (POST) |

### Auth Profiles

| Path | Description |
|------|-------------|
| `GET /auth/profile/save` | Сохранить cookies + storage как именованный профиль аутентификации |
| `GET /auth/profile/load` | Восстановить именованный профиль аутентификации во вкладке |
| `GET /auth/profile/list` | Список сохранённых профилей аутентификации |
| `GET /auth/profile/delete` | Удалить сохранённый профиль аутентификации |
| `GET /auth/extract` | Извлечь токены аутентификации (JWT, cookies, заголовки) |
| `GET /set/credentials` | Установить учётные данные HTTP basic auth |

В macOS секреты профилей аутентификации хранятся в Keychain пользователя.

### Emulation

| Path | Params | Description |
|------|--------|-------------|
| `GET /emulate` | device type, screen size | Эмуляция устройства |
| `GET /set/viewport` | `width`, `height` | Установить размер viewport |
| `GET /set/useragent` | `ua` | Установить user agent |
| `GET /set/media` | `media` | Эмулировать тип медиа |
| `GET /set/offline` | `offline` | Переключить офлайн-режим |
| `GET /geolocation` | `lat`, `lng` | Переопределить геолокацию |
| `GET /timezone` | `timezone` | Переопределить часовой пояс (например, `America/New_York`) |
| `GET /locale` | `locale` | Переопределить локаль (например, `en-US`) |
| `GET /permissions` | `name`, `state` | Предоставить/отозвать разрешения (geolocation, notifications, clipboard) |

### Scripts & Injection

| Path | Description |
|------|-------------|
| `GET /script/inject` | Внедрить JavaScript в страницу (сохраняется при навигации) |
| `GET /initscript/remove` | Удалить ранее внедрённый init-скрипт |
| `GET /addstyle` | Внедрить CSS-таблицу стилей |
| `GET /expose` | Открыть именованную функцию в JS-контексте страницы |

### React Inspection

| Path | Description |
|------|-------------|
| `GET /react/tree` | Дерево React-компонентов через хук DevTools |
| `GET /react/inspect` | Props и state React-компонента |
| `GET /react/renders` | Отслеживание рендеров React (start/stop) |
| `GET /react/suspense` | Статус границы React Suspense |

### Recording & Performance

| Path | Description |
|------|-------------|
| `GET /recording/start` | Записывать действия пользователя (click, input, navigate) |
| `GET /recording/stop` | Остановить запись + вернуть журнал действий |
| `GET /vitals` | Core Web Vitals (LCP, CLS, FID, TTFB, FCP, domInteractive) |
| `GET /perf/lcp` | Время Largest Contentful Paint |
| `GET /trace/start` | Начать трассировку производительности |
| `GET /trace/stop` | Остановить трассировку |
| `GET /profiler/start` | Запустить JS-профайлер |
| `GET /profiler/stop` | Остановить профайлер |

### Debugging

| Path | Description |
|------|-------------|
| `GET /debug/enable` | Включить внутристраничный debug HUD и опциональный режим заморозки |

---

[Read more](https://github.com/justrach/kuri)
Скачать инструмент