مقالات مُشَيِّد

تعليمات Claude Code

خل Claude Code يلتزم بقواعدك بدل ما يتجاهلها (كورس كامل)

مراجعة ملفات CLAUDE.md والقواعد المتعارضة، مع نص التدقيق الكامل وأمثلة نقل القواعد والتحقق من الالتزام.

خل Claude Code يلتزم بقواعدك بدل ما يتجاهلها (كورس كامل)

ملف قواعد واحد عندي كان يعتمد اسم «مُشَيِّد برو» في سطر، ويمنعه في سطر ثاني.
ومهارة النشر مكتوب فيها: لا تراقب النشر بـ vercel ls | grep. وبعدها بثلاث أسطر تراقبه بـ vercel ls | grep.
وتحت في هالمقال نص جاهز ومجاني: تلصقه في وكيلك، يراجع ملفاتك على نفس المبادئ، وما يلمس شي قبل موافقتك.

هذا اللي طلع يوم 24 سبتمبر. خليت وكيل يطلع المبادئ اللي تعلمتها من كل مشاريعي ومن توثيق Anthropic، وبعدها يراجع كل ملفات التعليمات عندي عليها.
وبنفس الجلسة نزل ملفي الرئيسي CLAUDE.md من 41,371 حرف إلى 30,104، وما ضاعت منه ولا قاعدة.
وصلني تقريره.
وبعده على طول كتبت له حرفياً: «قم بكل الاصلاحات واحدا بواحد , ضع خطة اولا ثم نفذ بدقة و امان ثم تحقق بعمق , لا تنتظر مراجعتي… و لا تلمس او تحذف اي تفاصيل حساسة او مهمة, فكر بشدة».
والمبادئ نفسها صارت بعدها النص اللي تحت. من أول رسالة كنت كاتب له إنه «سيتم مشاركته على حسابي في اكس»، وإنه لازم يكون نصايح «يستطيع اي مبتدئ و متوسط فهمها».

وقاعدتي: كل غلطة كلفتني تصير سطر في الملف يمنعها. والوكلاء يكتبونه.
وكل سطر كان صادق لحاله، والملف كله يتحمل في بداية كل جلسة قبل أول كلمة أكتبها، لين صار فيه سطرين يقولون الشي وعكسه وأنا ما انتبهت.
والتناقضات ما شفتها إلا يوم جاني التقرير.

واللي يبان من برا إنه تجاهل للقواعد، هو اختيار بينها. أي وكيل يفتح هالملف واقف بين قاعدتين من قواعدي، ولازم يمشي على وحدة.
توثيق Claude Code نفسه يقولها بوضوح: لو تعارضت قاعدتان ممكن يمشي على أي وحدة منهم، على حسب ما يطيح في يده.

قاعدتان متعارضتان في ملفك = قرار ياخذه Claude بدالك.

والعادة اللي توصلك لهنا بسيطة: سطر جديد فوق كل غلطة. ومع الشهور يصير عندك «قاعدة فوق قاعدة»، كل وحدة تسحب الوكيل لجهة.

والتوقيت يفرق هنا.
Opus 5.5 نزل وجهده الافتراضي medium، درجة أقل من Opus 5. وتوثيق Anthropic يوصي تعيد ضبط الجهد، ولا تنقل إعداداتك القديمة كما هي.

كل قسم جاي يجاوب سؤال من هذي:

  • وين النص الجاهز، ووش رجّع لما جربته؟
  • ليش الملف الأطول يطيع أقل؟
  • وش يصير للقاعدة اللي ما فيها «لأن»؟
  • من وين يجيب الوكيل أرقامه؟
  • متى تكون «خلصت» صادقة؟
  • وش تسوي بالقاعدة الغلط؟
  • متى يوقف ويسألك؟
  • وش اللي ما ينفع يكون تعليمات أصلاً؟
  • وكيف تعرف إن أول جلسة خلصت؟

نص واحد، وما يتحرك ملف قبل موافقتك

هذا النص كامل، حوالي ألف كلمة، فلو تبي الشرح أول انزل للأقسام وارجع له. أول شي يرجع لك منه جرد بملفاتك وحجم كل ملف، وبعده تقرير. ولا تعديل قبل كلمتك:

البرومبت الجاهز للنسخ
مهمتك: أن تراجع ملفات التعليمات الخاصة بي وتحدّثها لتعمل نماذج Claude
   الأحدث (Fable 5.1 وOpus 5.5 وSonnet 5) بأفضل أداء. اعمل على مراحل،
   ولا تعدّل أي ملف قبل أن أوافق.

## المرحلة ١ — الجرد (قراءة فقط)
- ابحث عن: ~/.claude/CLAUDE.md، وفي المشروع الحالي: CLAUDE.md
   و.claude/CLAUDE.md وCLAUDE.local.md وAGENTS.md و.claude/rules/*.md
   و.claude/agents/*.md و.claude/skills/*/SKILL.md، ومجلد ذاكرة
   المشروع إن وُجد.
- اقرأ ملفات إعداد المشروع (package.json أو pyproject أو Makefile أو
   README أو إعدادات CI) لتعرف أوامر البناء والفحص والاختبار الحقيقية.
