كيف تمنع جلسة Claude Code من البطء وارتفاع التكلفة
كل طلب يعيد إرسال سياقك بالكامل، فتتباطأ الجلسة الطويلة وتزداد كلفتها. اقرأ /context، احذف ما يُحاسب عليه دائماً، ثم استخدم clear وcompact بوعي.
كيفية منع جلسة Claude Code الطويلة من أن تصبح بطيئة ومكلفة
تصبح جلسة Claude Code الطويلة بطيئة ومكلفة لأن كل طلب يعيد إرسال السياق بالكامل، ولأن هذا السياق يزداد باستمرار. الحل هو اتباع ترتيب ثابت لتنظيف السياق. شغّل /context لمعرفة ما الذي يملأ نافذة السياق، واحذف العناصر التي تدفع تكلفتها في كل طلب، ثم استخدم /clear بين المهام غير المرتبطة، واستخدم /compact مع وضع تعليمة داخل المهمة الطويلة نفسها. اعمل في جلسات متواصلة، لأن برودة prompt cache تحوّل القراءة الرخيصة إلى إعادة كتابة كاملة لكل ما قلته.
تجد تفسير سبب احتساب التكلفة أصلاً في عداد الرموز المميز خلف جلسة الوكيل.
اقرأ /context قبل أن تغيّر أي شيء
لا تخمّن ما يملأ نافذة السياق. سيخبرك Claude Code بذلك.
يرسم /context [all] استخدام السياق الحالي في شبكة ملوّنة، مع اقتراحات لتحسين الأدوات التي تستهلك سياقاً كبيراً ومعالجة تضخم الذاكرة؛ بينما يوسّع all التفصيل الخاص بكل عنصر في وضع ملء الشاشة. اقرأ النتيجة على شكل خمس فئات.
- موجّه النظام. تعليمات البيئة الخاصة بـClaude Code. وهي ثابتة طوال الجلسة.
- تعريفات الأدوات. مخطط كل أداة يمكن للوكيل استدعاؤها، بما في ذلك كل خادم MCP (Model Context Protocol) متصل.
- ملفات الذاكرة.
CLAUDE.mdوالذاكرة التلقائية، ويجري تحميلهما عند بدء الجلسة. - الملفات ونتائج الأدوات. كل ملف تتم قراءته، وكل ما تطبعه أوامرك ويُعاد إليك.
- سجل الرسائل. رسائلك وردوده.
الفئات الثلاث الأولى تكلفة ثابتة تُدفع مع كل طلب طوال مدة الجلسة. أما الفئتان الأخيرتان فتزدادان. خفّض التكلفة الثابتة مرة واحدة في البداية، وأدر الجزء المتزايد باستمرار.
تُظهر سلسلتان أن نافذة السياق امتلأت:
Context exceeds the 200k-token limit by 94k tokens — run /compact or /clear to continue.
Context is 94k tokens past the 200k-token compaction window — run /compact to reduce usage.الأولى حدّ صارم، ويُرفض الطلب عند بلوغه؛ ويكون خطأ API (واجهة برمجة التطبيقات) المطابق هو Prompt is too long. أما الثانية فهي نافذة ضغط، وقد تكون أدنى من نافذة السياق الفعلية للنموذج الذي تبلغ سعته 1 million token. تستمر الطلبات في النجاح بعد تجاوزها، لذلك فهي تحذير وليست رفضاً.
في الخطة المدفوعة، تضيف /usage النصف الآخر من المعلومات، إذ ترصد سلوكيات مثل السياق الطويل أو حالات فشل ذاكرة التخزين المؤقت، وتنسب الاستخدام الأخير إلى المهارات والوكلاء الفرعيين وخوادم MCP الفردية. إذا أخبرتك بأن الحصة مستنفدة بالفعل، فإن نافذة الحد التي تنتظرها تحدد ما إذا كان تقليص السياق سيساعدك الآن أو كنت تحتاج إلى مسار آخر للعودة إلى العمل.
CLAUDE.md تكلفة دائمة، لذا حافظ على اختصاره
يُحمَّل CLAUDE.md في السياق عند بدء الجلسة، ويبقى فيه. إذا كان يتضمن إجراء نشر مفصلاً، فستظل هذه الرموز موجودة بينما تصلح خطأً إملائياً في ملف اختبار. توصي Anthropic بتضمين الأساسيات فقط، والحفاظ على الملف تحت 200 سطر.
انقل الإجراءات إلى skills. لا تُحمَّل المهارة إلا عند استدعائها، لذلك لا تستهلك عملية عمل تشغّلها مرتين أسبوعياً أي موارد في الأيام الأخرى. لكل مهارة ميزانيتها الخاصة بعد عملية compaction: يُعاد حقن محتواها، بحد أقصى 5,000 رمز لكل مهارة و25,000 رمز إجمالاً، مع إسقاط الأقدم أولاً. يحافظ الاقتطاع على بداية الملف، لذا ضع التعليمات الأهم بالقرب من أعلى SKILL.md.
ما يبقى بعد عملية compaction يحدد موضع instruction.
- لا يتغير system prompt ولا أسلوب الإخراج، لأنهما ليسا جزءاً من سجل الرسائل.
- يُعاد حقن
CLAUDE.mdفي جذر المشروع، والقواعد غير المقيّدة بنطاق، والذاكرة التلقائية من القرص. - تُفقد القاعدة التي تحتوي على frontmatter من نوع
paths:إلى أن يُقرأ ملف مطابق مرة أخرى. - تُفقد
CLAUDE.mdالمتداخلة في دليل فرعي إلى أن يُقرأ ملف في ذلك الدليل مرة أخرى. - لا تتأثر hooks، لأن hook يعمل كتعليمة برمجية ولا يدخل إلى السياق.
لذلك، يجب أن تنتمي القاعدة التي تعتمد عليها إلى CLAUDE.md في جذر المشروع: يمسح Claude Code مخرجات الأدوات الأقدم أولاً، ثم ينشئ ملخصاً، ولذلك قد تُفقد التعليمات الواردة في بداية المحادثة. حرّر الذاكرة باستخدام /memory. يحتفظ Claude Code بالنسخة التي حمّلها عند بدء الجلسة، لذلك يحافظ trim الذي يحدث أثناء الجلسة على prompt cache ولا يطبّق التغيير حتى عملية /clear أو /compact التالية، أو حتى إعادة التشغيل. فقدان السياق ليس السبب الوحيد لتوقف اتباع قاعدة ما، لذلك عندما تكون القاعدة ظاهرة بوضوح في النافذة ومع ذلك يجري تجاهلها، عالج الأسباب الأخرى قبل إعادة كتابتها.
التنظيف بين المهام، والضغط داخل مهمة واحدة
يبدوان هذان الخياران متشابهين، لكن تكلفتهما مختلفة جداً.
/clear [name] يبدأ محادثة جديدة بسياق فارغ. لا يرسل أي طلب، لذلك لا يكلّف شيئاً. مرّر اسماً لتسمية المحادثة السابقة في منتقي /resume؛ ويُعدّ /reset و/new اسماً مستعاراً له. استخدمه فور الانتقال إلى مهمة غير مرتبطة، لأن المهمة القديمة ستُرسل من جديد، وتُحتسب تكلفتها مرة أخرى، مع كل رسالة من المهمة الجديدة.
/compact [instructions] يحرّر مساحة في السياق مع الاستمرار في المحادثة نفسها: إذ يلخّص السجل حتى تلك اللحظة ويستبدله. استخدمه داخل مهمة طويلة تحتاج فيها إلى الحفاظ على الاستمرارية.
أعطِ /compact تعليمة دائماً. يلخّص /compact المجرد السجل وفق مطالبة افتراضية لا تعرف أي جزء من العمل ما زلت تحتاج إليه. أما عند تزويده بتعليمة، فيحافظ على ما يلي:
/compact focus on the auth bug fix
/compact keep only the plan and the diffإذا كنت تضغط السياق للسبب نفسه في كل مرة، فأضف تعليمة ثابتة إلى CLAUDE.md في مشروعك، تحت عنوان # Compact instructions. في جلسة جديدة، يطبع /compact القيمة Not enough messages to compact.، وهذا يعني فقط أنه لا يوجد سجل بعد.
يحدث الخلط هنا بين تكلفتين. يشترك طلب التلخيص في البادئة نفسها، لذلك يقرأ ذاكرة التخزين المؤقت الموجودة بدلاً من إعادة معالجة السجل، ويذهب معظم وقته إلى إنشاء التلخيص. يظل ضغط سياق كبير طلباً كبيراً، لأن المحادثة التي يجري تلخيصها هي المدخلات. أما الدور الذي يلي الضغط فليس الجزء البطيء؛ إذ يعيد إنشاء ذاكرة التخزين المؤقت لمطالبة أقصر بكثير.
يوجد أمران أقل تكلفة. يعيد /rewind [description] الشيفرة والمحادثة إلى نقطة تحقق؛ وبالنسبة إلى مسار تريد التخلي عنه نهائياً، فهو أفضل من الضغط لأنه يقتطع السجل حتى بادئة موجودة مسبقاً في ذاكرة التخزين المؤقت. يضيف /recap ملخصاً بوصفه مخرجات أمر بدلاً من استبدال السجل، لذلك تبقى البادئة المخزنة مؤقتاً سليمة.
عندما يتكرر الضغط التلقائي، تظهر الرسالة التالية:
Autocompact is thrashing: the context refilled to the limit...نجح الضغط، لكن ملفاً أو مخرجات أداة أعادت ملء النافذة عدة مرات متتالية، لذلك أوقف Claude Code إعادة المحاولة. استعد بقراءة الملف الكبير ضمن نطاقات من الأسطر، أو بتشغيل /compact مع تركيز يستبعد المخرجات الكبيرة، أو بنقل هذا العمل إلى وكيل فرعي، أو باستخدام /clear إذا كانت المحادثة السابقة قد انتهت.
خوادم MCP تمثل حملاً ثابتاً
يضيف كل خادم MCP تتصل به حملاً إلى كل طلب طوال الجلسة. وتدفع هذه الكلفة سواء استدعيت الخادم أم لا.
يخفف Claude Code هذا الأثر. تكون تعريفات أدوات MCP مؤجلة افتراضياً، لذلك لا تدخل إلى السياق إلا أسماء الأدوات إلى أن يستخدم Claude أداة محددة. شغّل /context لمعرفة الكلفة الفعلية لخوادمك، وشغّل /mcp disable <name> لإزالة خادم لن تستخدمه اليوم. إذا كنت تشغّل خوادم MCP الخاصة بك على VPS، فإن الحساب نفسه يحدد عدد الأدوات التي ينبغي لخادم واحد إتاحتها.
نفّذ ذلك في بداية الجلسة. ما دامت التعريفات مؤجلة، فإن الاتصال بخادم أو قطع الاتصال به يضيف فقط إلى المحادثة، وتبقى ذاكرة التخزين المؤقت صالحة. أما عندما تُحمّل التعريفات في البادئة بدلاً من ذلك، لأن البحث عن الأدوات متوقف أو لأن الخادم مستثنى من التأجيل، فإن التغيير نفسه يجعل الطلب التالي يعيد قراءة كل شيء.
رشِّح مخرجات الأدوات المطوّلة قبل إدخالها إلى السياق
نتيجة الأداة هي مدخلات، وتُعاد هذه المدخلات في كل دور لاحق. لا يكون تشغيل اختباري يعرض 20,000 رمز مميز من المخرجات تكلفة تُدفع مرة واحدة؛ بل تدفع تكلفته مجدداً في كل دور إلى أن تخرج هذه المخرجات من نافذة السياق.
رشِّح المخرجات من المصدر. يحوّل hook يختصر تشغيل الاختبار إلى حالات الفشل قبل أن يراها Claude ذلك الجدار من المخرجات إلى بضع مئات من الرموز المميزة، في هذا الدور وفي كل مرة تُعاد فيها:
npm test 2>&1 | grep -E "FAIL|Error:" | head -40لا تدخل hooks إلى السياق بحد ذاتها، لأنها تعمل بصفتها code. طبّق المنطق نفسه على أي أداة تتجاوز مخرجاتها حجم شاشة واحدة. وينطبق الأمر نفسه على ملف يتكون من 3,000 سطر: اطلب نطاق الأسطر الذي تحتاج إليه، لأن الملف بأكمله يظل في نافذة السياق بعد وصوله.
حدّد نطاق ما يقرأه الوكيل، وفوّض العمل كثير المخرجات
الطلب الذي يحدّد اسم الملف والعَرَض يقرأ ذلك الملف. أما الطلب المفتوح لترتيب المشروع فيقرأ كل ما يقرّر الوكيل أنه ذو صلة، وتبقى كل قراءة من هذه القراءات في نافذة السياق.
فوّض العمل كثير المخرجات إلى وكيل فرعي. تستهلك عمليات الاختبار ومعالجة السجلات سياقاً فعلياً؛ ويحافظ الوكيل الفرعي على تلك المخرجات في نافذته الخاصة، ثم يعيد ملخصاً فقط. المفاضلة هي أن الوكيل الفرعي ينشئ ذاكرة تخزين مؤقت خاصة به، ولا يحقق أي إصابات في الاستدعاء الأول، ويستخدم مدة التخزين المؤقت البالغة خمس دقائق حتى مع وجود اشتراك. تحميك عملية التفويض من استهلاك سياقك الرئيسي بصورة موثوقة. لكنها لا تخفّض إجمالي عدد الرموز دائماً.
ساعة التخزين المؤقت: اعمل على دفعات متواصلة
يجعل التخزين المؤقت للمطالبات إعادة الإرسال ميسورة التكلفة: تبلغ قراءة السابقة 0.1x من معدل الإدخال الأساسي، مقابل 1.25x لكتابتها، أو 2x لكتابتها عند استخدام مدة الصلاحية البالغة ساعة واحدة. يحدّث كل استخدام الإدخالَ من دون تكلفة إضافية، لذلك يبدأ احتساب المدة من آخر استخدام. توضّح هذه المضاعفات شكل الفاتورة، لكنها لا توضّح قيمتها، لذلك اربطها بـالتكلفة الفعلية لمليون رمز لتحويل نافذة سياق كاملة إلى قيمة بالدولار.
تعتمد مدة الصلاحية التي تحصل عليها على طريقة المصادقة، ولذلك تكون العبارة العامة «تنتهي صلاحية التخزين المؤقت بعد خمس دقائق» غير دقيقة.
- في اشتراك Claude، يطلب Claude Code مدة الصلاحية البالغة ساعة واحدة تلقائياً.
- بعد تجاوز حد خطتك والبدء في استخدام أرصدة الاستخدام، تُحاسَب على ذلك الاستخدام، فتعود المدة إلى خمس دقائق.
- عند استخدام مفتاح API أو مزود سحابي، تبقى المدة خمس دقائق. يفعّل
ENABLE_PROMPT_CACHING_1H=1مدة الصلاحية البالغة ساعة واحدة، بينما يعيدFORCE_PROMPT_CACHING_5M=1المدة إلى خمس دقائق.
تبقى النصيحة المتعلقة بإيقاع العمل نفسها في الحالتين: اعمل على دفعات متواصلة، لأن فترة خمول تتجاوز مدة الصلاحية تجعل دورك التالي يعيد كتابة السابقة المتراكمة بالكامل. لا تترتب أي تكلفة على جلسة Claude Code منفصلة تعمل داخل tmux أثناء خمولها، لكن الخمول يؤدي إلى فقدان التخزين المؤقت الدافئ.
تتسبب بعض الإجراءات في التخلص من التخزين المؤقت أثناء استمرارك في العمل: تبديل النماذج، وتغيير مستوى الجهد، وتفعيل الوضع السريع، والاتصال بخادم MCP أو قطع الاتصال به، وتفعيل plugin أو تعطيله، ورفض أداة كاملة، وإجراء compacting، وترقية Claude Code. يمثل /model المفاجأة المعتادة، لأن لكل نموذج تخزيناً مؤقتاً خاصاً به. لذلك يقرأ الطلب التالي السجل بالكامل من دون أي إصابات في التخزين المؤقت، رغم تطابق المحتوى. تُحاسَب إعادة القراءة وفق أسعار النموذج الوجهة، لذلك يؤدي التبديل إلى Fable في منتصف الجلسة إلى احتساب كامل السجل المتراكم وفق سعر الإدخال المنشور لـFable 5.
يحافظ تحرير الملفات، وتحرير CLAUDE.md، واستدعاء المهارات والأوامر، وتشغيل /recap، وإعادة التوجيه إلى نقطة سابقة، وإنشاء وكيل فرعي، على التخزين المؤقت. ويقتصر نطاقه على جهاز واحد ودليل واحد، لذلك لا تستفيد جلستان في دليلين مختلفين من التخزين المؤقت لبعضهما. ويتبع هذا النطاق CLI لا حسابك، لذلك لا ينتقل أي جزء منه إلى تطبيق Claude لسطح المكتب، الذي يُثبَّت على Linux بوصفه إصداراً تجريبياً منفصلاً إلى جانب CLI.
للتحقق من عمل التخزين المؤقت، اقرأ current_usage. كُتب cache_creation_input_tokens وفق معدل كتابة التخزين المؤقت، بينما قُدّم cache_read_input_tokens بمعدل يقارب عُشر معدل الإدخال القياسي. وتُعد النسبة المرتفعة بين مرات القراءة ومرات الإنشاء مؤشراً جيداً. إذا ظل معدل الإنشاء مرتفعاً دوراً بعد دور، فهذا يعني أن شيئاً ما في السابقة يتغير باستمرار.
هل تعالج نافذة السياق الأكبر هذه المشكلة؟
جزئياً. تدعم عدة نماذج حالية نافذة سياق تتسع لـ1 million token، وتعمل عملية ضغط السياق بالطريقة نفسها عند هذا الحد الأكبر. لا تتغير التكلفة، لأن prompt الكامل يُرسل من جديد وتُحتسب تكلفته في كل دور. تحدد النافذة الأكبر الوقت الذي تُجبر فيه على اتخاذ إجراء، بينما تحدد النظافة طريقة ضبط التكلفة. إذا كانت المشكلة في الفاتورة لا في الحد الأقصى، فإن خطة Claude المناسبة لطريقة عملك هي التي تحدد ما إذا كنت تنفق الدولارات أو تستخدم رصيد الخطة.
يختلف تحرير السياق عن ضغطه في API
إذا كنت تبني وكيلك الخاص باستخدام Messages API، فلن تتوفر أوامر slash، وعليك تنفيذ ذلك بنفسك. أدرج هذا العمل في تقديراتك منذ البداية، لأن API لا توفر مستوى مجانياً يتجاوز رصيد التسجيل الصغير، ولذلك تُحتسب تكلفة كل دورة من السجل غير المختصر بالكامل. يحدد موفر الخدمة الذي تختاره هذه الحسابات قبل إجراء أي اختصار. لذلك، إذا كان الاختيار لا يزال مفتوحاً، احسب تكلفة عبء العمل نفسه على كلتا واجهتي API بدلاً من مقارنة الأسعار المعلنة لكل رمز.
توفّر ميزتان على جانب الخادم هذه الوظيفة، لكنهما ليستا الميزة نفسها.
تحرير السياق يمسح محتوى محدداً من سجل المحادثة بشكل انتقائي مع نموه، ويستبدل كل نتيجة ممسوحة بنص نائب حتى يعرف Claude أن شيئاً ما أزيل. هذه ميزة تجريبية: أرسل anthropic-beta: context-management-2025-06-27 واضبط الاستراتيجيات ضمن context_management.edits. تمسح clear_tool_uses_20250919 نتائج الأدوات، بينما تدير clear_thinking_20251015 كتل التفكير. القيمة الافتراضية لـtrigger هي 100,000 من رموز الإدخال، والقيمة الافتراضية لـkeep هي آخر 3 استخدامات للأداة، أما clear_tool_inputs فقيمتها الافتراضية هي false، ولذلك تبقى المدخلات وتُزال النتائج فقط.
الضغط ينشئ ملخصاً ويستبدل به سجل المحادثة الكامل. وهو أيضاً ميزة تجريبية: أرسل anthropic-beta: compact-2026-01-12 واستخدم نوع التحرير compact_20260112. القيمة الافتراضية للمشغل هي {"type": "input_tokens", "value": 150000}، ويجب ألا تقل القيمة عن 50,000.
لدى الضغط قاعدة تسليم واحدة تؤدي بهدوء إلى تعطيل الوكلاء. تبدأ الاستجابة بكتلة محتوى compaction تحتوي على الملخص، وتتبعها كتلة النص العادية. يجب أن تمرر تلك الكتلة مرة أخرى في الطلبات اللاحقة، ثم يحذف API كل كتلة محتوى تسبقها. عملياً: أضف كامل response.content، وليس النص وحده.
تصف وثائق Anthropic الضغط على جانب الخادم بأنه الاستراتيجية الأساسية لإدارة السياق في المحادثات الطويلة، وتصف تحرير السياق بأنه الخيار الذي يوفّر تحكماً أدق في المحتوى الذي تتم إزالته. تحقق أولاً من دعم النموذج. تدعم نماذج Opus وSonnet وFable الحالية الضغط؛ أما claude-haiku-4-5 فلا يدعمه، وتحتوي صفحة الضغط على القائمة الحالية. لا تتحكم أي من الميزتين التجريبيتين في /compact الخاص بـClaude Code، إذ تصفه وثائقه بأنه طلب تلخيص لمرة واحدة يرسله العميل.
FAQ
لماذا تصبح جلسة Claude Code أبطأ وأكثر تكلفة كلما طال تشغيلها؟
لأن المحادثة كاملة تُرسل مرة أخرى في كل دورة، ولذلك يحمل سؤال من سطر واحد في جلسة مفتوحة طوال اليوم سياق اليوم بأكمله. يحافظ التخزين المؤقت للمطالبات على انخفاض التكلفة ما دام التخزين المؤقت فعالاً، بمعدل 0.1x من معدل الإدخال الأساسي عند القراءة؛ وعندما تفقد إحدى الدورات إصابة التخزين المؤقت، يُعاد تخزين البادئة نفسها بمعدل 1.25x. شغّل /context لمعرفة ما الذي يستهلك نافذة السياق، واقرأ ما الذي تُحاسبك عليه جلسة Claude Code لمعرفة الآلية.
ما الفرق بين /clear و /compact في Claude Code؟
يبدأ /clear محادثة جديدة بسياق فارغ. لا يرسل أي طلب، ولذلك لا يترتب عليه أي تكلفة، وهو الخيار المناسب بين المهام غير المرتبطة. يحافظ /compact على المحادثة نفسها ويستبدل السجل بملخص، ولذلك فهو الخيار المناسب داخل مهمة طويلة واحدة. حدّد له محوراً، كما في /compact keep only the plan and the diff، لأن التعليمات تحدد ما سيبقى.
كيف أعرف ما الذي يستهلك نافذة سياق Claude Code؟
شغّل /context، أو /context all لعرض التفصيل الكامل لكل عنصر. يعرض ذلك مطالبة النظام، وتعريفات الأدوات، وخوادم MCP، وملفات الذاكرة، والسجل ضمن شبكة ملوّنة، مع اقتراحات للأدوات التي تستهلك سياقاً كبيراً ولتضخم الذاكرة. في الخطة المدفوعة، ينسب /usage الاستخدام الأخير أيضاً إلى المهارات والوكلاء الفرعيين وخوادم MCP الفردية.
هل ينبغي أن أستخدم نافذة سياق بسعة 1 million token بدلاً من الاختصار؟
تؤجل النافذة الأكبر المشكلة بدلاً من حلها. تستخدم عدة نماذج حالية نافذة سياق بسعة 1 million token، ومنها Opus 4.8 وSonnet 5، ويعمل الاختصار بالطريقة نفسها فيها. تظل المطالبة الكاملة تُرسل مرة أخرى في كل دورة، وتظل التكلفة محسوبة على أساسها، ولذلك تكون محادثة من 400,000 token مكلفة سواء أكانت تتسع في النافذة أم لا.
ما الفرق بين تحرير السياق والاختصار في Claude API؟
يمسح تحرير السياق المحتوى القديم انتقائياً، وبخاصة نتائج الأدوات، ويترك نصاً بديلاً في موضع كل نتيجة كي يعرف Claude أنها أزيلت. ينشئ الاختصار ملخصاً ويستبدل السجل الكامل به. تسمي وثائق Anthropic الاختصار الاستراتيجية الأساسية للمحادثات طويلة التشغيل، وتعرض تحرير السياق باعتباره الخيار الدقيق. كلاهما في مرحلة beta وله ترويساته الخاصة، وكلاهما منفصل عن /compact في Claude Code.