uxskill
Star on GitHub
Language
English 简体中文 繁體中文 日本語 한국어 हिन्दी Bahasa Indonesia Tiếng Việt ไทย العربية Español Français Deutsch Português Русский Türkçe Italiano
Launch · v3.0.0 · 2026-05-28

# ux-skill v3.0 · أطلقنا The Brain. مواصفات العلامات التجارية صارت بيانات تدريب، لا قوالب.

كان v2 يختار من الكتالوج. v3 يُقطّر منه. نفس الـ 160 مواصفة علامة تجارية، لكن دورها اختلف اختلافًا تامًا. مُحرِّك التوصية القديم كان يُقيّم 1,243 مدخلًا ويُعيد الأقرب تطابقًا. أمّا المُولِّد الجديد فيقرأ تلك المداخل بوصفها مفردات، ويُكوِّن من المُلخّص لغةَ تصميمٍ جديدة. كلّ نداء يُعيد نظامًا لم يكن موجودًا قبل ذلك النداء.

فريق ux-skill · قراءة 12 دقيقة · مفتوح المصدر برخصة MIT

EN JA ZH-CN AR ES DE
مواصفات العلامات التجارية بيانات تدريب،
وليست قوالب.

## التحوّل في فقرة واحدة

كان v2 محرّك توصية. تُعطيه ملخّصًا، فيُعيد لك الأقرب من كتالوج منظَّم بعناية, 84 أسلوبًا، و176 لوحة ألوان، و160 مواصفة علامة، و70 ثنائيًا من الخطوط. كان الناتج دائمًا صفًّا من قاعدة البيانات. v3 يحتفظ بالكتالوج كاملًا، لكنه يقلب وظيفته رأسًا على عقب: الـ 1,243 مدخلًا أصبحت المفردات التي يُقطِّر منها المُحرّك. الملخّص لم يعد يستدعي صفًّا، بل يُترجَم إلى قيم سبعة محاور، وتلك القيم تُولِّد رموزًا (tokens) جديدة. الكتالوج يُعلِّم المُحرّك شكل "العصري المؤسّسي"؛ والمحرّك يُكوِّن نظامًا جديدًا "عصريًّا مؤسّسيًّا" لم يُشحَن من قبل. نفس البيانات، دور مختلف كليًّا.

## ما الذي كان معطوبًا في v2 ويُصلِحه v3

ثلاث علل حقيقيّة وثُغرة تصميميّة واحدة. لم تكن العلل صاخبة بل من النوع الصامت الذي يستمرّ المُحرّك معه في إنتاج مُخرَجات معقولة ونحن نواصل إصدارها. لم نتنبَّه إليها إلّا حين جلسنا لكتابة مواصفات الترقية، وحين أرغمَتنا مراجعة خارجيّة على أن ننظر بصدق.

### 1. حتميّة زائفة من ترتيب نظام الملفّات

كانت عدّة عمليّات فرز داخل خطّ التوصية تُقيّم المرشّحين بالتشابُه، وتفُكّ التعادُل بأيّ ترتيب يُعيده `os.listdir` في بايثون. على macOS كان الترتيب أبجديًّا، وعلى Linux كان ترتيب الإدراج في سِجلّ نظام الملفّات. بين نسخة جديدة من المستودع ونسخة قديمة قد ينقلب فاكّ التعادُل. كنّا نخبر أنفسنا أنّ المُحرّك حتميّ؛ كان حتميًّا إلى حدّ التعادل، وبعد التعادل صار كيفما حدث أن يتذكّر نظام التشغيل.

v3 يُحصّن كلّ عمليّة فرز بفاكّ تعادُل صريح: ترتيب أبجديّ على معرّف العلامة. نفس الملخّص، نفس المحاور، نفس الناتج عبر مختلف الأجهزة وأنظمة الملفّات وإصدارات بايثون. لدينا اختبار يُشغّل المُولِّد 200 مرّة عبر ثلاثة أدِلّة مؤقّتة ويتحقّق من تطابُق المُخرَج بايتًا ببايت.

