في مقال استخدم opencode من الـTerminal وتابع الـAgent – عملي شفنا الـLoop من الداخل: النموذج يفكر، ينفذ أداة، يقرأ النتيجة، ويصحح نفسه. وفي مقال رتب فكرتك أول وبعدها خل الـAgent يشتغل قلنا إن المتطلبات هي مصدر الحقيقة والكود مجرد تعبير عنها. الكلام النظري جميل، لكن الأغلب يشغل Claude Code بالإعدادات الافتراضية، يكتب prompt، ويستنى. وبعدها يستغرب ليش النتيجة أحيانًا ممتازة وأحيانًا تعبانة.
في هذا المقال بنسوي ثلاثة أشياء. الـcontext وملف CLAUDE.md، لأن كل شيء بعدهم يبني عليهم. نبني ميزة كاملة في مشروع حقيقي بالطريقة اللي يوصي فيها فريق Claude Code نفسه خطة، تنفيذ، مراجعة بعقل ثاني، ورجوع للخلف لو احتجنا، ونمر على الأوامر والاختصارات في الطريق.نوصل Claude Code بمتصفح عبر MCP ونأتمت الأشياء المتكررة بالـhooks والـskills، ونختم بالفاتورة بالدولار. كل أمر هنا مصدره توثيق Claude Code الرسمي وتغريدات فريق Claude Code، وكل لقطة شاشة من جلسة حقيقية شغلتها وأنا أكتب المقال.
تنبيه… على عكس مقال opencode ما فيه هنا خيار مجاني. Claude Code يحتاج اشتراك Pro أو Max أو Team، أو API. الجولة كلها في هذا المقال كلفت 1.08 دولار على نموذج Sonnet 5، والرقم بالتفصيل في آخر المقال.
وش Claude Code؟
الـClaude Code هو الـAgent اللي تطوره Anthropic ويشتغل من الـTerminal. يقرأ مشروعك، يعدل الملفات، ينفذ الأوامر، ويتكامل مع أدواتك. نفس المحرك موجود في VS Code وJetBrains وتطبيق سطح المكتب والويب، لكن الـTerminal هو المكان اللي تشوف فيه كل شيء وتتحكم فيه.
للتثبيت على macOS أو Linux أو WSL:
bash
curl -fsSL https://claude.ai/install.sh | bash
على Windows PowerShell:
bash
irm https://claude.ai/install.ps1 | iex
وإذا تفضل Homebrew فـbrew install –cask claude-code تسوي نفس الشيء. بعدها ادخل على مجلد المشروع واكتب claude.
مشروع التجربة بسيط todo-api بـExpress، ثلاثة ملفات في src/ وملف اختبارات واحد فيه ثلاثة اختبارات تنجح. الفكرة إنك تقدر تعيد كل خطوة هنا في أي مشروع صغير عندك.

ثلاثة أشياء في أول شاشة. النموذج الافتراضي Sonnet 5 وتقدر تبدله بـ/model. وضع الصلاحيات الافتراضي صار auto mode، وبنرجع له. والأدوات المدمجة اللي يشتغل فيها النموذج معدودة Read وEdit وWrite للملفات، Bash للأوامر، Grep وGlob للبحث، WebFetch وWebSearch للويب، وأداة Agent اللي تشغل subagents. هذي الأسماء بتحتاجها لما تكتب قواعد الصلاحيات.
القاعدة: الـcontext يمتلئ بسرعة
أغلب الممارسات الجيدة تطلع من قيد واحد، نافذة الـcontext تمتلئ بسرعة والأداء يتدهور كل ما امتلأت. كل رسالة، كل ملف يقرأه النموذج، وكل output لأمر نفذه، كلها تنحسب.
أول أمر كتبته في الجلسة كان /context

