العودة إلى التحديثات
New releaseJul 26, 2026

kuri v0.4.14

أتمتة المتصفح، زحف الويب، والتحكم في أجهزة iOS + Android لوكلاء الذكاء الاصطناعي. لقطات CDP أصلية بلغة Zig وموفرة للرموز، تسجيل HAR، عميل adb wire-protocol الأصلي، وأداة جلب مستقلة.

مشاركة

Kuri

Kuri 🌰

Stable release License Zig node_modules status

التثبيت```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.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)

---

**أتمتة المتصفح وزحف الويب لوكلاء الذكاء الاصطناعي. مكتوب بلغة Zig. صفر Node.js.**

أتمتة CDP · لقطات A11y · تسجيل HAR · جالب مستقل · متصفح طرفية تفاعلي · واجهة أوامر وكيلية · اختبار الأمان · التحكم في أجهزة 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:** تبقى إصدارات `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%، counts) |
| لقطة agent-browser (تقديرية) | ~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 أحرف)
- لا بادئة `- ` لكل سطر (يوفر حرفين × عدد الأسطر)
- نفس الإزاحة البادئة، نفس تصفية العقد

### تكلفة سير العمل الكامل: `go → snap → click → snap → eval`

| الأداة | التوكنات لكل دورة |
|---|---:|
| **kuri-agent** | **~3,400** |
| مع `/page/state` بدلاً من اللقطة الثانية | **~1,700** |
| مع `POST /batch` (كل شيء في استدعاء واحد) | **~1,700** (نفس التوكنات، استدعاء 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` |
| المسار (feed، 9 نقرات) | **kuri**، بفارق ضئيل | 898 مقابل 939 توكنًا (أساس `limit=5` + حلقة الفروق مقابل حلقة التنفيذ) — تكافؤ إلى أفضلية طفيفة؛ خسارة 5.1× صباحًا كانت بسبب الأساس غير المقصوص |
| التشغيلات المتكررة | **libretto** | يجمّع المسارات في سكربت Playwright → إعادة تشغيل بـ0 توكن؛ بينما يدفع kuri ثمن الدورة في كل تشغيل |

**ما جنته kuri من دراسة libretto** (وكل ذلك صار ضمن هذا الإصدار): حلقة تعتمد الفروق أولًا (`take_snapshot_diff`، ~38 توكنًا لكل خطوة)؛ فرق تكيفي يتراجع إلى لقطة كاملة مع ترويسة `! page replaced` عند التنقل؛ أسطر إزالة تعتمد الهوية فقط؛ لقطات شاشة تُكتب إلى القرص (يُعاد المسار، ولا تدخل البايتات إلى السياق أبدًا)؛ `get_page_state` عبر MCP؛ وبعد إعادة كتابة `parseA11yNodes` كاجتياز حقيقي لشجرة DFS — **قصّ القوائم عند الطلب** (`/snapshot?limit=N`، سطر `… +K more` واحد لكل تشغيل مقصوص)، **إعادة التقاط بنطاق محدد** (`scope=@ref`)، و**المسافات البادئة الهرمية**، المتاحة أيضًا كـ`uid`/`limit` في MCP `take_snapshot`. المسار ذو النقرات التسع (feed) الذي كلّف 44,285 توكنًا مع إعادة لقطات كاملة ساذجة يكلف الآن **898** مع أساس مقصوص + فروق — أرخص بـ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`.

| الأمر | متوسط أقصى RSS في `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 |

## المشكلة

كل أداة أتمتة متصفح تجرّ معها Playwright (~300 ميغابايت)، وبيئة تشغيل Node.js، وسلسلة من تبعيات npm. وكيل الذكاء الاصطناعي لديك يريد فقط قراءة صفحة، والنقر على زر، والمضي قدمًا.
**Kuri ملف ثنائي واحد بلغة Zig.** أربعة أوضاع، صفر بيئة تشغيل:```
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)

📦 التثبيت

الفئات