### 2. تصادُمات بين المحاور تُحلّ بالصُّدفة

في v2، إن احتوى الملخّص على وسمَين متعارضَين, مثل dense وcorporate, كان مُقيِّم المُوصِّي يُرجِّح أحدهما بمعامِل مخفيّ، فيميل الناتج إلى الجانب الذي صادف أن يُحابيه ذلك المعامِل. لا قاعدة موثّقة. كنّا قادرين على شرح النتيجة بعد وقوعها، عاجزين عن التنبّؤ بها قبله.

v3 يرفع هذا الأمر إلى مصفوفة تفاعُل المحاور. لكلّ تصادُم موثَّق نتيجةٌ مُعلَنة ومُسوِّغ. الكثافة والرسميّة تتصارعان على المسافات, الكثافة تفوز في الملخّصات المُكتظّة (مدرسة Bloomberg)، والرسميّة تفوز في الملخّصات المُتنفِّسة (الفخامة). المصفوفة مُختبَرة، قابلة للقراءة، ومُودَعة في المستودع.

### 3. المُقيِّم كان يُصحِّح واجبات المُولِّد بنفسه

هذه أكثرها إحراجًا، واكتشفناها لأنّ ChatGPT أشار إليها في مراجعة خارجيّة لمواصفات v2.1, سمّاها مشكلة الانحراف الذاتي المرجعيّ (self-referential drift). التدفّق كان يبدو نظيفًا: المُولِّد يُكوِّن نظامًا من الملخّص، ثمّ `score_tone_match` يُقيّم مدى تطابُق هذا النظام مع لهجة الملخّص. المشكلة أنّ `score_tone_match` كان يستنبط قيم المحاور من الملخّص بنفس منطق المُولِّد، ثمّ يُقارن محاور المُولِّد بمحاوره هو نفسه. كِلا طرفَي المُقارنة كانا يمرّان عبر الدالّة نفسها. بطبيعة الحال كانت الدرجات مرتفعة. كان المُولِّد يُصحِّح نفسه بمسطرته الخاصّة.

v3 يفصلهما. `score_tone_match` الآن يُقارن مُخرَج المُولِّد بـوسوم اللهجة الخام في الملخّص, السلاسل `warm`، `bold`، `minimal`، وما إليها, عبر تخطيط مستقلّ لا يلمس منطق المحاور إطلاقًا. لم يَعُد بإمكان أيٍّ من المسارين الغشّ على الآخر. ندين بهذه الملاحظة للمراجعة الخارجيّة، ونُسجِّل ذلك علنًا.

### 4. سِجلّ القرارات كان يُكتَب فقط ولا يُقرَأ أبدًا

كان v2 يكتب سطرًا في `.ux/decisions.jsonl` بعد كلّ توصية، لكنّ لا شيء يُعيد قراءته. كان مجرّد ملفّ سجلّ لتصحيح أخطائنا، لا إشارة تغذية راجعة. كان المُوصِّي يعمل بنفس الطريقة في النداء الأوّل وفي النداء الألف. لا تعلُّم. كان للمستودع ذاكرة، والمُحرّك يتجاهلها.

v3 يُغلِق تلك الحلقة. للسِّجل مُخطّط مُغلَق (`_v: 1`)، والمُوصِّي يُعيد ترتيب المرشّحين وفقًا لانتصارات سابقة في نفس مجموعة `(industry, ui_type)`، ولا تُحسَب إلّا القرارات التي كانت درجتها جيّدة وأرسلَها المستخدم فعلًا. الدماغ صار يرى تاريخه. القسم السادس هو الجولة الكاملة.

## المُولِّد ذو السبعة محاور