- إن كان git متاحاً، راجع آخر ٥٠ رسالة commit وابحث عن fix وrevert
   وhotfix. هذه أخطاء دُفع ثمنها وتستحق قاعدة. وافحص git status
   والفروع: إن كانت جلسة أخرى تعمل في المستودع، فلا تعدّل فرعها ولا
   ملفاتها.
- اعرض لي قائمة بما وجدته، مع عدد أسطر كل ملف وحجمه.

## المرحلة ٢ — التدقيق
صنّف كل سطر إلى: يبقى، أو تُعاد صياغته، أو يُنقل، أو يُحذف، أو يُضاف
   ما ينقص. استخدم هذه المبادئ:
1. الملف دليل تشغيل لنموذج يدخل المشروع لأول مرة، لا توثيق. أبقِ ما لا
   يُستنتج من الكود: الأوامر، والقرارات المعمارية، والفخاخ غير
   البديهية، وأسباب القيود. احذف ما يُعرف من قراءة الكود والبديهيات.
   واسأل عن كل سطر: هل سيخطئ النموذج لو حُذف؟
2. الحجم: الملف الرئيسي أقل من ٢٠٠ سطر تقريباً. المعرفة الخاصة بمجلد
   معيّن تنتقل إلى .claude/rules/<اسم>.md مع paths: في رأسه. والإجراء
   الطويل المتكرر يصير skill. وما يجب أن يحدث دائماً بلا استثناء اقترح
   له hook. تنبيه: القاعدة المقيّدة بمسار لا تُحمَّل إلا حين تُفتح
   ملفات ذلك المسار، فما يلزم في عمل لا يلمس ملفاً (SQL مباشر، رسالة،
   فحص موقع حي) يبقى في الملف الرئيسي، أو يُترك فيه مؤشر صريح يقول متى
   يُقرأ.
3. مع كل قاعدة سببها: أي قاعدة بلا «لأن» أضف لها سبباً في جملة واحدة
   إن كان واضحاً من السياق، وإلا علّمها لأراجعها. لا تخترع سبباً.
4. النبرة: حوّل CRITICAL وMUST وNEVER بالأحرف الكبيرة و«لا تكن كسولاً»
   إلى صياغة عادية هادئة. وحوّل «حاول» و«إن أمكن» المرتبطة بمتطلبات
   حقيقية إلى أمر صريح.
5. احذف السقالات القديمة: «فكّر خطوة بخطوة»، و«خطّط قبل التنفيذ»،
   ووسوم scratchpad، والخطوات المرقّمة للأعمال التي تحتاج حكماً،
   وقواعد «لا تستخدم النقاط أو العناوين»، و«لا تكتب تحديثات أثناء
   العمل». عمق التفكير يُضبط بمستوى الجهد (effort) لا بالنص. أبقِ
   الخطوات الحرفية للعمليات الهشة فقط: الحذف، وهجرة البيانات، والنشر،
   والمصادقة.
6. لا أرقام أو قوائم متغيرة مكتوبة من الذاكرة. حوّلها إلى جدول «مصدر
   الحقيقة»: نوع المعلومة ← الأمر أو الملف الذي يحسبها في لحظتها.
   وعلّم المراجع المنجرفة بعبارة «مرجع قديم — لا يُصدَّق».
7. أخطاء مسمّاة: اجمع الدروس المتناثرة في قسم بصيغة: الخطأ (ما سيفعله
   نموذج هنا) ← السبب (الآلية في جملة) ← القاعدة. لا تضف قاعدة من
   تعثّر حدث مرة واحدة إلا إن كان مكلفاً. وإن وجدت قاعدة خاطئة فأصلحها
   في مصدرها، ولا تضف قاعدة أخرى تحذّر منها.
8. التصعيد: قائمة مغلقة بالحالات التي تتوقف فيها وتسألني: حذف لا رجعة
   فيه، ودفع وفوترة، ورسائل تصل مستخدمين حقيقيين، وتعديل بيانات إنتاج،
   وأسرار ومصادقة، وتغيير قرار مقفل. وكل ما يُجاب من الكود أو البيانات
   تقرره وتوثّقه. ويكون السؤال واحداً: سطر سياق، ثم الخيارات وتكلفة كل
   منها، ثم توصيتك.
9. تعريف «تم»: بوابة تحقق لكل نوع عمل، بالأوامر الحقيقية التي وجدتها
   في المرحلة ١.
10. تضارب المصادر: رتّب الأولوية صراحة هكذا: الكود التنفيذي، ثم
   البيانات الحية، ثم القواعد المخصصة، ثم هذا الملف، ثم الذاكرة
   والتعليقات القديمة.
11. القرارات المحسومة (أسعار، نصوص معتمدة، اختيارات معمارية نهائية)
   تُجمع في قسم واحد، ويُكتب فيه أنها لا تُعاد مناقشتها إلا بتعليمات
   صريحة مني.
12. ما يجب أن يُمنع دائماً لأسباب أمنية لا يكفي فيه سطر تعليمات: اقترح
   له hook أو صلاحيات محدودة، ودَع التعليمات تشرح السبب.

## المرحلة ٣ — قسم «طريقة العمل»
أضف قسماً قصيراً، أو حدّث القائم، يغطي النقاط التالية بصياغتك وبلغة
   الملف:
- النطاق: نفّذ ما طُلب كاملاً، بلا ميزات أو إعادة هيكلة أو تجريدات لم
   تُطلب. وما تلاحظه خارج المهمة تذكره اقتراحاً في آخر ردك.