الجلسة ما بدأت وأنا صرفت 34 ألف token أدوات النظام لحالها 27.4k. ولاحظ سطر MCP tools 22 أداة بصفر tokens لأنها تنحمل عند الطلب فقط. هذي أول عادة اعرف وش داخل الـcontext قبل ما تلوم النموذج.
وثلاث أوامر بتستخدمها كل يوم /clear بين المهام اللي ما لها علاقة ببعض، /compact لما تحتاج تكمل نفس المهمة لكن التاريخ صار ثقيل (وتقدر توجهه: /compact Focus on the API changes)، و/btw لسؤال جانبي ما تبي جوابه يدخل في تاريخ المحادثة أصلًا.
ملاحظة سريعة… إذا صححت النموذج مرتين على نفس الشيء في جلسة وحدة، الـcontext الحين مليان محاولات فاشلة. سو /clear واكتب prompt أفضل يتضمن اللي تعلمته. جلسة نظيفة بـprompt افضل تغلب جلسة طويلة بتصحيحات متراكمة، دايم.
ابدأ من CLAUDE.md
ملف CLAUDE.md ملف يقرأه Claude Code في بداية كل جلسة. حط فيه الأشياء اللي ما يقدر يستنتجها من الكود الأوامر والاختبار، قواعد الأسلوب اللي تختلف عن الافتراضي، وآداب المستودع. الطريقة الرسمية هي /init وتخليه يولد لك نسخة أولى من مشروعك. أنا طلبتها بجملة مباشرة عشان أتحكم في الحجم ملف تحت 20 سطر فيه أوامر التشغيل والاختبار وقاعدتين فقط. وبعدها كتبت !cat CLAUDE.md:

لاحظ علامة ! في بداية السطر هذا shell mode، ينفذ الأمر مباشرة ويضيف مخرجاته للجلسة بدون ما يمر على النموذج. ولاحظ إن القاعدتين قابلتين للتحقق: “ES modules فقط” و”شغل npm test قبل كل commit”. التوثيق يقول الهدف أقل من 200 سطر، والسؤال لكل سطر لو حذفته هل بيغلط النموذج؟ إذا لا، احذفه. الملف المنفوخ يخلي النموذج يتجاهل تعليماتك الفعلية.
هل التزم فيها؟ بنشوف بعد شوي.
خطط قبل ما تكتب
الـPlan mode يخلي النموذج يقرأ ويحلل ويقترح بدون ما يعدل أي ملف. ضغطت Shift+Tab ثلاث مرات لين طلع Use a subagent to review the uncommitted diff against the plan. Check every
requirement is implemented, the edge cases have tests, and nothing outside
the task changed. Report gaps only, not style preferences.
Use a subagent to review the uncommitted diff against the plan. Check every
requirement is implemented, the edge cases have tests, and nothing outside
the task changed. Report gaps only, not style preferences.
plan mode on في شريط الحالة، وكتبت:
I want to add an optional dueDate to todos, with GET /todos?overdue=true returning only overdue ones. Which files need to change? Create a plan.
اللي صار بعدها هو أهم جزء في المقال. النموذج ما قرأ الملفات بنفسه، شغّل subagent اسمه Explore يقرأها في context منفصل ويرجع له ملخص (44 ثانية). وبعدها شغّل subagent ثاني اسمه Plan يكتب الخطة بالخلفية. وفي نفس الوقت طلع لي ثلاثة أسئلة منتج وش معنى “متأخر” بالضبط، هل المهمة المنجزة بعد موعدها تنحسب متأخرة؟ وش صيغة التاريخ؟ وهل الـdueDate ينضبط عند الإنشاء أو التعديل فقط؟ لكل سؤال خيار موصى فيه، اخترته. هذا بالضبط اللي سويناه يدويا في مقال Spec Kit بمرحلة clarify. هنا مدمج في الأداة.