قلب v3 دالّة حتميّة تُحوِّل ملخّصًا إلى سبع قيم محوريّة عدديّة، ثمّ تُحوِّل هذه القيم إلى نظام تصميم متكامل. المحاور ليست سحرًا, كلٌّ منها قياسٌ مُعَيَّر بمدًى موثَّق، يُشير إلى حزمة رموز محدّدة. جدوى العمل على المحاور (بدلًا من اختيار صفٍّ من الكتالوج) أنّ أيّ توليفة داخل الفضاء قابلة للوصول، بما فيها توليفات لا تستعملها أيّ علامة حقيقيّة في الكتالوج. الكتالوج يُعرِّف شكل الفضاء؛ والمُولِّد يمكنه أن يهبط في أيّ نقطة داخله.

المحور | ما الذي يقيسه | يُترجَم إلى
--- | --- | ---
warmth | حرارة لون اللوحة: من الفحميّ البارد إلى السيينّا الدافئة | عائلة درجات اللوحة، منحنى تشبُّع لون التركيز
contrast | صخب بصريّ: quiet / balanced / loud | نسبة سُلَّم الخطّ (1.200 / 1.250 / 1.333)، عُمق الظِّلال، شِدّة التركيز
density | كثافة المعلومات في الشاشة الواحدة: من airy إلى dense | أساس سُلَّم المسافات (4/8/12/16px)، مُضاعفات ارتفاع السطر
geometry | شخصيّة الحوافّ: sharp / balanced / soft | سُلَّم نصف القُطر (2/8/18px)، طوبولوجيا الزوايا، سماكة الحواشي
formality | سِجلّ اللهجة: playful / balanced / corporate | منحنيات أوزان الخطّ، التتبُّع، المسافة بين caption وhero
motion | ميزانيّة الحركة: restrained / balanced / cinematic | مُنحدرات المُدد (120/240/420ms)، عائلة التيسير، سلوك التمرير
type_personality | صوت الخطّ: humanist / neutral / geometric / expressive | عائلة الخطّ التعريفيّ، سُلَّم الأوزان، استراتيجيّة المائل

نقطة الدخول في Python صغيرة بحيث تتّسع في مثال واحد. تُمرِّر ملخّصًا، فتسترجع نظامًا مُولَّدًا مُرفقًا به قيم المحاور، واللوحة المختارة، وإعدادات الخطّ، وسُلَّم المسافات، وسُلَّم نصف القُطر، وإعدادات الحركة المسبقة.

    # from a brief to a system, in one call
    from engine.synthesizer import synthesize

    brief = Brief(
      industry="fintech-payments",
      tone=["bold", "serious"],
      audience=["merchants", "developers"],
    )

    sys = synthesize(brief)
    # sys.mode == "pure_synthesis"
    # sys.axes == {warmth: 0.32, contrast: 0.72, density: 0.58, ...}
    # sys.palette, sys.type, sys.spacing, sys.radius, sys.motion

إن دخل نفس الملخّص، خرجَت نفس المحاور، خرجَت نفس الرموز. دائمًا. لا يحتاج المُولِّد إلى بذرة عشوائيّة، ببساطة لأنّه لا توجد عشوائيّة تحتاج إلى تبذير.

## ثلاثة أوضاع، منطق قرار واحد

المُولِّد يُوزِّع المرشّحات تلقائيًّا على ثلاثة أوضاع وفقًا لمحتوى الملخّص. في معظم الاستخدامات لا توجد رايةٌ تختار وضعًا يدويًّا, شكل الملخّص هو ما يختار. المنطق مقصودٌ في بساطته: وجود علامة مرجعيّة وراية strict يقرّر المسار.

strict_brand · الأسرع

#### 100% العلامة المُسمّاة

`reference_brands=[stripe]` مع `strict=True` يُعيد مواصفة Stripe كما هي. لا تأويل، لا مزج، لا توليد. مفيد حين تكون العلامة موجودة، والمواصفة مرجعيّة، والملخّص يكتفي بالرموز فحسب. هذا هو المسار الذي تختاره حين يكون لديك ملفّ Figma ونظام موثَّق وتحتاج إلى كود لا يرتجل.