- حين أصف مشكلة أو أسأل أو أفكر بصوت عالٍ، فالمطلوب تقييمك. لا تُصلح
   حتى أطلب.
- قبل أي أمر يغيّر حالة النظام (حذف، إعادة تشغيل، تعديل إعدادات،
   push)، تأكد أن الدليل يدعم هذا الفعل بالذات.
- حين تكفي المعلومات، نفّذ. وحين تختار بين بدائل، قدّم توصية لا عرضاً
   لكل الخيارات. والأفعال القابلة للتراجع ضمن حدود الطلب لا تحتاج
   استئذاناً.
- قبل إنهاء دورك: إن كانت فقرتك الأخيرة خطة أو وعداً بعمل لم تنفّذه،
   فنفّذه الآن، ما لم يكن ضمن حالات التصعيد. تلك تذكرها في التقرير ولا
   تنفّذها.
- قبل أن تبلّغ عن أي تقدّم، طابق كل ادعاء بنتيجة أداة من هذه الجلسة،
   وصرّح بما لم تتحقق منه. وإن فشل اختبار فقل ذلك مع مخرجاته.
- الملخص الأخير يُكتب لقارئ لم يتابع العمل: النتيجة أولاً، بجمل كاملة،
   بلا اختصارات اخترعتها أثناء العمل. ويذكر: ما أُنجز، ودليل التحقق
   منه، وما بقي، وما تُرك عمداً دون مساس.
- عدّل الملفات تعديلاً موضعياً ولا تُعد كتابتها كاملة. ولا تحفظ
   سكربتات الفحص المؤقتة كاختبارات دائمة.
- المعلومات سريعة التغير، كأسماء النماذج والمكتبات والإصدارات، تحقق
   منها بالبحث أو من التوثيق قبل أن تعتمد على ذاكرتك.
- إن كانت أداتك تدعم الوكلاء الفرعيين: فوّض المهام المستقلة وواصل
   العمل، واختر النموذج حسب صعوبة المهمة لا حجمها. والتحقق من العمل
   الحساس بوكيل مستقل أدق من المراجعة الذاتية.

## المرحلة ٤ — الذاكرة
إن وُجدت ذاكرة: درس واحد في كل ملف وفي أوله سطر يلخّصه، وفهرس بسطر لكل
   ملف. ادمج المكرر، واحذف الخاطئ أو المتقادم، ولا تحفظ ما يسجله الكود
   أو git. وقبل تصحيح أي معلومة فيها، تحقّق منها من مصدرها (الكود،
   git، الأمر الحي). ثم أضف إلى الملف الرئيسي هذه القاعدة: «كل خطأ
   مكلف يُضاف سطراً في قسم الأخطاء المسمّاة ضمن نفس التغيير الذي
   أصلحه».

## المرحلة ٥ — التسليم
1. تقرير فيه لكل ملاحظة: الملف والسطر، والنص، والمبدأ الذي تخالفه،
   والإجراء المقترح، ودرجة ثقتك.
2. الملفات الجديدة أو التعديلات المقترحة (diff). لا تطبّق شيئاً حتى
   أوافق.
3. بعد موافقتي: خذ نسخة احتياطية من كل ملف قبل تعديله، ثم طبّق. حين
   تنقل محتوى بين الملفات انقله حرفياً ولا تُعِد صياغته، ثم تحقّق
   بسكربت أن كل سطر قديم موجود في مكانه الجديد، وأخبرني بالنتيجة.
4. للتعديلات الكبيرة: اطلب مراجعة من وكيل مستقل بسياق نظيف إن كانت
   أداتك تدعم ذلك، وطبّق ما يثبت من ملاحظاته بعد التحقق منها.
5. أعطني في النهاية: عدد الأسطر والحجم قبل التعديل وبعده، وما نُقل
   وإلى أين، وما بقي لقراري.

## حدود لا تُتجاوز
- لا تحذف أي قيد له سبب تجاري أو أمني أو قانوني، ولا أي معلومة لا توجد
   إلا في هذه الملفات. الحذف مسموح فقط لما تبرره المبادئ أعلاه. وإن لم
   تجد ما يستحق التغيير، فقل ذلك ولا تغيّر شيئاً.
- لا تضع أسراراً أو مفاتيح أو كلمات مرور في أي ملف تعليمات.
- لا تخترع أوامر أو مسارات. كل أمر تكتبه يجب أن تكون تحققت من وجوده.
- لا تنفّذ push ولا تنشر شيئاً.

يشتغل في جلسة Claude Code (أو أي وكيل يقرأ ملفاتك) مفتوحة على مجلد مشروعك، وباشتراكك اللي عندك. وفي نفس الصفحة نسخة إنجليزية لو ملفاتك بالإنجليزي: younesbag.github.io/claude-agent-constitution

وقبل ما أكتب هالمقال خليت وكيل جديد ياخذ النص وبس، ويشغله على نسخة من ملفاتي زي ما كانت قبل التدقيق. ما شاف التدقيق الأول، والتعديل ممنوع عليه لأن ما فيه موافقة، والنسخة بدون الكود وبدون git.

