المهارات

Shikhu: حوِّل قاعدة الكود لديك إلى اختبارات ذاتية وتتبّع تغطيتك المعرفية

Shikhu مخصص للمطوّرين الذين يريدون أن يتدرّب وكيل البرمجة المدعوم بالذكاء الاصطناعي على شيفرتهم الخاصة وأن يتابعوا تغطيتهم المعرفية على المدى الطويل. الشرط الأساسي هو توفير مفتاح واجهة OpenRouter البرمجي الخاص بك، وبدونه لا يمكن تنفيذ أي خطوة تعتمد على توليد النماذج.

Official source · arjunpatel7/shikhu

Install

uv tool install shikhu

لمن هذا الدليل

ورثت قاعدة كود لا تنتهي من قراءتها، أو يسأل أحد أفراد الفريق باستمرار: «من يستخدم هذا الجزء فعلياً؟». إن كان هدفك أن يتدرّب وكيل البرمجة المدعوم بالذكاء الاصطناعي مراراً على شيفرتك أنت، وأن تتحوّل «إلى أي مدى أفهم فعلاً؟» إلى رقم يمكنك تتبّعه، فإن فكرة Shikhu أنسب من سؤال وجواب عابر: فهي تحوّل التعلّم إلى توليد أسئلة وإجابة، وتستخرج الأداة أسئلتها من المستودع وتسجّل إجاباتك الصحيحة والخاطئة، وتتولى المهارات المرافقة إرشادك عبر النقاط الأساسية في الملفات التي تحدّدها. يناسب هذا من هو مستعدّ للسماح للوكيل بالتمرّن على شيفرة حقيقية لعدة جولات، ومن يقبل أن «النموذج سيقرأ شيفرتك».

أول محاولة خلال 3 دقائق

لا يوجد سوى مسار رسمي واحد، ويبدأ بتثبيت أداة سطر الأوامر:

uv tool install shikhu

بعد التثبيت تصبح shikhu متاحة في PATH وتعمل في بيئة معزولة، فلا تتعارض مع اعتماديات مشروعك.

هناك شرطان مسبقان: وجود uv في البيئة، ومفتاح واجهة OpenRouter البرمجي — إمّا في ملف .env في جذر المستودع (يُحمَّل تلقائياً) أو مُصدَّر في الصدفة باسم OPENROUTER_API_KEY، لأن جميع نداءات النماذج تمر عبر OpenRouter.

ثم نفّذ الأمر التالي في جذر الشيفرة التي تريد تعلّمها:

shikhu init

هذه الخطوة تكتب ملفات فعلياً، فتحقّق قبل تشغيلها: فهي تنشئ قاعدة البيانات المحلية coverage.db (ويُضاف تلقائياً إلى .gitignore)، وتولّد .quizignore (يُستخدم مثل .gitignore لاستبعاد ملفات الإعداد أو التوثيق من نطاق توليد الأسئلة)، وتثبّت المهارتَين في دليل مهارات الوكيل.

موضع التثبيت: تستقر المهارات في .claude/skills/ وأو .agents/skills/ إذا كان هذان الدليلان موجودين مسبقاً في المستودع (حسب العائلة التي ينتمي إليها وكيلك)؛ وإذا لم يوجد أيٌّ منهما فسيُنشآن معاً. ولإعادة التثبيت لاحقاً أو للتثبيت على مستوى النظام، استخدم shikhu install-skill مع --global للنطاق العام.

للاستدعاء الأول اختر عملاً للقراءة فقط وقابلاً للتراجع: في وكيل برمجة يدعم المهارات استخدم /shikhu-study مع ملف صغير، أو استخدم /shikhu-inquiry لطرح سؤال لا يتجاوز دالة واحدة. وقبل أن تسأل، تأكّد أن هذا السؤال سيستدعي نموذجاً خارجياً (عبر OpenRouter ويستهلك حصة من الرصيد)، ثم أرسله بعد التأكد.

هناك ثلاث علامات نجاح قابلة للملاحظة: أن تظهر في إجابات الوكيل أسماء ملفات وأسماء دوال وعلاقات استدعاء موجودة فعلاً في مستودعك بدلاً من شرح عام؛ وأن تتحوّل الأسئلة التي سألتها إلى بذور للاختبار، لتظهر مرة أخرى عند توليد أسئلة لاحقاً؛ وأن يظهر في جذر المشروع ملفّا coverage.db و.quizignore.

حالات الاستخدام

الحالة الأولى: تعلّم ذاتي موجّه لوحدة معيّنة.

ابدأ ببناء الفهرس:

shikhu summarize

يكتب لكل ملف متتبَّع ملخّصاً مُولَّداً بالنموذج ومخزَّناً في ذاكرة مؤقتة؛ نداء نموذج واحد لكل ملف، والملفات التي لم يتغيّر محتواها لا تُعالَج من جديد. تعتمد المهارات وshikhu map على هذه الملخّصات لتحديد «أي الملفات ينبغي أن أُطّلع عليها لهذا السؤال؟». وبعد بناء الفهرس، استخدم /shikhu-study داخل الوكيل مع الملف أو المجلد الذي تريد تعلّمه، فيقودك الوكيل ملفاً تلو الآخر وفق المواضع التي تشير إليها الملخّصات.

الحالة الثانية: تحويل الأسئلة اليومية إلى بذور اختبار.

داخل الوكيل استخدم /shikhu-inquiry لطرح سؤال حول شيفرتك أنت — مثلاً: من أين تأتي مُدخلات هذه الواجهة البرمجية، أو لماذا كُتب هذا الجزء المنطقي بهذه الطريقة. يقدّم الوكيل الإجابة، ويسجّل السؤال في الوقت نفسه كبذرة اختبار؛ ثم تشارك هذه البذور في توليد الاختبارات من الشيفرة لاحقاً، وتُتابَع إجاباتك الصحيحة والخاطئة بوصفها تغطية معرفية. ولتركيز الأسئلة على الشيفرة الفعلية، استبعد ملفات الإعداد والتوثيق عبر .quizignore.

حدود الاستخدام

  • يلزمك توفير مفتاح واجهة OpenRouter البرمجي الخاص بك؛ وبدونه لا يمكن تنفيذ أي خطوة تعتمد على توليد النماذج.
  • يُحتسب سعر shikhu summarize لكل ملف، فكلما كبر المستودع صار الفهرسة الأولى أبطأ وأعلى كلفة؛ ولا يُعاد تشغيلها إلا للملفات التي تغيّر محتواها.
  • يعتمد موضع استقرار المهارات على أدلة المهارات الموجودة مسبقاً في المستودع، وإذا لم يوجد أيٌّ منها فسيُنشآن معاً.
  • يُكتب coverage.db داخل المشروع لكنه يدخل تلقائياً في .gitignore، فلا يُزامَن مع نظام إدارة الإصدارات، ولا تتشارك التغطية وسجل الإجابات بين أفراد الفريق.
  • يشرح المصدر طريقة استخدام أداة سطر الأوامر والمهارتَين، والأوامر ومواضع التثبيت؛ لكنه لا يوضّح لغات البرمجة المدعومة، ولا طريقة حساب التغطية بدقة، ولا معيار تحديد مستويات الصعوبة، فلا تستنتج ذلك من سلوك أدوات الاختبار المعتادة.