لاحظ سطر “Confirmed with user” في الخطة قراراتي الثلاثة صارت جزء من الوثيقة. ولاحظ خيار ctrl+g to edit in Vim تفتح الخطة في محررك وتعدلها بيدك قبل التنفيذ. الخطة كلها محفوظة في ملف markdown تقدر ترجع له. لاحظ إن التوثيق نفسه يقول لا تخطط لكل شيء. تصحيح typo أو إضافة log line، اطلبها مباشرة. إذا تقدر تصف الـdiff في جملة وحدة، تجاوز الخطة.
التنفيذ: وهنا يظهر أثر CLAUDE.md
وافقت على الخطة بخيار “Yes, and use auto mode” وتركته يشتغل.

أول سطر “Now run the tests, per CLAUDE.md’s rule to test before committing”. القاعدة اللي كتبناها قبل عشر دقائق اشتغلت بدون ما أذكرها. ثلاثة ملفات تغيرت، خمسة اختبارات جديدة فوق الثلاثة القديمة، 8/8 تنجح. ولاحظ آخر سطر ما سوى commit من نفسه، سأل. هذا الفرق بين خطة تحدد النطاق وبين “سو لي API”.
مراجعة بعقل ثاني
فريق Claude Code يكرر نقطة وحدة أكثر من أي شيء النموذج يوقف لما “يبدو” الشغل خلص، وبدون فحص مستقل أنت اللي تصير حلقة التحقق. الأداة المدمجة لهذا هي /code-review، تراجع الـdiff في subagent نظيف. أنا استخدمت الصيغة اليدوية من التوثيق لأنها تربط المراجعة بالخطة
Use a subagent to review the uncommitted diff against the plan. Check every requirement is implemented, the edge cases have tests, and nothing outside the task changed. Report gaps only, not style preferences.

المراجع ما شاف الاستدلال اللي أنتج الكود، شاف الـdiff والخطة فقط، وراجع النطاق كمان: “package.json untouched”. ولاحظ الملاحظة الأخيرة “non-gap note”: فيه اختبار ناقص لحالة PATCH { dueDate: null }، لكنه ما حسبها فجوة لأنها مو في قائمة الخطة. هذي بالضبط نوعية الملاحظات اللي تبيها من مراجع يفرق بين اللي يخالف المتطلبات واللي مجرد تحسين.
ملاحظة سريعة… المراجع اللي طلبت منه يلقى ثغرات بيلقى ثغرات، حتى لو الشغل سليم. لهذا السبب الـprompt يقول “gaps only, not style preferences”. بدونها بتنتهي بطبقات تجريد وتحقق لحالات ما تصير.
لو ما عجبك؟ ارجع
كل prompt ترسله ينشئ checkpoint. اضغط Esc مرتين أو اكتب /rewind

لاحظ إنه يعرف بالضبط وش بيرجع: +8 -199 في أربعة ملفات. وتقدر ترجع الكود فقط، أو المحادثة فقط، أو الاثنين، أو تلخص من هذي النقطة. هذا يغير طريقة شغلك بدل ما تخطط لكل حركة، جرب الشيء الخطر، وإذا ما نفع ارجع.
تنبيه… الـcheckpoints تتبع التغييرات اللي سواها النموذج بأدوات التعديل فقط. اللي يصير عبر أوامر Bash ما ينحفظ. التحذير مكتوب في القائمة نفسها، وهذا مو بديل عن git.
أقل أسئلة بدون ما تفقد التحكم
في الوضع اليدوي Claude Code يسألك قبل كل كتابة ملف وكل أمر Bash. آمن لكن بعد عاشر موافقة تصير تضغط بدون ما تقرأ. على خطط Pro وMax وTeam فيه وضع auto mode صار الافتراضي نموذج تصنيف منفصل يراجع كل أمر ويوقف اللي يبدو خطير، مثل توسيع النطاق أو بنية تحتية غير معروفة، ويمرر الباقي.
سواء كنت في auto أو Manual، /permissions هو المكان اللي تسمح فيه للأدوات اللي تثق فيها. أضفت قاعدة Bash(npm test *)

