SSD Nodes Learn
الأدلة Matt Connorبقلم Matt Connor · آخر تحديث في 2026-07-26

سياق Claude Code: أوقف الجلسات البطيئة والمكلفة

كل دورة تعيد إرسال السياق بالكامل، فالجلسة الطويلة تبطئ وتكلّف أكثر. اقرأ /context، احذف الرسم الثابت، ثم استخدم /clear و /compact بوعي.

How to stop a long Claude Code session getting slow and expensive

تصبح جلسة Claude Code الطويلة بطيئة ومكلفة لأن كل دورة تُعيد إرسال السياق بالكامل، وهذا السياق لا يتوقف عن النمو. الحل هو نظافة بترتيب ثابت. شغّل /context لمعرفة ما الذي يملأ النافذة، واحذف العناصر التي تدفع ثمنها في كل طلب، ثم استخدم /clear بين المهام غير المترابطة، واستخدم /compact مع توجيه داخل مهمة واحدة طويلة. اعمل في جلسات متواصلة، لأن ذاكرة التخزين المؤقتة الباردة تحوّل القراءة الرخيصة إلى إعادة كتابة كاملة لكل ما قلته.

سبب دوران العداد أصلاً تجده في عداد الرموز خلف جلسة الوكيل.

اقرأ /context قبل أن تُغيِّر أي شيء

لا تخمّن ما الذي يملأ النافذة. سيخبرك Claude Code بذلك.

/context [all] يرسم استخدام السياق الحالي على شكل شبكة ملوّنة، مع اقتراحات تحسين للأدوات كثيفة الاستخدام للذاكرة وانتفاخ الذاكرة؛ وall يوسّع التفصيل لكل عنصر في وضع ملء الشاشة. اقرأ الناتج على شكل خمسة حاويات.

  • موجه النظام (System prompt). تعليمات بيئة تشغيل Claude Code نفسها. ثابت طوال الجلسة.
  • تعريفات الأدوات (Tool definitions). مخطط كل أداة يمكن للوكيل استدعاؤها، بما في ذلك كل خادم MCP (بروتوكول سياق النموذج) متصل.
  • ملفات الذاكرة (Memory files). CLAUDE.md والذاكرة التلقائية، التي تُحمَّل في بداية الجلسة.
  • الملفات ونتائج الأدوات. كل ملف تتم قراءته، وكل ما أعادت طباعته أوامرك.
  • سجل الرسائل (Message history). أدوارك وردوده.

الثلاثة الأولى ضريبة ثابتة تُدفع مع كل طلب طوال عمر الجلسة. والاثنان الأخيران ينموان. اقطع الضريبة الثابتة مرة واحدة، في البداية؛ وأدِر الجزء المتنامي باستمرار.

سلسلتان تُخبرانك أن النافذة ممتلئة:

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. والثانية نافذة دمج، يمكن أن تجلس تحت نافذة السياق الحقيقية للنموذج في نموذج بسعة مليون رمز. تستمر الطلبات بالنجاح بعد تجاوزها، لذا فهي تحذير وليس رفضًا.

على الخطة المدفوعة، يضيف /usage النصف الآخر، مُعلِّمًا على سلوكيات مثل السياق الطويل أو فقدان ذاكرة التخزين المؤقت، وينسب الاستخدام الأخير إلى مهارات ووكلاء فرعيِّين وخوادم MCP محددة.

ملف CLAUDE.md تكلفة دائمة، فحافظ على إيجازه

يتم تحميل CLAUDE.md الخاص بك في السياق عند بداية الجلسة ويبقى هناك. إذا كان يحتوي على إجراء نشر مفصّل، فستكون هذه الرموز المميزة حاضرة أثناء إصلاحك لخطأ إملائي في ملف اختبار. توجيهات Anthropic هي تضمين الأساسيات فقط والحفاظ على الملف أقل من 200 سطر.

انقل الإجراءات إلى المهارات. تُحمَّل المهارة فقط عند استدعائها، لذا فإن سير عمل تشغّله مرتين أسبوعياً لا يكلّف شيئاً في الأيام الأخرى. تملك المهارات ميزانيتها الخاصة بعد عملية ضغط: تُعاد حقن الأجسام، بحد أقصى 5,000 رمز مميز لكل مهارة و25,000 إجمالاً، وتُسقَط الأقدم أولاً. يحافظ الاقتطاع على بداية الملف، لذا ضع التعليمات الأهم قرب أعلى SKILL.md.

ما ينجو من الضغط يحدّد المكان الذي تنتمي إليه التعليمات.

  • موجه النظام وأسلوب الإخراج لا يتغيران، لأنهما ليسا جزءاً من سجل الرسائل.
  • يُعاد حقن CLAUDE.md الخاص بالجذر، والقواعد غير المُقيَّدة، والذاكرة التلقائية من القرص.
  • تُفقَد القاعدة ذات الواجهة paths: حتى تُقرأ مرة أخرى ملف مطابق.
  • يُفقَد CLAUDE.md المتداخل في دليل فرعي حتى تُقرأ مرة أخرى ملف داخل ذلك الدليل الفرعي.
  • الخطافات لا تتأثر، لأن الخطاف يعمل ككود ولا يدخل السياق أبداً.