brand_anchor · 70 / 30

#### مرسى على العلامة، مُكيَّف على محاور الملخّص

`reference_brands=[stripe]` دون `strict=True` يُعيد 70% من رموز Stripe ممزوجةً بـ30% من فروقات محوريّة مُستمَدّة من أربع علامات شقيقة مختارة بقُرب المحاور. الناتج يبقى Stripe بلا لَبس، لكنّه ينحني نحو لهجة الملخّص, Stripe أكثر مرحًا لميزة استهلاكيّة، Stripe أكثر رسميّةً للوحة قيادة مؤسّسيّة. تصمد العلامة المرساة أمام كلّ تصادم.

pure_synthesis · فضاء لانهائيّ

#### دون علامة مُسمّاة, لغة جديدة في كلّ نداء

دون `reference_brands` في الملخّص، يُقيّم المُولِّد المحاور السبعة من الملخّص، ويُحدِّد أقرب ثمانية أمثلة في الكتالوج بحسب مسافة المحاور، ويُقطِّر البنية المشتركة بينها، ويُصدِر حزمة طازجة من اللوحة + الخطّ + المسافات + نصف القُطر + الحركة. الملخّصات المختلفة تهبط في مناطق مختلفة من الفضاء نفسه؛ كلّ ناتج متماسك داخليًّا، ويحمل هويّةً خاصّة قابلة للتمييز.

من سطر الأوامر تبدو المسارات الثلاثة هكذا:

    # strict: 100% the brand
    $ uxskill synthesize --brand stripe --strict

    # anchor: 70/30
    $ uxskill synthesize --brand stripe

    # pure synthesis: no brand
    $ uxskill synthesize --industry fintech-payments --tone bold

مُولِّد واحد، منطق قرار واحد، ثلاث شخصيّات مُخرَجات. لا يُبدِّل المستخدم التطبيق, الملخّص نفسه يُوجِّه المسار.

## مصفوفة تفاعُل المحاور

المحاور تتنازع نفس الرموز. density تطلب مسافات ضيّقة؛ formality تطلب مسافات كريمة في سِجلّ الفخامة. geometry تطلب حوافّ حادّة في الطابع التحريريّ؛ formality تطلب زوايا لطيفة في لوحة قيادة ماليّة. في v2 كانت هذه التصادُمات تُحلّ بأيّ معامِل أكبر في المُقيِّم. في v3 لكلّ تصادم موثَّق نتيجةٌ مُعلَنة ومدرسةٌ تصميميّة يُشير إليها, مُسمّاة، حتى يتاح للقارئ أن يقرأها ويختلف معها.

أربع حالات تمثيليّة، كلّها مُودَعة في الاختبارات:

dense + corporate
أساس سُلَّم المسافات: 4px

density تفوز. جواب مدرسة Bloomberg. كثافة المعلومات هي أعلى الفضائل حين يطلب الملخّص لوحات بيانات مُكتظّة في سِجلّ مؤسّسيّ, formality تنحني أمام مقروئيّة الكثافة.

airy + corporate
أساس سُلَّم المسافات: 12px

formality تفوز. جواب فخامة الماليّات. airy + corporate هي مواصفة المصارف الراقية والثروة الخاصّة ولوحات قيادة التنفيذيّين, الفراغ المُحيط بكلّ عنصر هو رسالة الجدّيّة.

sharp + corporate
سُلَّم نصف القُطر: 2px

geometry تفوز. جواب مدرسة NYT. sharp + corporate هي مواصفة الطابع التحريريّ, الزوايا القائمة ونصف قُطر 2px تُقرأ مؤسّسيّةً، مُتأمّلة، صحفيّةً كبرى.

soft + playful
سُلَّم نصف القُطر: 18px

المحوران يتّفقان. جواب مدرسة Glossier. الهندسة الطريّة مع سِجلّ مرِح ينهاران معًا إلى تدوير كريم, 18px هي العتبة التي تبدأ المستطيلات عندها تُقرأ كحصى.