رجع بجرد لعشر ملفات، وبعدها... 113 ملاحظة. وحذف واحد بس.
الأخطاء المسماة الستين ما شطب منها ولا وحدة. نصها ينتقل لملفات قواعد، ونصها يبقى.
وقدّر إن الملف الرئيسي بينزل لحوالي 30,700 حرف. التدقيق الحقيقي وصل 30,104.
لقى كمان 8 تناقضات، أغلبها بين CLAUDE.md وملف AGENTS.md اللي طلع نسخة قديمة منه. واقترح علاجين، واحد منهم هو اللي سويته يوم التدقيق: ملف رقيق يحيل للأصل.

وهو تشغيل واحد بس.
وفاته ثلاثة من الخمسة اللي لقاها التدقيق الأصلي: الاسم المعتمد والممنوع بنفس الملف، ومهارة النشر، وقاعدة ما تبان غلطتها إلا لو قرأت الكود، والكود ما كان في النسخة.
ولقى الاثنين الباقيين: الإحالة الميتة ونسخة AGENTS.md القديمة.

التشغيل في الاختبار أخذ من الوكيل حوالي 14 دقيقة. ودورك أنت بعدها: تقرأ التقرير وتقرر.

النص يشتغل لحاله. واللي بعده في المقال هو السبب ورا كل اقتراح بيجيك منه، عشان توافق وأنت فاهم مو وأنت مغمض.

النص الجاهز في خمس مراحل: جرد ثم تدقيق ثم طريقة العمل ثم الذاكرة ثم التسليم، وبوابة موافقتك قبل أي تعديلافتح الصورة بالحجم الكامل
النص الجاهز في خمس مراحل: جرد ثم تدقيق ثم طريقة العمل ثم الذاكرة ثم التسليم، وبوابة موافقتك قبل أي تعديل

نشرة يونس

من فكرة AI إلى استخدام في شغلك

اشترك في نشرة يونس لتصلك خلاصاته الأسبوعية حول تطبيق الذكاء الاصطناعي في شغلك.

بالاشتراك توافق على تلقي نشرة يونس البريدية. مجانية، أسبوعية، ويمكنك إلغاء الاشتراك في أي وقت. الخصوصية

الملف الأطول يطيع أقل

في يونيو، في مشروع ثاني، كنت أرفق ملفات تعليمات جديدة وأكتب للوكيل: «هل اضفت ما ورد في الملف الذي ارفقته claude.md الى ملف claude.md الرئيسي».
وكان يضيف. كذا تكبر ملفاتي.

ملف المنصة في سبتمبر كان 259 سطر طويل. أكثر من نصه أخطاء مسماة محشوة بتواريخ وأرقام طلبات الدمج.

والحد اللي تنصح فيه Anthropic أقل من 200 سطر للملف الواحد. لأن الملف الطويل ياكل من السياق، والوكيل يطيعه أقل.
يعني كل سطر زيادة ما يضيف قاعدة. ياخذ من انتباه قاعدة ثانية.

فاسأل كل سطر في ملفك: لو حذفته بيغلط الوكيل؟
سطر مثل «اكتب كود نظيف» جوابه واضح، صح؟ أي نموذج يعرفه من قراءة الكود، فمكانه برا.

اللي يبقى في الملف الرئيسي أربعة أشياء: أوامر البناء والفحص الحقيقية، والقرارات المعمارية، والفخاخ اللي مو واضحة من الكود، وسبب كل قيد.

والباقي ينتقل لملفات قواعد، بالحرف.
أي قاعدة تخص مجلد معين تروح لملف في .claude/rules وفي رأسه سطر paths يحدد الملفات اللي يخصها. وهالملف ما يتحمل إلا لما يقرأ Claude ملف يطابق المسار.

قاعدة المسار لها حد ما يبان إلا وقت التقسيم. ما تشتغل في شغل ما يلمس ملف: استعلام SQL مباشر على القاعدة أو إيميل أو فحص موقع حي.
عشان كذا خلّى الوكيل أخطاء قاعدة البيانات والبريد وgit وويندوز في ملفي الرئيسي. وتركتها.
والأخطاء اللي تخص صفحات Next.js والواجهة والمحتوى انتقلت حرفياً لخمس ملفات قواعد.

هذا شكل ملف القاعدة. غيّر المسارات لمسارات مشروعك وانقل فيه الأسطر اللي تخصها كما هي:

البرومبت الجاهز للنسخ
---
paths:
  - "app/**/*.{ts,tsx}"
  - "components/**/*.tsx"
---
# قواعد الواجهة
- [انقل هنا حرفياً أسطر ملفك الرئيسي اللي تخص هذي الملفات]
- [ومع كل سطر سببه في جملة وحدة]

النتيجة عندي خمس ملفات قواعد جديدة، كل واحد يتحمل مع مساره بس.
وملف AGENTS.md اللي يقرأه Codex نزل من حوالي 25 ألف بايت إلى 3 آلاف. صار سطر يحيل لـ CLAUDE.md بدل نسخة ثانية منه.
وهذي تستاهل وقفة لو تشغّل أكثر من وكيل. Claude Code ما يقرأ AGENTS.md إذا لقى CLAUDE.md في المجلد. فلو عندك الاثنين كنسختين، كل وكيل يشتغل على نسخة، والنسختين يتباعدون من أول تعديل.

