orno
حلقة الوكيل لا تستطيع تجاوز حدود الصندوق.
عقد تشغيلي لوكلاء نماذج اللغة الكبيرة في CI. تُعرّف السقف في YAML — التكرارات والأدوات والتأثيرات والموارد — ويوقف orno الوكيل في اللحظة التي يحاول فيها تجاوزه.
حلقة وكيل غير مقيّدة في CI تمثّل مصدر مخاطرة.
يكفي أمر واحد سيّئ لتستهلك الحلقة رصيد عطلة أسبوعية كاملة من الرموز، وتصل إلى نقاط نهاية لا شأن لها بها، ولا تترك لك بعد ذلك ما يمكن تدقيقه. يغلّف orno الحلقة بعقدٍ ويُنفّذه في وقت التشغيل — لا شيء يحتاج إلى ربطه في الشيفرة، ولا مكان لتعطيل الحدود بهدوء.
خمسة محاور. جميعها مُنفّذة في وقت التشغيل.
مرّر — ويُبرز الحقل كل محور بدوره.
تكرار مقيّد
يحدّ من دورات حلقة الوكيل حتى لا يدور إلى ما لا نهاية أبداً.
نطاق أدوات مقيّد
يُعرّف بدقة الأدوات واستدعاءات MCP والوكلاء الفرعيين التي يجوز للنموذج الوصول إليها.
تأثيرات مقيّدة
يضبط العمليات المُعدِّلة للبيانات والوصول إلى الشبكة والنطاقات المتاحة للوصول.
موارد مقيّدة
سقوف صارمة على إجمالي الرموز وإجمالي استدعاءات الأدوات وعمق الوكلاء الفرعيين.
لا حتمية مقيّدة
يُسجَّل كل استدعاء لنموذج اللغة — وتكون إعادة التشغيل مطابقة تماماً، بايتاً ببايت.
عرّفه مرة واحدة. ويتولّى orno الحراسة.
عرّفه في YAML
حدّد العقد — التكرارات ونطاق الأدوات والتأثيرات والموارد — في ملف واحد.
نفّذه في وقت التشغيل
تتحقق كل عقدة وكيل من المحاور الخمسة جميعها بشكل حيّ. لا مكتبة سياسات تحتاج إلى مزامنتها.
تجاوز → إيقاف
تجاوز أحد الحدود فتتوقف العقدة مع تسجيل الحدث المطابق في السجلّ.
ملف تنفيذي واحد، وملف واحد
بلا خادم ولا قاعدة بيانات ولا مجدول يحتاج إلى رعاية. ضعه على مشغّل واستدعِه.
مساران، بلا محلّل
أحداث NDJSON على stdout، والتتبّع على stderr. مرّرها مباشرة إلى jq أو Splunk أو Datadog.
إجراء GitHub مثبّت الإصدار
ثبّت DoctorMozg/orno@v0 في سير العمل فيبقى التشغيل قابلاً لإعادة الإنتاج.
السطح كله كتلة وكيل واحدة وكتلة سياسة واحدة.
تعيش السياسة بجوار الوكيل الذي يعمل تحتها. عقدة واحدة، الملف ذاته، وفرق طلب السحب ذاته. لا يوجد ملف سياسة منفصل ينحرف عن التزامن، ولا مكتبة تستوردها. الأقراص أدناه هي المفاتيح التي ستكتبها فعلاً: policy.max_iterations، allowed_tools على مستوى الوكيل، policy.allow_mutations، policy.allow_network، policy.allowed_domains، policy.max_total_tokens، policy.max_tool_calls، policy.max_subagent_depth — كل واحد منها سطر واحد، وكل واحد مشروح.
ثلاثة أفعال تشغّلها قبل الدمج. واحد منها لا يستدعي النموذج أبداً.
يُحمّل validate سطح السياسة ويفشل عند عقد سيئ، بصفر LLM وصفر شبكة. يمنحك plan معاينة DAG ساكنة مع السقف في أسوأ الحالات، دون إنفاق أي رموز. أما run فهو الذي يُنفّذ: NDJSON على stdout، وتتبّع على stderr، وخروج غير صفري عند أي خرق. كما يأتي orno مع schema وreplay وcompletions، فلا شيء في الأداة مخفيٌّ عنك.
خط المعالجة هو DAG من العُقد، لا حلقة واحدة.
تُشغّل عقدة kind: agent الحلقة الصارمة بمحاورها الخمسة كلها مفروضةً مباشرةً، وتتدفّق مخرجاتها على هيئة nodes.<id>.output. وتُشغّل عقدة kind: shell عمليةً فرعيةً حتميةً لا تمسّها سياسة الوكيل، فتكشف nodes.<id>.stdout و.stderr و.exit_code — مجرّد رابط بسيط بين خطوات الوكيل. قيّد الأجزاء غير الحتمية بحزم، وأبقِ الأجزاء الحتمية بسيطة، واحتفظ بكليهما في ملف واحد.
سجّل مرةً واحدة، وأعِد التشغيل بايتاً ببايت.
يتحوّل فشل الوكيل المتقطّع إلى إعادة إنتاج محلية حتمية بدلاً من لغز "يعمل في التشغيل الثالث"، ويصبح التسجيل في الوقت ذاته سجلّ التدقيق لديك. يلتقط --record-bundle كل استدعاء LLM وكل استدعاء أداة وملف YAML في حزمة واحدة تعيد تشغيلها دون اتصال عبر orno replay — بلا مفاتيح ولا شبكة. تريد تحكّماً أدقّ؟ يُثبّت --record-tape و--replay-tape استدعاءات LLM؛ ويُثبّت --record-tool-tape و--replay-tool-tape استدعاءات الأداة وMCP.
العدّاد في شيفرتك يعيش في مكان واحد. أما العقد فيعيش عند كل عقدة.
بالطبع، يمكنك تحديد سقف للتكرارات بعدّاد. سيبقى في دالة واحدة حتى يُعطّله أحدهم بتعليقٍ تحت ضغط الموعد النهائي. أما حدود orno فهي إعدادات تعريفية بدلاً من ذلك، تُفرَض عند كل عقدة وكيل في كل تشغيل وتُراجَع في فرق طلب السحب ذاته. لا مكتبة سياسة تنحرف، ولا مفتاح إيقاف مدفون قبل ثلاثة التزامات، والآثار وسطح الأدوات مرفوضة افتراضياً حتى تسمّيها. وorno صادق بشأن المكان الذي يثبت فيه جدارته: الوكيل الذي لا يستدعي أي أداة هو محرّك قوالب فوق إكمال محادثة. تبدأ الحجّة لصالحه عند دورتين أو أكثر مع استدعاءات أدوات بينهما.
ملف ثنائي ساكن واحد. أسقطه على المُشغّل.
سطر واحد يثبّته: curl --proto '=https' --tlsv1.2 -fsSL https://raw.githubusercontent.com/DoctorMozg/orno/master/install.sh | bash. تحصل على ملف ثنائي ساكن واحد لـ x86_64-unknown-linux-gnu أو aarch64-apple-darwin أو x86_64-pc-windows-msvc، دون أي سلسلة أدوات وقت التشغيل — لا يلزم Rust 1.95+ إلا للبناء من المصدر. اضبط ORNO_VERSION لتثبيت إصدار، وORNO_INSTALL_DIR لنقله.
حواجز حماية يمكنك قراءتها.
مفتوح المصدر بموجب AGPL-3.0. العقد ماثلٌ أمامك في ملف YAML — لا سياسة خفية، ولا مكان لإيقاف الحدود.
اعرضه على GitHub