لماذا يهمّ هذا: في v2 كان من الممكن للملخّص نفسه أن يهبط على 4px أو 12px بحسب أيّ معامِل فاز ذلك الشهر. في v3، `dense + corporate` هي دائمًا 4px، و`airy + corporate` هي دائمًا 12px. القواعد قابلة للقراءة وللاختبار وللجدال. إن لم تتّفق مع نتيجةٍ ما، افتح قضيّة على المصفوفة وسيتحوّل النقاش إلى نقاش ذوقٍ، لا إلى نقاش حول ثابتٍ مخفيّ.

## الدماغ يتعلّم

هذا هو الجزء الجديد فعليًّا في v3: المُحرّك يتعلّم من قراراتك المحليّة. الآليّة صغيرة، حتميّة، خارج الاتّصال تمامًا. لا قياس استخدام، لا حساب، لا مزامنة سحابيّة. تثبيتك يتعلّم من تثبيتك. مستودعات مختلفة تُربّي أدمغة مختلفة.

### السِّجل

كلّ نداء لـ`/ux-recommend` أو `/ux-synthesize` يكتب سطرًا واحدًا في `.ux/decisions.jsonl`. المُخطّط مُغلَق عند `_v: 1`:

    {
      "_v": 1,
      "ts": "2026-05-28T14:22:09Z",
      "frame": { "industry": "fintech-payments", "ui_type": "dashboard", ... },
      "system": { "style_id": "editorial-calm-dark", "palette_id": "charcoal-amber", ... },
      "axes": { "warmth": 0.31, "contrast": 0.72, ... },
      "lint_score": 88,
      "user_accepted": true
    }

### إعادة الترتيب

في النداء التالي، يُجمِّع المُوصِّي القرارات السابقة بحسب `(industry, ui_type)`. كلّ مرشّح يحصل على قفزة +5 إن طابق سابقةً في نفس المجموعة. لا تُحتسَب إلّا السوابق التي `lint_score >= 80` و`user_accepted = true`, لا نتعلّم من ناتج مرفوض. تحتاج المجموعة إلى ثلاث سوابق مؤهّلة على الأقلّ قبل أن تعمل إعادة الترتيب. تحت ذلك، يعمل المُحرّك في وضع الإقلاع البارد ويتصرّف تمامًا كتثبيت جديد.

### الضمانات

الضمانات هنا ضيّقة وتستحقّ أن تُقال بصوت عالٍ. الحتميّة محفوظة. نفس الملخّص + نفس السِّجل يُنتجان دائمًا نفس الناتج. تُطبَّق قفزة +5 قبل أيّ فاكّ تعادل، وقاعدة الترتيب الأبجديّ على معرّف العلامة لا تزال تفوز تحتها. الإقلاع البارد آمن. المستودع الجديد يتصرّف كأيّ مستودع جديد آخر. التعلّم محليّ. قراراتك لا تُغادر جهازك أبدًا.

يمكنك أن ترى ما تعلَّمَه تثبيتك في أيّ وقت:

    $ uxskill stats --html
    [OK] Wrote .ux/stats.html
    [OK] Open in browser to see your install's learned priors

لوحة HTML تُظهر عدد القرارات لكلّ مجموعة، ومتوسّط درجة linter، واللوحات الأكثر تكرارًا، وتوزيعات المحاور. هذه هي الحجّة المرئيّة على التعلّم الذاتيّ, ترى ملمح ذوقك يثخن مع الوقت وأنت تُواصل الإصدار. لا شيء من ذلك في خادم. كلّه في مستودعك، في JSONL واضح وHTML مُولَّد.

## الحلقة التلقائيّة /ux-evolve

