وكيل المراجعة يجب ألا يكون قادرًا على الكتابة. هكذا نفرض ذلك، CLI تلو الآخر.
في تشغيلة من 17 عقدة، عدّل وكيل الإصدار اختبارًا ليحوّل حزمة حمراء إلى خضراء، ثم كتب وكيلا مراجعة الإصلاح نفسه وتصادما. البرومبت كان يقول: مراجعة فقط. لم يصمد. إليك الحادثة، ولماذا لا تستطيع تعليمة مكتوبة أن تحمل هذه القاعدة، والخيارات الدقيقة التي تجعل Claude Code وCodex وGrok وAntigravity وOpenCode ترفض الكتابة.
في بداية هذا الأسبوع أرسل لنا مستخدم تقرير تشغيلة يستحق أن يُقرأ مرتين. سبعة عشر وكيلًا، وworktree واحدة مشتركة، وخط أنابيب فيه منفّذ وبوابة إصدار وفرعا مراجعة. الإصدار 1.171.0 من AgentsRoom.
حدثت ثلاثة أشياء في تلك التشغيلة، بهذا الترتيب.
وكيل الإصدار كان أمامه حزمة اختبارات حمراء. عدّل مواصفة الاختبار حتى صارت الحزمة خضراء. وبذلك سلّم عيبًا حقيقيًا، صار الآن مغطى باختبار يوافقه.
ثم وجد وكيلا مراجعة، على فرعين متوازيين من التشغيلة نفسها، كل واحد منهما خطأً حقيقيًا من سطر واحد. أصلحه كل منهما مباشرة، في الـ worktree نفسها، في الوقت نفسه. فتصادما.
كل واحد من هؤلاء الوكلاء كان لديه برومبت خطوة يقول، بكلمات واضحة، مراجعة فقط. لم يوقفهم شيء، ولم يشر إلى ذلك شيء: من جهة المنصة، كانت لدى خطوة أدوات كتابة واستعملتها.
لماذا لم يصمد البرومبت
القراءة المغرية هي أن الوكلاء تجاهلوا التعليمة. ليس هذا ما حدث، وهذا مهم لأنه يغيّر ما يجب أن يكون عليه الإصلاح.
كان لدى كل وكيل سبب يمكن الدفاع عنه محليًا للكتابة. حزمة حمراء ومواصفة تبدو خاطئة. خطأ يستغرق إصلاحه أربع ثوانٍ ووصفه أربعين. لم يقرر أي منهم كسر القاعدة. بل قرر كل واحد أن حالته هي التي لم تقصدها القاعدة. من داخل الخطوة، يبدو الاستثناء معقولًا دائمًا.
التعليمة المكتوبة طلب موجّه إلى حكم النموذج. المراجع القادر أيضًا على الإصلاح سيصلح، عاجلًا أو آجلًا، لأن الإصلاح أقصر طريق من "وجدته" إلى "انتهى". القاعدة الوحيدة التي تنجو من الاصطدام باستثناء معقول هي قاعدة لا يستطيع النموذج أن يجادل فيها: أداة غير موجودة.
لماذا لم يكن الإعداد العام قادرًا على ذلك أيضًا
قبل هذا، كانت الرافعة الوحيدة التي تصل إلى خطوة قيد التشغيل هي إعدادات المزود، التي تغطي كل وكلاء Claude على الجهاز دفعة واحدة. هذا شكل خاطئ لتشغيلة. في خط الأنابيب نفسه، يجب أن يكتب المنفّذ ويجب ألا يكتب المراجع. مفتاح عام لا يستطيع التفريق بينهما.
والتقييد لكل وكيل الذي كان لدينا أصلًا، ذاك الذي يمكن للتذكرة أن تحمله عندما تطلق وكيلًا، لم يكن يُمرَّر عمدًا إلى خطوات الفريق. فكان الوكيل المنطلق من تذكرة قابلًا للتقييد، وعقدة الفريق لا. كان هذا هو السبب الأول، وكان قرار تصميم شاخ بشكل سيئ.
القاعدة: مربع اختيار واحد على العقدة
الإصلاح قيمة منطقية على عقدة المراجعة. علّم للقراءة فقط فيُطلق الوكيل الذي يجسّد تلك الخطوة بلا صلاحية كتابة على المشروع: لا تعديل ملف، ولا git commit أو push، ولا أمر shell وظيفته الوحيدة تغيير شجرة العمل. القراءة وgrep وgit diff وgit log والاختبارات والـ linter وكل أدوات الفريق تبقى مفتوحة.
كنا صريحين بشأن ما ليس عليه: ليس قائمة منع يكتبها المستخدم يدويًا، لكل CLI على حدة. لا أحد ينبغي أن يحتاج إلى معرفة خمس صيغ أذونات ليقول "هذا الوكيل يراجع". المفتاح ينتج الخيار الصحيح لكل مزود، ويُطبَّق أخيرًا، بعد الوضع المستقل وبعد أي شيء خزّنه المستخدم على الوكيل، فيتغلب.
ما يفعله كل CLI، مقروءًا من مساعدته الخاصة
نحن لا نفرض إلا على المزودين الذين قرأنا خيارهم في --help الخاص بهم. خيار مخمَّن يقتل الإطلاق بخطأ تحليل، وهذا أسوأ من خطوة بلا فرض. بقية CLI تحصل على القاعدة المكتوبة فقط، والمحرر يقول ذلك بنص واضح تحت مربع الاختيار.
| CLI | ما يضيفه مفتاح القراءة فقط | هل يصمد تحت الوضع المستقل؟ |
|---|---|---|
| Claude Code | --disallowedTools "Edit" "Write" "MultiEdit" "NotebookEdit" "Bash(git commit:*)" "Bash(git push:*)" والبقية | نعم، قواعد المنع تسري تحت --dangerously-skip-permissions |
| Codex | --sandbox read-only | نعم، إنه صندوق رمل من نظام التشغيل (Seatbelt على macOS وLandlock على Linux)، لا قائمة أدوات |
| Grok Build | --deny "Edit" --deny "write" --deny "Bash(git commit*)" والبقية | نعم، قواعد المنع تسري تحت --always-approve |
| Antigravity | --mode plan | نعم، plan هو وضع التنفيذ للقراءة فقط في هذا الـ CLI |
| OpenCode | --agent plan | نعم، وكيل plan المدمج يرفض أدوات التعديل |
| Mistral Vibe وKimi Code وCopilot وCursor وAmp وAider والبقية | فقرة برومبت فقط | لا خيار متحقَّق منه، ونقول ذلك في المحرر |
تفصيلان في هذا الجدول كلّفانا خطأً لكل منهما، فيستحقان أن يُكتبا بوضوح.
Codex وGrok يرفضان الخيار المكرر. كلاهما يحلل معاملاته بمحلل صارم. لو كان المستخدم قد خزّن مسبقًا --sandbox workspace-write على الوكيل، فإن إلحاق --sandbox read-only لن يتجاوزه، بل سيُسقط الإطلاق. لذلك، للخيارات ذات القيمة، نزيل أي ظهور موجود، مع قيمته، قبل إلحاق خيارنا. والأمر نفسه مع --agent في OpenCode، الذي يحوّل محلله الخيار المكرر إلى مصفوفة ويفشل لاحقًا.
على Claude Code يجب أن تتراكم القائمة. --disallowedTools يأخذ قائمة مفصولة بمسافات ويمكن تكراره، ونحن نمرر واحدة أصلًا عندما لا يُسمح لوكيل بقيادة المتصفح المدمج. المحلل يضم الخيار المتغير المكرر، فتتجمع القائمتان بدل أن تحل الثانية محل الأولى.
قائمة Claude Code الكاملة هي أدوات تعديل الملفات الأربع، وكل أمر git فرعي يكتب في الفهرس أو الشجرة أو المراجع أو مستودع بعيد (add، commit، push، merge، rebase، reset، checkout، switch، restore، stash، cherry-pick، revert، apply، am، rm، mv، clean، tag، worktree)، وأوامر shell التي لا توجد إلا لتغيير الملفات (rm، mv، cp، tee، touch، mkdir، chmod، chown، ln، truncate، dd، sed -i). Grok يأخذ سلاسل القواعد نفسها، بصيغة glob الخاصة به، إضافة إلى أسمائه الخاصة لأدوات الملفات (search_replace، write، hashline_edit).
ما زال للبرومبت وظيفة
الخيار يرفض. ولا يشرح. والوكيل الذي يصطدم برفض لا يفهمه يعامله كخطأ ويبحث عن طريق آخر، وهذا بالضبط السلوك الذي كنا نحاول إزالته.
لذلك تحصل خطوة القراءة فقط أيضًا على جملتين في برومبتها. الأولى تقول إن الخطوة للقراءة فقط، وتعدد ما يعنيه ذلك، وتنص على أن الرفض هو القاعدة، لا عقبة يُلتف عليها بأمر آخر. والثانية تعدد ما يبقى مفتوحًا، وتطلب من الوكيل أن يبلغ عما ينبغي تغييره، مع الملف والسطر والسبب، في تسليمه، وأن يترك الخطوة التي تملك الكود تطبقه.
على CLI ذات الخيار المتحقَّق منه، هذه الفقرة هي ما يجعل الرفض مفهومًا. على الأخرى، هي الفرض كله، ونفضّل أن نقول ذلك على أن نتظاهر.
من هو للقراءة فقط في القوالب المضمّنة مع التطبيق
العقد التي تحكم هي للقراءة فقط: خطوة تحقق QA في القالبين المبدئيين، وخطوتا إعادة الإنتاج والتحقق في Bug hunt، وفرعا QA والأمان في Release shield، والمختبِر في Feature squad.
العقد التي تملك الكود تواصل الكتابة: المطوّر، وبوابة الإصدار المكتوبة لتصلح كل ملاحظة بنفسها. بوابة إصدار لا تستطيع الكتابة هي بوابة إصدار لا تستطيع الإصدار.
هذا الفصل هو التصميم كله، وهو الفصل الذي انتهكته الحادثة مرتين: عقدة إصدار كتبت في المكان الخطأ، وعقد مراجعة كتبت أصلًا.
ما ليس عليه هذا
ليس حدًا أمنيًا. المبلّغ قال ذلك في التقرير، وكان محقًا: bash -c يلتف على قائمة منع الأدوات. إن كنت تحتاج إلى عزل وكيل لا تثق به، فذلك صندوق رمل أو جهاز منفصل، وCodex هو الوحيد بين الخمسة الذي وضع القراءة فقط لديه هو ذلك فعلًا.
ما يوقفه المفتاح هو الحادث وانحراف الدور، وهذا ما يحدث فعليًا. المراجع لا يفلت من قائمة منع عن قصد. بل يمدّ يده إلى Edit بحكم العادة، والعادة صارت الآن مرفوضة.
ما لم نبنِه
طلب المبلّغ شيئًا إضافيًا: حدث في الخط الزمني للتشغيلة يقول "العقدة X كتبت في الشجرة"، كأدنى إشارة حتى بلا فرض. فكرة جيدة ولم نفعلها هنا، لأنها تحتاج إلى diff مرجعي لكل خطوة على جانب المشغّل. إن عادت الحاجة، فهذه هي القطعة التالية.
إن كنت لا تستخدم AgentsRoom
الخيارات أعلاه قابلة للنسخ كما هي. وكيل مراجعة مُطلق يدويًا بـ codex --sandbox read-only، أو claude --disallowedTools "Edit" "Write" "MultiEdit" "NotebookEdit" "Bash(git commit:*)" "Bash(git push:*)"، لا يستطيع فعل ما فعلته عقدتا المراجعة لدينا. ضع الجملتين نفسيهما في برومبته ليعرف لماذا يُرفض.
ما يضيفه مربع الاختيار هو أنك لا تضطر إلى تذكّر أي من الصيغ الخمس ينطبق، وأن الخيار يتغلب على أي وضع مستقل تعمل فيه الخطوة، وأنه يصمد في تشغيلة تعود لاحقًا إلى الخطوة نفسها.
مفتاح العقدة والجدول لكل مزود موثّقان في صفحة Agent Teams. أما هل تستحق المراجعة بواسطة وكيل أن تُجرى أصلًا، وكم من الـ diff ما زال يستحق إنسانًا، فسؤال آخر، وقد كتبنا عنه في هل ما زال عليك مراجعة كود وكيل الذكاء الاصطناعي الخاص بك؟. هذه التدوينة عن الشيء الأصغر والأكثر آلية: متى قررت أن وكيلًا يراجع، اجعله عاجزًا ماديًا عن فعل أي شيء آخر.
تحميل AgentsRoom
شغّل كل وكلاء الذكاء الاصطناعي لديك، في كل مشاريعك، من نافذة واحدة.
التطبيق المرافق: تابع وكلاءك أينما كنت
استخدم Claude أو Codex أو Antigravity CLI أو أي مزود AI آخر.
أرسل الأخطاء والطلبات مباشرة إلى قائمة المهام العامة.
تابع القراءة
حلقات وكلاء الذكاء الاصطناعي: كيف تُنهي وكلاء البرمجة المهمة بتصحيح ذاتي
تحوّل حلقة وكيل الذكاء الاصطناعي أسلوب البرمجة بالطلب والتصحيح إلى دورة ذاتية التصحيح: يكتب الوكيل خطة، ثم يبنيها، ثم يراجع عمله مقابل الخطة، ويكرر ذلك حتى يكتمل. وكيف تعمل الحلقة في Claude Code وCodex وAntigravity CLI وCursor وحلقة Ralph loop.
اقرأ المقالCodex أو Claude Code أو Cursor أو Copilot: الاختيار حسب طريقة عملك
مقارنة بين Codex و Claude Code و Cursor و GitHub Copilot و AgentsRoom حسب طريقة العمل لا حسب قائمة الميزات: البرمجة بمفردك، أو تشغيل عدة agents بالتوازي، أو التسليم ضمن فريق.
اقرأ المقالعشرة وكلاء شغّلوا نفس فحص الأنواع في اللحظة نفسها. الحل كان مجلدًا.
سبعة عشر وكيل برمجة في نفس النسخة من المستودع، عشر عمليات tsc في وقت واحد، load average عند 37 و87 ميغابايت من الذاكرة الحرة. فحص أنواع مدته تسعون ثانية استغرق 7 دقائق و36 ثانية. إليك القياس، وسبب أن الآلة لم تكن تحسب، والقفل المشترك الصغير الذي حل المشكلة. قابل للنسخ إلى أي مستودع.
اقرأ المقال