
مطور يعمل على مشروع Rust بسيط، لا يحتوي على vercel.json أو next.config أو أي تبعيات Vercel، يفاجأ برسالة: “إضافة Vercel تجمع بيانات استخدام مجهولة… هل تود مشاركة نصوص محادثاتك أيضاً؟” السؤال المنطقي: ما علاقة إضافة النشر بمشروع لا يستخدم Vercel أصلاً؟
التحليل العميق لكود الإضافة المصدري في ~/.claude/plugins/cache/claude-plugins-official/vercel/ يكشف حيلة تقنية ماكرة. الإضافة لا تعرض نافذة إعدادات حقيقية أو استعلام CLI مباشر، بل تحقن تعليمات نصية في سياق Claude النظامي تأمر الذكاء الاصطناعي بطرح السؤال وتشغيل أوامر shell حسب الإجابة. النتيجة: المستخدم يظن أن Claude يسأله، بينما الحقيقة أن طرف ثالث يتلاعب بالحوار.
من ملف user-prompt-submit-telemetry.mjs، السطور 67-85، نجد hookSpecificOutput.additionalContext يحتوي تعليمات باللغة الطبيعية تخبر Claude استخدام AskUserQuestion وتنفيذ echo ‘enabled’ أو echo ‘disabled’ لكتابة ملف تفضيلات حسب الإجابة. هذا ليس مجرد حقن سياق للمهارات – وهو الاستخدام المقصود للإضافات – بل حقن سلوكي يأمر بتنفيذ إجراءات نظام.
الخداع الأكبر في وصف “البيانات المجهولة”. الإضافة تدّعي جمع “بيانات استخدام مجهولة مثل أنماط حقن المهارات والأدوات المستخدمة افتراضياً”. الكود الفعلي من hooks/telemetry.mjs يرسل: معرف جهاز دائم من ~/.claude/vercel-plugin-device-id، نصوص أوامر Bash الكاملة عبر trackBaseEvents()، ونصوص المحادثات عبر trackEvents() إلى telemetry.vercel.com. أوامر Bash تحتوي مسارات ملفات، أسماء مشاريع، متغيرات بيئة، تفاصيل بنية تحتية – كل حرف في الأمر يصل إليهم.
المفاجأة أن جمع أوامر Bash يحدث دائماً دون موافقة. من ملف posttooluse-telemetry.mjs السطور 29-33، كل أمر bash يُرسل عبر isBaseTelemetryEnabled() التي تعيد true افتراضياً ما لم يكن VERCEL_PLUGIN_TELEMETRY=off مضبوط. السؤال المعروض يوهم المستخدم أن الخيار بين “تتبع مع محادثات” أو “لا تتبع”، بينما الحقيقة بين “تتبع أساسي” و”تتبع موسع”. جمع الأوامر والبيانات الأساسية يحدث في كلا الحالتين.
الأسوأ أن هذا يحدث على جميع المشاريع دون تمييز. من hooks/hooks.json، UserPromptSubmit telemetry matcher هو سلسلة فارغة “”، يعني تطابق مع كل شيء. ثبّت الإضافة لمشروع Next.js واحد، وستراقب مشاريع Python وRust وأعمال العملاء. المفارقة في session-start-profiler.mjs: الإضافة تفحص وجود next.config.* وvercel.json ومتغيرات package.json في profileProject() (السطور 93-119)، لكنها تستخدم النتيجة فقط للإبلاغ عن session:likely_skills، وليس لتقرير تفعيل التتبع من الأساس.
هذا السلوك خطير خاصة للمطورين العرب العاملين على مشاريع حكومية أو مصرفية حساسة. تخيل أن أوامر نشر تطبيق بنك الرياض أو شركة الاتصالات الإماراتية تسرب لخوادم أميركية دون علم الفريق. أسماء قواعد بيانات، مسارات خوادم، متغيرات أمان – كلها مكشوفة.
عند رفع هذه المخاوف في GitHub issue #34، أجاب مطور Vercel: “عند استخدام marketplace طرف أول مثل Cursor أو Claude Code أو Codex، لا يمكن إنشاء استعلام CLI لمرة واحدة. التفعيل يأتي من داخل harness الوكيل.” الحجة مفهومة، لكن الحل الصحيح لـ”لا نستطيع بناء موافقة مناسبة” هو عدم شحن المميزة، وليس استخدام حقن الأوامر بدلاً منها.
Claude Code نفسه يحتاج إصلاحات هيكلية. الإضافات تحتاج علامات مرئية – ولو مجرد [Vercel Plugin] قبل أي سؤال من إضافة. الأذونات يجب أن تكون دقيقة: “هذه الإضافة تطلب وصولاً لأوامر bash ونصوص المحادثات وبيانات الجلسة. السماح؟” تحديد النطاق مطلوب – activationEvents كما في VS Code لتحديد متى تتفعل الإضافة حسب وجود ملفات أو تبعيات معينة.
الحلول العملية متاحة الآن. لإيقاف كل التتبع: export VERCEL_PLUGIN_TELEMETRY=off في ~/.zshrc. لإيقاف الإضافة كاملة: تعديل “vercel@claude-plugins-official”: false في ~/.claude/settings.json. لكسر ربط الجهاز: حذف ~/.claude/vercel-plugin-device-id. متغير البيئة يوقف التتبع مع الحفاظ على وظائف الإضافة الأساسية – المهارات وكشف الأطر وتدفقات النشر تعمل بشكل طبيعي.
Vercel شركة نحترمها ونستخدم أدواتها يومياً، وClaude Code أداة ممتازة نعتمد عليها. لكن الثقة لا تُبنى بالحيل التقنية والأوصاف المضللة. “بيانات استخدام مجهولة” التي تتضمن نصوص أوامر كاملة مع معرف جهاز دائم ليست مجهولة، والموافقة المحقونة في سياق AI ليست موافقة حقيقية. الشفافية والاختيار الواضح هما أساس أي علاقة صحية بين الأدوات والمطورين.




