قواعد العزل لتوفير 80% من توكنات الجلسة عند إصلاح الكود القديم باستخدام Claude Code
TuBrief 편집팀
2026년 9월 12일
0
Computing/Software원본 영상을 바탕으로 AI의 도움을 받아 작성했습니다. 원본 영상이 기준입니다.
커뮤니티의 다른 글
댓글 (0)
Log in to leave a comment
아직 작성된 글이 없습니다
원본 영상을 바탕으로 AI의 도움을 받아 작성했습니다. 원본 영상이 기준입니다.
Log in to leave a comment
아직 작성된 글이 없습니다
عندما يقوم مطور في سنته الأولى أو أقل بإنشاء منتج بمفرده ويربط Claude Code بقاعدة أكواد قديمة ضخمة، تنفد ميزانية التوكِنات (Tokens) في أقل من ساعة. مع عدم وجود مطور خبير في الشركة للسؤال، وبعد التعرف فقط على أوامر واجهة سطر الأوامر (CLI) الأساسية، تفتح الطرفية (Terminal) لتستمر في تلقي إشعارات الخصم من بطاقة الائتمان.
لا يحتفظ Claude Code بحالة المحادثة على الخادم. يتم تجميع موجه النظام (System Prompt)، وملف إعدادات المشروع CLAUDE.md، وسجل المحادثات المتراكم، ونتائج استدعاء الأدوات في حمولة (Payload) واحدة في كل دورة وإرسالها مرة أخرى إلى واجهة برمجة تطبيقات Anthropic. في الدورات الأولى 1-2 مباشرة بعد بدء الجلسة، تظل التوكنات في حدود 15,000، ولكن بمجرد أن يبدأ الوكيل (Agent) في الاستكشاف وقراءة مخرجات البناء أو عشرات الآلاف من أسطر السجلات (Logs)، ترتفع الحمولة إلى 80,000 توكن. وبعد تجاوز 6 إلى 10 دورات، يتم تبادل ما بين 120,000 إلى 200,000 توكن في كل دورة. إنها بنية تُحسب فيها التكاليف بفائدة مركبة مع كل دورة.
بالنظر إلى الأسعار الرسمية للتخزين المؤقت للموجهات (Prompt Caching) من Anthropic، يتضح السبب بشكل أكبر. إذا تم الاحتفاظ بسياق البادئة نفسه، فإنك تدفع 10% فقط من تكلفة توكنات الإدخال الأساسية. من ناحية أخرى، إذا قرأ الوكيل عشرات الآلاف من الأسطر من الكود بشكل غير منتظم مما أدى إلى كسر بادئة التخزين المؤقت، فسيتم تطبيق تكلفة إنشاء تخزين مؤقت جديدة بـ 1.25 ضعف بناءً على فترة صلاحية (TTL) تبلغ 5 دقائق. هذا هو السبب في أن بضع عمليات بحث فقط يمكن أن تسجل رسومًا يصعب على الشخص تحملها بمفرده.
كثير من المطورين يشعرون بالارتياح بعد إنشاء ملف .claudeignore في الدليل الجذر. الخلاصة هي أن محرك واجهة سطر الأوامر الرسمي لـ Claude Code لا يحتوي على ملف الإعدادات هذا. كما أن طريقة كتابة "لا تقرأ مجلد السجلات" في ملف CLAUDE.md يتجاهلها النموذج إذا رأى أنها ضرورية.
لكقطع وصول الوكيل إلى الملفات فعليًا على مستوى المحرك، يجب عليك استخدام إعداد permissions.deny في ملف .claude/settings.json.
قم أولاً بتجميع مخرجات البناء وملفات الأمان في .claude/settings.json بجذر المشروع.
json { "permissions": { "deny": [ "Read(./.env*)", "Read(./secrets/**)", "Read(**/node_modules/**)", "Read(**/dist/**)", "Read(**/build/**)", "Read(**/coverage/**)", "Read(**/target/**)", "Read(**/*.log)", "Read(**/*.map)", "Read(legacy-backups/**)", "Edit(**/dist/**)", "Write(**/dist/**)" ], "ask": [ "Bash(git push *)", "Bash(npm publish)", "Bash(rm -rf *)" ], "allow": [ "Read", "Edit", "Bash(npm test)", "Bash(npm run lint)", "Bash(git status)", "Bash(git diff *)" ] } }
ولمنع سلوك سحب كود الواجهة الأمامية (Frontend) عند تعديل منطق الواجهة الخلفية (Backend)، احتفظ بملف إعدادات مخصص محليًا فقط باسم .claude/settings.local.json بشكل منفصل.
json { "permissions": { "deny": [ "Read(apps/web/**)", "Read(frontend/**)", "Read(public/**)", "Edit(apps/web/**)", "Write(apps/web/**)" ] } }
يجب عليك أيضًا منع الوكيل من تفريغ السجلات الكبيرة بالكامل في الطرفية باستخدام أوامر الصدفة مثل cat أو head. قم بربط خطاف (Hook) من نوع PreToolUse في ملف .claude/settings.json لاعتراض الأوامر مسبقًا.
json { "hooks": { "PreToolUse": [ { "matcher": "Bash", "hooks": [ { "type": "command", "command": "bash", "args": ["${CLAUDE_PROJECT_DIR}/.claude/hooks/block-large-reads.sh"] } ] } ] } }
قم بتنفيذ ملف .claude/hooks/block-large-reads.sh وإعطائه صلاحيات التنفيذ باستخدام chmod +x.
`bash
#!/usr/bin/env bash
PAYLOAD=(echo "$PAYLOAD" | jq -r '.tool_input.command // empty')
if echo "$COMMAND" | grep -Eq '(cat|head|tail|less)\s+.*(.log|.map|.lock|dist/|build/)'; then
echo "تم اكتشاف إخراج مباشر لملف كبير، سيتم إيقاف التنفيذ." >&2
exit 2
fi
exit 0
`
عند إرجاع رمز الخروج (Exit code) 2 على مستوى عملية نظام التشغيل، يتوقف إخراج الملفات للوكيل على الفور. من خلال منع عمليات الفحص غير الضرورية للملفات، يتم تقليل استهلاك التوكنات في الدورات الأولية إلى أقل من النصف.
إذا سمحت بإعادة كتابة الملف بأكمله لمجرد تغيير متغيّر واحد في ملف قديم يضم أكثر من 1,000 سطر، فستحدث أخطاء وتضيع توكنات الإخراج. يوجد داخل Claude Code أداة Write التي تقوم بالكتابة فوق الملفات، وأداة Edit التي تستبدل كتل نصوص محددة فقط.
يجب تثبيت قواعد التعديل في ملف CLAUDE.md بجذر المشروع.
`markdown
بدلاً من تمرير ملف كبير بأكمله إلى الوكيل، من الأفضل استخراج الدالة المستهدفة فقط. هذا سكريبت شل (extract-func.sh) يستخدم أداة تحليل AST المسمى ast-grep.
`bash
#!/usr/bin/env bash
TARGET_FILE=2
if [ -z "FUNC_NAME" ]; then
echo "الاستخدام: ./extract-func.sh <مسار_الملف> <اسم_الدالة>" >&2
exit 1
fi
if command -v sg &> /dev/null; then
sg run --pattern "function TARGET_FILE"
else
LINE_START=TARGET_FILE" 2>/dev/null | grep -w "$FUNC_NAME" | awk '{print 3}')
if [ -n "LINE_START" ]; then
sed -n "((LINE_START + 100))p" "$TARGET_FILE"
else
grep -n -A 60 "function TARGET_FILE"
fi
fi
`
قم بتمرير الدالة المستخرجة أو git diff المُجهّز فقط في الوضع بلا رأس (Headless mode عبر claude -p) لطلب التعديلات.
`bash
./extract-func.sh src/billing.js processRefund | claude -p "قم بإخراج كتلة الكود البديلة فقط (new_string) لـ Edit والتي تصلح خطأ الحساب في الدالة أعلاه."
git diff --staged src/services/OrderService.js | claude -p "قم بالإشارة فقط إلى عيوب التزامن المحتملة أو إمكانية المراجع الفارغة (null) التي قد تحدث في هذا الـ diff."
`
من خلال إدخال شرائح من 50 إلى 100 سطر فقط بدلاً من كود المصدر بأكمله، يمكنك تقليل استهلاك التوكنات لكل دورة بنسبة تقارب 90%.
لا توجد أسباب تطيل أمد العمل في جلسة واحدة. وكلما تراكم سجل المحادثات، زادت الرسوم الأساسية الواجب دفعها في كل دورة. يدعم نموذج Claude خاصية /autocompact التي تلخيص سجل المحادثات تلقائيًا عند الوصول إلى حوالي 967,000 توكن، ولكن أثناء عملية تقليل الكود، غالبًا ما يقوم النظام بحذف المعلمات المهمة أو سياق الحالات الحدية (Edge cases). يجب عليك تفريغ السياق بنفسك.
تحقق من الحالة الحالية في الطرفية باستخدام ثلاثة أوامر مدمجة:
/context: لعرض نسبة الذاكرة التي يشغلها موجه النظام وسجل المحادثات./usage: للتحقق من استخدام توكنات الجلسة ومعدل استنفاد حد الخطة./cost: للتحقق من التكلفة الفعلية بالدولار المتراكمة حتى الجلسة الحالية.إذا تجاوز عدد التوكنات 100,000 أو انتهت وحدة عمل معينة، فاطلب من Claude Code كتابة HANDOFF.md قبل إغلاق الجلسة.
text قم بتسجيل حالة العمل الحالية للجلسة في ملف HANDOFF.md بجذر المشروع بالصيغة التالية: Goal: هدف العمل ووحدة العمل المستهدفة Current Progress: الملفات المعدلة والأسطر المحددة What Worked: المنطق الذي تم التحقق من صحته والاختبارات المجتازة What Failed: النهج الفاشل والاحتياطات الواجب اتخاذها ImmediateNext Step: المهمة الفردية التي يجب تنفيذها فور بدء الجلسة التالية
عند اكتمال التسجيل، فرّغ نافذة السياق بالأمر /clear. افتح جلسة جديدة وقم بتمرير ملخص الجلسة السابقة فقط.
text اقرأ ملف HANDOFF.md واستأنف العمل بدءاً من بند Immediate Next Step. لا تحاول استخدام الطريقة التي فشلت من قبل.
إذا بدأت في الدوران في نفس الخطأ لأكثر من 3 مرات، يجب عليك الضغط على مفتاح Escape فوراً للإيقاف. في حالة كان تفريغ الجلسة بالكامل غير مناسب، عد إلى الدورة السابقة التي كانت تعمل بشكل صحيح باستخدام /rewind. يحافظ الأمر /rewind على ذاكرة التخزين المؤقت لموجه بادئة النظام المؤسس، لذا يمكنك العودة إلى الفرع الطبيعي دون دفع تكاليف كتابة إضافية للتخزين المؤقت.
| طبقة الحماية | مكان الإعداد | مستوى التحكم | تأثير خفض التوكن الفعلي |
|---|---|---|---|
| تصفية ملفات التسخير | .claude/settings.json (permissions.deny) |
فرض محرك CLI | حظر 50% إلى 80% من توكنات الفحص الأولي لكل جلسة |
| جدار حماية أوامر الصدفة | PreToolUse Hook (block-large-reads.sh) |
حظر عملية نظام التشغيل (Exit 2) | حظر كامل بنسبة 100% لإخراج السجلات والملفات المجمعة بكميات كبيرة |
| تقطيع السياق | مسار ast-grep و git diff |
تقييد نطاق الإدخال | تقليل توكنات تحليل الملفات وتعديلها بنسبة 90% لكل دورة |
| إدارة عمر الجلسة | /context, /clear, HANDOFF.md |
ديمومة الحالة يدويًا | توفير أكثر من 60% من رسوم التوكنات المركبة المتراكمة في النصف الثاني من الجلسة |
من خلال حظر المسارات غير الضرورية عبر .claude/settings.json، والالتزام بقاعدة تمرير الكود المقسم (المشرح) فقط بدلاً من الملفات الضخمة، يمكنك تشغيل Claude Code كأداة تطوير حقيقية في بيئة المطور الفردي.",
"language": "ar