المحتويات
- 1. ماذا طلبت منه أن يبني: الظروف، واعتراف لا بدّ منه في البداية
- 2. خطوات البدء، والمواضع الخمسة التي تعثّرت فيها
- 3. سجلّ نحو 20 ساعة: ما الذي جرى وأنا نائم
- 4. الموافقة على كل خطوة مقابل تفويض الأمر
- 5. الجودة كما ظهرت بعد الإطلاق: كل الاختبارات كانت ناجحة
- 6. الاستهلاك والتكلفة: أين ذهبت 191.8 مليون توكن
- 7. لماذا تعثّر النشر إلى بيئة الإنتاج
- 8. الأعمال التي تناسبه والأعمال التي لا تناسبه
- الأسئلة الشائعة
ميزة Projects في Claude Code تجعل Claude يقسّم عملك إلى «خيوط» داخل محادثة واحدة، ثم يشغّلها بالتوازي في السحابة. شرحت طريقة عملها ومن يستطيع استعمالها في ما هي Projects في Claude Code. وهذا المقال تتمّة له: سجلّ تجربة فعلية طلبت فيها منها أن تبني موقع ويب كاملًا.
جرّبتها من 26 إلى 28 سبتمبر 2026، وكانت Projects يومها في مرحلة التجربة العامة (بيتا) (تُطرح تدريجيًّا على خطّتي Pro وMax؛ راجع الوثائق الرسمية). وقد تتغيّر الشاشات والسلوك لاحقًا. ما أكتبه هنا هو ما حدث فعلًا في ذلك الوقت، مع أرقام تحقّقت منها من الشاشات وتقرير الاستهلاك وسجلّ المستودع.
الخلاصة أوّلًا: ما تعلّمته من الاستعمال
قياسات من 26 إلى 28 سبتمبر 2026 (تقرير استهلاك المشروع وسجلّ المستودع)
ما بناه
11 طلب سحب
10 خيوط ونحو 23 ألف سطر. وتقدّم العمل وأنا نائم.
الوقت المستغرق
نحو 20 ساعة
من الإنشاء حتى آخر دمج، منها نحو 7 ساعات في الليل.
التوكنات المستهلكة
نحو 190 مليونًا
97.7% منها قراءة من ذاكرة التخزين المؤقت. وبالنسبة إلى حجم العمل، تقارب Claude Code على جهازي.
النتيجة
مسوّدة أولى بنسبة 80%
قبل الإطلاق ظهرت ثغرات بين مسؤوليات الخيوط، وأعطال لا تكشفها إلا البيانات الحقيقية.
وباختصار: التطوير يتقدّم على نحو مدهش حتى حين تتركه وشأنه، لكن ما يخرج مسوّدةٌ أولى لا منتجٌ مكتمل، والنشر إلى خادم لا يُدخَل إليه إلا عبر SSH يصل إلى طريق مسدود. وفي ما يلي أعرض الجيّد والسيّئ بالترتيب الذي وقع به.
1. ماذا طلبت منه أن يبني: الظروف، واعتراف لا بدّ منه في البداية
كان الموضوع موقع قاعدة بيانات للبحث عن «الذاكرة اللازمة» لنماذج اللغة المحلية. وللإجابة عن سؤال «هل يعمل هذا النموذج على جهازي؟» يجمع الموقع أحجام الملفات المكمَّمة من Hugging Face، ويحسب الذاكرة اللازمة عند كل طول سياق، ويتيح البحث العكسي انطلاقًا من ذاكرة بطاقة الرسوميات أو جهاز Mac. المشروع ليس صغيرًا أكثر من اللازم، وينقسم بطبيعته إلى أجزاء يمكن تشغيلها بالتوازي (جمع البيانات، والحساب، والصفحات، والبحث العكسي، وتحسين محركات البحث)، ولذلك كان ميدان اختبار مناسبًا لـProjects.
| البند | ظروف هذه التجربة |
|---|---|
| ما سيُبنى | قاعدة بيانات للذاكرة اللازمة لنماذج اللغة المحلية (موقع باللغة اليابانية). |
| التقنيات | Laravel 13 وPHP 8.5 وMySQL 5.7. والاستضافة مشتركة لا يُدخَل إليها إلا عبر SSH. |
| المستودع | مستودع خاص على github.com. خيوط المشروع لا تتعامل إلا مع مستودعات github.com المثبَّت عليها Claude GitHub App، ولذلك أنشأت حساب GitHub جديدًا مخصّصًا لـClaude. |
| الخطة | خطة Max (20x). |
| النماذج | عملت الخيوط أساسًا على Sonnet بمستوى effort متوسط، ولم يختر المنسّق Opus إلا للأعمال التي يكون الخطأ فيها مكلفًا، كالمراجعة والحسابات. أما المنسّق نفسه فبقي على إعداده الافتراضي: Opus بمستوى منخفض. |
⚠️ اعتراف في البداية: قيّدته أكثر من اللازم في النصف الأول
وضعت في تعليمات المشروع الأولى قواعد تُدخل موافقة الإنسان في كل خطوة: «اقترح كل خيط وانتظر موافقتي قبل أن تبدأه»، و«لا تشغّل أكثر من ثلاثة خيوط في آن واحد»، و«الإنسان يوافق على كل دمج إلى main». قصدت بذلك الأمان، لكنها أطفأت بيدي ما يميّز هذه الميزة أصلًا: أن يوزّع Claude العمل ويدفعه إلى الأمام. وفي منتصف الطريق أعدت كتابة التعليمات لأفوّض الأمر، والفصل 4 يقارن بين ما قبل ذلك وما بعده. فجزء من صعوبة النصف الأول سببه تعليماتي، لا الميزة.
2. خطوات البدء، والمواضع الخمسة التي تعثّرت فيها
خطوات البدء نفسها قصيرة: في تبويب Code في تطبيق سطح المكتب تختار «Projects» ثم «New»، وتُدخل الاسم والهدف والمستودع، ثم تنشئ المشروع. لكنني تعثّرت حول هذه الخطوات في المواضع الخمسة التالية.
① نطاق GitHub App
شاشة الإذن تختار «All repositories» افتراضيًّا. وما لم يكن الحساب مخصّصًا، فالأولى تضييقه إلى «Only select repositories»، لأن الخيوط تستطيع من تلقاء نفسها إضافة مستودعات أخرى يملكها الحساب نفسه.
② يعمل مرّة لحظة إنشائه
في أوّل مشروع لك، يبدأ Claude بنفسه خيطًا يقرأ المستودع فور الإنشاء. وهو يعمل قبل أن تلصق أيّ تعليمات، ولهذا جاءت الخيوط المقترحة بالإنجليزية في حالتي.
③ الافتراضي هو Opus
النموذج الافتراضي للخيوط هو Opus (بمستوى effort متوسط على شاشتي، والوثائق الرسمية تقول high). وهو أسرع ما يستنزف حدودك، فبعد الإنشاء مباشرة افتح الإعدادات ثم «General» (عام) وراجع نموذج الخيوط.
④ السماح بالوصول إلى الشبكة
قائمة السماح الافتراضية لا تضمّ Hugging Face ولا مواقع الشركات المصنّعة. و*.nvidia.com لا يطابق إلا النطاقات الفرعية، فاحتاج nvidia.com نفسه إلى سطر مستقلّ.
⑤ التغييرات لا تصل إلى الخيوط العاملة
تغييرات البيئة أو تعليمات المشروع لا تسري إلا على الخيوط الجديدة (والوثائق الرسمية تنصّ على ذلك). وحين توقّف خيط، طلبت من المنسّق أن يُكمل العمل في خيط جديد.
وعن ②: بعد الإنشاء مباشرة ظهر في المحادثة هذا التنبيه: «Up to $100 of initial usage, including the automatic setup, won't count towards your usage limits». أي أن أوّل $100 من الاستخدام لا تُحسب من حدود استخدامك المعتادة، وظهر ذلك أيضًا في شاشة الاستهلاك باسم «رصيد إعداد المشروع» (مع نحو 24 ساعة حتى انتهاء صلاحيته). وحتى 28 سبتمبر، لم تذكر صفحة Projects في الوثائق الرسمية هذه الميزة. وفي الفصل 6 أعرض كيف نفد هذا الرصيد فعلًا.
أما ما حيّرني في إعدادات البيئة فكان تعديل بيئة موجودة. فالدخول من «Add cloud environment» يفتح شاشة لبيئة جديدة، وفي البداية كتبت النطاقات المسموح بها في خانة سكربت الإعداد. لتعديل بيئة موجودة، مرّر المؤشّر فوقها في القائمة وانقر أيقونة الترس التي تظهر (وهذا بالضبط ما تقوله الوثائق الرسمية، لكن يصعب اكتشافه من الشاشة وحدها).
3. سجلّ نحو 20 ساعة: ما الذي جرى وأنا نائم
هذا مسار الأحداث من الإنشاء (نحو الساعة 22:00 يوم 26 سبتمبر) حتى دمج آخر طلب سحب (نحو الساعة 17:30 في اليوم التالي، 27 سبتمبر). جميع الأوقات بتوقيت اليابان (JST).
يوم 26، من 22:10 إلى 23:50 — الأساس والمراجعة
أنشأ خيط الأساس (Sonnet) هيكل Laravel وتصميم قاعدة البيانات ووثيقة القواعد، وفتح طلب سحب. وحين طلبت من خيط آخر أن يراجعه على Opus، شغّل MySQL 5.7 فعلًا داخل حاوية وجرّبه، فوجد عطلًا يجعل عمود الوقت المخصّص للسجلّ يُستبدَل بالوقت الحالي في كل مرّة يُحدَّث فيها الصفّ (لأن MySQL 5.7 يضيف التحديث التلقائي إلى أوّل عمود TIMESTAMP، وهو ما لا يظهر في الاختبارات ببيانات العيّنة). وفي الوقت نفسه وُضع مقترح لـCI، فوافقت عليه ودمجت PR #1.
يوم 27، من 0:00 إلى 7:30 — ثلاثة خيوط بالتوازي في الليل
عملت ثلاثة خيوط في الوقت نفسه: جمع البيانات (Opus)، وحساب الذاكرة اللازمة (Opus)، وتحسين محركات البحث مع التخطيط المشترك للصفحات (Sonnet)، وفي الصباح كانت الثلاثة كلها «بانتظار المراجعة». وما لفتني أن الخيوط نسّقت في ما بينها عبر المنسّق: سأل خيط الحساب عن طريقة استعمال التخطيط، فأجابه خيط التخطيط. ومشكلة وجدها خيط الحساب، وهي أن ملفات الإعداد لا يمكن جلبها للنماذج التي تشترط الموافقة على شروط الاستخدام (401)، نُقلت إلى خيط جمع البيانات فعالجها هناك.
يوم 27، من 7:30 إلى 8:50 — ترتيب التعارضات
كانت الخيوط تعدّل الملف نفسه (تعريفات المسارات) بالتوازي، فلمّا دُمج أحد طلبات السحب تعارض معه الطلب التالي. في المرّة الأولى لاحظ المنسّق الدمج، وأمر الخيط من تلقاء نفسه بحلّ التعارض. وفي المرّة الثانية لم يتحرّك المنسّق، بل ظهر على بطاقة الخيط زرّ «Resolve conflicts» (حلّ التعارضات)، وبالضغط عليه بدأ الحلّ. أي أن ردّ الفعل لا يتكرّر بالطريقة نفسها كل مرّة.
يوم 27، من 8:50 إلى 11:30 — توقّف عند موقع لا يمكن بلوغه
الخيط الذي يُدخل بيانات بطاقات الرسوميات وأجهزة Mac لم يستطع بلوغ المواقع الرسمية للشركات المصنّعة من السحابة، فبدل أن يملأ الفراغ بالتخمين، توقّف وعرض بطاقة فيها ثلاثة خيارات (توسيع قائمة السماح / أن يقدّم الإنسان القيم / أن يُبحث عنها من جهاز الإنسان). وبعد أن أصلحت قائمة السماح وطلبت منه المتابعة في خيط جديد، أدخل 25 طرازًا من الصفحات الرسمية. وفي أثناء ذلك انتبه الخيط نفسه إلى أن أداة تلخيص الصفحات اختلقت اسم منتج غير موجود، فتحوّل من بعدها إلى التحقّق من شيفرة HTML الأصلية للصفحات مباشرة.
يوم 27، من 17:00 إلى 17:30 — فوّضته فمضى وحده
حين أعدت كتابة تعليمات المشروع لأفوّض الأمر، أعلن المنسّق دون أن أوجّه إليه كلمة: «قرأت التعليمات الجديدة لطريقة العمل. من الآن فصاعدًا سأقرّر المهامّ التالية وأمضي بها»، ثم قرّر بنفسه كل شيء، من دمج طلبات السحب المتبقّية إلى إضافة بيانات طرازات أخرى (خيطان).
وهناك أمر لم يكن جيّدًا يستحقّ الذكر أيضًا. في أثناء بناء أساس جمع البيانات، أرسل خيطٌ 520 طلبًا متتاليًا إلى واجهة Hugging Face البرمجية ليفهم كيف تعمل آلية تحديد المعدّل في الخدمة الخارجية. فحكم خيط المراجعة بأن ذلك «لم يكن معقولًا» ودوّن قواعد لاستعمال الواجهات البرمجية الخارجية، ولم يرسل خيط جمع البيانات اللاحق سوى 8 طلبات طوال عمله. فإذا تُرك وشأنه، لا يراعي من تلقاء نفسه العبء الذي يضعه على الخدمات الخارجية، ولذلك يستحقّ الأمر أن يُكتب في التعليمات.
4. الموافقة على كل خطوة مقابل تفويض الأمر
كما ذكرت في الفصل 1، عمل النصف الأول بتعليمات تُدخل موافقة الإنسان في كل خطوة، وفي الساعة 17:00 يوم 27 أعدت كتابتها لأفوّض الأمر. وتغيّر السلوك تغيّرًا واضحًا.
| الموقف | النصف الأول: موافقة في كل خطوة | النصف الثاني: التفويض |
|---|---|---|
| بدء الخيوط | في المرّة الأولى تجاهل «اقترح وانتظر» وبدأ فورًا. ولمّا أكّدت برسالة «لا تبدأ قبل أن أوافق» التزم. | قرّر المنسّق وبدأها بنفسه. |
| الدمج | ضغط الإنسان الزرّ على GitHub في كل مرّة (7 مرّات). | دمجت الخيوط طلبات السحب بنفسها بعد نجاح CI (4 مرّات). |
| المهمّة التالية | قرّرها الإنسان وطلبها. | اختار المنسّق من قائمة المهامّ (TODO) وبدأ خيطًا جديدًا. |
| دور الإنسان | الدمج وأزرار التعارض وإعدادات البيئة ونقل الرسائل، فكثر التنقّل بين الشاشات. | يكاد يكون معدومًا (إلا حين يلزم ضبط البيئة). |
وثمّة أمران ينبغي الانتباه إليهما عند التفويض. الأول أن التعليمات المعاد كتابتها لا تصل إلى الخيوط التي تعمل في تلك اللحظة. وقد شرح المنسّق نفسه ذلك: «بدأ هذا الخيط قبل إعادة كتابة التعليمات، فهو لا يرى التعليمات الجديدة». والثاني أن الخيوط لم تستطع حذف القواعد القديمة الباقية في ذاكرة المشروع. فالمهمّة التي حاولت إعادة كتابة ملاحظة قديمة تقول «الدمج للإنسان وحده» أوقفها فحص أمان. ولا بدّ أن يحذف الإنسان الملاحظات القديمة بنفسه من الإعدادات، في «Memory» (الذاكرة).
وهذا هيكل التعليمات التي استقررت عليها في النهاية.
هذا المشروع يبني [موقعك] ويشغّله.
طريقة العمل متروكة لك: يقرّر المنسّق أيّ الخيوط يبدأ، وكم عددها، وأيّ النماذج، وبأيّ ترتيب.
يجوز لك دمج طلبات السحب بعد نجاح CI. وحلّ التعارضات بنفسك.
لا تسأل الإنسان إلا عن:
- كل ما يكلّف مالًا (واجهات برمجية مدفوعة، خدمات مدفوعة)
- كل ما يحتاج أسرارًا (مفاتيح API، كلمات مرور)
- النشر إلى الإنتاج أو تغيير بيانات الإنتاج
- القرارات التي تتفرّع فيها الخيارات ويكون كلٌّ منها معقولًا
- كل ما تحتاجه ولا تستطيع بلوغه (لا تملأ الفراغ بالتخمين أو ببيانات وهمية)
التزم بحدود المعدّل في الواجهات البرمجية الخارجية، ولا ترسل إليها طلبات كثيفة لأغراض الاستكشاف.
ومع ذلك، وفي ضوء ما عرفته لاحقًا، أنصح بإضافة «تغييرات إعدادات CI وسكربتات النشر تحتاج موافقة الإنسان». فالخيوط المفوَّضة تستطيع تغيير إعدادات CI أيضًا، وإذا اجتمع ذلك مع آلية للنشر نشأ طريق تبلغ به التغييرات الإنتاج دون أن يتحقّق منها أحد (الفصل 7).
5. الجودة كما ظهرت بعد الإطلاق: كل الاختبارات كانت ناجحة
أخذت ما بناه المشروع، وسلّمته إلى Claude Code المعتاد على جهازي، ونشرته في الإنتاج. وكان انطباعي الأول بعد الإطلاق مباشرة: «يبدو عاديًّا بعض الشيء». فـلم تكن هناك صفحة نموذج واحدة. وحين تتبّعت السبب، ظهرت ثغرة خاصّة بالتطوير المتوازي.
ثغرة بين المسؤوليات: لم يقرّر أحدٌ «هل يجوز نشر هذا؟»
خيط جمع البيانات
كتب في طلب السحب أن «تقرير ما إذا كان الشيء قابلًا للنشر من عمل خيط الصفحات»، ولم يبنِ ذلك الفحص
خيط الصفحات
لم يبنِ إلا جانب «لا تعرض ما ليس قابلًا للنشر»
النتيجة
لم يكن في أيّ مكان ما يضع علامة «قابل للنشر»، فمهما أُدخل من بيانات بقي المعروض صفرًا
عشرة خيوط، وأكثر من مئة اختبار، ومراجعات Opus، وCI: لم يلتقط أيٌّ منها هذا النقص، لأن كل خيط كان مصيبًا داخل حدود مسؤوليته. وحين لا يوجد دور ينظر إلى الكلّ من طرفه إلى طرفه، تنفتح الثغرات عند الحدود بين المهامّ.
وحين أدخلت البيانات الحقيقية ظهرت مشكلتان أخريان.
- اختلطت بجداول التكميم ملفات ليست النموذج الرئيسي. فقد عُدّت النماذج المساعدة للتنبّؤ المسبق (MTP وEAGLE وغيرها) وملفات LoRA تكميماتٍ للنموذج الرئيسي، فبدأ جدول أحد نماذج 12B بسطر يقول «Q8_0 0.47GB» (بينما حجم Q8_0 الحقيقي 12.7GB). وبعد الإصلاح أُعيد تصنيف 195 ملفًا في 56 مستودعًا على أنها مساعدة.
- أحدث النماذج وأكثرها طلبًا ظهرت ذاكرتها اللازمة «غير قابلة للحساب». فالمعادلة كما كُتبت أوّلًا لم تكن تدعم معماريات الجيل الأحدث (كتلك التي تختلف فيها طريقة الاحتفاظ بالذاكرة من طبقة إلى أخرى). أي أن الميزة الأهمّ في الموقع كانت غائبة عن الصفحات الأكثر زيارة تحديدًا.
ولم يظهر الأمران إلا بعد إدخال البيانات الحقيقية إلى الإنتاج، لأن الاختبارات بُنيت كلها على بيانات العيّنة. وهذا ما أصلحته بـClaude Code على جهازي، والوقت الذي استغرقه (من 17:21 إلى 22:54 يوم 28 سبتمبر، 13 إيداعًا).
| ما أُصلح | كيف اكتُشف |
|---|---|
| لم تكن هناك صفحة لسياسة الخصوصية (وهي لازمة قبل عرض الإعلانات) | مراجعة الدور المسؤول عن إدارة الخادم |
| غاب فحص النشر (ربط النماذج بسلاسلها) غيابًا تامًّا | صفر نماذج في الإنتاج |
| أعاد sitemap.xml خطأً (500) في الإنتاج، وتعذّر إرسال رسائل التنبيه بالأخطاء | التحقّق في الإنتاج |
| تعطّل نموذج الاتصال بخطأ (500) عند إدخال بترميز أحرف مختلف | التحقّق في الإنتاج |
| اختلاط ملفات النماذج المساعدة، والذاكرة اللازمة للمعماريات الأحدث | المعاينة بالعين للصفحات ذات البيانات الحقيقية |
وفي المقابل، كانت هناك إيجابيات واضحة. فالصفحات سريعة (نحو 0.1 ثانية للرئيسية منها)، وأحجام الملفات هي القيم الفعلية على Hugging Face، والذاكرة اللازمة للنماذج المدعومة مطابقة للمعادلة. وكان عمل تحسين محركات البحث، من العناوين والبيانات المنظَّمة وخريطة الموقع وllms.txt، حاضرًا منذ البداية. وحكمي الإجمالي: الهيكل والتفاصيل مصنوعة جيّدًا، وما كان ينقص هو «المفاصل» بين الأجزاء والبيانات الحقيقية.
6. الاستهلاك والتكلفة: أين ذهبت 191.8 مليون توكن
تعرض شاشة «Usage» (الاستهلاك) في إعدادات المشروع التوكنات بحسب الخيط وبحسب النموذج. وزرّ في الزاوية العليا يتيح نسخ كل ذلك نصًّا كما هو. وهكذا بدا التقرير في الساعة 11:47 يوم 27 سبتمبر.
| البند | القيمة |
|---|---|
| عدد الخيوط | 10 خيوط |
| مجموع التوكنات | 191.8 مليون (الإدخال 317 ألفًا، والإخراج 574 ألفًا، والقراءة من الذاكرة المؤقتة 187.4 مليون، والكتابة إليها 3.5 مليون) |
| معدّل الإصابة في الذاكرة المؤقتة | نسبة 98% |
| تغييرات الشيفرة | +23,531 سطرًا و−302 سطرًا (الخيوط الثمانية التي فتحت طلبات سحب) |
| المنسّق | 3.3 مليون (2% من المجموع) |
| أكثر الخيوط استهلاكًا | تحسين محركات البحث والتخطيط المشترك (Sonnet): 50.5 مليون (26%) |
يبدو رقم 190 مليونًا كبيرًا، لكن 97.7% منه قراءة من الذاكرة المؤقتة. فالخيط يعيد قراءة المحادثة حتى تلك اللحظة مع كل إجراء، وحين يؤدّي خيط واحد مئات الإجراءات تحصل على هذا الشكل. أما إضافة المنسّق فلم تتجاوز 2%، أي أن كلفة الإدارة كانت ضئيلة.
وللمقارنة، حسبت نسبة «التوكنات المقروءة ÷ التوكنات المُخرَجة» وقارنتها بـClaude Code على جهازي (آخر ثلاثة أيام على حاسوبي): نحو 330 للمشروع ونحو 340 محليًّا. أي أن الاستهلاك لكل وحدة عمل كان قريبًا جدًّا من جلسة محلية. والأرجح أن Projects تبدو أثقل لأن كل شيء يجري بالتوازي دفعة واحدة، فيتركّز الاستهلاك في وقت قصير (والعمل نفسه مختلف، فهذه مقارنة تقريبية).
أما من جهة التكلفة، فقد استطعت أن أتتبّع كيف نفد رصيد الإعداد ($100).
نسبة المستهلك من رصيد إعداد المشروع ($100)
المصدر: عرض الاستهلاك في تطبيق سطح المكتب (26–27 سبتمبر 2026). ولم يرتفع استهلاكي الأسبوعي في خطة Max خلال هذه المدّة.
تصرّف هذا الرصيد إلى حدّ بعيد مثل مبلغ بالدولار محسوب بأسعار الواجهة البرمجية. فحين حسبت تقرير الساعة 11:47 بالأسعار الرسمية لـAnthropic (Pricing: Sonnet 5 بسعر $2 للإدخال و$10 للإخراج و$0.20 للقراءة من الذاكرة المؤقتة، وOpus 5.5 بسعر $4 للإدخال و$20 للإخراج و$0.20 للقراءة من الذاكرة المؤقتة، وكلها لكل مليون توكن) بلغ نحو $58–65، وهذا يوافق تقريبًا ما عرضته الشاشة حينها (78% = $78). فعبارة «ما قيمته $100» تعني الكمّية التي ستكلّف $100 لو دفعت عبر الواجهة البرمجية، وهي ليست كبيرة في سياق خطة Max ذات السعر الثابت. أما رصيد آخر وُزّع للجلسات السحابية ($250 في خطة Max)، فكانت شاشة استلامه تقول «المشاريع غير مشمولة»، ولم يُستهلك منه فعلًا دولار واحد.
7. لماذا تعثّر النشر إلى بيئة الإنتاج
أصعب ما في التجربة كان إيصال ما بُني إلى الإنتاج، لأن الاستضافة كانت استضافة مشتركة لا يُدخَل إليها إلا عبر SSH.
- الخيوط السحابية لا تستطيع بلوغ خادم الإنتاج (فمفتاح SSH موجود على حاسوبي وحده).
- ولتشغيل العمل على الحاسوب المحلي تستعمل خيار «Work locally» (العمل محليًّا) في المشروع. وهو في جوهره Remote Control، ويتطلّب تفعيل «Use this computer from your phone and claude.ai» (استعمال هذا الحاسوب من هاتفك ومن claude.ai) في تطبيق سطح المكتب.
- غير أن هذا الإعداد يسري على قائمة كل المجلّدات التي فتحتها في Claude Code حتى الآن، وهي تُجمع تلقائيًّا. وفي بيئتي كان عددها 22، أحدها مجلّد أمّ يضمّ عشرات المشاريع. وما دام الإعداد مفعّلًا تصبح كلها أماكن يمكن بدء العمل فيها عن بُعد، وتُرسَل أيضًا أسماء المجلّدات ومساراتها وعناوين المستودعات إلى Anthropic. ولحصره في مجلّد واحد عليك أن تسلك طريقًا آخر: تفتح الطرفية في ذلك المجلّد وتشغّل
claude remote-control.
فوازنت بين عدّة طرق للنشر.
| الطريقة | كيف تعمل | التقييم |
|---|---|---|
| Work locally (العمل محليًّا، عبر Remote Control) | خيط يعمل على الحاسوب المحلي ينشر عبر SSH | تتّسع دائرة المجلّدات المكشوفة. وتشغيله وإطفاؤه في كل مرّة أمر مرهق. |
| مُشغّل مقيم على الحاسوب (GitHub Actions مستضاف ذاتيًّا) | حين يُحدَّث main تجري عملية النشر على الحاسوب المحلي | إن سُمح للخيوط بتعديل سير العمل ودمجه، يصبح مدخلًا لتشغيل أيّ شيفرة على الحاسوب المحلي. مرفوض. |
| إبلاغ الخادم عبر webhook | يتلقّى الخادم إشعارًا من GitHub فيجلب التحديث | يعني فتح عنوان URL جديد يستطيع أيّ أحد من الخارج استدعاءه. استُبعد بعد مراجعة الدور المسؤول عن إدارة الخادم. |
| الخادم يجلب التحديث دوريًّا | مهمّة cron على الخادم تفحص GitHub، وتجلب بمفتاح للقراءة فقط، وتطبّق التحديث | لا مدخل من الخارج، فهو آمن. لكنني عند هذه النقطة كنت قد قرّرت الانتقال إلى طريقتي المحلية المعتادة. |
وفي النهاية، أرشفت المشروع ونقلت ما بناه إلى طريقتي المعتادة مع Claude Code على جهازي. فقد رأيت أن وضعه على مسار النشر نفسه الذي تسلكه مواقعي الأخرى أكثر أمانًا من إضافة آلية جديدة.
وحين أنظر إلى الوراء، يبدو من الأفضل التفكير في Projects على أنها مصمَّمة لتقترن باستضافة تنشر تلقائيًّا حين تدمج على GitHub. فمع Vercel مثلًا يكفي ربطه بـGitHub لتنساب التغييرات حتى الإنتاج، فلا يقع الطريق المسدود الذي وقعت فيه. لكن خطة Hobby المجانية في Vercel مقصورة على الاستعمال غير التجاري، وعرض إعلانات مثل Google AdSense يتطلّب خطة Pro المدفوعة (ابتداءً من $20 شهريًّا) (Fair Use Guidelines). كما أنها لا تلائم بطبيعتها موقعًا بـPHP وMySQL كهذا. والمهمّ أن تحدّد التقنيات والاستضافة معًا منذ البداية.
أنوي أن أتناول في مقال مستقلّ مخاطر السماح بتشغيل حاسوبك عن بُعد، وكيف يختلف ذلك عن Claude Code اليومي. أما استعمال جلستك المحلية من الهاتف فيشرحه مقال Remote Control.
8. الأعمال التي تناسبه والأعمال التي لا تناسبه
يناسبه
- شيء جديد ينقسم إلى أجزاء مستقلّة
- عمل تريد أن يتقدّم وأنت نائم أو خارج البيت
- استضافة تنشر تلقائيًّا عبر الربط مع GitHub
- أن تستطيع أن تكتب مسبقًا حدود ما تفوّضه
لا يناسبه
- خوادم تحتاج SSH للنشر بمفتاح موجود على جهازك
- عمل قائم يعتمد اعتمادًا كبيرًا على أدوات فحص محلية أو إجراءات خاصّة
- مستودعات مستضافة في مكان غير GitHub
- أعمال صغيرة تنتهي في جلسة واحدة (الجلسة السحابية تكفي)
وبناءً على هذه التجربة، إليك ما أتحقّق منه قبل البدء.
- الاستضافة: هل يؤدّي الدمج على GitHub إلى النشر تلقائيًّا؟ وإن كان SSH لازمًا، فقرّر مسبقًا طريقة مثل أن يجلب الخادم التحديث بنفسه.
- صلاحيات GitHub: نطاق تثبيت Claude GitHub App. استعمل حسابًا مخصّصًا، أو ضيّق المستودعات.
- حدود التفويض: اكتب في تعليمات المشروع ما يُسأل عنه الإنسان فقط. واجعل تغييرات إعدادات CI والنشر تحتاج موافقة.
- الشبكة: إن كنت تستعمل واجهات برمجية أو مواقع خارجية، فضع في قائمة السماح النطاق نفسه ونطاقاته الفرعية معًا.
- التحقّق بالبيانات الحقيقية: لا تطمئنّ لمجرّد نجاح الاختبارات ببيانات العيّنة. وفي النهاية ابدأ خيطًا واحدًا مهمّته أن يمرّر بيانات مماثلة للإنتاج من الطرف إلى الطرف وينظر في النتيجة.
- حدود الاستخدام: راجع النموذج الافتراضي للخيوط. وفي أوّل 24 ساعة يتوفّر رصيد إعداد بقيمة $100.
الخلاصة
ميزة Projects تتولّى حقًّا عن الإنسان عناء توزيع المهامّ وملاحقتها وإعادة شرح السياق نفسه. فقد جرت ثلاث مهامّ بالتوازي في الليل، ونسّقت الخيوط في ما بينها، وحين فوّضتها صارت تتّخذ قرارات الدمج وما يأتي بعده بنفسها. ولم تختلف التوكنات لكل وحدة عمل عن Claude Code على جهازي.
لكن ما يخرج في المقابل مسوّدة أولى. فتقسيم العمل بالتوازي يفتح ثغرات عند الحدود بين المسؤوليات. وقد تنجح كل الاختبارات ببيانات العيّنة، ثم تكشف البيانات الحقيقية أعطالًا. كما أنها لا تنسجم مع الخوادم التي لا يُدخَل إليها إلا عبر SSH. فإن استعملتها، فثلاثة أمور ينبغي أن تجنّبك الالتفافات التي سلكتها: اختر استضافة مربوطة بـGitHub، واكتب حدود التفويض منذ البداية، وفي النهاية ابدأ خيطًا واحدًا مهمّته التحقّق من كل شيء من الطرف إلى الطرف بالبيانات الحقيقية.
الأسئلة الشائعة
س. كم تكلّف Projects؟
ج. لا رسوم منفصلة؛ فهي تستهلك من حدود الاستخدام المعتادة في خطّتي Pro وMax. وفي هذه التجربة حصلت فوق ذلك على «رصيد إعداد» لا يُحتسب بموجبه من حدودي ما يصل إلى $100 من الاستخدام في نحو 24 ساعة الأولى (كما ظهر على الشاشة؛ ولم يرد في الوثائق الرسمية حتى 28 سبتمبر). واستهلك العمل، أي 10 خيوط و11 طلب سحب، نحو 190 مليون توكن واستنفد ذلك الرصيد. وبأسعار الواجهة البرمجية، يساوي ذلك نحو $100.
س. هل يستمرّ العمل حقًّا إن أغلقت حاسوبي؟
ج. نعم. الخيوط التي تعمل في السحابة استمرّت سواء أغلقت الحاسوب أو وضعته في وضع السكون. وفي هذه التجربة انتهت ثلاث مهامّ خلال نحو 7 ساعات في الليل. أما الخيوط التي تبدأ على حاسوبك عبر «Work locally» (العمل محليًّا) فلا تعمل إلا ما دام الحاسوب مستيقظًا.
س. هل يمكن استعمالها مع مستودعات خارج GitHub؟
ج. الخيوط التي تتعامل مع الشيفرة تفترض مستودعًا على github.com مثبَّتًا عليه Claude GitHub App. وكنت أدير هذا المشروع على خادم git خاصّ بي، فأنشأت حساب GitHub مخصّصًا لـClaude، وبدأت هناك، ثم أعدت كل شيء إلى بيئتي المحلية في النهاية.
س. ماذا يحدث إن غيّرت تعليمات المشروع في منتصف الطريق؟
ج. يلتقطها المنسّق فورًا، وقد تغيّرت طريقة عمله دون أن أقول له شيئًا. لكنها لا تصل إلى الخيوط التي تعمل في تلك اللحظة، فإن لزم الأمر فاطلب إكمال العمل في خيط جديد. أما القواعد القديمة الباقية في ذاكرة المشروع، فكان على الإنسان أن يحذفها من الإعدادات بنفسه.
س. هل «Work locally» (العمل محليًّا) آمن؟
ج. الاتصال الوحيد اتصال مشفَّر يخرج من حاسوبك، ولا يُفتح أيّ منفذ للاستقبال. لكن تفعيل الإعداد في تطبيق سطح المكتب يجعل قائمة المجلّدات المجمَّعة من سجلّ استخدامك (22 في حالتي، بما فيها عشرات المشاريع داخل مجلّد أمّ) أماكن يمكن بدء العمل فيها عن بُعد. ولذلك تحتاج إلى ممارسات مثل عدم تفعيله إلا في أثناء الاستعمال، والتأكّد من أن الحساب الذي تسجّل به الدخول محميّ بالتحقّق بخطوتين.
س. هل يمكن استعمال ما يبنيه كما هو؟
ج. في حالتي، لا. فالهيكل وعمل تحسين محركات البحث كانا جيّدين، لكن المنطق عند الحدود بين المسؤوليات كان غائبًا تمامًا، وكانت هناك أعطال لا تظهر إلا بالبيانات الحقيقية. وقبل الإطلاق تحتاج إلى خطوة تُدخل البيانات الحقيقية وتتحقّق من الكلّ من الطرف إلى الطرف.