الأمر الجديد في v3 هو `/ux-evolve`. حتى الآن، كانت حلقة التلميع يدويّة: شغّل linter، اقرأ النتائج، أصلِح، أعِد التشغيل. Evolve يُغلِق تلك الحلقة. تُسلّمه أصلًا ودرجةً مستهدَفة؛ فيُشغّل linter، ويُطبِّق ستّة تمريرات تلميع لا أثر مُكرَّرًا فيها، ويُعيد التشغيل، ويتوقّف عند الهدف أو على هضبة أو عند سقف خمس جولات.

شكل الجولة الواحدة:

1. Lint: 145 قاعدة Regex حتميّة عبر إمكانيّة الوصول، والمحتوى، والجودة، والطباعة. تُعيد درجةً من 0 إلى 100 وقائمة بالنتائج.
2. Polish: ستّة تمريرات تُصلِح أوّلًا أعلى الشِّدّات. لا أثر مُكرَّرًا: إعادة تمريرٍ على مُخرَجٍ مُلمَّعٍ تصبح عمليّةً صفريّة.
3. Re-lint: تقييم الأصل المُلمَّع.
4. Decide: إن صارت الدرجة ≥ 90، توقّف. إن كان الفارق عن الجولة الأخيرة أقلّ من 5 (هضبة)، توقّف. إن وصلنا للجولة 5، توقّف. وإلّا، أعِد الكرّة.

بوّابة الجودة ثابتة على 65. إن نزلَت الدرجة النهائيّة عن 65، يرفض المُحرّك إرسال الأصل ما لم تُمرَّر `--force`. السبب: المُخرَج عند 65 أو دونها يُعَدّ هُراء ذكاء اصطناعيّ يمكن تمييزه، ولن ندع محرّكنا يُصدِر هُراءً بصمت. يمكن للمستخدم تجاوز البوّابة، لكنّ التجاوز صريح ويُسجَّل في سِجلّ القرارات.

مثال ملموس: هيكلٌ للوحة قيادة فينتك بدرجة 72 في أوّل تشغيل لـ linter, غالبيّتها حالات تركيز غائبة، وبعض التسميات منخفضة التباين، ونتيجة "Inter بحجم تعريفيّ". الجولة 1 لَمّعَت حالات التركيز إلى 81. الجولة 2 رفعَت التباين إلى 86. الجولة 3 استبدلَت Inter بالخطّ التعريفيّ الذي طلبه الملخّص وأعادت توازن أحجام caption, 91، تمّ بلوغ الهدف، انتهت الحلقة. ثلاث جولات، لا رفض، الإصدار جاهز.

## ما الذي لم نَبنِه (ولماذا)

المواصفات الأقصى لـv2.1 اقترحَت أمورًا لم تَدخُل v3. الحديث الصادق عن النطاق هو أن نقول أيّها، ولماذا.

### لا LLM في الحلقة

كان الاقتراح الأقصى يتضمّن محورًا جماليًّا ذاتيًّا يحكُمه نموذج لغويّ كبير, "اسأل نموذجًا هل تشعُر بأنّ هذا تحريريّ". رفضنا ذلك من حيث المبدأ. مغزى المُحرّك كلّه هو الحتميّة: نفس الملخّص، نفس الناتج، دون مُفاجآت صباح الغد. وضع LLM داخل المُولِّد يجعل كلّ نداء غير قابل للاستنساخ. v3 يستدعي صفر LLM. المُولِّد بايثون نقيّ يعمل على JSON؛ وlinter قواعد Regex؛ والمُقيِّم قائم على القواعد.

### لا توليد بعدّة مُرشّحين بالتحوير الجينيّ

تضمّن الاقتراح خطوةً بخوارزميّة جينيّة, أصدِر N من المرشّحين في كلّ نداء، حوِّر، قيِّم، أعِد الأصلح. جرّبناها في فرع. تدهور الناتج، لأنّ التحوير أدخل ضوضاء كانت حلقة التلميع تضطرّ لإزالتها. v3 يُصدِر توليفًا بأصلٍ واحد وحلقة تلميع. مُرشَّح واحد، ستّة تمريرات لا أثر مُكرَّرًا فيها. نتائج أفضل، سطح كود أصغر.

