الموديل يتكلّم فقط. الـ harness يجعله يعمل.
دليل عملي عن البرنامج الذي يحيط بموديل الذكاء الاصطناعي. ركّبه بيدك، قطعة قطعة، وشاهد قوته تكبر.
نفس الموديل، عالمان مختلفان
أنتاقرأ الملف app/build.gradle.kts وقل لي قيمة minSdk.
- اضغط «أرسل» والمفتاح مطفأ، ثم مرة ثانية وهو شغّال. لاحظ الفرق.
الموديل: آلة تخمّن الكلمة التالية
نبدأ بالجزء الذي يتكلم عنه الجميع، ونرى كم هو محدود وحده.
الـموديل (AI model) هو شبكة عصبية تعلّمت من كمية ضخمة من النصوص. ما تعلّمه محفوظ في مليارات الأرقام، واسمها . الموديل يقسّم كلامك إلى قطع صغيرة اسمها ، ثم يخمّن أي قطعة تأتي بعدها. ويكرّر هذا حتى يكتمل الجواب. هذه العملية اسمها .
هذه الأرقام لا تتغيّر وأنت تستخدمه. الموديل لا يتعلّم من محادثتك. عندما ينتهي الطلب، يبقى الموديل كما كان تمامًا.
هل الموديل هو كل شيء؟
الـ (أو benchmark) هو مجموعة ثابتة من المهام نقيس بها الموديلات. أقوى الموديلات صارت نتائجها متقاربة. لذلك عندما يتفوّق تطبيق على آخر يستخدم موديلًا قريبًا منه، السبب غالبًا في ما بُني حول الموديل.
لكن هذا لا يعني أن الموديل لا يهم. الموديل الضعيف لا ينقذه شيء. سترى الاثنين معًا، بالأرقام، في المستوى 7.
هذا ما يراه الموديل
أقوى تخميناته للكلمة التالية
كل ضغطة هي خطوة inference واحدة: يختار الكلمة الأرجح، يضيفها، ثم يخمّن من جديد.
اطلب من الموديل وحده أن…
اضغط على كل طلب لترى ماذا يحدث فعلًا عندما لا يوجد harness.
«افتح الملف app/build.gradle.kts»
لا يستطيع. سيكتب ما يحتويه ملف مثل هذا عادةً. الكلام يبدو واثقًا، لكنه وصف وليس قراءة. هذا الفرق بين أن يصف وأن يفعل هو موضوع هذا الدليل كله.
«شغّل الاختبارات»
لن يشتغل أي شيء. وقد تحصل على تقرير اختبارات مُختلَق يبدو حقيقيًا. فقط harness فيه أداة لتشغيل الكود يستطيع تشغيل الأمر وإرجاع النتيجة الحقيقية.
«ما الجديد في المكتبة التي نزلت الأسبوع الماضي؟»
لا يعرف. أرقامه تجمّدت يوم انتهى تدريبه. بدون أداة للإنترنت، سيجيب من معلومات قديمة، أو يخمّن.
«تذكّر قواعد مشروعي للغد»
سينسى. كل طلب يبدأ من الصفر. يبدو أنه يتذكّر داخل المحادثة فقط لأن التطبيق يرسل المحادثة كلها من جديد مع كل رسالة. الذاكرة الحقيقية بين الأيام هي شغل الـ harness (المستوى 4).
الـ harness: ما يحوّل الكلام إلى عمل
كل ما حول الموديل: الأدوات التي يطلبها، وما يبقى في ذهنه، والـ loop الذي يجعله يستمر، والقواعد التي يلتزم بها.
الـ هو البرنامج الذي يقف بين الموديل والعالم الخارجي. يرسل الطلبات إلى الموديل، ويقرأ ما يطلبه الموديل، وينفّذه فعلًا، ثم يعيد النتائج إليه.
ضع موديل و harness معًا، وأعطهما هدفًا، واتركهما يعملان على خطوات كثيرة بدل ردّ واحد. هذا الثنائي اسمه (وكيل).
القطع كثيرة، لكنها أربع عائلات: الأدوات (يدا الموديل)، والذاكرة (ما يبقى أمامه)، والدورة (خطوات كثيرة بدل ردّ واحد)، والقواعد (ما هو مسموح). بدل أن نشرحها الآن، ركّبها بيدك.
المختبر: ركّب الـ harness بيدك
اسحب القطع إلى اللوحة، واختر مهمة وموديلًا، ثم اضغط «شغّل». كل قطعة تضيف قدرة، وتظهر فورًا على الرسم. شغّل مرة بعد مرة، وشاهد القوة تكبر.
المهمة
الموديل
اسحب قطعة إلى هنا، أو اضغط عليها في الأعلى.
اضغط «شغّل» والموديل وحده على اللوحة. ثم أضف قطعة وشغّل مرة ثانية.
قوة كل تشغيل
ماذا حدث، خطوة بخطوة
- لم تشغّل بعد. في وضع «خطوة بخطوة» يتوقف بعد كل خطوة، لتقرأ كيف حدثت ولماذا.
لماذا هذه النتيجة؟
الأرقام توضيحية، وليست قياسًا لموديل معيّن. لكنها تتبع ما تقوله الـ benchmarks الحقيقية، وستراها في المستوى 7.
الجزء 2 · القطع
الأدوات: كيف يمدّ الموديل يده إلى العالم
الأداة وظيفة يقدّمها الـ harness. الموديل يطلبها. والـ harness ينفّذها.
كل (أداة) توصف بثلاثة أشياء: اسم، وفائدتها، والمدخلات التي تحتاجها. الموديل لا يشغّل الوظيفة أبدًا. هو يكتب طلبًا منظّمًا فيه اسم الأداة والمدخلات. الـ harness يتأكد من الطلب، ويشغّل الوظيفة، ويعيد النتيجة إلى الموديل.
تعريف أداة حقيقي، كما يراه الموديل
- name
read_file- description
- تقرأ ملف نص داخل المشروع وتعيد محتواه.
- parameters
path(نص، مطلوب): مسار الملف من بداية المشروع
طلب أداة واحد، خطوة بخطوة
- الـ harness يرسل للموديل قائمة الأدوات مع المحادثة.
- الموديل يردّ بطلب أداة: «اقرأ هذا الملف».
- الـ harness يتأكد من الطلب حسب قواعد الصلاحيات.
- الـ harness ينفّذ الطلب ويأخذ النتيجة.
- الـ harness يضيف النتيجة إلى المحادثة ويرسلها للموديل من جديد.
كروت الأدوات في يدك
كل قدرة هنا هي نفس الفكرة: الموديل يطلب، والـ harness ينفّذ. اختر كرتًا، وشاهد في 30 ثانية ماذا يحدث بالضبط، خطوة بخطوة.
على الهاتف: شغّل الفيديو بملء الشاشة، وأدر الهاتف، حتى تقرأ النص بوضوح.
اختر كرتًا لترى ماذا يطلب الموديل، وماذا يفعل الـ harness، وما الذي يجب أن تنتبه له.
شاهد الفرق: إصلاح اختبار فاشل
مطوّر يطلب من الموديل إصلاح اختبار فاشل في الملف LoginViewModelTest.kt.
الموديل لا يملك ملف الاختبار ولا رسالة الفشل. فيكتب إصلاحًا يبدو منطقيًا، اعتمادًا على اسم الاختبار فقط.
تطبّقه، وتشغّل الاختبارات، فيظهر نفس الفشل. تخمين
الموديل يقرأ ملف الاختبار والكلاس الذي يُختبَر، ويشغّل الاختبارات، ويقرأ الخطأ الحقيقي:
$ ./gradlew :app:testDebugUnitTest --tests "*LoginViewModelTest*" LoginViewModelTest > emitsErrorOnEmptyPassword FAILED expected: LoginState.Error(message=Password required) but was: LoginState.Idle
الآن يرى السبب الحقيقي: الكود يخرج قبل أن يُظهر حالة الخطأ. يعدّل السطر 47 فقط، ثم يعيد تشغيل الاختبارات، فتنجح. تم التأكد
إصلاح واحد مؤكَّد بدل دائرة: تخمين، ثم تطبيق، ثم فشل. في الواقع هذا يوفّر مرتين أو ثلاثًا من المراجعة لكل خطأ.
الذاكرة: طاولة صغيرة تمتلئ
الذاكرة الوحيدة التي يعمل بها الموديل هي الـ context window. حجمها ثابت، وكل شيء يتكدّس فوقها.
الـ هي أكبر عدد من الـ tokens يستطيع الموديل أن يقرأه في طلب واحد. فيها تعليمات الـ harness، والمحادثة كلها، وكل نتيجة أداة حتى الآن، والجواب الذي يُكتب.
من هنا نفهم شيئين. أولًا: كل طلب أكبر من الذي قبله، لأن نتائج الأدوات تبقى في المحادثة. ثانيًا: عندما تنتهي الجلسة، يختفي كل هذا. الجلسة التالية تبدأ فارغة.
الـ harness يعالج الأمرين. داخل الجلسة يستطيع أن يعمل (تلخيص): عندما تمتلئ الطاولة، يستبدل التفاصيل القديمة بملخّص قصير يحفظ الهدف، والقرارات، والملفات التي تغيّرت، والأخطاء التي لم تُحل. وبين الجلسات يحمّل (ملف تعليمات)، حتى يبدأ الموديل كل يوم وهو يعرف قواعد مشروعك.
اعمل شيئًا
أضف عملًا حتى يصير الشريط أحمر، ثم جرّب «لخّص».
ملف التعليمات: ذاكرة تبقى للغد
ملف التعليمات يوضع في مجلد مشروعك، ويُحمَّل في بداية كل جلسة. أشهر أسمائه AGENTS.md وCLAUDE.md. هو يخبر الموديل بالقواعد التي كان سيخمّنها: المكتبات المسموحة، وترتيب المجلدات، وأوامر الـ build والاختبار، وما يجب ألّا يُلمس. أطفئه وشغّله لترى الفرق.
أنتأضف شاشة إعدادات للتطبيق.
اعرض الملف
# Project Conventions ## Architecture - MVVM with Clean Architecture: data, domain, presentation - Dependency injection with Hilt ## UI - Jetpack Compose only. Do not add XML layouts. ## Commands - Build: ./gradlew :app:assembleDebug - Test: ./gradlew :app:testDebugUnitTest - Lint: ./gradlew ktlintCheck ## Constraints - Do not edit files under /generated - Network calls go through Retrofit interfaces in data/remote
اجعله قصيرًا وواضحًا. هو يُحمَّل مع كل طلب، فتدفع ثمن كل سطر فيه في كل مرة.
ابحث أولًا، بدل أن تحمّل كل شيء
المشروع الحقيقي أكبر بكثير من أي context window. وحتى لو اتسع، تحميل أغلبه يضيّع المساحة، لأن الكلام الذي لا علاقة له يغطّي على المهم. المهمة: تغيير طريقة تجديد جلسة الدخول (refresh token) في تطبيق Android فيه 4,000 ملف.
الخطة أ
الخطة ب
- البحث بالنص (Pattern search)
- يطابق نصًا محددًا أو regex في الملفات، مثل
grep -rn. سريع عندما تعرف الاسم. - البحث بالمعنى (Semantic search)
- يطابق المعنى باستخدام . مفيد عندما تختلف كلماتك عن كلمات الكود.
- فهرس الكود (Code index)
- خريطة للتعريفات والمراجع ومن يستدعي من. يجيب عن سؤال مثل: «من يستدعي هذه الدالة؟»
الـ loop: خطّط، نفّذ، انظر، كرّر
ردّ واحد يعني روبوت محادثة. جولات كثيرة، كل واحدة تتأكد من التي قبلها، تعني agent.
الـ هو الدورة التي يكرّرها الموديل والـ harness حتى ينتهي العمل. خطّط: الموديل يختار الخطوة التالية ويطلب أداة. نفّذ: الـ harness يشغّلها فعلًا. انظر: الـ harness يعيد النتيجة، والموديل يقرأها قبل أن يقرر ما بعدها. تتوقف الدورة عندما يتحقق الهدف، أو يقول الموديل إنه انتهى، أو يصل الـ harness إلى حدّ معيّن.
خطوة «انظر» هي الأهم. الموديل الذي يعمل دون أن يقرأ نتيجة خطوته السابقة لا يستطيع أن يصحّح نفسه. سيستمر في البناء فوق شيء مكسور.
جرّبها: أضف حقلًا إلى جدول في قاعدة البيانات
مطوّر يطلب حقلًا جديدًا اسمه email في جدول Room. شغّل المثال مرة والتأكد مطفأ، ومرة وهو شغّال.
- اضغط «الجولة التالية» للبدء.
التأكد من العمل، داخل الدورة
الـ (التأكد) يعني أن تفحص العمل على الواقع أثناء الدورة، وليس بعدها. أشهر أنواعه: الاختبارات تُشغَّل بعد كل تغيير، وفحص الـ build والـ lint يلتقط ما تفوّته الاختبارات، والفحص بالنظر يأخذ صورة للتطبيق وهو يعمل، والموديل المراجِع هو موديل ثانٍ يقرأ التغييرات ويعيد المشاكل إلى الدورة. كل فحص يلتقط الخطوة الخاطئة وهي ما زالت سهلة الإصلاح. وهو أقوى علامة أن الـ agent سيبقى على الطريق الصحيح في المهام الطويلة.
القواعد: أنت الـ harness الآن
الموديل يطلب. الـ harness يقرّر. اجلس مكان الـ harness لثمانية طلبات.
الحدود موجودة في الـ harness، وليس في الموديل، لأن الموديل يكتب طلبًا فقط، والـ harness يختار هل ينفّذه أم لا. قواعد معروفة: قائمة أوامر آمنة مسموحة (allow list)، وقائمة أوامر خطيرة ممنوعة (deny list)، وانتظار موافقة إنسان قبل الكتابة خارج المشروع، وحدّ لعدد الجولات، وحدّ للمصروف. لكل طلب، اختر الخيار الأكثر أمانًا الذي يترك العمل يمشي.
الموديل
الجزء 3 · الصورة الكبيرة
الموديل أم الـ harness؟ الاثنان، وبالضرب
الـ harness لا يصنع ذكاءً غير موجود. والذكاء بلا harness يبقى كلامًا.
ستسمع كثيرًا: «الـ harness هو كل شيء، والموديل لا يهم». وستسمع العكس أيضًا. الحقيقة أبسط من الاثنين: النتيجة تشبه الضرب أكثر من الجمع. إذا كان أحد الطرفين قريبًا من الصفر، فالنتيجة قريبة من الصفر، مهما كان الطرف الآخر قويًا.
تجربة المطبخ
شغّل المفتاحين وأطفئهما، وانظر ماذا يخرج من المطبخ.
كل التركيبات في جدول واحد
هذا محرّك المختبر نفسه، لكن لكل التركيبات مرة واحدة. الصفوف قوة الموديل، والأعمدة قوة الـ harness. اضغط أي خانة لتعرف السبب.
ماذا تقول الأرقام الحقيقية؟
المختبر مبسّط. هذه نتائج منشورة، من benchmarks يُقاس فيها الموديل والـ harness معًا.
نفس الـ harness، موديلات مختلفة
SWE-bench Verified: إصلاح مشاكل حقيقية في مشاريع Python. الـ harness واحد للجميع: 100 سطر، وأداة bash فقط.
المصدر: swebench.com، قائمة «bash only».
نفس الموديل، harness مختلف
Terminal-Bench 2.0: مهام حقيقية في الـ terminal. كل موديل جُرّب داخل أكثر من harness.
المصدر: tbench.ai. لاحظ: الـ harness الأفضل ليس دائمًا harness الشركة نفسها. المهم أن يناسب الموديل.
اقرأ اللوحتين معًا. تحت نفس الـ harness، النتيجة تتراوح من 9% إلى 77%: الموديل مهم جدًا. ونفس الموديل يتحرك 21 نقطة عندما يتغيّر الـ harness: الـ harness مهم جدًا. ومثال أخير: GPT-4o في أفضل harness وصل إلى 38.8%، بينما موديل حديث قوي داخل loop من 100 سطر وصل إلى 76.8%. الـ harness لم ينقذ الموديل الأضعف.
الموديل يحدّد السقف. الـ harness يحدّد كم تقترب منه.
هذه الجملة التي تقولها لمن يسألك: «هل الموديل مهم إذا كان الـ harness قويًا؟»- بين موديلين قويين ومتقاربين، الـ harness غالبًا هو الذي يحسم. من هنا جاءت جملة «الـ harness هو كل شيء». هي صحيحة، لكن فقط في هذه الحالة.
- الموديل الضعيف لا ينقذه أي harness. الـ harness ينفّذ قرارات الموديل، ولا يتخذها عنه: أي أداة يطلب، وماذا تعني رسالة الخطأ، ومتى يتوقف. هذا كله عقل الموديل.
- الـ harness صار ممكنًا لأن الموديلات تعلّمت. طلب أداة بشكل صحيح، والبقاء على الهدف لساعات، مهارات تدرّب عليها الموديل. في اختبار BFCL لطلب الأدوات على عدة خطوات، موديلات صغيرة جدًا سجّلت 0% تقريبًا، وموديلات قوية فوق 60%.
- كلما قوي الموديل، صار الـ harness أبسط. مع موديلات Claude 5، حذفت Anthropic أكثر من 80% من تعليمات Claude Code، بدون خسارة في نتائج البرمجة. الـ harness والموديل يكبران معًا.
وإذا أردت جملة قصيرة جدًا: لو كان الـ harness وحده يكفي، لركّبنا أفضل harness على موديل من 2019 وانتهينا. هذا لا يعمل.
عندما يفشل الـ agent: أي نصف انكسر؟
معرفة المسؤول تخبرك ماذا تصلح. حدّد المسؤول عن كل فشل.
يذكر ملفًا غير موجود.
يتجاهل قواعد مشروعك.
ينسى قرارات سابقة في جلسة طويلة.
يقول «انتهيت»، لكن الكود لا يعمل أصلًا.
شغّل أمرًا مسح شغل شخص آخر.
الكود يعمل، لكن المنطق ضعيف.
أصلح بهذا الترتيب، الأرخص أولًا
- التعليماتأضف ملف التعليمات أو حسّنه. الأرخص، وغالبًا الأكثر فائدة.
- التأكدشغّل الـ build والاختبارات بعد التعديلات، وأعد النتيجة للموديل.
- البحثاستبدل تحميل كل شيء بالبحث، حتى تذهب المساحة لما يهم.
- الأدواتأضف القدرة الناقصة، مدمجة أو عبر MCP.
- الموديلعندما يصير الموديل هو السقف. وإذا كان ضعيفًا جدًا من البداية، فابدأ به.
شيء أخير: الخط بين الاثنين يتحرك. قدرات كانت في كود الـ harness، مثل التخطيط الطويل والتأكد من العمل، صارت تُدرَّب داخل الموديلات. والثبات في المهام الطويلة، الذي كان يُعتبر صفة في الموديل، صار يتأثر كثيرًا بعادات الـ harness وملفات التعليمات. لذلك تأكّد أين توجد القدرة، ولا تفترض.
ماذا يحدث عندما… (أشياء تتجاوزها أغلب الشروحات)
ستة أشياء لم تكن في الدليل الأصلي، وتفسّر الكثير من تصرفات الـ agents الحقيقية. اضغط على الكرت لتقلبه.
الجزء 4 · ابنِ بنفسك
الـ SDK: ابنِ agent بالكود
نفس الـ harness الذي يشغّل Claude Code، لكن كمكتبة داخل مشروعك. أنت تختار القطع، والـ SDK يدير الدورة.
الـ مكتبة لـ Python وTypeScript. فيها أدوات جاهزة (قراءة، وتعديل، وأوامر، وبحث)، والدورة، وإدارة الذاكرة، والصلاحيات، والـ hooks، والوكلاء المساعدون. أنت لا تكتب الدورة بنفسك. أنت تكتب الإعدادات: ماذا يعرف الـ agent، وماذا يستطيع، وما الممنوع.
الدورة داخل الـ SDK أربع خطوات: اجمع المعلومات، ثم نفّذ، ثم تأكّد، ثم كرّر. نفس ما رأيته في المستوى 5.
pip install claude-agent-sdk npm install @anthropic-ai/claude-agent-sdk
query() لطلب واحد تقرأ نتيجته حتى النهاية. وClaudeSDKClient لمحادثة فيها أكثر من رسالة.
كل إعداد هو قطعة من المختبر
- system_prompt
- الذاكرة: من هو، وكيف يعمل
- allowed_tools
- الأدوات: ماذا يستطيع أن يفعل
- mcp_servers
- الأدوات: تطبيقات وخدمات من الخارج
- permission_mode
- القواعد: ماذا يحتاج موافقتك
- hooks
- القواعد: كود يعمل قبل الأداة أو بعدها، كل مرة
- agents
- الدورة: وكلاء مساعدون بذاكرة خاصة
- max_turns
- القواعد: حدّ لعدد الجولات
ركّب إعدادات الـ SDK لعملك
اختر نوع العمل، وأضف ما تحتاج. الكود يتغيّر معك، والأسطر الجديدة تضيء.
نوع العمل
أضف
الصلاحيات
الكود للتعلّم، ومبني على توثيق الـ SDK الرسمي في سبتمبر 2026. قبل الاستخدام الحقيقي، راجع التوثيق، لأن الأسماء قد تتغيّر.
قواعد صغيرة لـ agent أفضل
- ابدأ بأقل عدد من الأدوات. وصف كل أداة يأخذ مكانًا في الـ context، وكل أداة زائدة فرصة جديدة للخطأ.
- اكتب وصف الأداة كأنه لزميل جديد. وصف الأداة هو تعليمات للموديل. عندما جعلت Anthropic أداة التعديل تطلب مسارًا كاملًا دائمًا، اختفت أخطاء المسارات تقريبًا.
- القاعدة التي يجب ألّا تُكسر، ضعها في hook. ملف التعليمات نصيحة. الـ hook كود يعمل كل مرة، ولا ينسى.
- أعطِ الـ agent طريقة ليتأكد. اختبارات، أو فحص بقواعد واضحة، أو صورة للنتيجة. الفحص بقواعد واضحة هو الأقوى.
- قِس قبل أن تحسّن. ابدأ بـ 20 مهمة حقيقية، من أخطاء حدثت فعلًا. واقرأ ما فعله الـ agent خطوة بخطوة، وليس النتيجة فقط.
الوكلاء المساعدون: كيف تصنع subagent فعّالًا
الـ subagent زميل ذكي، لكنه لم يحضر الاجتماع. كل ما يعرفه هو ما تكتبه له.
الـ هو agent ثانٍ يشغّله الـ agent الرئيسي لمهمة جانبية. له context جديد خاص به، وتعليمات خاصة، وأدوات تختارها أنت. يعمل وحده، ثم يعود بملخّص قصير فقط. فوائده ثلاث: ذاكرة الـ agent الرئيسي تبقى نظيفة، وأكثر من عمل في نفس الوقت، وتخصّص بأدوات أقل وأكثر أمانًا.
الطاولة النظيفة
نفس المهمة: البحث عن سبب بطء التطبيق في 3 أماكن. راقب ذاكرة الـ agent الرئيسي.
أصلح هذا الـ subagent
هذا ملف subagent ضعيف، من النوع الذي يكتبه أغلب الناس أول مرة. اضغط على كل سطر أحمر، واختر سطرًا أفضل. وراقب مؤشر الفعالية.
.claude/agents/code-reviewer.md
ثماني قواعد لـ subagent فعّال
- الوصف قاعدة توجيه. قل ماذا يفعل، ومتى يُستدعى: «استخدمه بعد كل تعديل». الـ agent الرئيسي يقرأ الوصف فقط ليقرّر.
- مهمة واحدة واضحة، تنتهي بملخّص.
- اكتب له كل ما يحتاجه، لأنه يبدأ فارغًا: الهدف، وشكل النتيجة، والأدوات والمصادر، والحدود. Anthropic وجدت أن الأوامر القصيرة جدًا جعلت الوكلاء يفهمون المهمة خطأ، أو يكرّرون نفس البحث.
- حدّد شكل الرد: قصير وثابت. الأشياء الكبيرة تُحفظ في ملف، ويعود اسم الملف فقط.
- أعطه الأدوات التي يحتاجها فقط. الباحث والمراجع يقرآن، ولا يكتبان.
- الكتابة لـ agent واحد. الوكلاء المساعدون يبحثون ويقرأون ويراجعون. واحد فقط يعدّل الملفات، حتى لا تتعارض القرارات.
- الجهد على قدر المهمة. سؤال بسيط: agent واحد. بحث متوسط: من 2 إلى 4 وكلاء. بحث كبير: أكثر من 10. واختر موديلًا أرخص للمهام الضيقة.
- عامله كأي كود. جرّبه، واقرأ ما فعله، وحسّن وصفه، واحفظه في git.
بالتوازي، بلا تصادم
القراءة بالتوازي آمنة. أما الكتابة بالتوازي، فهي المكان الذي يتصادم فيه الوكلاء. خلاصة Cognition في أبريل 2026: الكتابة تبقى في يد واحدة، والوكلاء الإضافيون يضيفون فهمًا، وليس أفعالًا.
جرّبها بنفسك. مهمة واحدة: إضافة «البحث المحفوظ» إلى تطبيق. يعمل عليها agent رئيسي وثلاثة وكلاء: الـ API، والواجهة، والاختبارات. أطفئ القواعد وشغّلها، وانظر أين يتصادمون، ولماذا.
الوقت والـ tokens هنا أرقام توضيحية. أما القصص تحت كل قاعدة فحقيقية، ولها مصادر.
قواعد العمل بالتوازي
- اقرأ بالتوازي بحرية. واكتب في يد واحدة، أو قسّم الملفات بصرامة.
- الرئيسي يكتب الخطة أولًا: العقد بين الأجزاء، ومن يملك أي ملف، وأسماء الفروع، وطريقة التأكد من أن كل جزء انتهى.
- كل كاتب في مساحة منفصلة (worktree أو container)، ويحفظ ملفاته هو فقط.
- اطلب العمل بشكل يراه الجميع: ملف قفل، أو قائمة مهام مشتركة. في بناء مترجم C، كان الوكيل يكتب ملفًا في مجلد
current_tasks/ليحجز مهمة. - النتائج في ملفات، ويعود ملخّص قصير بشكل ثابت، من 1,000 إلى 2,000 token تقريبًا.
- ضع حدودًا لكل شيء: عدد الوكلاء حسب حجم المهمة، وعدد الجولات، والـ tokens، والوقت.
- خطوة دمج واحدة تنتظر الجميع. ادمج واحدًا بعد الآخر، بترتيب الاعتماد، وشغّل الاختبارات بعد كل دمج.
- راجع بوكلاء لم يكتبوا الكود، بسياق جديد، واعتمد على اختبارات حقيقية.
- عندما يعلق كل الوكلاء على نفس الخطأ، لا تضف وكلاء. قسّم المشكلة، أو غيّر الموديل.
متى يستحق التوازي؟
- قراءة وبحث واسع. في نظام البحث عند Anthropic، التوازي قلّل الوقت حتى 90%.
- وحدات كثيرة مستقلة، لكل واحدة اختبارها: ملفات تُنقل، أو اختبارات تُصلح.
- أكثر من زاوية مراجعة، أو أكثر من فرضية لخطأ واحد.
ومتى لا يستحق؟
- عمل مترابط، أو تعديلات على نفس الملف.
- عندما يكون الناتج أكثر مما يستطيع إنسان مراجعته. Simon Willison يقول إنه يستطيع أن يراجع تغييرًا كبيرًا واحدًا فقط في كل مرة.
- عندما لا تستحق المهمة الثمن: الـ agent حوالي 4 أضعاف tokens المحادثة، وعدة وكلاء حوالي 15 ضعفًا.
متى لا تستخدم subagent؟
- عندما تحتاج المهمة ذهابًا وإيابًا كثيرًا معك.
- عندما تتشارك الخطوات نفس السياق: خطّط، ثم ابنِ، ثم اختبر نفس الشيء.
- تعديل صغير وسريع، أو عندما يهمّك الوقت.
- عندما سيكتب أكثر من agent في نفس الملفات.
الأرقام من Anthropic
في نظام البحث عندهم، agent رئيسي مع وكلاء مساعدين تفوّق على agent واحد بـ 90.2% في اختبارهم الداخلي. لكنه صرف حوالي 15 ضعف tokens المحادثة العادية. استخدمه عندما تستحق المهمة هذا الثمن.
الـ RAG: كيف يجد الـ agent الجواب في آلاف الصفحات
الموديل لا يعرف وثائق شركتك. الـ RAG يبحث عن الصفحات الصحيحة، ويضعها أمامه قبل أن يجيب.
الـ اختصار Retrieval-Augmented Generation، ومعناه: «ابحث أولًا، ثم اكتب». الـ harness يقسّم الوثائق إلى قطع صغيرة ()، ويحوّل كل قطعة إلى ، أي أرقام تمثّل معناها. عندما يأتي سؤال، يحوّله إلى أرقام أيضًا، ويجد أقرب القطع إليه، ويضع أفضلها في الـ context. الموديل يجيب منها، ويذكر المصدر.
- سؤالك
- يتحوّل إلى أرقام
- أقرب القطع
- إعادة الترتيب
- أفضل 3 قطع
- الموديل يجيب
آلة الـ RAG: وثائق متجر أحذية
اختر سؤالًا، وانظر أي القطع وصلت إلى الموديل. ثلاثة أسئلة هنا تفشل. أصلحها بالمفاتيح.
القطع، مرتّبة حسب القرب من سؤالك
ما وصل إلى الموديل، وجوابه
RAG، أم كل شيء في الـ context، أم البحث بالأدوات؟
| الطريقة | متى تناسب | مثال |
|---|---|---|
| كل شيء في الـ context | الوثائق صغيرة: أقل من 200,000 token، أي حوالي 500 صفحة. Anthropic تنصح هنا بعدم استخدام RAG أصلًا. | دليل منتج واحد |
| RAG | آلاف الصفحات، وأسئلة بكلام الناس، ووثائق لا تتغيّر كل ساعة. | دعم العملاء من وثائق الشركة |
| البحث بالأدوات | ملفات تتغيّر باستمرار، ونصوص دقيقة مثل أسماء الدوال. الموديل يبحث بنفسه بـ grep وglob، ثم يقرأ. | Claude Code داخل مشروعك |
فريق Claude Code جرّب RAG في البداية، ثم تركه. Boris Cherny، الذي بنى Claude Code، كتب: Claude Code doesn't use RAG currently. In our testing we found that agentic search out-performed RAG for the kinds of things people use Code for.
والسبب: البحث بالأدوات أبسط، ولا يحتاج فهرسًا يصبح قديمًا.
وإذا استخدمت RAG، فأرقام Anthropic واضحة: إضافة سياق لكل قطعة قلّلت فشل البحث بـ 35%. ومع البحث بالكلمات صار 49%. ومع إعادة الترتيب صار 67%. المصدر.
خمس طرق يفشل بها الـ RAG، وحلّ كل واحدة
- القطعة فقدت سياقها. «المدة هنا 7 أيام»، لكن أين «هنا»؟ الحل: سياق لكل قطعة، وتقسيم أذكى.
- القطعة الصحيحة جاءت متأخرة في الترتيب. الحل: بحث بالكلمات مع بحث المعنى، ثم إعادة ترتيب.
- الجواب غير موجود في الوثائق أصلًا. فيخترع الموديل جوابًا. الحل: اسمح له أن يقول «لا أعرف»، وضع حدًّا أدنى للقرب.
- القطعة وصلت، لكن الموديل لم يستخدمها. ضاعت وسط قطع كثيرة. الحل: قطع أقل وأفضل، واطلب ذكر المصدر دائمًا.
- الفهرس قديم. الوثائق تغيّرت، والفهرس لم يتغيّر. الحل: أعد الفهرسة عند كل تغيير، أو ابحث في الملفات الحية بالأدوات.
الـ Frameworks: كلها مصنوعة من نفس القطع
عندما تفهم القطع، تفهم أي framework في دقائق. الفرق بينها: أي قطعة تركّز عليها، وكم تخفي عنك، ومن يقرّر الخطوة التالية.
الـ مكتبة تعطيك قطع الـ harness جاهزة، حتى لا تكتبها من الصفر. تحت الأسماء المختلفة، كلها تقريبًا مبنية من نفس القطع. اضغط قطعة لترى من يركّز عليها.
«يركّز على» مبني على التوثيق الرسمي لكل framework في سبتمبر 2026. كلها تتغيّر بسرعة، فراجع التوثيق قبل أن تختار.
ما الذي يجعل framework قويًا؟
- ترى ما يدخل الموديل. الـ prompt والـ context وكل طلب أداة. الـ framework الذي يخفي هذا يصعب إصلاحه عندما يخطئ.
- قطع قليلة وواضحة. تتعلّمها في يوم، لا في شهر.
- باب للخروج. تستطيع أن تكتب أي جزء بنفسك عندما لا يكفي الجاهز.
- يصمد في العمل الحقيقي. يستأنف بعد انقطاع، ويعرض الرد وهو يُكتب، ويسمح بموافقة إنسان، ويسجّل كل خطوة.
- لا يربطك بموديل واحد. تبديل الموديل سطر، ويدعم MCP.
- حيّ. يتحدّث باستمرار، وليس في وضع الصيانة.
ابدأ باستخدام API الموديل مباشرة. أنماط كثيرة تُكتب بسطور قليلة.
نصيحة Anthropic في «Building effective agents». والسبب: الـ frameworks قد تخفي الـ prompts والردود، فيصعب إصلاح الأخطاء. وإذا استخدمت framework، فافهم الكود الذي تحته. المصدرخمسة أنماط، ستجدها في كل framework
Anthropic جمعت أشهر طرق تركيب الموديلات في خمسة أنماط. أي framework هو طريقة لكتابة هذه الأنماط. اقرأ الرسم من اليمين.
- السلسلة (prompt chaining)خطوة بعد خطوة، كل واحدة تعمل على نتيجة التي قبلها. مثال: اكتب مسودة، ثم ترجمها.
- التوجيه (routing)صنّف الطلب أولًا، ثم أرسله إلى المكان المناسب. مثال: سؤال عن الإرجاع يذهب لمسار، وسؤال تقني لمسار آخر.
- التوازي (parallelization)عدة أجزاء في نفس الوقت، ثم اجمعها. أو نفس السؤال أكثر من مرة، ثم خذ رأي الأغلبية.
- المنسّق والعمّال (orchestrator-workers)موديل يقسّم العمل، ويرسل الأجزاء، ثم يجمع النتائج. هذا ما رأيته في المستوى 10.
- الكاتب والمقيّم (evaluator-optimizer)موديل يكتب، وموديل آخر ينتقد، ويتكرّر هذا حتى يرضى المقيّم.
وبعدها يأتي الـ agent الكامل: موديل يستخدم الأدوات داخل دورة، ويقرّر بنفسه متى يتوقف. نصيحة Anthropic هنا بسيطة: ابدأ بأبسط نمط يحلّ مشكلتك. لا تبنِ agent إذا كانت السلسلة تكفي.
ست طرق لبناء agent، وسؤال واحد يفرّق بينها
كل framework يختار طريقة. والسؤال الذي يفرّق بين الطرق: من يقرّر الخطوة التالية؟ أنت في الكود، أم الموديل؟ ثم: أين يُحفظ العمل؟ الباقي تغليف. اضغط كل طريقة، وانظر أين تقف على الخط.
مقارنة سريعة (5 هي الأفضل)
الدرجات من 1 إلى 5 تقدير مبني على التوثيق وشكاوى المستخدمين حتى سبتمبر 2026، وليست قياسًا. الأمثلة والتواريخ لها مصادر.
«الطبقات» لها ثلاثة معانٍ
عندما يقول أحد «ADK بالطبقات»، قد يقصد واحدًا من ثلاثة تقسيمات مختلفة جدًا. LangChain تقسّم إلى ثم ثم harness. وDeepSeek تبني نواة صغيرة وحولها plugins. وAnthropic تفصل العقل عن اليدين. اختر تقسيمًا، ثم اضغط أي طبقة.
والملاحظة الأهم: الشركات كلها تتقارب. الـ harness عند Microsoft وOpenAI وAnthropic وDeepSeek وLangChain فيه تقريبًا نفس القطع: دورة، وتلخيص للذاكرة، وملفات، وsubagents، وموافقات، وsandbox. وأدوات الـ صارت تضيف agents، وأدوات الـ agents صارت تضيف graph. لذلك تعلّم القطع، وليس الأسماء.
قبل أن تستخدم DeepSeek Harness
- عمره أسابيع. نُشر في 13 أغسطس 2026 كنسخة تجريبية، وقد يتغيّر كثيرًا.
- ثغرة خطيرة (CVE-2026-82533، درجتها 9.4 من 10): الـ agent كان يستطيع أن يطفئ الـ sandbox الخاص به عن طريق واجهة الويب المحلية. أُصلحت في نسخة 0.1.2-alpha.1 في 27 أغسطس.
- ملف SAFETY.md عندهم يقول: لم يُراجع أمنيًا، وليس جاهزًا للإنتاج.
- شكل ملف الجلسة تغيّر مرتين في أسبوع واحد.
- يصرف tokens كثيرة. ومراجع رآه يقول «انتهيت» والكود لا يعمل، لأنه فحص نفسه فحصًا سطحيًا.
القاعدة العملية في 2026
- المسار المعروف: اكتبه كودًا أو graph.
- الخطوات التي تحتاج حكمًا: دورة يقودها الموديل، داخل الخطوة.
- الخطوات الكثيرة الأدوات: دع الموديل يكتب كودًا يجمعها.
- الـ subagents: للعمل الذي يقرأ بالتوازي، وليس الذي يكتب.
- الخدمة المستضافة: هنا يحدث الارتباط بشركة واحدة. اعرف كيف تخرج قبل أن تدخل.
القاعدة الثامنة في «12-factor agents»: امتلك مسار التحكّم
. أي: لا تسلّم القرار كله للـ framework. المصدر
الجزء 5 · من الداخل
مع من تتكلم فعلًا؟
الجواب القصير: أنت تتكلم مع الـ harness، والـ harness يتكلم مع الموديل. كلامك لا يصل إلى الموديل وحده أبدًا.
عندما تكتب في claude.ai أو Claude Code، تذهب رسالتك إلى التطبيق أولًا. وهذا التطبيق هو الـ harness. Anthropic تقولها بوضوح: Claude Code هو «الـ agentic harness حول Claude».
الـ harness لا ينقل كلامك كما هو. هو يبني حزمة: تعليماته الخاصة (الـ)، وقائمة الأدوات، وملفات مشروعك مثل CLAUDE.md، والمحادثة كلها حتى الآن، وبعد ذلك فقط رسالتك الجديدة، في آخر الحزمة.
ثم يرسل هذه الحزمة عبر الإنترنت إلى الـ. الموديل يقرأ الحزمة ويكتب ردًا، بضعة tokens في كل مرة. الرد يرجع إلى الـ harness، وليس إليك. والـ harness يقرر ماذا يحدث بعد ذلك: يعرض الرد على شاشتك، أو، إذا كان الرد طلبًا لأداة، يفحص القواعد ويشغّل الأداة.
ثلاثة أشياء تنتج عن هذا
- الموديل لا يرى إلا النص. لا يرى شاشتك، ولا لوحة المفاتيح، ولا ملفاتك. إذا كان يعرف تاريخ اليوم، فلأن الـ harness كتب التاريخ في الحزمة.
- الموديل لا يتذكرك. الـ API ، أي لا يحفظ شيئًا بين طلب وآخر. تشعر أن عنده ذاكرة لأن الـ harness يرسل المحادثة كلها من جديد مع كل رسالة.
- رسالتك هي أصغر جزء. في جلسة برمجة، ما كتبته أنت قد يكون أقل بكثير من واحد في المئة مما يقرأه الموديل.
التطبيق الذي تستخدمه
أي رسالة
أنتلماذا يفشل اختبار تسجيل الدخول عندي؟
- أنتتكتب وتقرأ
- الـ harnessclaude.ai
- الـ APIapi.anthropic.com
- الموديلنص يدخل، ونص يخرج
الأحجام أمثلة تقريبية لتوضيح النِّسَب. الأرقام الحقيقية تتغيّر مع كل إصدار.
شاهد الرحلة
على الهاتف: شغّل الفيديو بملء الشاشة، وأدر الهاتف، حتى تقرأ النص بوضوح.
الـ harness ليس ذكاءً اصطناعيًا
إذا خمّنت هذا، فتخمينك صحيح. الـ harness برنامج عادي: دوال، وقواعد، وأدوات، وتعليمات. الجزء الوحيد الذي يتنبأ بالكلمات هو الموديل.
الكود يفعل نفس الشيء في كل مرة مع نفس المدخلات. سطر مثل «إذا كان الأمر في قائمة المنع، امنعه» لا يغيّر رأيه أبدًا. الموديل مختلف: هو يتنبأ، لذلك قد تحصل نفس الحزمة على رد مختلف.
المهندسون يكتبون الـ harness. والـ control flow فيه، أي ماذا يحدث وبأي ترتيب، هو كود: أرسل الحزمة، اقرأ الرد، إذا طلب أداة افحص القواعد وشغّلها، أرسل النتيجة، ثم كرّر. لا يوجد أي ذكاء في هذه الدورة. إنها آلة تُبقي الموديل يعمل.
التعليمات ليست قواعد
بعض أجزاء الـ harness نص: الـ system prompt، وCLAUDE.md، والـ skills. الـ harness يوصل هذا النص فقط. الموديل يقرأه ويتبعه عادةً، لكن لا شيء يجبره. توثيق Anthropic يصف CLAUDE.md بأنه «context، وليس إعدادات مفروضة».
القواعد التي يجب ألّا تُكسر أبدًا هي كود: قواعد الصلاحيات والـ. Claude Code نفسه يفحص الصلاحيات، وليس الموديل، وبترتيب ثابت: المنع (deny) أولًا، ثم السؤال (ask)، ثم السماح (allow).
نفس اللحظة، من الجهتين
الـ harness: كود
reply = api.send(package)
while reply.stop_reason == "tool_use":
call = reply.tool_call
if call in deny_rules:
result = "blocked by a rule"
else:
result = run(call)
package.add(result)
reply = api.send(package)
show(reply.text)
الموديل: ذكاء اصطناعي
يقرأ الحزمة. يتنبأ أن أفضل خطوة تالية هي أن ينظر في LoginTest.kt. يكتب ذلك كطلب أداة، ثم يتوقف. لا يشغّل شيئًا، ولا يفحص شيئًا، ولا يتذكر شيئًا. كل سطر في كود الـ harness ليس من عمله.
أين تختلط الأمور
بعض ميزات الـ harness تستدعي موديلًا كمساعد. هذا لا يجعل الـ harness ذكاءً اصطناعيًا. الكود ما زال يقرر متى يستدعيه، وماذا يفعل بالجواب. مثل تطبيق الطقس: يسأل خدمة الطقس، لكنه لا يصبح هو الطقس.
- (التلخيص): عندما يقترب الـ context من الامتلاء، الـ harness يرسل الرسائل القديمة إلى موديل ليلخّصها.
- (الوكلاء المساعدون): طلبات إضافية إلى الموديل، لكل واحد منها context جديد خاص به. الـ harness يبدأها ويجمع نتائجها.
- Auto mode: في Claude Code، موديل ثانٍ (classifier، أي مصنِّف) يراجع الأعمال الخطيرة قبل تشغيلها. هو يرى رسائلك وطلبات الأدوات، لكنه لا يرى نتائج الأدوات.
- Web fetch: موديل صغير يقرأ الصفحة، ويعطي Claude جوابه عنها، وليس الصفحة كما هي.
- مهام صغيرة: تسمية الجلسة، وكتابة ملخّصات في الخلفية.
من يقوم بهذا العمل؟
اختر عملًا، ثم اختر من يقوم به. الاختيار الخطأ يعطيك تلميحًا، وليس الجواب. العمود الثالث هو الأصعب.
الـ Skills: خبرة تنتظر حتى تحتاجها
الـ skill مجلد فيه تعليمات وسكربتات. الـ agent يستطيع أن يحمل العشرات منها، ولا يدفع تقريبًا شيئًا، حتى تأتي مهمة تناسب واحدة منها.
الـ مجلد فيه ملف رئيسي واحد، SKILL.md. في أعلاه أهم سطرين: الاسم (name) والوصف (description). تحتهما تأتي التعليمات. وبجانب الملف قد توجد سكربتات، وقوالب، وملفات مرجعية.
Anthropic تشبّه الـ skill بدليل تعريفي لزميل جديد في العمل. وأقصر شرح عندها هو هذا: «MCP يربط Claude بالبيانات، والـ Skills تعلّم Claude ماذا يفعل بهذه البيانات.»
لماذا الـ skills مهمة جدًا
- تكلفتها شبه صفر حتى تُستخدم. في البداية، الـ agent يرى اسم كل skill ووصفها فقط، حوالي 100 token لكل skill. التعليمات لا تُحمَّل إلا عندما تحتاجها مهمة (Anthropic تنصح بأن تبقى أقل من 5,000 token). والملفات الإضافية لا تُحمَّل إلا عندما تُفتح.
- السكربتات تعمل دون أن تُقرأ. عندما تشغّل الـ skill سكربتًا، تدخل النتيجة فقط إلى الـ context، ولا يدخل الكود أبدًا. أداة PDF من 400 سطر قد تكلّف 40 token فقط.
- نفس العمل، بنفس الطريقة، كل مرة. قائمة الفحص الخاصة بك، وقالبك، وسكربتك المجرَّب. وليس تخمينًا جديدًا في كل جلسة.
- مجلد واحد، وأدوات كثيرة. الـ skills صارت معيارًا مفتوحًا في 18 ديسمبر 2025. نفس المجلد يعمل في Claude Code، وتطبيقات Claude، والـ API، وفي أدوات أخرى مثل OpenAI Codex وGitHub Copilot.
- تُشارَك مثل الكود. احفظها في git، وراجعها، وأرسلها إلى فريقك داخل plugin.
skill صغيرة، كما هي على الجهاز
pdf-forms/
├── SKILL.md
├── scripts/
│ └── fill_form.py
└── reference/
└── field-names.md
--- name: pdf-forms description: Fill in PDF forms, such as tax or visa forms, from data the user gives. Use when the user asks to fill, complete or sign a PDF form. --- # Filling PDF forms 1. List the fields: python scripts/fill_form.py --list 2. Match each field to the user's data. 3. Ask about any field you cannot fill. 4. Fill it: python scripts/fill_form.py --fill data.json
- name
- حروف إنجليزية صغيرة، وأرقام، وعلامة الشرطة (-)، حتى 64 حرفًا.
- description
- حتى 1,024 حرفًا. هو الجزء الوحيد الذي يراه الموديل عندما يقرر، فاكتب فيه ماذا تفعل الـ skill، ومتى تُستخدم.
- الباقي
- يُحمَّل فقط بعد أن يختار الموديل هذه الـ skill.
شاهد الميزانية: 30 skill، ومهمة واحدة
اختر أين توضع الخبرة، ثم أعطِ الـ agent مهمة. وشاهد ما يدخل إلى الـ context، خطوة بخطوة.
أين توضع الخبرة
المهمة
رقم 100 token لكل skill، والحدّ المقترح 5,000 token للتعليمات، من توثيق Anthropic. الأحجام الأخرى أمثلة.
الـ skill مقارنةً بجيرانها
| الشيء | متى يدخل الـ context | ماذا يعطي | يناسب |
|---|---|---|---|
| CLAUDE.md | كاملًا، مع كل طلب | قواعد ومعلومات ثابتة | ما يجب أن تعرفه كل جلسة |
| Skill | الوصف دائمًا، والباقي عند الحاجة | خبرة وسكربتات | مهام وخطوات تتكرر |
| خادم MCP | قائمة أدواته (غالبًا مؤجَّلة)، ثم كل نتيجة | قدرات جديدة: الوصول إلى خدمة | بيانات وأعمال خارج جهازك |
| Subagent | context منفصل خاص به | طاولة نظيفة لمهمة جانبية | قراءة كثيرة أو بحث كبير |
| Hook | أبدًا | قاعدة تعمل دائمًا | كل شيء يجب ألّا يُتخطّى أبدًا |
في Claude Code، الأوامر المخصّصة (custom slash commands) دُمجت في الـ skills. ملفات الأوامر القديمة ما زالت تعمل.
أين تفشل الـ skills
- الـ skill التي لا تُستدعى أبدًا لا فائدة منها. الموديل يختار من الوصف وحده. في اختبار علني من Vercel في يناير 2026، لم تُستخدم skill في 56% من المرات، وفهرس محمَّل دائمًا في AGENTS.md كان أفضل في تلك المهمة. اذكر المهام بالضبط في الوصف، وتأكد أن الـ skill تُستدعى فعلًا.
- كل skill تكلّف وصفها على الأقل. مئات الـ skills تعني آلاف الـ tokens مع كل طلب، وفرصًا أكثر لاختيار الـ skill الخطأ.
- الـ skill تستطيع أن تشغّل كودًا على جهازك. Anthropic تنصح باستخدام الـ skills من مصادر موثوقة فقط. فحص من Snyk في فبراير 2026 وجد ثغرة في حوالي ثلث 3,984 skill عامة، و76 منها كانت خبيثة بوضوح.
- الـ skill نصيحة، وليست قفلًا. مثل CLAUDE.md، هي نص يقرأه الموديل. القاعدة التي يجب أن تُحترم دائمًا مكانها hook أو صلاحية.
الأدوات، والـ CLI، وMCP، والـ plugins: أربعة أشياء مختلفة
الناس يخلطون بينها، لأنها كلها «تعطي الـ agent قوة أكبر». لكن كل واحد منها يعيش في طبقة مختلفة، ويجيب عن سؤال مختلف.
الموديل يستطيع أن يفعل شيئًا واحدًا فقط ليعمل: أن يكتب طلبًا لاستخدام . كل شيء آخر في هذه الصفحة إمّا طريقة يستخدمها الـ harness لينفّذ هذا الطلب، وإمّا طريقة لإيصال الخبرة والإعدادات إلى الـ harness.
1 · ما يراه الموديل
2 · كيف ينفّذه الـ harness
3 · كيف تنتقل الخبرة والإعدادات
اختر مهمة، ثم طريقًا
خمس مهام حقيقية. في كل واحدة، جرّب الطرق الأربعة، وانظر أيّها يناسب، ولماذا.
المهمة
الطريق
كم يكلّف كل واحد قبل أن يُستخدم
المصادر: توثيق أداة bash من Anthropic، ومقال «Advanced tool use» (نوفمبر 2025). بعد ذلك قلّصت GitHub حجم خادمها إلى النصف تقريبًا، وصار Claude Code يحمّل تعريفات أدوات MCP فقط عندما يحتاجها.
نقاش 2026: «استخدم الـ CLI فقط»، أم «MCP ما زال مهمًا»؟
استخدم الـ CLI فقط
- الموديلات تعرف
gitوghوcurlمن قبل، وتستطيع قراءة--helpلتعرف الباقي. - أداة shell واحدة، بدل عشرات تعريفات الأدوات. في قياس نشرته شركة واحدة (Scalekit، مارس 2026)، أخذت مهمة 1,365 token عبر الـ CLI، و44,026 token عبر MCP.
- يمكن تصفية النتيجة قبل أن تصل إلى الـ context أصلًا.
- قواعد الصلاحيات تستطيع أن تسمح بـ
gh pr view، وتمنعgh pr merge.
من أصحاب هذا الرأي: Armin Ronacher، وMario Zechner، وSimon Willison، وEric Holmes الذي كتب مقالًا بعنوان «MCP is dead. Long live the CLI» (أي: انتهى MCP، يعيش الـ CLI) في فبراير 2026.
MCP ما زال مهمًا
- التطبيقات التي ليس فيها shell، مثل claude.ai في المتصفح، لا تستطيع تشغيل CLI أصلًا.
- كل شخص يسجّل الدخول بحسابه هو (OAuth)، والمسؤولون يستطيعون رؤية الخوادم المستخدمة والتحكم فيها.
- مدخلات ومخرجات لها أنواع محددة، وخادم واحد يعمل في كل تطبيق يتكلم MCP.
- مشكلة تكلفة الـ tokens تُحلّ الآن داخل الـ harness: البحث عن الأدوات (tool search) يحمّل التعريفات فقط عند الحاجة.
من أصحاب هذا الرأي: Charles Chen، وCloudflare، وSimon Willison الذي كتب في يوليو 2026 أنه ينوي «lean into MCP a whole lot more» (أي أن يعتمد على MCP أكثر بكثير) في التطبيقات الحساسة.
الرأي الذي يستقر عليه أغلب الناس: «the protocol is just plumbing» (أي: البروتوكول مجرد أنابيب توصيل)، كما يقول Mario Zechner. ونصيحة Anthropic نفسها تتبع نفس السلّم:
- CLIعندما يوجد shell، والأداة مسجّلة الدخول من قبل.
- Skillعندما تلصق نفس خطوات العمل للمرة الثالثة.
- خادم MCPعندما يحتاج Claude بيانات لا يصل إليها، أو لا يوجد shell، أو يجب أن يسجّل كل شخص الدخول بحسابه.
- Pluginعندما يحتاج مستودع ثانٍ، أو زميل في الفريق، نفس الإعداد.
MCP عن قرب: بروتوكول واحد، وطريقتان لنقله
الخادم المحلي يتكلم عبر أنابيب (pipes) داخل جهازك. والخادم البعيد يتكلم عبر عنوان ويب. أما الرسائل في الداخل، فهي نفسها.
في ثلاثة أدوار. الـ host هو التطبيق الذي تستخدمه: Claude Code، أو Claude Desktop، أو محرر كود. وداخله يوجد client خاص لكل خادم (server). والخادم برنامج صغير يقدّم أشياء. أما الموديل فليس جزءًا من MCP أبدًا: هو يرى فقط الأدوات التي يضعها الـ host في قائمته.
الخادم يستطيع أن يقدّم ثلاثة أنواع من الأشياء: tools (أدوات، أي أفعال يستطيع الموديل أن يطلبها)، وresources (موارد، أي بيانات يستطيع التطبيق أن يرفقها، مثل ملف أو سجلّ)، وprompts (قوالب جاهزة تختار منها، وتظهر غالبًا كأوامر تبدأ بـ /).
كل رسالة مكتوبة بصيغة : إمّا طلب له id، أو ردّ يحمل نفس الـ id، أو إشعار (notification) بلا id وبلا ردّ.
أحدث نسخة من المواصفات غيّرت الكثير
نسخة 28 يوليو 2026 جعلت MCP بلا حالة (stateless). المصافحة الأولى، أو الـ handshake (initialize)، ورقم الجلسة (session id) اختفيا. كل طلب صار يحمل نسخته وتفاصيل الـ client بنفسه، وطلب جديد اسمه server/discover يخبر الـ client بما يستطيع الخادم فعله. لكن Claude Code ما زال يستخدم المصافحة الكلاسيكية مع خوادم stdio المحلية بشكل افتراضي، لذلك تحتاج أن تعرف الاثنين. جرّبهما في الأسفل.
محلي:
الـ host يشغّل الخادم كبرنامج تابع له (child process). يكتب الرسائل في stdin الخاص بالخادم، رسالة في كل سطر. والخادم يردّ على stdout، رسالة في كل سطر. أما السجلات (logs) فتذهب إلى stderr. والمواصفات صارمة هنا: الخادم «MUST NOT write anything to its stdout that is not a valid MCP message» (أي: ممنوع أن يكتب في stdout أي شيء ليس رسالة MCP صحيحة).
بعيد: Streamable HTTP
الخادم موجود على عنوان ويب. الـ client يرسل كل رسالة كطلب HTTP POST. والخادم يردّ بـ JSON عادي، أو بسلسلة من الأحداث (stream). الخوادم البعيدة تستخدم OAuth، فكل شخص يسجّل الدخول بحسابه.
# a local server, started over stdio claude mcp add tracker -- python tracker_server.py # a remote server, over HTTP claude mcp add --transport http notion https://mcp.notion.com/mcp
داخل الأنبوب
خادم لنظام التذاكر، وClaude Code يتكلم معه. أرسل الرسائل واحدة واحدة. ثم غيّر طريقة النقل، وغيّر النسخة، واكسره عمدًا.
كيف تنتقل الرسائل
نسخة البروتوكول
Claude Code (الـ host)
tracker_server.py
لماذا stdio هو الخيار الافتراضي الصحيح للخوادم المحلية
- لا يوجد منفذ شبكة (port). الرسائل تنتقل عبر أنابيب بين برنامجين على نفس الجهاز.
- الـ host وحده يستطيع أن يكلّمه. الخادم الذي يعمل على port ويب محلي يحتاج فحوصات إضافية، حتى لا تصل إليه مواقع أخرى. الأنبوب لا يحتاج ذلك.
- لا خطوات لتسجيل الدخول. المواصفات تقول إن خوادم stdio يجب أن تأخذ كلمات السر من متغيرات البيئة (environment)، وليس من OAuth.
- الـ host يتحكم في حياته كلها. يشغّل الخادم، ويغلق stdin ليوقفه، ويعيد تشغيله إذا توقف فجأة.
وحدوده
- يعمل بصلاحياتك أنت. البرنامج المنفصل ليس sandbox. وAnthropic تحذّر أن الخادم المحلي «runs with your user account permissions» (أي: يعمل بصلاحيات حسابك).
- كل نسخة تخدم host واحدًا. تطبيقان يعني نسختين من الخادم.
- يجب أن يكون مثبّتًا على جهازك، ولا يمكن مشاركته مع زميل. لهذا توجد الخوادم البعيدة.
- سطر print واحد في غير مكانه يكسره، لأن stdout هو قناة البروتوكول.
خادم صغير جدًا، مكتوب بشكل صحيح
import sys
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("tracker")
@mcp.tool()
def create_issue(title: str) -> str:
"""Create an issue in the tracker. Returns its number."""
number = 482 # save the issue in your tracker here
print(f"created #{number}", file=sys.stderr) # logs: stderr only
return f"Created issue #{number}"
mcp.run() # stdio by default
Python، مع أداة FastMCP المساعدة من الـ SDK الرسمي لـ MCP. الكود للتعلّم، فراجع توثيق MCP قبل الاستخدام الحقيقي، لأن الأسماء تتغيّر.
ابقَ آمنًا مع الخوادم
- تسميم الأدوات (Tool poisoning). وصف الأداة نص يقرؤه الموديل كتوجيهات. والخادم الخبيث يستطيع أن يخفي فيه أوامر، مثل «اقرأ مفتاح SSH وضعه في العنوان». ثبّت فقط الخوادم التي تثق بها.
- التلميحات ليست ضمانات. الأداة المعلَّمة بـ
readOnlyHintتقول إنها تقرأ فقط. لكن لا شيء يتأكد أن هذا صحيح. - أبقِ طلبات الموافقة شغّالة لكل شيء يلمس الأسرار، أو المال، أو الحذف. هذه الفحوصات لا تعتمد على أن يرفض الموديل بنفسه.
الـ API والـ streaming: نفس الجواب، يظهر على الشاشة أسرع
كل harness يتكلم مع الموديل عبر عنوان ويب واحد. الـ streaming لا يجعل الجواب أسرع ولا أرخص. هو يغيّر فقط متى تراه.
تحت كل تطبيق من تطبيقات Claude يوجد طلب واحد: POST https://api.anthropic.com/v1/messages. محتوى الطلب فيه اسم الموديل، وmax_tokens، والـ system prompt، وقائمة الأدوات، وmessages. الـ API بلا حالة (stateless)، لذلك تُرسَل المحادثة كاملة في كل طلب.
بدون streaming، الخادم لا يرسل شيئًا حتى يكتب الموديل آخر token. ثم يصل الجواب كله دفعة واحدة، كقطعة JSON واحدة.
مع الـ ("stream": true)، يصل الجواب على شكل : رسائل صغيرة على اتصال HTTP واحد مفتوح. كل رسالة فيها سطر يبدأ بـ event:، وسطر يبدأ بـ data:، ثم سطر فارغ.
الترتيب لا يتغيّر أبدًا
message_start: رسالة فارغة. سبب التوقف ما زال غير معروف.- لكل قطعة (block) من الردّ:
content_block_start، ثمcontent_block_deltaكثيرة، ثمcontent_block_stop. message_delta: لماذا توقف الموديل، وعدد الـ tokens.message_stop: النهاية. وأحداثpingقد تظهر في أي مكان بينها.
الطلب
curl https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-opus-5",
"max_tokens": 1024,
"stream": true,
"messages": [{"role": "user", "content": "Hello"}]
}'
ما يرجع، بشكل مختصر
event: message_start data: {"type":"message_start","message":{"role":"assistant","content":[],"stop_reason":null,...}} event: content_block_start data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}} event: content_block_delta data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Hello"}} event: content_block_stop data: {"type":"content_block_stop","index":0} event: message_delta data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":15}} event: message_stop data: {"type":"message_stop"}
السباق
نفس الطلب، يُرسَل بطريقتين في نفس اللحظة. راقب الساعتين، والشاشة، وما يصل على الاتصال كما هو.
طول الجواب
ما يصل على الاتصال
ما يصل على الاتصال
سرعات العرض: أول token بعد 0.6 ثانية، ثم 55 token في الثانية. الأرقام الحقيقية تعتمد على الموديل، وحجم الطلب، والضغط على الخوادم.
لماذا يفوز الـ streaming
- الكلمات الأولى تصل فورًا. هذا اسمه (الوقت حتى أول token). الناس يشعرون به كسرعة، مع أن الوقت الكلي هو نفسه.
- الأجوبة الطويلة لا تنقطع بسبب انتهاء الوقت. الـ SDKs الرسمية ترفض طلبًا بدون streaming إذا كان متوقعًا أن يأخذ أكثر من 10 دقائق تقريبًا: «Streaming is required for operations that may take longer than 10 minutes.» (أي: الـ streaming مطلوب للعمليات التي قد تأخذ أكثر من 10 دقائق).
- الـ harness يستطيع أن يتصرف مبكرًا. يستطيع أن يعرض التقدّم، ويوقف ردًّا انحرف عن الطريق، ويجهّز طلب الأداة وهو ما زال يصل.
ما لا يغيّره: عدد الـ tokens، والسعر، وسرعة كتابة الموديل. الخيار الأرخص هو Batch API، بنصف السعر، للعمل الذي يستطيع أن ينتظر.
ما الذي يصير أصعب
- القطع ليست كلمات. الـ delta قد يكون
"ello frien". أنت تجمع القطع بنفسك، أو تترك الـ SDK يفعل ذلك. - مدخلات الأداة تصل كـ JSON مكسور. القطع لا تصير JSON صحيحًا إلا بعد جمعها، لذلك يقرأها الـ harness عند
content_block_stop. - الرمز 200 ليس وعدًا. سطر الحالة يُرسَل أولًا. وخطأ
overloaded_errorقد يصل بعده، على شكل حدث. - بعض الـ proxies تحبس الـ stream وتسلّمه على دفعات. لذلك تُطفئ الخوادم التخزين المؤقت (buffering) لسلاسل الأحداث.
إضافي · ذاكرة في ملفات، والاختبار الأخير
Obsidian وخريطة المعرفة: ذاكرة تعيش في ملفات
جزء إضافي، لمن يريده. الموديل ينسى كل شيء بين الجلسات. هاتان الأداتان تحفظان ما يهم في ملفات عادية، حتى يضع الـ harness القطع المناسبة أمامه.
Obsidian تطبيق ملاحظات. والـ الخاص به مجرد مجلد فيه ملفات Markdown على جهازك. ولهذا بالضبط يعمل مع أي ذكاء اصطناعي: أي agent يستطيع قراءة الملفات وكتابتها يستطيع استخدامه، بلا اتصال خاص. الملاحظات ترتبط ببعضها بـ [[wikilinks]]، وObsidian يرسم هذه الروابط كخريطة.
Graphify أداة مفتوحة المصدر، وهي أيضًا skill، تحوّل مستودع كود إلى (knowledge graph): أي دالة تستدعي أي دالة، وأي ملف يستورد أي ملف، وأي وثيقة تشرح أي كود. وتستطيع أن تكتب هذه الخريطة كملاحظات Obsidian.
لا واحدة منهما تغيّر الموديل. هما تغيّران ما يستطيع الـ harness أن يعطيه له: ملاحظات صغيرة قليلة وخريطة، بدل كل الملفات.
من يحفظ ماذا
- CLAUDE.md يحفظ القواعد، وسطرًا واحدًا يشير إلى الـ vault. ويُحمَّل في كل جلسة.
- ملاحظاتك في Obsidian تحفظ ما لا يستطيع الكود أن يقوله: القرارات، وأسبابها، والتاريخ. تكتبها أنت والـ agent.
- خريطة Graphify تحفظ البنية التي يمكن دائمًا إعادة بنائها من الكود. والذاكرة التلقائية (auto memory) في Claude Code تتجاهل هذا الجزء بالضبط، عن قصد.
- الـ Skills تبقى في مجلدها الخاص، حيث يجدها الـ harness. والـ vault يستطيع أن يحفظ ملاحظة قصيرة تقول متى تُستخدم كل واحدة.
كيف تعملان معًا
- 1 · المستودعالكود والوثائق.
- 2 · Graphifyيحلّل الكود على جهازك، ويرسل الوثائق إلى موديل، ويبني الخريطة.
- 3 · الـ vaultملاحظات الكود المولَّدة، وملاحظات قراراتك أنت التي ترتبط بها.
- 4 · الـ agentيقرأ الفهرس، ويتبع رابطين أو ثلاثة، ويسأل الخريطة سؤالًا واحدًا، ويفتح فقط الملفات المهمة.
uv tool install graphifyy # two y's graphify install # adds the skill /graphify . --obsidian # inside Claude Code
الأوامر كما كُتبت في ملف README الخاص بـ Graphify في 14 سبتمبر 2026. واسم الحزمة فعلًا مكتوب هكذا: graphifyy. وعند Obsidian أيضًا CLI رسمي منذ فبراير 2026، والمدير التنفيذي لـ Obsidian ينشر skills للـ agents تساعدها على كتابة ملاحظات Obsidian صحيحة.
انظر داخل vault صغير
متجر صغير فيه أربعة ملفات كود. بعض الملاحظات تكتبها أنت، وبعضها يولّده Graphify. اضغط على ملاحظة أو على نقطة في الخريطة، واتبع الروابط.
نفس السؤال، بطريقتين
«هل أستطيع رفع حدّ الطلب إلى 100؟ ماذا سينكسر؟» تخيّل نفس المتجر وقد كبر إلى 400 ملف، ثم شغّل الطريقتين.
بدون خريطة
مع الـ vault والخريطة
الأرقام توضيحية. صاحب Graphify قال مرة إنها تستخدم tokens أقل بـ 71.5 مرة في كل سؤال، على مجموعة مختلطة من 52 ملفًا. لكن مستخدمًا واحدًا قاس العكس، عندما شغّل الـ hook بشكل دائم. قِس على مستودعك أنت.
أين تحدث الأخطاء
- الملاحظات القديمة تُقدَّم كأنها حقيقة. الموديل يصدّق ما يقرؤه. ضع تاريخًا على قراراتك، وقل أي ملاحظة تحلّ محل أي ملاحظة، واحذف ما هو خطأ.
- الخريطة صورة للحظة واحدة. تبقى صحيحة فقط حتى الـ commit التالي. أعد بناءها بـ hook، أو عند الطلب.
- التشغيل الدائم ليس مجانيًا. في تقرير منشور، كلّف الـ hook الدائم في Graphify حوالي 651,000 token، بينما استخدم الموديل الخريطة في 3.2% فقط من عمليات البحث. ابدأ بـ «عند الطلب».
- ملاحظات أكثر لا تعني نتيجة أفضل. الجودة تنخفض كلما امتلأ الـ context، وإذا اختلفت ملاحظتان، يختار الموديل واحدة منهما بشكل شبه عشوائي.
- المحلي لا يعني الخاص. كل ما يقرؤه الـ agent يُرسَل إلى الشركة المزوّدة للموديل، والملاحظة قد تحمل تعليمات مدسوسة (prompt injection) تبقى لأسابيع.
ابدأ ببساطة
- CLAUDE.md والذاكرة التلقائيةلا شيء لتثبيته.
- vault صغيرملاحظة فهرس، ومجلد للقرارات، وسجلّ، وسطر واحد في CLAUDE.md يشير إليه.
- Graphify للمستودعات الكبيرةشغّله عند الطلب. وأضف الـ hook الخاص به ليبقى محدَّثًا.
- خادم MCP للملاحظاتفقط إذا كان تطبيقك لا يصل إلى الملفات، مثل محادثة في المتصفح.
ثلاثة أسماء متشابهة
الاختبار الصعب
26 سؤالًا من الدليل كله. هدفها أن تجعلك تفكّر، وليس أن تتأكد أنك تحفظ جملة.
كيف يعمل
- لا يظهر أي جواب قبل أن تحاول. المحاولة الخاطئة تعطيك تلميحًا، مكتوبًا على شكل سؤال. والمحاولة الخاطئة الثانية تعطيك تلميحًا أقرب.
- النقاط تقلّ مع كل محاولة: 3، ثم 2، ثم 1. بعد ثلاث محاولات خاطئة، أو إذا طلبت، يظهر الجواب مقابل 0 نقاط.
- قل كم أنت متأكد قبل أن تتحقق. في النهاية ترى كم مرة كان جوابك «متأكد تمامًا» صحيحًا. أن تكون متأكدًا ومخطئًا هو أكثر شيء مفيد تكتشفه.
- الخيارات الخاطئة تستخدم نفس كلمات الخيار الصحيح. اقرأ كل خيار حتى آخره.
إجاباتك تُحفظ في هذا المتصفح فقط.
الدليل كله في خمسة أسطر
الموديل يخمّن النص. وحده لا يستطيع قراءة ملف، أو تشغيل أمر، أو دخول الإنترنت، أو تذكّر أي شيء بعد انتهاء الطلب.
الأدوات تجعله يعمل على أنظمة حقيقية: الملفات، والكود، والإنترنت، والشاشة، وسطر الأوامر، وخوادم MCP.
الذاكرة تدير الـ context window الثابتة عبر ملفات التعليمات، والتلخيص، والبحث.
الـ loop يكرّر: خطّط، نفّذ، انظر، حتى يتحقق الهدف، مع فحوصات تُبقي العمل الطويل صحيحًا.
تحت الغطاء، أنت تتكلم مع الـ harness، والـ harness يتكلم مع الموديل. الـ skills، والـ CLIs، وخوادم MCP، والـ plugins كلها طرق تزيد ما يستطيع هذا الـ harness أن يقدّمه.
والجملة التي تجمع كل هذا: الموديل يحدّد السقف، والـ harness يحدّد كم تقترب منه. عندما تحكم هل الذكاء الاصطناعي مناسب لمهمة، اذكر الاثنين معًا: أي موديل، وأي harness.
قبل أن تعتمد على agent
ضع علامة على ما يملكه إعدادك الآن. 0 من 13 جاهز. يُحفظ في هذا المتصفح فقط.
تقارن بين أداتي ذكاء اصطناعي؟ اسأل هذه الأسئلة
- ما الأدوات التي تملكها؟ هل تستطيع تشغيل أوامر shell والاختبارات؟
- هل تحمّل ملف تعليمات المشروع وحدها؟ وما اسم الملف الذي تتوقعه؟
- عندما تمتلئ الـ context window، هل تنتهي الجلسة، أم تلخّص وتكمل؟
- كيف تجد الكود: تحميل كل شيء، أم بحث بالنص، أم بحث بالمعنى، أم فهرس؟
- هل تتأكد من عملها قبل أن تقول «انتهيت»؟
- ما قواعد الصلاحيات الموجودة؟ هل تُطلب موافقة على الأوامر الخطيرة؟
- هل تستطيع الاتصال بخدمات خارجية؟ هل تدعم MCP؟
تعلّم أكثر، من المصدر
هذا الدليل مبني على هذه المصادر. دورات Anthropic Academy كلها مجانية، وفيها شهادة.
دورات Anthropic Academy
- Claude Code 101ساعة ونصف. التخطيط، والـ context، وCLAUDE.md، والوكلاء المساعدون، والـ skills، وMCP، والـ hooks.
- Introduction to subagents45 دقيقة. متى تستخدم subagent، وكيف تصنعه، ومتى لا تستخدمه.
- Introduction to agent skillsملف SKILL.md، والفرق بين الـ skills وCLAUDE.md.
- Claude Code in Actionساعة. جلسات طويلة، والصلاحيات، والـ hooks، وGitHub Actions.
- Claude Platform 101الدورة، والأدوات، والـ context، وأول agent لك.
- Building with the Claude API9 ساعات. الأدوات، والـ RAG، والبحث بالأدوات، وMCP، وأنماط الـ agents.
- Introduction to Model Context Protocolابنِ خادم MCP بـ Python.
مقالات Anthropic الهندسية
- Building effective agentsالأنماط الخمسة، ومتى تحتاج agent أصلًا.
- Effective context engineering for AI agentsكيف تختار ما يدخل الـ context، ولماذا تقلّ الجودة كلما امتلأ.
- Writing effective tools for agentsوصف الأداة هو تعليمات للموديل.
- How we built our multi-agent research systemالوكلاء المساعدون بالأرقام.
- Effective harnesses for long-running agentsagent يكمل مهمة طويلة عبر جلسات كثيرة.
- Harness design for long-running application developmentمخطِّط، وبانٍ، ومقيِّم. مارس 2026.
- Introducing Contextual RetrievalRAG يفشل أقل بـ 67%.
- Demystifying evals for AI agentsكيف تقيس الـ agent، وتبدأ بـ 20 مهمة.
آراء أخرى تستحق القراءة
- Agent frameworks, runtimes, and harnesses, oh my!طبقات LangChain الثلاث. أكتوبر 2025.
- Decoupling the brain from the handsAnthropic: العقل، واليدان، والجلسة. أبريل 2026.
- Don't build multi-agentsCognition: شارك الـ context كله بين الوكلاء. يونيو 2025.
- Cognition عن ما ينجح مع عدة agentsلماذا تبقى الكتابة في يد واحدة. أبريل 2026.
- 12-factor agentsالـ agent الجيد أغلبه برنامج عادي. امتلك مسار التحكّم.
- DeepSeek Harnessكل شيء plugin. اقرأ ملف SAFETY.md أولًا.
تحت الغطاء، من المصدر
- How Claude Code worksAnthropic تشرح الموديل والـ harness الذي حوله.
- Agent Skills overviewالتحميل التدريجي (progressive disclosure)، مع أرقام الـ tokens.
- The Agent Skills specificationالمعيار المفتوح، منذ 18 ديسمبر 2025.
- Claude Code features overviewكيف تعمل CLAUDE.md، والـ skills، والوكلاء المساعدون، والـ hooks، وMCP، والـ plugins معًا.
- Claude Code and MCPالخوادم المحلية والبعيدة، والنطاقات (scopes)، والـ tool search.
- MCP 2026-07-28 changelogأحدث spec: بلا حالة (stateless)، مع server/discover. يوليو 2026.
- The MCP stdio transportالقواعد الدقيقة لـ stdin وstdout وstderr.
- Advanced tool useالـ tool search، وتكلفة قوائم الأدوات الكبيرة. نوفمبر 2025.
- Code execution with MCPمن 150,000 token إلى 2,000. نوفمبر 2025.
- Streaming messagesكل أنواع الـ events، بالترتيب.
- Graphifyمستودع كود يتحوّل إلى knowledge graph، مع تصدير إلى Obsidian.
- The Obsidian CLIرسمي منذ فبراير 2026.
- kepano/obsidian-skillsskills للـ agents، لكتابة ملاحظات Obsidian صحيحة.
قائمة الكلمات
كل مصطلح في هذا الدليل، بكلام بسيط. الكلمات التي تحتها خط منقّط تفتح هذه التعريفات في مكانها.
- Agent (وكيل)
- موديل مع harness، يعملان نحو هدف على خطوات كثيرة بدل ردّ واحد.
- Agentic harness
- البرنامج حول الموديل الذي يعطيه الأدوات، ويدير ذاكرته، ويشغّل الدورة، ويفرض القواعد.
- Agentic loop (الدورة)
- الدورة المتكررة: خطّط، نفّذ، انظر، حتى يتحقق الهدف أو يصل الـ harness إلى حدّ.
- API (Messages API)
- عنوان الويب الواحد الذي تتكلم معه كل تطبيقات Claude. الـ harness يرسل الحزمة كلها إليه، والرد يعود منه.
- BM25 (البحث بالكلمات)
- طريقة بحث قديمة وقوية تطابق الكلمات نفسها. تجد الرموز الدقيقة مثل E-1042، التي يضيّعها البحث بالمعنى.
- Chunk (قطعة)
- جزء صغير من وثيقة طويلة، عادةً فقرة أو اثنتان. الـ RAG يبحث في القطع، وليس في الوثائق كاملة.
- CLI (سطر الأوامر)
- برنامج تستخدمه بكتابة الأوامر، مثل git أو npm. الـ agent يصل إلى كل CLI عبر أداة shell واحدة.
- Compaction (التلخيص)
- استبدال الأجزاء القديمة من محادثة طويلة بملخّص، حتى تستمر الجلسة عندما تقترب الـ context window من الامتلاء.
- Context window
- أكبر عدد من الـ tokens يستطيع الموديل قراءته في طلب واحد: التعليمات، والمحادثة، ونتائج الأدوات، والجواب. هي ذاكرته الوحيدة أثناء العمل.
- Embeddings
- قوائم أرقام تمثّل معنى النص، حتى يطابق البحث المعنى بدل الكلمات بالضبط.
- Eval (Benchmark)
- مجموعة ثابتة من المهام لقياس الموديلات ومقارنتها. في عالم الـ agents، يُقاس الموديل والـ harness معًا.
- Framework
- مكتبة تعطيك قطع الـ harness جاهزة: الاتصال بالموديل، والأدوات، والدورة، والذاكرة، والتنسيق بين agents.
- Graph (رسم الخطوات)
- طريقة تبني فيها الـ agent كخريطة: خطوات، وأسهم بينها. أنت تحدّد المسار، والموديل يعمل داخل الخطوات.
- Hook
- سكربت يشغّله الـ harness تلقائيًا في لحظة محددة، مثل قبل تشغيل أداة أو بعد تعديل ملف.
- Inference
- تشغيل المدخلات داخل موديل مُدرَّب للحصول على نتيجة. كل ردّ هو inference.
- Instruction file (ملف تعليمات)
- ملف نصي في المشروع، مثل AGENTS.md أو CLAUDE.md، يُحمَّل في بداية كل جلسة وفيه قواعد المشروع.
- JSON-RPC
- صيغة الرسائل التي يستخدمها MCP: طلب له id، ورد بنفس الـ id، أو إشعار (notification) بلا id وبلا رد.
- Knowledge graph (خريطة المعرفة)
- خريطة للأشياء والروابط بينها، مثل «هذه الدالة تستدعي تلك». أدوات مثل Graphify تبنيها من مستودع كود.
- MCP (Model Context Protocol)
- طريقة موحّدة لربط أدوات وبيانات خارجية بأي harness يدعمها. تكتب الخادم مرة، وتستخدمه في كل مكان.
- Parameters
- مليارات الأرقام التي تعلّمها الموديل أثناء التدريب. هي التي تحدد الموديل، ولا تتغير وأنت تستخدمه.
- Plugin
- حزمة لـ Claude Code تثبّت الـ skills، والأوامر، والوكلاء المساعدين، والـ hooks، وإعدادات MCP في خطوة واحدة.
- Prompt caching
- الشركة المزوّدة تعيد استخدام بداية الـ context التي لم تتغير بين الطلبات، فتقلّ التكلفة ووقت الانتظار.
- Prompt injection
- أوامر مخفية داخل محتوى يقرأه الـ agent، مثل صفحة ويب، تحاول السيطرة عليه.
- RAG (ابحث ثم اكتب)
- اختصار Retrieval-Augmented Generation. الـ harness يجد أقرب القطع من وثائقك إلى السؤال، ويضعها أمام الموديل قبل أن يجيب.
- Rerank (إعادة الترتيب)
- بعد بحث سريع يجلب قطعًا كثيرة، موديل صغير يرتّبها حسب قربها الحقيقي من السؤال، ثم تُؤخذ الأفضل فقط.
- Runtime (محرّك التشغيل)
- الطبقة التي تشغّل الـ agent وتحفظ كل خطوة، حتى يستأنف بعد انقطاع، ويتوقف لموافقة إنسان، ويعرض الرد وهو يُكتب. مثال: LangGraph.
- Sandbox (مكان معزول)
- مكان معزول لتشغيل الكود، صلاحياته محدودة على الملفات والشبكة والنظام، حتى يكون ضرر الأمر الخاطئ أقل.
- SDK (Claude Agent SDK)
- مكتبة برمجية فيها harness جاهز: أدوات، ودورة، وذاكرة، وصلاحيات. أنت تكتب الإعدادات، وهي تدير الباقي.
- Server-Sent Events (SSE)
- طريقة يرسل بها الخادم رسائل صغيرة كثيرة عبر اتصال HTTP واحد مفتوح. الردود التي تصل بالـ streaming تأتي بهذه الطريقة.
- Skill (مهارة)
- مجلد فيه ملف SKILL.md، وتعليمات أو سكربتات لمهمة معيّنة. الـ agent يرى اسمها ووصفها فقط، ويفتحها عندما يحتاجها.
- Stateless (بلا حالة)
- لا يحتفظ بشيء بين الطلبات. الـ API لا يحتفظ بحالة، لذلك يجب أن يرسل الـ harness المحادثة كلها كل مرة.
- stdio
- القنوات الثلاث القياسية لأي برنامج: stdin (المدخلات)، وstdout (المخرجات)، وstderr (الـ logs). خادم MCP المحلي يتكلم مع الـ host عبرها.
- Streaming
- استلام الرد قطعة بعد قطعة وهو يُكتب، بدل استلامه كله مرة واحدة في النهاية.
- Subagent (وكيل مساعد)
- نسخة ثانية من الموديل يشغّلها الـ harness لمهمة جانبية، بـ context صغير خاص بها، وتعيد ملخّصًا.
- System prompt
- تعليمات مخفية يضعها الـ harness في أول كل طلب: دور الموديل، والأدوات، والقواعد.
- Time to first token
- كم تنتظر قبل أن تصل أول قطعة من الرد. الـ streaming يجعل هذا الوقت قصيرًا، والوقت الكلي يبقى كما هو.
- Token
- قطعة صغيرة من النص، غالبًا جزء من كلمة، يقرأها الموديل ويكتبها. الحدود والأسعار تُحسب بالـ tokens.
- Tool (أداة)
- وظيفة يقدّمها الـ harness للموديل، لها اسم وفائدة ومدخلات. الموديل يطلبها، والـ harness يشغّلها.
- Vault (Obsidian)
- مجلد ملاحظات Markdown على جهازك. Obsidian يعرضه، ويربط ملاحظاته، ويرسمه كـ graph. أي agent عنده أدوات للملفات يستطيع قراءته.
- Verification (التأكد)
- فحص العمل على الواقع داخل الدورة: اختبارات، أو build، أو lint، أو صور للشاشة، أو موديل مراجِع.