ملصق التحذير ليس وسيلة ضبط
تبدأ معظم الفرق التي تنشر وكيل برمجة بالقطعة نفسها: موجّه نظام (system prompt) يوجِّه النموذج إلى عدم حذف الملفات، وعدم تسريب الأسرار، وعدم تثبيت حزم غير موثوقة. هذا ملصق تحذير. إنه طلب، مصوغ باللغة الطبيعية، موجَّه إلى نظام احتمالي قد يتأثر بأي محتوى يقرأه — ملف README، أو سكربت postinstall في إحدى التبعيات، أو تتبّع مكدس (stack trace)، أو سلسلة قضايا مجلوبة. تتنافس هذه التعليمات مع كل رمز (token) آخر في نافذة السياق.
أما بيئة التنفيذ المعزولة فلا تتنافس. إنها حدّ يفرضه نواة النظام وبيئة تشغيل الحاويات وطبقة الشبكة. إذا لم يستطع الوكيل الكتابة خارج /workspace، فلن يجعله أي حقن موجّه (prompt injection) يكتب خارج /workspace. وإذا كان الخروج الشبكي مرفوضًا افتراضيًا، فإن استدعاء curl المولَّد يفشل عند المقبس (socket)، لا وفق تقدير النموذج.
لهذا السبب ينبغي كتابة عقد البيئة المعزولة قبل تحديد الوكيل. فقدرات الوكيل، وسطح أدواته، ومستوى استقلاليته — كلها نتائج تابعة لما تسمح به البيئة. أما تحديد الوكيل أولًا فيُنتج تصميمًا تضطر البيئة المعزولة بعد ذلك إلى استيعابه، وهذا اتجاه خاطئ للقيد.
أين يُلحق وكلاء البرمجة الضرر فعليًا
نادرًا ما يكون الضرر الناجم عن وكلاء البرمجة مثيرًا. فهو عادةً من واحدة من ثلاث فئات عادية، كل منها خاصية بيئية لا خاصية نموذجية.
امتداد نظام الملفات إلى ما هو أبعد من شجرة العمل
قد يقرر وكيل مكلَّف بإعادة هيكلة وحدة ما أن "ينظِّف" إعدادات مجاورة، أو يعيد كتابة ملف قفل (lockfile)، أو يتوغل في دليل أب لحل استيراد (import). إذا كانت الحاوية تُركِّب دليل المستخدم الرئيسي للمطوِّر، أو شجرة المصدر للمضيف، فإن المجموعة القابلة للكتابة تكون غير محدودة فعليًا. والفشل ليس في أن النموذج اختار اختيارًا سيئًا؛ بل في أن البيئة عرضت عليه الخيار.
الوصول إلى بيانات الاعتماد الموروثة من بيئة المطوِّر
الوكلاء الذين يُطلقون من صدفة (shell) المطوِّر يرثون متغيرات البيئة، وملفات بيانات اعتماد السحابة، ومقابس وكيل SSH، والرموز المخزَّنة مؤقتًا. ومفتاح سحابي طويل الأمد في البيئة هو منح دائم لكل ما يستطيعه ذلك المفتاح. ولا يحتاج الوكيل إلى أن يكون خبيثًا لإساءة استخدامه؛ يكفيه أن يشغِّل أمرًا يقرأ البيئة ويرسلها إلى مكان ما، وهو أمر طبيعي لأدوات البناء.
هذه الفئات الثلاث ليست إخفاقات نموذج. إنها إخفاقات إعداد، ويمكن إصلاحها قبل توليد رمز واحد.
تحديد العقد