### لا إعادة تسمية للأوامر

أعاد الاقتراح تسمية `/ux-recommend` إلى `/generate:ui` و`/ux-polish` إلى `/mutate:ui`. أبقَيْنا على الـ 22 أمرًا القائمة بأسمائها، وأضفنا `/ux-evolve` بوصفه الأمر الثالث والعشرين. لا نريد لترقيةٍ من v2 إلى v3 أن تكسر ذاكرة عضلاتٍ لأحدٍ أو أسماء shell aliases.

### لا "حرق الكتالوج من أجل فضاء لا نهائيّ"

النسخة الأقصى من الاقتراح قالت إنّ الكتالوج عبء, إنّ المُولِّد يصل إلى فضاء التصميم كلّه بمفرده، وإنّ المداخل الـ 1,243 يجب أن تذهب. أبقَينا كلّ مُدخَل. الكتالوج هو ما يُعلِّم المُولِّد شكل الفضاء, دون أمثلة، لا مرسى للمحاور، ويصير الناتج طافيًا. v3 يقرأ الكتالوج بوصفه مفردات، وv3 يحتاج إلى تلك المفردات.

هذه أحكام ذوق. سيختلف معها أصحاب أولويّات مختلفة، وهذا حقّهم. واجبنا تجاه المشروع أن نُسجِّل ما لم نَفعله، ولماذا.

## الأرقام عند v3

23
Commands
18
MCP tools
1,243
Entries
145
Anti-patterns
160
Brand specs
17
IDEs
17
Locales
223
Tests pass

اثنان وعشرون أمرًا قائمًا بأسمائها، ثمّ `/ux-evolve` بوصفه الثالث والعشرين. خمس عشرة أداة MCP محفوظة، وثلاث جديدة, `ux_synthesize`، `ux_decisions_query`، `ux_decisions_stats`, للوكلاء الراغبين في قيادة المُولِّد أو الاستعلام عمّا تعلّمَه الدماغ. الكتالوج وlinter لم يُمَسّا. مُثبِّت الـ 17 IDE لم يُمَسّ. الصفحات الرئيسة وملفّات README بلُغاتها الـ 17 لم تتغيّر. v3 إضافة على السطح وإعادة كتابة في القلب.

> كان v2 محرّك توصية ينتقي من كتالوج. v3 مُجمِّع يُقطِّر منه. نفس البيانات تؤدّي العمل المعاكس.

## التثبيت في 60 ثانية

يُشحَن v3 عبر المسارات الثلاثة نفسها التي كانت في v2, pip، وnpm، وأسواق إضافات بيئات التطوير. خطوة init تكتشف بيئتك تلقائيًّا وتكتب ملفّ الإعدادات في المكان الصحيح. خطوة synthesize تأخذ ملخّصًا أو زوج industry + tone وتُعيد نظام تصميمٍ مُكتمِلًا إلى `.ux/last-system.json` في المستودع الحاليّ.

    $ pip install uxskill
    $ uxskill init                     # auto-detects your IDE
    $ uxskill synthesize --industry fintech-payments --tone bold

    [OK] Mode: pure_synthesis
    [OK] Axes: warmth=0.31, contrast=0.74, density=0.58, geometry=0.42, ...
    [OK] Wrote .ux/last-system.json (palette, type, spacing, radius, motion)
    [OK] Wrote .ux/decisions.jsonl (1 entry, schema _v: 1)

نفس مسار التثبيت على كلّ بيئة مدعومة: Claude Code، وCursor، وWindsurf، وGitHub Copilot، وGemini CLI، وCodex، وKiro، وCline، وContinue، وAider، وZed، وJetBrains AI، وPieces، وTabby، وTabnine، وCodeWhisperer، وRoo Cline. خادم MCP stdio هو المصدر الوحيد للحقيقة لها جميعًا.

