
مهارة حماية وقت التشغيل التي تكتشف وتمنع الهجمات الناتجة عن المهارات الخبيثة في الوكلاء المعززين بالمهارات، مع حلقة MCTS التي تطور سياسة الحماية من خلال التغذية الراجعة للتنفيذ.
🎉 مقبول في NeurIPS 2026 🎉
يقوم الوكلاء المعزّزون بالمهارات (SAAs) مثل Claude Code وOpenClaw بتحميل مهارات قابلة لإعادة الاستخدام — تعليمات ونصوص إرشادية وتوجيهات سير عمل مُحزَّمة — كسياق دائم وقت التشغيل. هذا يجعل الوكلاء أكثر قدرة، لكنه يمنح أيضًا مهارة خبيثة قناة دائمة لتوجيه الإجراءات المستقبلية: يمكنها الانتظار حتى تجعل مهمة مستخدم محددة وحالة مساحة العمل إجراءً غير آمن يبدو مفيدًا. لذلك فإن التدقيق قبل التثبيت وحده غير كافٍ — يجب أن تحدث الحماية وقت التشغيل، مشروطة بالمهمة.
يحوّل الدفاع-كمهارة حارس وقت التشغيل إلى قطعة أثرية من الدرجة الأولى على شكل مهارة:
تفصيل واحد في النشر مهم: مهارة السلامة ذات صلة بكل مهمة تقريبًا، لذا تميل المطابقة العادية بين المهمة والمهارة إلى تجاهلها. لذلك نتعامل مع تعليمة استدعاء صريحة (توجيه الوكيل لاستشارة skill-sonar قبل اتخاذ الإجراءات) كجزء من إعدادات النشر، وليس كتسهيل تجريبي — تُظهر التجارب الاستئصالية أنها ضرورية لفعالية الحارس.
مجموعة بيانات SCOPE-R — مجموعة بيانات مشروطة بالمهمة للهجمات المستحثة بالمهارات على SAAs تضم 6 عائلات مخاطر، و21 فئة فرعية، و206 حالة خبيثة مؤكدة الهجوم، و43 مهمة حميدة، مقسّمة حسب عائلة المخاطر إلى تدريب / اختبار ID / اختبار OOD — مستضافة على Hugging Face وتُحمَّل بشكل منفصل (انظر البدء السريع الخطوة 0). يحتوي هذا المستودع على الحارس والكود الذي يقيّمه ويطوّره:
| المكوّن | الوصف |
|---|---|
| SkillSonar\ | حزمة مهارة الحارس وقت التشغيل (eval/safetySkill/skill-sonar/)، بالإضافة إلى إطار التقييم وقت التشغيل (eval/) الذي يقيس ASR، ومنفعة المهمة، وعدد التأكيدات، وتكلفة الرموز تحت كل حالة دفاع. |
| تطوير مهارة الحارس\ | حلقة MCTS (evolution/) التي تطوّر مهارة الحارس على القرص من التغذية الراجعة للتنفيذ: اختيار UCT عبر شجرة من إصدارات المهارة، وتنفيذات تقييم رخيصة، وتحسين متعدد المتغيرات بضربة واحدة عبر claude -p. |
يقرأ إطار التقييم tasks/ وinjected-skills/ وattack-metadata/ وbenign-skills/ وsplit/ من جذر eval/. حمّل SCOPE-R من Hugging Face وانسخها إلى الداخل:
git clone https://huggingface.co/datasets/fffovo/SCOPE-R /tmp/scope-r
cp -r /tmp/scope-r/dataset/{tasks,injected-skills,attack-metadata,benign-skills,split} eval/
cp eval/run/config.example.sh eval/run/config.sh # fill in your endpoint credentials
جولة شاملة واحدة بتقييم حقيقي ومحسّن claude حقيقي:
./run_smoke_loop.sh --max-rounds 1
./run_mcts.sh --max-rounds 3
# plumbing only (no benchmark, no claude):
PYTHONPATH=. python3 -m evolution.cli --dry-run --max-rounds 1
# plumbing + analyzer + pool, with a synthetic subset instead of the benchmark:
PYTHONPATH=. python3 -m evolution.cli \
--simulate-round tests/synthetic_smoke.jsonl --skip-refine --max-rounds 1
# bootstrap only (seed backup + active skill + deploy, then exit):
PYTHONPATH=. python3 -m evolution.cli --bootstrap-only
توجد جميع المقابض في config/default.yaml (حلقة المجموعة المسطحة) وconfig/mcts.yaml (حلقة MCTS)؛ يمكن تجاوز أي منها عبر أعلام CLI أو ملف --config مخصص.
SCOPE-R dataset (HF) ──▶ eval/ (runtime evaluation) ──▶ evolution/ (MCTS loop)
tasks, skills, subsets/, run/, analyzer → refiner
attack-metadata scripts/ (judge, grading), → skill tree → next round
safetySkill/ (SkillSonar)
كل تكرار MCTS:
eval/safetySkill/skill-sonar/ وشغّل المقيّم وقت التشغيل: حاكم ASR، ومقيّم المنفعة، وعدد التأكيدات، وتكلفة الرموز، بالإضافة إلى سرديات failure_reason / success_reason التي يصوغها الحاكم لكل مهمة، وتصنيف failure_stage الحتمي (guard_not_read / guard_not_triggered / guard_triggered_but_bypassed / ...).claude -p واحد ينتج k متغيرات فرعية، كل منها يطبّق تعديلًا صغيرًا ومحليًا مختلفًا يستهدف نمط فشل مهيمنًا مميزًا.يتوقف البحث عندما تصل درجة السلامة إلى عتبة النجاح (الافتراضي: ASR ≤ 5%)، أو يُستنفد رصيد التقييم الكامل، أو لا تبقى مرشحات قابلة للتوسيع. يُبلَّغ عن أفضل مرشح مُقيَّم بالكامل كالحارس النهائي.
الهدف سلامة أولًا مع تفضيلات ثانوية:
s(v) = (1 − ASR_v) + ε · ( λ_b·U_benign + λ_m·U_malicious − λ_q·C̃_v − λ_t·K̃_v )
بحيث يفضّل البحث، بين المرشحين المتساوين في السلامة، الحراس الذين يحافظون على منفعة المهمة، ويقاطعون المستخدم أقل، ويكلفون رموزًا أقل. الحارس المنحط الذي يرفض كل شيء يسجّل درجة ضعيفة بحكم التصميم.
.
├── README.md # this file
├── config/
│ ├── default.yaml # flat-pool loop config (legacy)
│ └── mcts.yaml # MCTS loop config (main method)
├── evolution/ # evolution package
│ ├── loop.py / cli.py # legacy flat-pool loop
│ ├── mcts_loop.py / mcts_cli.py / tree.py # MCTS loop (paper's method)
│ ├── evaluator.py / instance_evaluator.py # drives eval/subsets/run_*.sh
│ ├── analyzer.py # per-task failure/success reasoning
│ ├── refiner.py / multi_refiner.py # claude -p edit wrappers
│ └── skill_manager.py # pool, lineage, deploy/retire/backup
├── eval/ # runtime evaluation framework
│ ├── DATA.md # dataset wiring (HF download → eval/)
│ ├── subsets/ # subset drivers (smoke/coverage/benign/combined)
│ ├── run/ # config.example.sh + per-task claude runners
│ ├── scripts/ # benchmark.py + lib_*.py (judge, grading, injection)
│ ├── safetySkill/skill-sonar/ # SkillSonar guard bundle (deploy slot)
│ └── split/ # cheap_eval (31 rows) / full_eval (106 rows) lists
├── run_smoke_loop.sh # smoke entry point
├── run_mcts.sh # MCTS entry point
└── tests/synthetic_smoke.jsonl # canned rows for --simulate-round
تستقر مخرجات التشغيل في skills/ (عقد الشجرة + النسخ الاحتياطية + tree.json)، وlogs/ (Markdown/JSONL لكل تكرار، ونصوص المحسّن، والنسب)، وartifacts/runs/ (لقطات التقييم الخام لكل جولة).