السؤال وين تنحفظ: .claude/settings.local.json لك أنت فقط، أو .claude/settings.json تنرفع مع git للفريق، أو إعدادات المستخدم لكل مشاريعك. وفيه أمر /fewer-permission-prompts يمسح تاريخ جلساتك ويقترح allowlist من الأوامر اللي وافقت عليها مرارًا.
بوريس تشيرني (اللي صنع Claude Code) يقول: استخدم /permissions بدل –dangerously-skip-permissions. الفرق إنك تسمح بأوامر معينة تعرفها، مو تفتح الباب كله.
لا تعيد نفسك: الـhooks
الفرق بين CLAUDE.md والـhook إن الأول تعليمة والثاني ضمان. “شغل prettier بعد كل تعديل” في CLAUDE.md طلب ممكن ينساه النموذج، لكن hook من نوع PostToolUse ينفذ كل مرة بدون استثناء. أضفت هذا في .claude/settings.local.json
json
{ “hooks”: { “PostToolUse”: [ { “matcher”: “Edit|Write”, “hooks”: [{ “type”: “command”, “command”: “jq -r ‘.tool_input.file_path’ | xargs npx prettier –write” }] } ] } }

وبعدها طلبت تعديل بسيط على README وفتحت الـtranscript بـCtrl+O:

سطر “2 PostToolUse hooks ran” تحت التعديل مباشرة. ولاحظ الشيء اللي ما توقعته فوق لما ثبّت prettier تغير package.json، والنموذج انتبه إن هذا التغيير خارج نطاق المهمة وطلع الملف من الـcommit وقال لي ليش. هذا انضباط النطاق اللي تبيه. ما تحتاج تكتب الـhook بيدك. قل له Write a hook that runs eslint after every file edit وبيكتبه ويشرحه، و/hooks تشوف المسجل. وأول hook يقترحه التوثيق هو إشعار لما يحتاج النموذج ردك بدل ما تراقب الـTerminal.
لا تعيد نفسك: الـskills
ملف markdown في .claude/skills/<name>/SKILL.md يصير أمر /<name>. كتبت skill صغيرة تشغل الاختبارات وتلخص النتيجة
markdown
— name: test-report description: Run the test suite and summarize failures with the file and line to fix disable-model-invocation: true — Here is the current test output: !`npm test 2>&1 | tail -20` Summarize it in 3 lines max: how many passed, how many failed, and for each failure the file and line to look at. If everything passes, say so in one line and suggest one missing edge case for $ARGUMENTS.

الزمن ثانيتين. السبب سطر !`npm test`: الأمر ينفذ قبل ما يشوف النموذج المحتوى، فيوصله الـoutput الفعلي بدون ما يصرف دور كامل على استدعاء Bash. و$ARGUMENTS أخذت “the overdue filter” اللي كتبتها بعد اسم الأمر. ولاحظ disable-model-invocation: true: النموذج ما يشغلها من نفسه، أنت اللي تطلبها. استخدمها لأي skill لها آثار جانبية.
ملاحظة سريعة… الـskills تنقرأ عند بداية الجلسة. أول مرة كتبت /test-report طلع لي “Unknown command” لأني أنشأت الملف والجلسة شغالة. اطلع وادخل.
وصّل أدواتك عبر MCP
الـMCP بروتوكول مفتوح يعطي النموذج أدوات خارج المدمجة. في مقال opencode كتبنا MCP server بـ27 سطر Python لـSQLite. هنا بنوصل Claude Code بمتصفح كامل بأمر واحد، وهو الـserver اللي ينصح فيه التوثيق كأول تجربة محلية
bash
claude mcp add playwright — npx -y @playwright/mcp@latest claude mcp list