إذن القاعدة التي تعتمد عليها تنتمي إلى CLAUDE.md الخاص بالجذر: يمسح Claude Code مخرجات الأدوات الأقدم أولاً ثم يلخّص، لذا قد تُفقَد التعليمات من بداية المحادثة. عدّل الذاكرة باستخدام /memory. يحتفظ Claude Code بالنسخة التي حمّلها عند بداية الجلسة، لذا فإن تقليص منتصف الجلسة يحافظ على ذاكرة التخزين المؤقت للموجه ولا يُطبَّق حتى /clear أو /compact التاليين، أو إعادة التشغيل.

/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

خطافات Hook لا تدخل السياق بنفسها، لأنها تعمل ككود. نفِّذ هذا لأي أداة تتجاوز مخرجاتها شاشة العرض. ينطبق المنطق نفسه على ملف من 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 أو فصله، تفعيل إضافة أو تعطيلها، رفض أداة بأكملها، الضغط، وتحديث Claude Code. /model هو المفاجأة المعتادة، لأن لكل نموذج ذاكرة تخزين مؤقت خاصة به، لذا يقرأ الطلب التالي كامل السجل دون أي إصابة في ذاكرة التخزين المؤقت رغم تطابق المحتوى.

تعديل الملفات، وتعديل CLAUDE.md، واستدعاء المهارات والأوامر، وتشغيل /recap، والتراجع، وتوليد وكيل فرعي كلها تحافظ على ذاكرة التخزين المؤقت. وهي محصورة في جهاز واحد ومجلد واحد، لذا تفشل جلستان في مجلدين مختلفين في الوصول إلى ذاكرة التخزين المؤقت لبعضهما.

لمعرفة ما إذا كان التخزين المؤقت يعمل، اقرأ current_usage. كُتب cache_creation_input_tokens بمعدل كتابة ذاكرة التخزين المؤقت؛ قُدّم cache_read_input_tokens بنحو عُشر معدل الإدخال القياسي. النسبة المرتفعة بين القراءة والإنشاء علامة صحية. إذا ظل الإنشاء مرتفعاً دورة بعد دورة، فثمة شيء في بادئتك يستمر في التغير.

هل نافذة السياق الأكبر تحل هذه المشكلة؟

جزئيًا. تدعم عدة نماذج حالية نافذة سياق بحد 1 مليون رمز، ويعمل الضغط بالطريقة نفسها عند الحد الأكبر. لا يتغير الجانب الاقتصادي، لأن البرومبت الكامل لا يزال يُعاد إرساله ولا يزال يُحتسب في كل دورة. النافذة الأكبر تقرر متى تُجبر على التصرف؛ النظافة تقرر التكلفة. إذا كانت الفاتورة هي المشكلة لا السقف، فإن أي خطة Claude تناسب طريقة عملك تقرر ما إذا كنت تنفق دولارات أو تستهلك حصة الخطة.

تحرير السياق والضغط في الواجهة البرمجية ميزتان مختلفتان

إذا كنت تبني وكيلك الخاص على Messages API، فلا توجد أوامر شرطة Slash وتنفّذ ذلك بنفسك. تؤدي ميزتان من جانب الخادم المهمة، ولا تمثلان الميزة نفسها.

تحرير السياق يمحو بشكل انتقائي محتوى محددًا من سجل المحادثة أثناء نموه، ويستبدل كل نتيجة ممحية بنص عنصر نائب لكي يعرف 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 تحمل الملخص، تتبعها كتلة النص الاعتيادية. يجب أن تمرّر تلك الكتلة مرة أخرى في الطلبات اللاحقة، وعندها تحذف الواجهة البرمجية كل كتلة محتوى قبلها. عمليًا: ألحق كامل محتوى 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 بعينها.

هل أستخدم نافذة سياق بمليون رمز بدلًا من الضغط (compacting)؟

نافذة أكبر تؤخر المشكلة ولا تحلّها. عدة نماذج حالية تشغّل نافذة سياق بمليون رمز، من بينها Opus 4.8 وSonnet 5، ويتصرّف الضغط (compaction) بالطريقة نفسها هناك. كل دور لا يزال يُعيد إرسال المطلب الكامل ولا يزال يُحتسب له، فمحادثة بسعة 400,000 رمز مكلّفة سواء أكانت تتسع أم لا.

ما الفرق بين تحرير السياق والضغط (compaction) في Claude API؟

تحرير السياق يمسح المحتوى القديم بشكل انتقائي، ومعظمه نتائج الأدوات، تاركًا نصًا نائبًا مكان كل عنصر منها حتى يعرف Claude أنه أُزيل. الضغط (compaction) يُولّد ملخصًا ويستبدل السجل الكامل به. توثيق Anthropic يسمّي الضغط الاستراتيجية الأساسية للمحادثات الطويلة، ويقدّم تحرير السياق كخيار دقيق الحبيبات. كلاهما إصدار تجريبي (beta) ولكل منهما ترويسات خاصة، وكلاهما منفصل عن /compact في Claude Code.