لعقد البيئة المعزولة ثلاثة بنود: ما يمكن كتابته، وما يمكن قراءته، وما يمكن أن يخرج.
حدِّد المجموعة القابلة للكتابة، والمجموعة القابلة للقراءة، وارفض كل ما عدا ذلك
ابدأ من الرفض وعدِّد المنح. يبدو الإعداد الافتراضي القابل للتطبيق لمهمة برمجة هكذا:
writable: /workspace/repo/**
readable: /workspace/repo/**, /usr/lib/**, /usr/share/**
denied: everything else
المستودع هو وحدة العمل. وأي شيء خارجه إما تبعية نظام، وينبغي أن تكون للقراءة فقط، أو مورد مضيف، وينبغي ألا يكون مرئيًا على الإطلاق. هذه سياسة تركيب (mount policy)، لا تعليمة موجّه، ويفرضها وقت تشغيل الحاوية.
المقايضة حقيقية: المجموعة الضيقة القابلة للكتابة تُعطِّل سير العمل الذي يحتاج شرعًا إلى لمس دليل أب، أو مستودع شقيق، أو ذاكرة تخزين مؤقت عامة. وعلى الفرق التي تحتاج إلى سير العمل هذا أن توسِّع العقد عمدًا وتوثِّق السبب، بدلًا من أن ترث عقدًا واسعًا بالمصادفة. التوسيع حدث قابل للمراجعة؛ أما التركيب الواسع العَرَضي فليس كذلك.
ارفض الخروج الشبكي افتراضيًا واسمح بسجلَّات الحزم ونقاط النهاية في قائمة سماح
ينبغي أن تحاكي سياسة الشبكة سياسة نظام الملفات. الافتراضي هو عدم وجود اتصال صادر. وقائمة السماح صريحة وصغيرة: سجل الحزم الذي يستخدمه المشروع فعليًا، ونقطة نهاية مزوِّد النموذج إذا كان الوكيل يستدعي واحدًا، وأي خدمة داخلية تتطلبها المهمة.
egress: deny
allow: registry.npmjs.org
allow: api.internal.example
هذا يقيِّد مسار التثبيت ومسار الكود المولَّد في آن واحد. كما يجعل سلوك الوكيل الشبكي قابلًا للملاحظة: أي محاولة اتصال خارج قائمة السماح إشارة، لا ضجيج.
المقايضة الصادقة هي الاحتكاك التشغيلي. تحتاج عمليات البناء المشروعة أحيانًا إلى نقطة نهاية لم تكن متوقعة، ونمط الفشل هو طلب محظور يبدو كخطأ عابر. يجب التعامل مع قائمة السماح كإعداد تحت التحكم بالإصدارات، تُراجَع كالكود، وتُحدَّث عندما تتطلبها مهمة ما شرعًا — لا أن تُرخَّى إلى allow: * لأن عملية بناء واحدة فشلت.
شغِّل ببيانات اعتماد مؤقتة محدودة النطاق للمهمة
ينبغي أن تُصدر بيانات الاعتماد للمهمة وتنتهي بانتهائها. فالرمز محدود النطاق قصير الأمد الذي يُصدر عند بدء البيئة المعزولة ويُبطَل عند تفكيكها يحدّ من قيمة أي تسريب. ولا ينبغي أن تدخل بيانات اعتماد المطوِّر طويلة الأمد إلى البيئة المعزولة أبدًا؛ ولا ينبغي أن يستطيع الوكيل التصرف بصفة المطوِّر بما يتجاوز حدود المهمة.
غالبًا ما يكون هذا البند هو الأصعب في التنفيذ لأنه يتطلب نظام هوية قادرًا على إصدار منح ضيقة قصيرة الأمد. وحيث لا يوجد ذلك النظام، فالبديل هو تشغيل الوكيل بلا أي بيانات اعتماد وتوجيه أي عملية ذات صلاحيات عبر خطوة منفصلة يوافق عليها إنسان.

الكشف والاستجابة
يحدِّد العقد الحدّ. والكشف يخبرك عندما يضغط شيء ما عليه، والاستجابة تحدِّد ما يحدث بعد ذلك.
تعامل مع أنماط استدعاءات النظام (syscall) الشاذة كإشارة أساسية
فحص الموجّه غير موثوق. فالتعليمة نفسها قد تكون حميدة في سياق ما وجزءًا من حقن في سياق آخر، وسرد النموذج لنواياه ليس دليلًا على سلوكه. الإشارة الموثوقة هي ما يفعله العملية فعليًا: استدعاءات open غير متوقعة خارج المجموعة القابلة للقراءة، ومحاولات connect إلى عناوين خارج قائمة السماح، وexecve لصدفات أو مفسِّرات ليست في ملف تعريف المهمة، وتقلُّب غير معتاد في واصفات الملفات (file descriptors).
هذه قابلة للملاحظة في طبقة وقت التشغيل دون فحص استدلال النموذج. ويمكن لمراقب على مستوى استدعاءات النظام أن ينبِّه عند الانحراف عن ملف تعريف الأساس للمهمة، وهو لا يعتمد على أن يخبر الوكيل الحقيقة عمّا يفعله.
سجِّل الفرق (diff) وسجل الأوامر معًا
تتطلب المراجعة بعد الحدث وجود القطعتين في مكان واحد. فالفرق دون الأوامر التي أنتجته يصعب إسناده؛ وسجل الأوامر دون الفرق الناتج يصعب تقييمه. وتخزينهما معًا — الأمر، والطابع الزمني، وحالة الخروج، والفرق الناتج — يجعل المراجعة اللاحقة ممكنة، ويجعل من الممكن إعادة بناء ما فعله الوكيل عندما يفشل اختبار بعد أيام.
هذا شأن يتعلق بالتسجيل، لا بالنموذج، وينبغي تحديده في العقد إلى جانب قواعد التركيب والخروج الشبكي.
اشترط موافقة بشرية للعمليات غير القابلة للعكس خارج البيئة المعزولة
بعض العمليات لا يمكن التراجع عنها بإرجاع شجرة العمل: الدفع إلى مستودع بعيد، أو نشر حزمة، أو حذف مورد سحابي، أو إرسال بريد إلكتروني، أو دمج طلب سحب (pull request). ينبغي تقييد هذه العمليات. والتقييد ليس تعليمة موجّه تقول "اسأل قبل الدفع"؛ بل سياسة تزيل بيانات الاعتماد أو مسار الشبكة المطلوب للعملية حتى يمنحها إنسان لإجراء محدد.
ترتيب التحديد
النتيجة العملية هي تغيير في ترتيب العمل. قبل تحديد أدوات الوكيل، أو ذاكرته، أو حلقة تخطيطه، أو مستوى استقلاليته، حدِّد البيئة التي يعمل فيها: المجموعة القابلة للكتابة، والمجموعة القابلة للقراءة، وقائمة سماح الخروج الشبكي، ونطاق بيانات الاعتماد، ومراقب استدعاءات النظام، وسجل الفرق والأوامر المدمج، وبوابة الموافقة للعمليات غير القابلة للعكس خارج البيئة المعزولة.
ثم يُصمَّم الوكيل مقابل حدّ معروف. فقدراته هي تقاطع ما يستطيعه النموذج وما تسمح به البيئة المعزولة، وهو سطح أصغر وأصدق من ملصق تحذير في موجّه نظام.
المقايضة هي أن العقد المحكم سيحجب أحيانًا مهمة مشروعة، وسيضطر الفريق إلى توسيعه عمدًا. وهذا هو المقصود. فالحدّ الذي لا يُختبر أبدًا ليس حدًّا؛ والحدّ الذي يُوسَّع عبر المراجعة هو حدّ مفهوم.