الأمر يشتغل من الـTerminal مو من داخل جلسة claude. وكل شيء بعد — هو الأمر اللي يشغله Claude Code كعملية محلية (stdio). في الصورة فيه flags إضافية (–headless ومسار المتصفح) لأني شغلت التجربة في بيئة Linux بدون شاشة، على جهازك الأمر القصير فوق يكفي ونافذة المتصفح تفتح قدامك.
داخل الجلسة، /mcp يعرض الحالة والأدوات

لاحظ إن playwright وحده يجيب 24 أداة، ولاحظ التصنيف بجانب كل أداة: read-only أو destructive. هذا اللي يعتمد عليه auto mode في قراره. شغّلت الـAPI على المنفذ 3000، أضفت مهمتين وحدة منها موعدها فات، وطلبت

سطر “Called playwright 4 times” هذا دليلك إن الجواب جا من المتصفح مو من قراءة الكود. ولاحظ إنه فسر ليش المهمة الثانية ما ظهرت: ما لها dueDate أصلًا.
النطاقات مهمة لو تشتغل مع فريق. الافتراضي local لك أنت وفي هذا المشروع فقط. –scope user يخليه لك في كل مشاريعك. و–scope project يكتبه في .mcp.json في جذر المشروع فيرفع مع git، وأول ما يشوفه زميلك يطلب موافقته قبل التشغيل. الـservers المستضافة مثل Sentry وNotion تنضاف بنفس الطريقة مع –transport http وتسجل دخول من /mcp، وتوثيق Claude Code نفسه متاح كـserver تجربه بدون أي حساب
bash
claude mcp add –transport http claude-code-docs https://code.claude.com/docs/mcp
تنبيه… كل server موصول ياخذ مساحة من الـcontext لأن أسماء أدواته تنحمل في كل جلسة. اكتب /context all وشوف كم ياخذ كل واحد، واحذف اللي ما تستخدمه. والأهم تحقق إنك تثق في الـserver قبل ما توصله. الـservers اللي تجيب محتوى خارجي تعرضك لـprompt injection.
الأوامر والاختصارات اللي تستخدمها فعلًا
قائمة الأوامر طويلة جدًا، /help يعرضها كلها. هذي اللي فرقت معي
| الغرض | الأمر | وش يسوي |
|---|---|---|
| الـcontext | /context | يعرض استهلاك الـcontext كشبكة ملونة |
| /clear و/compact | محادثة جديدة، أو تلخيص الحالية | |
| /btw [سؤال] | سؤال جانبي ما يدخل في المحادثة | |
| /rewind | يرجع لنقطة سابقة في الكود أو المحادثة | |
| الجلسات | /rename و/resume | تسمي الجلسة وترجع لها لاحقًا |
| /fork و/branch | نسخة من المحادثة في جلسة ثانية، أو فرع منها | |
| الجودة | /code-review و/security-review | مراجعة الـdiff في subagent نظيف |
| /simplify و/diff | تبسيط الـdiff، أو استعراضه | |
| الإعداد | /init و/memory | توليد CLAUDE.md وتعديله |
| /model و/effort | تبديل النموذج أو مستوى الجهد | |
| /permissions و/hooks و/mcp و/skills | إدارة الصلاحيات والإضافات | |
| /doctor | فحص الإعداد ويقترح قص CLAUDE.md | |
| الأتمتة | /loop و/schedule | تكرار prompt أو جدولته |
| /batch <تعليمة> | يوزع تغيير كبير على 5 إلى 30 subagent | |
| /goal [شرط] | هدف يستمر النموذج لين يتحقق | |
| التكلفة | /usage و/stats | تكلفة الجلسة وإحصائيات الاستخدام |
والاختصارات اللي شفتها في اللقطات فوق Esc يوقف النموذج في نص الشغل والـcontext يبقى. Esc مرتين يفتح الـrewind. Shift+Tab يبدل أوضاع الصلاحيات Manual وacceptEdits وplan وauto. Ctrl+G يفتح الـprompt أو الخطة في محررك. Ctrl+O يفتح الـtranscript بالتفصيل. Ctrl+B يرسل أمر أو agent للخلفية. @ قبل اسم ملف يقرأه النموذج قبل ما يرد، و! ينفذ أمر shell، وCtrl+V يلصق صورة.
طيب والـTerminal التفاعلي مو كل شيء؟
نفس الأداة تشتغل بدون تفاعل بـ-p، وهذا اللي يخليها تدخل في CI والـscripts