ملفي اليوم 236 سطر. فوق الحد بـ36.
لأن أخطاء قاعدة البيانات لازم تكون حاضرة في كل جلسة، حتى لو ما انفتح ملف. الحد هدف تقيس عليه، مو قانون تحذف عشانه قاعدة مهمة.

ملفه قبل وبعد: 259 سطراً في ملف واحد، ثم ملف رئيسي أخف وخمسة ملفات قواعد تتحمل حسب المسارافتح الصورة بالحجم الكامل
ملفه قبل وبعد: 259 سطراً في ملف واحد، ثم ملف رئيسي أخف وخمسة ملفات قواعد تتحمل حسب المسار

القاعدة اللي بلا «لأن» تنكسر أول ما يتغير الموقف

خذ السطر اللي في مهارة النشر عندي. «لا تراقب النشر بـ vercel ls | grep» لحاله ناقص.
بس في الملف مكتوب معه سببه: تنسيق مخرجات الأداة يتقلب بين إصداراتها. وهالسبب يخلي الوكيل يتجنب أي أمر ثاني يقرأ نفس المخرجات، حتى لو ما ذكرته. لأنه فهم وش تحمي القاعدة.
أما القاعدة اللي بلا سبب فيا تنطبق حرفياً في غير مكانها، يا تنترك أول ما يحس الوكيل إن الموقف مختلف.

ونفس المنطق ينطبق على الصراخ.
CRITICAL وMUST بالحروف الكبيرة و«لا تكن كسولاً» انكتبت لنماذج قديمة كانت تتكاسل. هذا السبب اللي كتبته في صفحة النص، وما قسته بتجربة: النماذج الجديدة تتبع الكلام بدقة، والصراخ يدفعها تبالغ.
والعكس صحيح: كلمة «حاول» في متطلب حقيقي يقراها إذن بالتقصير. اللي لازم يصير اكتبه أمر، بصوتك العادي.

ولقى التقرير غلطة ثالثة، في ملفاتي أنا بالذات.
مشروع كاتب فيه «بأقصى عمق متاح». وفي وكيل ثاني كاتب «reason step by step». وثمانية وكلاء Opus ما لهم مستوى جهد محدد، يعني كانوا يشتغلون بالافتراضي وأنا ما أدري.

وكل هذا ينحل بإعداد واحد اسمه effort، يعني كم يفكر ويشتغل النموذج قبل ما يرد. فالعمق ما ينطلب بجملة.
الوكلاء الثمانية صار لكل واحد مستوى مكتوب في رأس ملفه. والدرجات خمس: low وmedium وhigh وxhigh وmax.
وOpus 5.5 يبدأ على medium لو ما حددت، فإعداداتك القديمة لو نقلتها كما هي بتشتغل بجهد أقل مما تظن. وFable 5.1 تبدأ فيه بـ high، وتنزل لـ medium أو low في الشغل الروتيني لما تتأكد إن الجودة ثابتة.

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

ولو تبي تشوف حجم المشكلة قبل النص الكامل، هذا برومبت صغير تشغله على ملفك:

البرومبت الجاهز للنسخ
اقرأ CLAUDE.md وكل ملف في .claude/rules ولا تعدّل شيئاً.
اعرض لي جدولاً بثلاثة أعمدة:
1. كل قاعدة ليس معها سبب، ومعها سبب مقترح في جملة واحدة
   إن كان واضحاً من السياق، وإلا اكتب: «يحتاج سببك».
2. كل كلمة بالأحرف الكبيرة أو «حاول» أو «إن أمكن» أو
   «فكّر خطوة بخطوة»، والصياغة الهادئة البديلة.
3. كل طلب لعمق التفكير مكتوب نصاً، مع إعداد effort المقترح.
لا تخترع أسباباً. توقف بعد الجدول.

جربته عشان هالمقال على نفس النسخة القديمة من ملفاتي: حوالي 15 قاعدة بلا سبب، مثل «Tailwind فقط — تجنّب CSS مخصص». و«حاول» مرتين بس، وصفر طلب عمق بالنص، لأن جمل العمق كانت في مشاريع ثانية.

أهم سطر فيه «لا تخترع أسباباً». الوكيل اللي راجع ملفاتي ما اخترع سبب منع Haiku عندي لأنه ما لقاه مكتوب. كتب اللي يقدر يتحقق منه بس، وخلى الباقي لي.

تشريح القاعدة: السطر الناقص، ثم السطر مع سببه، وتحتهما درجات الجهد الخمس وموضع البداية لكل نموذجافتح الصورة بالحجم الكامل
تشريح القاعدة: السطر الناقص، ثم السطر مع سببه، وتحتهما درجات الجهد الخمس وموضع البداية لكل نموذج

لا تكتب في الملف رقم تقدر تحسبه

ومن اللي مسكه التدقيق شي في ذاكرة المشروع، الملفات اللي يدوّن فيها الوكيل دروسه. كانت تقول إن شغلات معلقة بانتظار الدمج، وهي مدموجة من أسابيع.
يعني أي وكيل يقراها يقدر يقول لي «هذا القرار لسا بيدك» عن شي صار في الإنتاج.
والرقم اللي تكتبه اليوم يصير قديم بكرة، وما أحد يدري. والوكيل يكرره بثقة، لأنه مكتوب في ملفك أنت.
التصحيح كان أربع ملفات وأربع أسطر، وما انعدل سطر قبل ما ينفحص بـ gh، أداة GitHub اللي تشتغل من الطرفية.