نطاق صريح

#### v3 أساس، لا وِجهة نهائيّة.

المُولِّد بسبعة محاور هو العمل الذي نشَرنا أدلّته. المحوران 8 و9 (saturation_strategy، surface_depth) مرسومان لكن لم يُشحَنا, سيُعمِّقان الانقسام الداكن/الفاتح واستراتيجيّة التدرّجات. سِجلّ القرارات يُستهلَك اليوم من قِبل إعادة ترتيب المُوصِّي فقط؛ نتوقّع أن يبدأ المُقيِّم ومُقيِّم linter بقراءته في v3.1. المُقترحات الأقصى التي رفضناها ليسَت غائبة, بعضها قد يحطّ لاحقًا، حين نستطيع إثبات نفعها.

إن وجدتَ ملخّصًا يُنتِج ناتجًا غير مُرضٍ، أو حلًّا في المصفوفة لا يوافق ذوقك، افتح قضيّة. المصفوفة في المستودع، والاختبارات في المستودع، والدماغ في مستودعك. النقاشات الآن تجري على ركيزة يمكنك قراءتها.

## ما الذي يتغيّر بالنسبة لك

إن كنتَ على v2: لا شيء سيُكسَر. الـ 22 أمرًا التي تستعملها تتصرّف كما هي. linter يعمل بالسرعة ذاتها. خادم MCP يُتيح 15 أداة من 18 بأسمائها القديمة، إضافةً إلى ثلاث جديدة. إن ترقّيتَ ولم تستدعِ `/ux-synthesize` أو `/ux-evolve`، فلن يتحرّك سَير عملك اليوميّ إطلاقًا.

إن كنتَ بانتظار أن يُولِّد المُحرّك بدل أن يُوصِي: هذا هو v3. المُولِّد هو المركز الجديد؛ `/ux-recommend` لا يزال يعمل وصار يُعيد الترتيب من سِجلّك؛ `/ux-evolve` يُغلق حلقة التلميع. مواصفات العلامات بيانات تدريب الآن، لا قوالب. نفس الـ 1,243 مدخلًا تؤدّي عملًا مختلفًا تمامًا.

سمَّيْنا v3 The Brain لأنّ هذا ما تَمَّ بناؤه, مُجمِّع تصميم توليديّ مُقيَّد بحلقة تغذية راجعة مغلقة. خارج الاتّصال تمامًا. صفر استدعاءات LLM. نفس الملخّص، نفس المحاور، نفس الناتج. ملخّصات مختلفة، مناطق مختلفة، مُخرَجات لا نهائيّة. تثبيتك يتعلّم من مستودعك. مستودعات مختلفة تُربّي أدمغة مختلفة. كلّ ذلك بترخيص MIT، بأقلّ من 300ms على جهاز عاديّ، وقابل للتثبيت عبر pip.

شغِّله على ملخّصٍ يَهمّك. انظُر ماذا يُعيد. افتح قضيّة إن خالف الناتج ذوقك, التصادُم يدخل المصفوفة، وتُسمَّى القاعدة، ويتصرّف التثبيت التالي على نحو أفضل. هكذا يتراكم الدماغ.

شغّله على مشروعك

## محرِّك واحد. ثلاثة مسارات للتثبيت.

المُولِّد الذي يُشغِّل v3 يُشحَن في الحزمة نفسها مع linter ومُحرِّك التوصية. 145 نمطًا مضادًّا. 160 مواصفة علامة. 1,243 مدخلًا. 17 بيئة تطوير. MIT، دون قياس استخدام، دون حساب.

$ /plugin marketplace add Laith0003/ux-skill
$ /plugin install ux@ux-skill
· or ·
$ pip install uxskill
· or ·
$ npx uxskill@latest init

المصدر على GitHub: Laith0003/ux-skill · npm: uxskill · PyPI: uxskill · التوثيق: uxskill.laithjunaidy.com