الحقول في الـJSON النتيجة، التكلفة (7 سنتات)، والزمن (3.3 ثانية). تقدر تمررها لأي أداة ثانية، أو تلف على قائمة ملفات بـclaude -p لكل ملف مع –allowedTools “Edit,Bash(git commit *)” عشان تقيد وش يقدر يسوي وهو بدون مراقبة. وداخل الجلسة، /batch يوزع الشغل على subagents كل واحد في worktree خاص.
والنقطة اللي يسميها فريق Claude Code “أكبر مكسب إنتاجية” تشغيل 3 إلى 5 جلسات بالتوازي في git worktrees منفصلة. /worktree يديرها من داخل الجلسة. وفيه نمط Writer/Reviewer: جلسة تكتب، وجلسة ثانية بـcontext نظيف تراجع، لأن النموذج ما يكون متحيز لكود كتبه توه.
الفاتورة

1.08 دولار. 6 دقائق و12 ثانية وقت API من أصل 18 دقيقة وقت فعلي، و218 سطر مضافة. لاحظ السطر تحت: 83% من الاستهلاك جا من جلسات كثيفة الـsubagents. الـExplore والـPlan والمراجع كلهم subagents، وكل واحد يشغل طلباته الخاصة. المقابل إن الـcontext الرئيسي بقي نظيف، وهذا اللي خلى القاعدة في CLAUDE.md تشتغل بعد عشر دقائق من كتابتها. ولاحظ /effort في شريط الحالة: تقدر تنزل الجهد للمهام البسيطة.
الزبدة
سؤال المقدمة كان ليش النتيجة أحيانًا ممتازة وأحيانًا تعبانة مع نفس الأداة. الجواب إن الأداة ما تتغير، اللي يتغير هو الـcontext اللي تدخلها فيه. الحين عندك طريقة تشوف فيها الـcontext وتنظفه، ملف CLAUDE.md قصير شفنا قاعدته تشتغل بدون تذكير، plan mode يسألك أسئلة المنتج قبل ما يكتب سطر، مراجعة من subagent ما شاف إلا الـdiff والخطة، rewind لأي نقطة، صلاحيات مضبوطة بدل الموافقة العمياء، hook يضمن التنسيق، skill تختصر دور كامل، وMCP يعطي النموذج متصفح بأمر واحد. وكل هذا بدولار وثمانية سنتات.
نصيحتي نفسها دايم لا تضبط كل شيء من أول يوم. ابدأ بـCLAUDE.md قصير، وأضف كل إضافة لما يظهر سببها غلطة تكررت، prompt كتبته للمرة الثالثة، تبويب متصفح تنسخ منه. بوريس نفسه يقول إعداده “vanilla” لدرجة مفاجئة، والأداة تشتغل زين من الصندوق. الفرق يصير في العادات مو في الإعدادات.
في مقال قادم إن شاء الله نأخذ نفس المشروع ونشغل جلستين بالتوازي في worktrees، وحدة تكتب ووحدة تراجع، ونشوف هل الجودة تستاهل الفاتورة المضاعفة.
المصادر:
- Claude Code overview وBest practices من التوثيق الرسمي
- Commands reference وInteractive mode
- How Claude remembers your project (CLAUDE.md) وExtend Claude Code
- MCP quickstart وMCP reference
- Skills، Hooks guide، Subagents
- تغريدات Boris Cherny: إعداده الشخصي، 3 يناير 2026 ونصائح فريق Claude Code
Originally published on X.