والحل جدول. اسمه «مصدر الحقيقة».
كل معلومة تتغير مثل عدد العناصر والأسعار وأسماء الأعمدة والإصدارات ما تنكتب قيمتها. ينكتب الأمر أو الملف اللي يحسبها في لحظتها.

البرومبت الجاهز للنسخ
## مصدر الحقيقة
| تحتاج | احسبه هكذا |
|---|---|
| [الأسعار] | [الملف الوحيد الذي يعرّفها، مثل lib/pricing.ts] |
| [عدد العناصر] | [أمر يعدّها الآن، مثل ls data/*.json] |
| [أسماء أعمدة الجدول] | [استعلام information_schema] |
| [الإصدار] | [package.json] |
أي رقم في هذا الملف غير الجدول = مرجع قديم، لا يُصدَّق.

والذاكرة نفسها تحتاج نفس الانضباط.
عندي كان في فهرس الذاكرة كتلة من 42 سطر، انتقلت لملف مستقل فنزل الفهرس من حوالي 21 ألف بايت إلى 17.5 ألف.
والسبب إن MEMORY.md اللي يكتب فيه Claude Code ملاحظاته ما يتحمل منه في بداية الجلسة إلا أول 200 سطر أو 25 كيلوبايت، واللي بعدها ما يوصل.
فكل درس في ملف لحاله وفي أوله سطر يلخصه، والفهرس سطر وحيد لكل ملف. وأي معلومة في الذاكرة تنفحص من الكود أو git قبل ما يعتمد عليها.

جدول مصدر الحقيقة: كل معلومة متغيرة وأمرها، وبجانبه ملف ذاكرة واحد بسطر الملخص وحدود التحميلافتح الصورة بالحجم الكامل
جدول مصدر الحقيقة: كل معلومة متغيرة وأمرها، وبجانبه ملف ذاكرة واحد بسطر الملخص وحدود التحميل

والادعاء الغلط أخطر من الرقم الغلط، لأنه يطلع من الوكيل وهو يسلمك الشغل.


الوكيل قال محمي، وما كان محمي

يوم التدقيق قال وكيل المراجعة إن حدّين أمنيين في chronicle، مشروع الذاكرة الشخصي عندي، مفروضين في الكود. والوكيل اللي ينفذ الإصلاحات فتح الكود قبل ما يكتب هالسطر، ولقى الحدّين غير مفروضين فعلياً.
فكتب الوضع كما هو، بدون حماية ما لها وجود.

لو كان هالسطر دخل ملف التعليمات، كل وكيل بعده بيبني على حماية ما لها وجود.

عشان كذا تعريف «خلصت» لازم يكون مكتوب في ملفك لكل نوع شغل وبأوامر حقيقية.
مو «تأكد إن كل شي يشتغل». لا. وش الأمر اللي ينشغل، ووش النتيجة اللي لازم تطلع.

البرومبت الجاهز للنسخ
## متى يكون العمل منتهياً
- تعديل كود: [أمر فحص الأنواع] ثم [أمر lint على الملفات
  المعدلة فقط] بصفر أخطاء جديدة.
- تغيير منشور: افتح الرابط الحي وأرني النتيجة، لا تصفها.
- كل ادعاء في تقريرك يقابله مخرج أداة من هذه الجلسة.
  ما لم تتحقق منه قله صراحة. وإن فشل اختبار فاذكر مخرجاته.

الأوامر بين القوسين هي أوامر مشروعك الحقيقية. النص الجاهز يطلعها بنفسه من package.json وإعدادات الفحص في مرحلته الأولى، وما يكتب أمر ما تحقق من وجوده. يعني «خلصت» عنده صار لها معنى واحد: شي تقدر تشوفه بعينك، مو شي يقوله لك.

وكيلان وحكم واحد: ادعاء الحماية، ثم فتح الكود، ثم السطر الذي كُتب فعلاً في الملفافتح الصورة بالحجم الكامل
وكيلان وحكم واحد: ادعاء الحماية، ثم فتح الكود، ثم السطر الذي كُتب فعلاً في الملف

قاعدة فوق قاعدة

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

الشكل اللي ينفع ثابت وله ثلاث قطع: الخطأ (وش بيسوي وكيل هنا) ← السبب (الآلية في جملة) ← القاعدة.
وعندي في ملفي مثالين من شهر واحد: يوم 24 يوليو نزل commit على فرع جلسة ثانية، لأن جلسة متزامنة حولت مجلد العمل المشترك لفرعها في نص المهمة، فصارت القاعدة «قبل كل commit شيك على الفرع الحالي».
وبعدها بثلاث أيام وصلني رابط معاينة من مشروع Vercel غلط، من اثنين بنفس الاسم تقريباً.
وكل صفحة تحتاج دخول في الغلط أعطت خطأ 500، فصار في الملف سطر يحدد المشروع الحي بالاسم.

أما لما القاعدة نفسها تكون غلط فالعادة إنك تكتب فوقها قاعدة تحذر منها، وهنا يبدأ الاختيار.
والتعارض ما يلزم يكون في نفس الملف. ملفك العام في ~/.claude/CLAUDE.md وملف المشروع يتحملون مع بعض، وما واحد منهم يلغي الثاني: لو تعارضوا ممكن يمشي على أي واحد.
عندي كانت خمس حالات:

  • ملف قواعد النصوص يعتمد اسم للعلامة ويمنعه في نفس الملف
  • مهارة النشر تستخدم طريقة المراقبة اللي تحذر منها
  • ملف قواعد يوصف رجوع لقيمة null ما هو موجود في الكود
  • ملف يحيل لقسم محذوف
  • وملف AGENTS.md اللي يقرأه Codex نسخة قديمة ناقصها حوالي 12 قاعدة

الإصلاح في الخمس كان واحد: القاعدة الغلط تنصلح في مصدرها. ما ينضاف سطر ثاني يقول «تجاهل اللي فوق».
وهذا النص تلصقه بعد أي غلطة كلفتك، قبل ما تصير سطر في ملفك:

البرومبت الجاهز للنسخ
أضف لقسم الأخطاء المسماة هذا الخطأ بصيغة سطر واحد:
الخطأ (ما سيفعله وكيل هنا) ← السبب (الآلية في جملة) ← القاعدة.
الخطأ: [صف ما حدث وتاريخه]
قبل الإضافة: ابحث في كل ملفات التعليمات عن أي قاعدة تتعارض
معه أو تكرره. إن وجدت قاعدة خاطئة فاقترح تعديلها في مكانها،
ولا تضف قاعدة تحذر منها. اعرض التعديل وانتظر موافقتي.

وجربته بغلطة 24 يوليو نفسها. ما أضاف شي: لقاها مكتوبة في ملفي من قبل، ورفض يكررها. وهذا بالضبط شغله.

التعثر اللي صار مرة وحدة وما كلف شي ما يستاهل سطر. السطر للي دفعت ثمنه أو للي بيتكرر.

خمسة أزواج متعارضة من ملفاته، كل زوج بسطريه، وسهم إلى الإصلاح في المصدرافتح الصورة بالحجم الكامل
خمسة أزواج متعارضة من ملفاته، كل زوج بسطريه، وسهم إلى الإصلاح في المصدر

قائمة التوقف تنكتب مغلقة

«اسأل لو شاكّ» تطلع لك واحد من اثنين: سيل أسئلة عن أشياء يقدر يعرفها من الكود، أو جرأة في المكان الغلط.

اللي يشتغل عندي قائمة مغلقة. حالات محددة يوقف فيها ويسألني، وكل شي غيرها يقرره بنفسه ويوثقه.
والسؤال نفسه له شكل: سطر سياق ثم الخيارات وتكلفة كل واحد ثم توصيته. سؤال واحد مو خمسة.

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

البرومبت الجاهز للنسخ
## متى تتوقف وتسألني (قائمة مغلقة)
- حذف لا رجعة فيه
- دفع أو فوترة
- رسالة تصل مستخدمين حقيقيين
- تعديل بيانات الإنتاج
- أسرار أو مصادقة
- تغيير قرار مكتوب هنا أنه محسوم
كل ما يُجاب من الكود أو البيانات: قرره بنفسك ووثقه.
سؤالك واحد: سطر سياق، ثم الخيارات وتكلفة كل منها، ثم توصيتك.
حين أقول «أكمل دون استئذان»، هذه القائمة مستثناة دائماً.

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

القائمة المغلقة: ست حالات توقف، وكل ما عداها قرار موثق، وشكل السؤال الواحدافتح الصورة بالحجم الكامل
القائمة المغلقة: ست حالات توقف، وكل ما عداها قرار موثق، وشكل السؤال الواحد

والقائمة المغلقة في الأخير نص.
والنص مهما كان واضح يقراه Claude ويحاول يلتزم فيه. يحاول.


اللي لازم يصير كل مرة، لا تكتبه تعليمات

منع Haiku في المهام الفرعية عندي ما يعتمد على سطر في الملف. فيه hook يرفض الطلب قبل ما يطلع، والملف يكتفي بسطر يقول إن الـ hook هو اللي يفرضه.
والـ hook سكربت صغير يشتغل تلقائياً قبل ما يستخدم الوكيل أداة ويقدر يوقفها. الملف ينقرا وينفهم، والـ hook ينفّذ في كل مرة.

وهذا بالضبط اللي يقوله توثيق Claude Code: ملفات التعليمات سياق مو إعدادات مفروضة، ولو تبي تمنع فعل مهما قرر Claude استخدم hook.
وفي نفس التدقيق طلع العكس: تعليمات lint كانت تقول استخدم git stash ثم pop. والمخزن هذا مشترك بين كل مجلدات العمل والجلسات اللي شغالة بنفس الوقت، يعني pop ممكن يسحب شغل جلسة ثانية. انشال الأمر من التعليمات وصارت المقارنة بطريقة ما تلمس المخزن أبداً.

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

البرومبت الجاهز للنسخ
اقرأ CLAUDE.md وملفات .claude/rules ولا تعدّل شيئاً.
استخرج كل قاعدة تمنع فعلاً خطيراً «دائماً» أو «أبداً»
(push مباشر، حذف، أوامر git معينة، ملفات محمية).
لكل واحدة اقترح: hook من نوع PreToolUse يمنعها، أو قيد صلاحية
في settings.json، مع النص الكامل للتعديل المقترح.
لا تطبّق شيئاً. اعرض الاقتراحات وانتظر موافقتي.

وعلى نفس النسخة رجع بست اقتراحات، أولها hook يمنع حذف ملفات الأنظمة، وثانيها hook يمنع الـ push المباشر لـ master بدل الاعتماد على حاجب خارجي.
ست قواعد كانت مجرد كلام في الملف، والاقتراحات تعطي كل وحدة مكان ينفذها.

الفرق بين سطر في الملف وhook: السطر يُقرأ ويُوزن، والـ hook يوقف الأداة قبل التنفيذافتح الصورة بالحجم الكامل
الفرق بين سطر في الملف وhook: السطر يُقرأ ويُوزن، والـ hook يوقف الأداة قبل التنفيذ

أول جلسة: خمس علامات إنك خلصت

كل علامة هنا شي تشوفه بعينك في الجلسة نفسها، مو شي يقوله لك الوكيل. والنص الجاهز يطلعها لك بنفسه.

  • جرد بكل ملفات التعليمات، بعدد أسطر وحجم كل ملف. قبله ما يتعدل شي
  • تقرير فيه لكل ملاحظة الملف والسطر والنص والمبدأ اللي تخالفه والإجراء ودرجة الثقة، وكل قاعدة بلا سبب معلّمة لك مو مخترع لها سبب
  • نسخة احتياطية من كل ملف قبل أول تعديل. عندي كانت 91 ملف مع بصمة sha256 لكل واحد، وخارج git
  • سكربت يثبت إن كل سطر قديم في مكانه الجديد، ما عدا اللي وافقت على تغييره. عندي فحص 496 معرّف، وما راح منها إلا اثنين عن قصد
  • ملاحظات وكيل Opus ثاني راجع التعديلات الكبيرة، وتطبق منها اللي يثبت بعد ما تتحقق منه. عندي رجع بـ11 ملاحظة، وصفر معلومة ضايعة

وعندي مشت الخمس، على حوالي 150 ملف تعليمات من كل مشاريعي، في ساعة وحدة تقريباً: ربع ساعة بين جمع المبادئ وطلب المراجعة، ودقايق بين التقرير وأمر التنفيذ، ومن أول رسالة لين الدمج أقل من ساعة.

ولو رجع Claude يكسر قاعدة بعدها، هذي ثمانية أسئلة بالترتيب:

  1. هل القاعدة لها «لأن»؟
  2. هل فيه قاعدة ثانية تقول عكسها في أي ملف؟
  3. هل هي في ملف قاعدة مسار والشغل ما لمس ملف من المسار؟
  4. هل الملف الرئيسي فوق 200 سطر؟
  5. هل فيها رقم مكتوب بدل أمر يحسبه؟
  6. هل هي «دائماً/أبداً» على فعل خطير؟ مكانها hook.
  7. هل مكتوبة بصراخ أو بـ«حاول»؟
  8. صححته مرتين في نفس المسألة وما نفع؟ افتح جلسة جديدة (/clear) ببرومبت أوضح بدل تصحيح ثالث.

عادة يونيو، «ضفت اللي فيها للملف الرئيسي؟» بدل «وين مكانها؟»، دفعت ثمنها في سبتمبر: 259 سطر، وخمس تناقضات ما شفتها إلا في تقرير.

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

كل قاعدة مرة وحدة، في مكانها، ومعها سببها

سطر الاسم في ملف قواعد النصوص، اللي بدأ منه كل هذا، صار اليوم يقول شي واحد ويحيل للقاعدة اللي فوقه.
وهذا تعريف الملف اللي يلتزم فيه Claude: كل قرار له سطر واحد يحسمه، وسطر يشرح ليش.

الحجم يحكي الباقي: 41,371 حرف قبل التدقيق، و30,104 بعده بأقل من ساعة، و31,309 اليوم.
والالتزام نفسه ما قسته برقم. اللي أقدر أقوله: التناقضات الخمسة اللي لقاها التقرير انصلحت في مكانها، وهي بالضبط اللي كانت تخلي Claude يختار بدالي.
الملف بيرجع يكبر، وهذا طبيعي. المهم إن كل سطر جديد يعرف مكانه قبل ما ينكتب.

النص الجاهز يرتب ملف موجود. ولو مشروعك بدون ملف تعليمات من الأساس، ففي مُشَيِّد قوالب مكتوبة لنوع مشروعك: Next.js ومشاريع المحتوى ومشاريع Python وML وmonorepo ومنظومات الوكلاء، على moshid.com

أول سطر في جلستك الجاية: «عدّ أسطر CLAUDE.md، وعلّم كل قاعدة ما معها لأن».

كتبه يونس، مؤسس مُشَيِّد.

نشرة يونس

من فكرة AI إلى استخدام في شغلك

اشترك في نشرة يونس لتصلك خلاصاته الأسبوعية حول تطبيق الذكاء الاصطناعي في شغلك.

بالاشتراك توافق على تلقي نشرة يونس البريدية. مجانية، أسبوعية، ويمكنك إلغاء الاشتراك في أي وقت. الخصوصية

الخطوة التالية داخل مُشَيِّد

خلّ القواعد المهمة تنفّذها الأداة

بعد ترتيب التعليمات، يساعدك دليل Hooks في Claude Code ضمن العضوية على تحويل القواعد التي يجب فرضها كل مرة إلى خطافات تعمل تلقائياً.

اطّلع على العضوية
العودة إلى المقالات