Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
kuri — AIエージェント向けのブラウザ自動化、Webクローリング、iOS + Androidデバイス制御。Zigネイティブでトークン効率の高いCDPスナップショット、HAR記録、ネイティブadbワイヤープロトコルクライアント、およびスタンドアロンフェッチャー。 | Kitploit
ツール/GitHubGitHub/justrach/kuri
情報収集ウェブセキュリティペネトレーションテストモバイルセキュリティクローラー
GitHubjustrach/kuri

kuri

AIエージェント向けのブラウザ自動化、Webクローリング、iOS + Androidデバイス制御。Zigネイティブでトークン効率の高いCDPスナップショット、HAR記録、ネイティブ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。単一バイナリ、ランタイム依存なし。

直接ダウンロード: [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 エージェント向けのブラウザ自動化と Web クローリング。Zig で書かれています。Node.js は不要。**

CDP 自動化 · A11y スナップショット · HAR 記録 · スタンドアロンフェッチャー · インタラクティブ端末ブラウザ · エージェント CLI · セキュリティテスト · iOS + Android デバイス制御

[クイックスタート](#-quick-start) · [ベンチマーク](#-benchmarks) · [kuri-agent](#-kuri-agent) · [セキュリティテスト](#-security-testing) · [API](#-http-api) · [スキル](#-skills) · [変更履歴](https://github.com/justrach/kuri/blob/main/CHANGELOG.md)

> **チームが Kuri に乗り換える理由:** 現在の Apple Silicon `ReleaseFast` ビルドはバイナリあたり 2 MB 未満に収まり、2026-04-23 に再実行した Google Flights の計測では、完全な `kuri-agent` ループ(`go→snap→click→snap→eval`)で **3,392 トークン**でした。ツール間の差分をパーセンテージで引用する前に、同じ環境で再実行してください。

---

## エージェントにとって Kuri が優れている理由

ほとんどのブラウザツールは QA エンジニア向けに作られています。Kuri はエージェントループ向けに作られています。ページを読み、トークンコストを低く抑え、安定した参照に対して操作し、次へ進みます。

- **135 個の HTTP エンドポイント** — React の検査から Core Web Vitals まで、agent-browser および browser-use と完全な同等性。
- 実際のページで agent-browser より **7~12% 少ないトークン**。`@eN` 参照形式とゼロプレフィックスレンダリングのおかげです。
- 同じ Google Flights ページで、`/page/state`(48 トークン)は完全スナップショット(2,124 トークン)より **44 倍軽量な観測**。
- **バッチ実行** — `POST /batch` は N 個のコマンドを 1 回の HTTP 呼び出しで送信し、N-1 回のラウンドトリップと N-1 回の LLM ターンを排除します。
- **React 互換** — 信頼された CDP マウスイベントと文字単位のキーイベントが React 18/19 の `onClick` と `onChange` を発火させます。

### スナップショットトークン: 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 vs 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 文字)vs `[ref=e0]`(9 文字)
- 行ごとの `- ` プレフィックスなし(2 文字 × 行数を節約)
- 同じインデント、同じノードフィルタリング

### 完全なワークフローコスト: `go → snap → click → snap → eval`

| ツール | サイクルあたりのトークン |
|---|---:|
| **kuri-agent** | **~3,400** |
| 2 回目の snap の代わりに `/page/state` を使用 | **~1,700** |
| `POST /batch` を使用(すべて 1 回の呼び出し) | **~1,700**(同じトークン、5 回ではなく 1 回の HTTP 呼び出し) |

### kuri vs 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 ms vs 1,344~1,500 ms(**13~376 倍高速** — 永続サーバー vs コマンドごとの Node) |
| スナップショットトークン、典型的なページ | **kuri** | シンプル 61 vs 151(2.5 倍)、記事 265 vs 363(1.37 倍) — より簡潔な文法 |
| スナップショットトークン、大きなリスト | 分割 | kuri デフォルト 4,424 vs 813 — kuri は 259 個の参照をすべて出力、libretto はデフォルトで切り捨て。`limit=5` では kuri は 555 トークン(**libretto より 1.46 倍少ない**)、34 個の参照 + `… +45 more` マーカー |
| トラジェクトリ(フィード、9 クリック) | **kuri**、わずかに | 898 vs 939 トークン(`limit=5` ベース + diff ループ vs exec ループ) — 同等からわずかな優位。朝の 5.1 倍の損失は切り捨てなしのベースでした |
| 繰り返し実行 | **libretto** | トラジェクトリを Playwright スクリプトにコンパイル → 0 トークンのリプレイ。kuri は毎回ループを再支払い |

**libretto の研究から kuri が得たもの**(すべて今回のリリースで出荷): diff 優先ループ(`take_snapshot_diff`、~38 トークン/ステップ)。ナビゲーション時に `! page replaced` ヘッダー付きで完全スナップショットにフォールバックする適応型 diff。ID のみの削除行。ディスクに書き込まれるスクリーンショット(パスが返され、バイトはコンテキストに入らない)。MCP 上の `get_page_state`。そして — `parseA11yNodes` を真の DFS ツリーウォークとして書き直した後 — **オプトインのリスト切り捨て**(`/snapshot?limit=N`、上限付き実行ごとに 1 行の `… +K more`)、**スコープ付き再キャプチャ**(`scope=@ref`)、**階層インデント**。これらは MCP `take_snapshot` の `uid`/`limit` としても公開されています。素朴な完全再スナップショットで 44,285 トークンを要した 9 クリックのフィードトラジェクトリは、切り捨てベース + diff で **898** トークン — 49 倍安く、libretto の 939 を上回ります。

> 上記の古い表は `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 MB)、Node.js ランタイム、そして npm 依存関係の連鎖を引きずり込みます。あなたの AI エージェントはただページを読み、ボタンをクリックして、次へ進みたいだけです。
**Kuri は単一の Zig バイナリです。** 4 つのモード、ランタイムゼロ:

```
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` にインストールします。
ダウンロードは Kuri が自己管理する `release-channel` ブランチから行われます。macOS バイナリは Developer ID 証明書でローカル署名されています。GitHub Release のアセットはこれらの同一の tarball をミラーしています。

### bun / npm

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

インストール時に、お使いのプラットフォームに適したネイティブバイナリをダウンロードします。

### リリースチャネル

Kuri の安定版バイナリは `release-channel` ブランチにあり、GitHub の raw URL から直接配信されています。

- 安定版インストーラー: `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`

### 手動

[安定版リリースマニフェスト](https://raw.githubusercontent.com/justrach/kuri/release-channel/stable/latest.json) または [GitHub Releases ページ](https://github.com/justrach/kuri/releases) からお使いのプラットフォーム用の tarball をダウンロードし、`$PATH` に展開してください。

安定版インストール URL:

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

マニフェストには、`aarch64-linux`、`x86_64-linux`、`aarch64-macos`、`x86_64-macos` の正確なアセットURLとSHA-256チェックサムが含まれています。

### プラットフォームサポート

| プラットフォーム | ステータス |
|---|---|
| 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`、rawソケット)に依存しているため、完全なネイティブWindowsポートは本格的な作業です。上記のコンパイルレベルのベースラインにより、`--version`/`--help` パスと純粋なインメモリ操作は実行できますが、厄介な部分(Chrome、ソケット、デーモン化)はスタブリストから外す前に本物のWin32実装が必要です。これらのいずれかに取り組みたい場合は、[#153](https://github.com/justrach/kuri/issues/153) に +1 するか、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_id`を繰り返すのではなく、セッションヘッダーと`/tab/new`、`/page/info`、`/snapshot`の使用を推奨します。

```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"
```

同じ HTTP サーフェス上で Python ヘルパーを使いたい場合は、`tools/kuri_harness.py` に薄い実験用ラッパーもあります。

すでにリモートデバッグを有効にして 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
```

### 4つのコマンドでvercel.comを閲覧する

```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 と完全な同等性。

### コア

| Path | Description |
|------|-------------|
| `GET /health` | サーバーステータス、タブ数、バージョン |
| `GET /tabs` | 登録されているすべてのタブを一覧表示 |
| `GET /discover` | CDP 経由で Chrome タブを自動検出 |
| `GET /tab/current` | `X-Kuri-Session` の現在のタブを取得または設定 |
| `GET /page/info` | アクティブなタブのライブ URL/タイトル/ready-state/ビューポート/スクロール |
| `GET /page/state` | コンパクトなページ観察: url、title、scroll%、ビューポート、フォーム/リンク/画像/入力の数 |
| `POST /batch` | 1 回の HTTP 呼び出しで複数のコマンドを実行 — 結果の配列を返す |
| `GET /browdie` | 🌰 (イースターエッグ) |

### ブラウザ制御

| 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` 参照付きの A11y ツリースナップショット。低トークンのエージェントループには `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` | 現在とベースラインのスクリーンショット間の視覚的差分 |
| `GET /action` | `tab_id`, `ref`, `action`, `value` | ref による click/type/fill/select/scroll/hover/dblclick/check/uncheck/blur |
| `GET /evaluate` | `tab_id`, `expression` | JavaScript を実行 |
| `GET /evalhandle` | `tab_id`, `expression` | JS を実行し、objectId ハンドル (値ではない) を返す |
| `GET /close` | `tab_id` | タブを閉じる + クリーンアップ |
| `GET /bringtofront` | `tab_id` | タブを前面に移動 |

### アクション

| Path | Params | Description |
|------|--------|-------------|
| `GET /clear` | `ref` | 入力フィールドの値をクリア |
| `GET /selectall` | `ref` | input/contenteditable 内のすべてのテキストを選択 |
| `GET /setvalue` | `ref`, `value` | 入力値を直接設定 (キーイベントをバイパス) |
| `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` | クイックブール値: `exists`, `visible`, `enabled`, `checked` |
| `GET /find-element` | `text`/`role`/`label`/`placeholder`/`testid` | セマンティックロケーター — スナップなしで要素を検索 |
| `GET /highlight` | `ref` or `selector` | オーバーレイで要素をハイライト |

### マウス & タッチ

| 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` | 要素をターゲットにドラッグ |

### キーボード

| 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` | キーアップイベント |

### コンテンツ抽出

| Path | Description |
|------|-------------|
| `GET /markdown` | ページを Markdown に変換 |
| `GET /links` | すべてのリンクを抽出 |
| `GET /dom/query` | CSS セレクタークエリ |
| `GET /dom/html` | 要素の HTML を取得 |
| `GET /dom/attributes` | 要素の属性を取得 |
| `GET /pdf` | ページを PDF に印刷 |
| `GET /find` | ページ内テキスト検索 |

### 待機

| Path | Params | Description |
|------|--------|-------------|
| `GET /wait` | `selector`, `text`, `url`, `state`, `visible`, `timeout` | セレクター/テキスト/URL パターン/networkidle/load 状態を待機 |
| `GET /wait/function` | `expression`, `timeout` | 任意の JS 式が truthy になるのを待機 |
| `GET /wait/download` | `timeout` | ファイルダウンロードの完了を待機 |

### ダイアログ処理

| Path | Description |
|------|-------------|
| `GET /dialog/auto` | すべての JS ダイアログを自動処理 (accept または dismiss) |
| `GET /dialog/accept` | 現在のダイアログを accept (オプションのプロンプトテキスト付き) |
| `GET /dialog/dismiss` | 現在のダイアログを dismiss |

### ネットワーク & HAR

| Path | Description |
|------|-------------|
| `GET /har/start` | ネットワークトラフィックの記録を開始 |
| `GET /har/stop` | 停止 + HAR 1.2 JSON を返す |
| `GET /har/status` | 記録状態 + エントリ数 |
| `GET /har/replay` | curl/fetch/python コードスニペット付きの API マップ |
| `GET /cookies` | Cookie を取得 |
| `GET /cookies/set` | Cookie を設定 |
| `GET /cookies/delete` | Cookie を削除 |
| `GET /cookies/clear` | すべての Cookie をクリア |
| `GET /headers` | カスタムリクエストヘッダーを設定 |
| `GET /intercept/start` | リクエストインターセプトを開始 |
| `GET /intercept/stop` | リクエストインターセプトを停止 |
| `GET /intercept/requests` | インターセプトされたリクエストを一覧表示 |
| `GET /request/detail` | リクエスト ID のレスポンスボディを取得 |
| `GET /response/body` | URL をフェッチしてレスポンスボディを返す |
| `GET /network` | ネットワークトラフィック統計 |
| `GET /download` | ファイルダウンロードをトリガー |

### ナビゲーション & 状態

| Path | Description |
|------|-------------|
| `GET /back` | ブラウザの戻る |
| `GET /forward` | ブラウザの進む |
| `GET /reload` | ページをリロード |
| `GET /stop` | ページの読み込みを停止 |
| `GET /pushstate` | history.pushState による SPA ナビゲーション |
| `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) |

### 認証プロファイル

| Path | Description |
|------|-------------|
| `GET /auth/profile/save` | Cookie + ストレージを名前付き認証プロファイルとして保存 |
| `GET /auth/profile/load` | 名前付き認証プロファイルをタブに復元 |
| `GET /auth/profile/list` | 保存された認証プロファイルを一覧表示 |
| `GET /auth/profile/delete` | 保存された認証プロファイルを削除 |
| `GET /auth/extract` | 認証トークン (JWT、Cookie、ヘッダー) を抽出 |
| `GET /set/credentials` | HTTP ベーシック認証の資格情報を設定 |

macOS では、認証プロファイルのシークレットはユーザー Keychain に保存されます。

### エミュレーション

| Path | Params | Description |
|------|--------|-------------|
| `GET /emulate` | device type, screen size | デバイスエミュレーション |
| `GET /set/viewport` | `width`, `height` | ビューポートサイズを設定 |
| `GET /set/useragent` | `ua` | ユーザーエージェントを設定 |
| `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) |

### スクリプト & インジェクション

| Path | Description |
|------|-------------|
| `GET /script/inject` | ページに JavaScript を注入 (ナビゲーションをまたいで持続) |
| `GET /initscript/remove` | 以前に注入された init スクリプトを削除 |
| `GET /addstyle` | CSS スタイルシートを注入 |
| `GET /expose` | 名前付き関数をページ JS コンテキストに公開 |

### React 検査

| Path | Description |
|------|-------------|
| `GET /react/tree` | DevTools フック経由の React コンポーネントツリー |
| `GET /react/inspect` | React コンポーネントの props と state |
| `GET /react/renders` | React レンダートラッキング (start/stop) |
| `GET /react/suspense` | React Suspense バウンダリの状態 |

### 記録 & パフォーマンス

| 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` | プロファイラーを停止 |

### デバッグ

| Path | Description |
|------|-------------|
| `GET /debug/enable` | ページ内デバッグ HUD とオプションのフリーズモードを有効化 |
| `GET /debug/disable` | ページ内デバッグ HUD を無効化 |
| `GET /inspect` | 要素検査 |
| `GET /errors` | JS エラーを収集 |
| `GET /console` | コンソールログを読み取り |
| `GET /frames` | ページフレームを一覧表示 |
| `GET /frame` | 名前または URL で iframe コンテキストに切り替え |
| `GET /mainframe` | メインフレームに戻る |
| `GET /diff/snapshot` | このタブの前回の呼び出しに対するコンパクトな `+`/`~`/`-` 差分 — トークン効率の良いアクションループ (`/snapshot/changes` でエイリアス)。大量変更時は `! page replaced` ヘッダー付きの完全スナップショットにフォールバック。 |
| `GET /diff/url` | 2 つの URL を並べて比較 (navigate、snapshot、diff) |

### ストリーミング

| Path | Description |
|------|-------------|
| `GET /screencast/start` | 画面録画を開始 |
| `GET /screencast/stop` | 画面録画を停止 |
| `GET /video/start` | ビデオキャプチャを開始 |
| `GET /video/stop` | ビデオキャプチャを停止 |
| `GET /ws/start` | WebSocket トンネル開始 |
| `GET /ws/stop` | WebSocket トンネル停止 |

### エージェントフレンドリーなループ

最も摩擦の少ないサーバーループは:

1. `GET /tab/new?url=...`
2. `GET /page/state` (軽量) または `GET /snapshot?filter=interactive&format=compact` (完全)
3. `GET /action?action=click&ref=eN`
4. 繰り返し — または 1 回の呼び出しでマルチステップ操作を行うには `POST /batch` を使用

`url` および `expression` クエリパラメータはパーセントデコードされます。タブコンテキストをサーバー側で永続化するには `X-Kuri-Session: my-agent` を送信してください。
---

## 🧠 スキル

リポジトリにはユーザー拡張可能なスキル領域が含まれています:

- `skills/kuri-skill.md` はベースの Kuri HTTP エージェントスキル
- `skills/custom/` は独自のプロジェクト固有のスキル用に予約
- `skills/custom/hackernews-page-2.md` は具体的なカスタムスキルの例
- `.claude/skills/kuri-server/SKILL.md` は Claude スタイルのリポジトリスキル用に同期を保つ

ベーススキルは、どのブラウザパスを使用すべきかも説明するようになりました:

- `kuri` HTTP API: セッション、スナップショット、アクション、HAR、Cookie、スクリーンショットを備えた本番 Chrome/CDP 自動化
- `kuri-fetch`: スタンドアロンの Chrome 不要のフェッチ/テキスト抽出
- `kuri-browse`: インタラクティブなターミナルブラウジング
- `kuri-agent`: Kuri サーバーに対するスクリプト可能な CLI 自動化
- `kuri-browser/`: 同等性作業のための実験的な別個の Zig ネイティブブラウザランタイム

実験的なブラウザ CLI については:

```bash
cd kuri-browser
zig build run -- render https://news.ycombinator.com --selector ".titleline a" --dump text
zig build run -- render https://todomvc.com/examples/react/dist/ --js --wait-eval "document.querySelectorAll('.todo-list li').length >= 1"
zig build run -- parity --offline
zig build run -- bench --offline
zig build run -- serve-cdp --port 9333
```

`kuri-browser serve-cdp` は Chrome スタイルの HTTP ディスカバリと、プロトコルのスモークテスト用の最小限の WebSocket JSON-RPC ルーターを公開します。ランタイム eval は QuickJS を基盤とする V8 形式の CDP リモートオブジェクトを返します。これは V8 依存関係を追加するものではなく、まだ完全な Playwright/Puppeteer 互換性ではありません。

`kuri-browser` のスクリーンショットは現在、メインの Kuri/CDP レンダラーに委譲されています。まず `./zig-out/bin/kuri` を起動してから、次を実行してください:

```bash
cd kuri-browser
zig build run -- screenshot https://example.com --out example.jpg --compress --kuri-base http://127.0.0.1:8080
```

`--compress` は PNG ベースラインと JPEG 候補をキャプチャし、小さい方のファイルを書き込み、バイト削減量を報告します。`https://example.com` での現在のローカル計測値: PNG `20,523` バイトから JPEG 品質 50 で `18,183` バイト、`2,340` バイト(`11%`)の削減。

### 高度な機能

| パス | 説明 |
|------|-------------|
| `GET /diff/snapshot` | 前回のスナップショットとのコンパクトな `+`/`~`/`-` 差分(エージェントアクションループ) |

---

[Read more](https://github.com/justrach/kuri)
ツールをダウンロード