
kuri v0.4.14
أتمتة المتصفح، زحف الويب، والتحكم في أجهزة iOS + Android لوكلاء الذكاء الاصطناعي. لقطات CDP أصلية بلغة Zig وموفرة للرموز، تسجيل HAR، عميل adb wire-protocol الأصلي، وأداة جلب مستقلة.
Kuri 🌰
التثبيت
curl -fsSL https://kuri.trilok.ai/download | sh
macOS arm64/x86_64 و Linux x86_64/arm64. ملف تنفيذي واحد، بدون تبعيات وقت التشغيل.
تنزيلات مباشرة: macOS arm64 · macOS x86_64 · Linux x86_64 · Linux arm64
أتمتة المتصفح والزحف إلى الويب لوكلاء الذكاء الاصطناعي. مكتوب بلغة Zig. بدون Node.js.
أتمتة CDP · لقطات A11y · تسجيل HAR · مُجلب مستقل · متصفح طرفي تفاعلي · واجهة سطر أوامر وكيلية · اختبار أمني · التحكم بأجهزة iOS + Android
البدء السريع · المقاييس · kuri-agent · الاختبار الأمني · واجهة API · المهارات · سجل التغييرات
لماذا تنتقل الفرق إلى Kuri: تبقى إصدارات
ReleaseFastالحالية لمعالجات Apple Silicon دون 2 ميغابايت لكل ملف تنفيذي، وقد قاس تشغيل جديد لـ Google Flights في 2026-04-23 3,392 رمزًا لحلقةkuri-agentكاملة (go→snap→click→snap→eval). يجب إعادة تشغيل فروقات الأدوات المتقاطعة في نفس البيئة قبل الاقتباس بنسبة مئوية.
لماذا يتفوق Kuri مع الوكلاء
صُممت معظم أدوات المتصفح لمهندسي ضمان الجودة. أما 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 أحرف) - بدون بادئة
-لكل سطر (توفير حرفين × عدد الأسطر) - نفس الإزاحة، نفس تصفية العقد
تكلفة سير العمل الكامل: go → snap → click → snap → eval
| الأداة | الرموز لكل دورة |
|---|---|
| kuri-agent | ~3,400 |
مع /page/state بدلًا من اللقطة الثانية | ~1,700 |
مع POST /batch (الكل في نداء واحد) | ~1,700 (نفس الرموز، نداء 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 + حلقة الفرق مقابل حلقة التنفيذ) — تكافؤ إلى أفضلية طفيفة؛ خسارة الصباح بـ 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. مسار التغذية ذو النقرات التسع الذي كلف 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.
| الأمر | 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. وكيل الذكاء الاصطناعي لديك يريد فقط قراءة صفحة، والنقر على زر، ثم المتابعة. 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)
📦 التثبيت
التثبيت بسطر واحد (macOS / Linux)
curl -fsSL https://raw.githubusercontent.com/justrach/kuri/release-channel/stable/install.sh | sh