المساهمة في Apothem — دليل المطوّر
صُن منظومة Apothem ووسّعها بتأليف القواعد والأوامر والمساعِدات والمهارات والخطّافات وفق المخططات المرجعية ومتطلّبات البيانات الأمامية وإجراءات التحقّق.
يساعد هذا الدليل المطوّرين على صون منظومة Apothem وتوسيعها وفق معايير جودة SOTA.
مرجع سريع: أنواع المُنتَجات
يغطّي هذا الدليل خمسة أنواع من المُنتَجات، لكلٍّ منها غرض محدّد. تحمل القواعد
والأوامر والمساعِدات والمهارات بيانات أمامية بصيغة YAML؛ أمّا الخطّافات
فتُسجَّل في hooks.json وsettings.json ولا تحمل بيانات أمامية.
وأنماط الإخراج صنف إضافي من المُنتَجات، له مفتاحان إلزاميان في البيانات الأمامية هما
name وdescription؛ راجع
مخطط البيانات الأمامية.
| المُنتَج | المسار | الغرض | متى يُنشأ |
|---|---|---|---|
| قاعدة | src/apothem/rules/*.md | تفويض سلوكي أو توجيه تشغيلي | عند إرساء مبدأ أو سياسة أو تفويض حوكمة جديد |
| أمر | src/apothem/commands/*.md | أمر بشرطة مائلة (/command-name) لسيرورات العمل المعقّدة | سير عمل جديد متعدّد الخطوات للمستخدم |
| مساعِد | src/apothem/agents/*.md | تعريف دائم لعامل مُفوَّض للمهام المتوازية | مهمة متخصّصة متكرّرة جديدة (تدقيق، استكشاف، فحص جودة) |
| مهارة | src/apothem/skills/{name}/SKILL.md | تقنية قابلة لإعادة الاستخدام ذات إشارة كشف | نمط تقنية جديد قابل للكشف وإعادة الاستخدام |
| خطّاف | src/apothem/hooks/ + hooks.json + settings.json | تحقّق أو إدارة حالة يُطلقهما حدث | حدث جديد في دورة الحياة أو حاجة جديدة إلى التحقّق |
عقد محوّل إطار العمل
تقيم حقائق هوية إطار العمل وقدراته في
src/apothem/lib/harness_registry.py. ولا يكتمل تغيير إطار العمل إلا عندما
تتوافق هذه الأسطح:
| السطح | التحديث المطلوب |
|---|---|
| صفّ السجلّ | المُعرِّف العام، ومفتاح الحزمة، ونقطة الدخول، والنطاق، وصيغة المُخرَج، والمسارات الهدف، ومسارات الوثائق، وملف القدرات، وتثبيت المعيار، واختبارات التجهيزات، ومفتاح بيانات الحزمة، ومصادر القوالب، وحالات القدرات. |
| حزمة المحوّل | __init__.py، install.py، update.py، uninstall.py، verify.py؛ أضف materializer.py فقط عندما يُصيِّر إطار العمل ملف إعداد أصليًا. |
| بيان الانتشار | مسارات القوالب والحزم للمحوّلات المدعومة بالبيان. |
| القدرات | src/apothem/harnesses/<package>/capabilities.yml مع كل قدرة مطلوبة، ومبرّر للحالات غير المدعومة أو التي ما زالت قيد الاكتشاف، إضافةً إلى خريطة conversion_losses لكل حزمة أوامر أو عوامل أو قواعد مُحوَّلة (راجع سجلّ أُطُر العمل). |
| تثبيت الاصطلاح | STANDARD-CONVENTION-PIN.md مع رابط المورّد، وتاريخ اللقطة، واسم الملف/المخطط المرجعي، ومرجع الأدلّة، ومبرّر القدرات غير المدعومة. |
| الاختبارات | تكافؤ السجلّ، واختبار تجهيزة المحوّل، وصفّ خطة التثبيت الذهبية، وسلوك التشغيل التجريبي/عدم الكتابة، وثبات النتيجة عند التكرار، وتغطية بيانات الحزمة. |
| الوثائق | صفحة مرجع إطار العمل، وصفحة المقارنة، وملاحظات القدرات/MCP، وأمثلة تستخدم عناصر نائبة زائفة. |
يجب على المحوّلات ذات نطاق المشروع أن تضبط requires_project = True، وأن
تقبل project: Path | None في توابع دورة الحياة، وأن ترفض جذور المشاريع
المفقودة أو غير الآمنة قبل أيّ كتابة. ويجب على المحوّلات ذات نطاق المستخدم أن تُبقي
المسارات تحت جذر إعداد المستخدم الموثَّق لإطار العمل.
سياسة التجهيزة الذهبية
يسجّل tests/fixtures/harness-golden-plans.json الشكل العام لخطة التثبيت
لأُطُر العمل السبعة عشر المُسجَّلة في السجلّ جميعها: المُعرِّف العام، ونمط التجسيد،
ومسار الحزمة/القالب المصدر، والمسار الهدف المُطبَّع تحت <ROOT>. وعندما
يتغيّر سلوك السجلّ أو البيان أو أهداف القوالب عمدًا، حدّث التجهيزة الذهبية في الكوميت
نفسه الذي يحمل تغيير المصدر، كي يُظهر الفرق التغيّر في السلوك.
التحقّق قبل الكتابة
يتحقّق برنامج تشغيل التثبيت المشترك من كل مصدر وكل هدف قبل أول كتابة. ويرفض مصادر
البيان المفقودة، واجتياز مسار الهدف، ومسارات الهدف الواقعة خارج الجذر المختار، وعبور
الروابط الرمزية. وتُنفِّذ عمليات التشغيل التجريبي التحقّق نفسه وتُعيد نتائج مُهيكَلة
skipped أو unchanged دون إنشاء ملفات.
التنقيح وبيانات الأمثلة
تُنقِّح تشخيصات الملف التعريفي الحقول التي تأخذ شكل الرمز المميّز، أو السرّ، أو كلمة
المرور، أو بيانات الاعتماد، أو مفتاح API، أو المفتاح الخاص، أو التخويل، أو
المصادقة، أو الترويسة. وتستخدم الوثائق والتجهيزات والأمثلة ومقتطفات JSON
القيم example.invalid وExample User وexample-user
وعناصر نائبة واضحة بدلًا من أسرار أو حسابات شخصية تبدو حقيقية.
قبل الكتابة: المخطط المرجعي
العقد المقروء آليًا الذي تفرضه البوابة هو مخططات JSON Schema لكل صنف
تحت src/apothem/schemas/*.schema.json — إذ يرفض additionalProperties
المفاتيح غير المعروفة، فتكون الكلمة الفصل لبوابة المطابقة. ويتتبّعها إسقاطان
مقروءان للبشر: site/content/docs/reference/frontmatter-schema.mdx
(فهرس المفاتيح المطلوبة) وsite/content/docs/reference/artifact-schema.mdx
(قوالب لكل صنف وأمثلة محلولة). وحيثما تخالف صفحةٌ مخططاتِ JSON Schema،
تكون الغلبة للمخططات.
- اقرأ مخطط JSON Schema الخاص بنوع مُنتَجك تحت
src/apothem/schemas/ - اقرأ
site/content/docs/reference/artifact-schema.mdx§ «Schema» للاطّلاع على القالب ومثال محلول - انسخ الحقول المطلوبة، واملأ القيم الإلزامية، وأضف الحقول الاختيارية حسب الحاجة
فحص سريع للبيانات الأمامية
يجب أن تجتاز البيانات الأمامية لكل مُنتَج هذه الفحوص. طبّق فحوص version
وupdated وportability على الصنف الذي يحمل المفتاح فقط: فالقواعد
لا تحمل أيًّا منها، والمهارات لا تحمل portability.
✓ Valid YAML syntax (use tools: `yamllint` or PowerShell `ConvertFrom-Yaml` where available)
✓ All mandatory fields present (per schema for artifact type)
✓ name: uses kebab-case
✓ version: semantic MAJOR.MINOR.PATCH
✓ updated: ISO 8601 date (YYYY-MM-DD)
✓ description: single-line, non-empty
✓ scope fields valid per artifact type (rules: pathFilter + alwaysApply; CLAUDE.md root: scope)
✓ portability: string, for example `universal` (the schemas do not enumerate its values)
✓ No typos in field names — must match canonical schema exactly
✓ Optional fields use correct enum valuesاصطلاحات التسمية
أسماء المُنتَجات (kebab-case)
- القواعد:
operational-mandates،clean-room-generation،context-management - الأوامر:
plan-execute،plan-spec،plan-generate - المساعِدات:
codebase-explorer،convention-auditor،quality-gate - المهارات:
plan-suite،ecosystem-audit
النمط: أحرف صغيرة، وشرطات بين الكلمات، دون مسافات أو شرطات سفلية.
تسمية الملفات
- القواعد:
{name}.md - الأوامر:
{name}.md - المساعِدات:
{name}.md - المهارات: داخل المجلّد
src/apothem/skills/{name}/SKILL.md(بحالة الأحرف نفسها تمامًا:SKILL.md) - الخطّافات: داخل المجلّد
src/apothem/hooks/. جميع معالجات الأحداث مكتوبة بلغة Python. يستخدم كل أمر خطّاف في قالبsettings.jsonالخاص بـ Claude Code صيغة exec: إذ إنcommandهو العنصر النائب للمفسِّر${PYTHON_BIN}، ويُحلّ وقت التثبيت، وargsيحمل مسار النص البرمجي ووسائطه. ويشغّل ذلك القالب الأمرين${HARNESS_ROOT}/.apothem/support/hooks/dispatch.py <event> [<message-name>]و${HARNESS_ROOT}/.apothem/support/conformity/gate.py --hookبالمسار المطلق، فلا تحتاج النسخة المثبّتة إلى حزمةapothemقابلة للاستيراد. أمّا إضافة Claude Code فتسجّل الخطّافات بدلًا من ذلك فيsrc/apothem/hooks/hooks.json، بوصفها أوامر صدفة تشغّلhooks/lib/bootstrap.shعبرbash؛ ويحدّد ذلك الملف الهيكلي موضع Python ويشغّلdispatch.py، فتبقى المعالجات بلغة Python. سجّل أي خطّاف جديد فيhooks.jsonوفي قالبsettings.jsonالخاص بـ Claude Code. ويوجّهdispatch.pyالحدثSessionStartإلىsession_start_bootstrap.main()، وكل حدث آخر مُدرَج في القائمة البيضاء إلىemit_hook_context.main(). وملفات الصدفة الهيكلية الوحيدة المسموح بها تحتsrc/apothem/hooks/أوscripts/هي الملفات الستة لتحديد الموقع والتمهيد (find-python.{ps1,sh}، وfind-pwsh.{ps1,sh}، وbootstrap.{ps1,sh})؛ وأي ملف.ps1/.shآخر يُخفق في فحص النظافةscripts/dev/validate_hooks.py.
الإحالات المتبادلة
عند الإحالة إلى مُنتَجات أخرى، استخدم الأسماء الدقيقة:
- القواعد:
"operational-mandates"(قيمة حقل الاسم) - الأوامر:
/plan-execute(بالشرطة المائلة في الوثائق الموجّهة للبشر؛ ومن دونها في الشيفرة) - المساعِدات:
codebase-explorer(قيمة حقل الاسم) - المهارات:
plan-suite(قيمة حقل الاسم)
لا تستخدم أبدًا مسارات الملفات أو الأسماء المبتورة في النصّ النثري.
قابلية النقل: Windows مقابل Unix
يجب على كل أمر أن يُعلن صراحةً حالة قابليته للنقل في الحقل portability.
ويجوز للمساعِد أن يُعلنها. ولا تحمل المهارات والقواعد وأنماط الإخراج حقل
portability.
عامّ
- يعمل بالطريقة نفسها على Windows وmacOS وLinux
- لا افتراضات بشأن الصدفة
- تستخدم المسارات الشرطات المائلة الأمامية (
/) - لا مسارات مطلقة ثابتة مُضمَّنة
- لا صيغة PowerShell خاصة بـ Windows
portability: "universal"عامّ مع تحفّظات على Windows
- عامّ عبر مضيفات POSIX؛ وينطبق التحفّظ المُسمّى على متغيّر منصّة Windows المُعلَن في المحتوى
- وثّق التحفّظ صراحةً في المحتوى
- مثال: «الروابط الرمزية غير مدعومة على Windows قبل Win 10»
portability: "universal-with-windows-caveats"وثّق التحفّظ في ملاحظة تلي العنوان مباشرةً.
مقتصر على Unix / مقتصر على Windows
- مقيَّد صراحةً بمنصّة واحدة
- نادر في Apothem — ينبغي أن تكون معظم المُنتَجات عامّة
- لا تستخدمه إلا إذا كانت الميزات الخاصة بالمنصّة أساسية
portability: "unix-only"وثّق السبب في القسم الأول من المُنتَج.
النطاق: فعّال دائمًا مقابل مُرشَّح بالمسار
فعّال دائمًا
تنطبق القاعدة في كل مكان. خمس قواعد فعّالة دائمًا: agnostic-posture،
وauthority-inquiry، وsession-closure، وcontext-management، وفهرس
القواعد (apothem-rule-index). والمجموعة صغيرة لأن كل قاعدة فعّالة دائمًا
تستهلك من السياق في كل جلسة.
pathFilter: ""
alwaysApply: trueمُرشَّح بالمسار
تنطبق القاعدة شرطيًا بحسب مسار الملف.
pathFilter: "**/*.py, **/*.toml"
alwaysApply: falseيستخدم pathFilter أنماط glob (بالصيغة نفسها المستخدمة في .gitignore).
وعندما يطابق ملفٌّ المرشِّح، تُفعَّل القاعدة.
دلالات النسخ
يحمل كل مُنتَج ذي نسخة نسخته الدلالية الخاصة (MAJOR.MINOR.PATCH).
تتطلّبها الأوامر والمهارات، ويجوز أن تحملها المساعِدات وأنماط الإخراج، ولا تحمل
القواعد أيَّ نسخة:
- PATCH — تغيير سلوكي يُصحّح توجيهًا قائمًا دون كسر العقد.
- MINOR — تغييرات إضافية غير كاسرة: أقسام اختيارية جديدة، وحقول اختيارية جديدة في البيانات الأمامية، وأمثلة جديدة. ويواصل المستهلكون الحاليون العمل دون أي تغيير.
- MAJOR — تغييرات كاسرة في المخطط أو العقد: أقسام محذوفة، وحقول مُعاد تسميتها، وتغيير سلوك توجيه قائم، وتغييرات تتطلّب أن تتكيّف المُنتَجات التابعة.
لا تُغيّر إصلاحات الأخطاء المطبعية، وإصلاحات الروابط، والتنسيق، والتعديلات المقتصرة على التعليقات أو على الوثائق رقمَ الإصدار. ولا يرفعه إلا تغيير سلوكي. ومع ذلك يُحدِّث مثل هذا التعديل تاريخ updated الخاص بالمُنتَج.
أمثلة:
vX.Y.Z→vX.Y.(Z+1)(PATCH: توجيه مُصحَّح يغيّر السلوك)vX.Y.Z→vX.Y.Z(بلا رفع: إصلاح خطأ مطبعي أو رابط؛ يتغيّرupdated)vX.Y.Z→vX.(Y+1).0(MINOR: إضافة قسم اختياري جديد)v0.Y.Z→v(0+1).0.0(MAJOR: إعلان استقرار العقد؛ وتبدأ المُنتَجات الجديدة عندv0.Y.Z)vX.Y.Z→v(X+1).0.0(MAJOR: حذف حقل إلزامي من البيانات الأمامية)
ارفع version وupdated معًا في كل تعديل يغيّر السلوك في مُنتَج
يحمل هذين الحقلين. وألحِق صفًّا مطابقًا بملف CHANGELOG.md على مستوى
المنظومة للإصدارات التي تجمع تغييرات في المُنتَجات.
مراجعات حزمة الخطّة
لا تنطبق القاعدة الخاصة بالقِطَع أعلاه على حزم الخطط. إصدار حزمة الخطّة هو قيمة vX.Y.Z المسجّلة في ترويسة MASTER-PLAN.md وفي جدول سجلّ المراجعات. وتصحيح خطأ مطبعي في حزمة خطّة يُعدّ مراجعة ترفع رقم PATCH. تحدّد الخطوة 10.2 من /plan-review التصنيف، وتُلحِق صفّ سجلّ المراجعات.
vX.Y.Z→vX.Y.(Z+1)(حزمة خطّة، تصحيح مطبعي: PATCH)vX.Y.Z→vX.Y.Z(قِطعة، تصحيح مطبعي: بلا رفع للإصدار؛ قاعدة القِطَع أعلاه)
متى تُعدِّل مُنتَجًا
القواعد
- عامِل بنية الإلزامي/الاختياري على أنها حاملة للحِمل — فإعادة هيكلتها تمتدّ آثارها إلى كل مُنتَج تابع.
- نقّح الأنماط المضادة وأمثلة تدرّج الجدّية والاستشهادات كلّما تعمّق الفهم.
- دوّن مبرّر أيّ تغيير بنيوي في ملف موضوع الذاكرة ذي الصلة.
الأوامر
- شكل الوسائط جزء من العقد العام — لا تكسره إلا بنيّة صريحة، وانشر التغيير إلى كل مستدعٍ (رفع MAJOR).
- أبقِ خطوات سير العمل وعقود الإرجاع مُحكمة وحديثة.
- وثّق تسلسل الخطوات غير البديهي في موضعه.
المساعِدات
- أبقِ
disallowedToolsفي حدّه الأدنى الكافي؛ ووثّق المبرّر عندما يتغيّر. - نقّح مبادئ التشغيل وعقود الإرجاع كلّما نضج دور المساعِد (رفع MINOR).
- تتبّع تحوّلات القدرات في موضعها كي يتمكّن المستدعون من إعادة ضبط توقّعاتهم.
المهارات
- أبقِ خطوات الإجراء والأمثلة متزامنة مع الواقع.
- يجب أن تعكس إشارات الكشف صياغة المستخدمين الفعلية في الاستخدام الحالي.
- قسّم المهارة متى تجاوزت ~150 سطرًا (راجع
auto-memory.md§ Topic File Management).
خطوة بخطوة: إضافة قاعدة جديدة
1. قيّم التعامد
هل تتداخل هذه القاعدة مع قواعد قائمة؟ ابحث في src/apothem/rules/ عن محتوى ذي صلة.
إذا تجاوز التداخل 50%، ففكّر في توسيع قاعدة قائمة بدلًا من ذلك. راجع
persistent-conventions-vigilance.md § Artifact Evolution.
2. اكتب المحتوى
اتّبع البنية التالية:
- العنوان:
# Rule: {Title} - قسم الغرض
- الالتزامات / التوجيهات الأساسية (مرقّمة ومزوّدة بروابط)
- جدول تدرّج الجدّية (مطلوب دائمًا)
- قسم الأنماط المضادة
- قسم الإنفاذ
3. أنشئ البيانات الأمامية
استخدم المخطط من site/content/docs/reference/artifact-schema.mdx § Schema: Rules. واضبط:
name:مُعرِّفًا بصيغة kebab-casedescription:ملخّصًا من سطر واحد للسجلّاتpathFilter:قائمة glob للقواعد المُرشَّحة بالمسار؛ والسلسلة الفارغة ("") للقواعد الفعّالة دائمًاalwaysApply:trueللقواعد الفعّالة دائمًا، وfalseللقواعد المُرشَّحة بالمسار
لا تحمل القواعد إلا هذه الحقول الأربعة — بلا version / updated / scope / portability / implements.
القاعدة الجديدة مُرشَّحة بالمسار. وتحتاج القاعدة الجديدة الفعّالة دائمًا إلى رفع القائمة
الأساسية وسقوف البايتات في التغيير نفسه: القائمة في
tests/unit/test_always_on_core.py والسقوف في
conformity/always_on_budget_grep.py. وتأخذ القاعدة المرافقة
(<parent>-<aspect>) قيمة pathFilter الخاصة بقاعدتها الأم، أو قيمة أضيق منها.
مثال:
---
name: "my-new-rule"
description: "Brief one-liner"
pathFilter: "**/*.py"
alwaysApply: false
---4. حدّث ملف README الخاص بالقواعد
أضف صفًّا إلى جدول عائلة القاعدة في قسم «Rule families» من
src/apothem/rules/README.md:
| `my-new-rule.md` | One-line concern of the new rule. |اختر جدول العائلة الذي يتّفق مجال اهتمامه مع القاعدة. وسمِّ القاعدة أيضًا في
سطر src/apothem/rules/apothem-rule-index.md الخاص بالموقف الذي
يستدعيها؛ إذ يفشل tests/unit/test_always_on_core.py عندما تغيب قاعدة
عن الفهرس.
5. ألحِق بملف CHANGELOG.md
أضف صفًّا تحت قسم ### Added الخاص بالإصدار التالي يصف القاعدة الجديدة.
6. شغّل التحقّق
استدعِ مهارة ecosystem-audit للتحقّق من القاعدة الجديدة، مع التركيز على منطقة القواعد:
Invoke the ecosystem-audit skill with --focus rules --fixتحقّق من عدم الإبلاغ عن أيّ أخطاء في قاعدتك الجديدة.
خطوة بخطوة: إضافة أمر جديد
الأوامر هي أوامر بشرطة مائلة مثل /plan-spec و/plan-execute و/security-audit وغيرها.
1. حدّد الدور
الأوامر سيرورات عمل يُطلقها المستخدم. ولا يشغّل النموذج أمرًا منها من تلقاء نفسه إلا
عندما يكون إعداد disable-model-invocation الخاص به false
(الخطوة 2). اسأل:
- هل هذا سير عمل يكتب فيه المستخدم
/command-name؟ - هل يُنسِّق خطوات متعدّدة؟
- هل يمكن أن تنتهي مهلته أو أن يتطلّب إدخالًا من المستخدم في منتصف التنفيذ؟
إذا كانت الإجابة «لا» عن أيٍّ من هذه الأسئلة، فهو على الأرجح مهارة لا أمر.
2. أنشئ الملف
المسار: src/apothem/commands/{name}.md
البيانات الأمامية (من site/content/docs/reference/artifact-schema.mdx § Schema: Commands):
---
name: "my-command"
version: "X.Y.Z"
updated: "2026-04-20"
description: "What this command does"
argument-hint: "[path/to/input] [--flag VALUE]"
disable-model-invocation: false
portability: "universal"
allowed-tools: "Read, Glob, Grep"
---يجعل disable-model-invocation: true الأمرَ لا يُستدعى إلا من المُشغِّل؛
ومع false يجوز للنموذج تشغيله عندما يطابق طلبٌ وصفَه. والقيمة
الافتراضية false للأوامر التي للقراءة فقط وللأوامر الاستشارية، مع وصف يبدأ
بحالة الاستخدام؛ ويستخدمها 35 أمرًا من أصل 45. ويبقى الأمر true عندما
يُغيّر الحالة خارج شجرة العمل أو يعتمد على اختيار المُشغِّل للّحظة المناسبة (10 أوامر).
ويسرد جدول الاستدعاء في src/apothem/commands/README.md إعداد كل
أمر؛ أضف صفًّا للأمر الجديد. وأبقِ
allowed-tools للقراءة فقط: فإطار العمل الذي يلتزم به يُشغِّل تلك الأدوات دون
أن يسأل. لا تمنح أداةً ذات آثار جانبية إلا بوصفها قاعدة محدودة النطاق، مثل
Bash(git log *)؛ إذ يرفض المخطط "*" وأيًّا من Bash أو PowerShell
أو Write أو Edit أو NotebookEdit أو WebFetch إذا كُتب دون نطاق.
3. اكتب المحتوى
البنية:
- العنوان:
# /{name} — Human-Readable Title - قسم الدور (مَن يُنفِّذ هذا)
- تعليمات عالية المستوى
- قسم سير العمل مع الخطوات
- عقد الإرجاع / صيغة المُخرَج
يُقسِّم إصدار المهارات لدى أحد أُطر العمل كل أمر إلى ملف SKILL.md مختصر وملفات
references/ بحسب أقسام H2. امنح الأمر قسم ## Workflow واحدًا،
وأغلِق كل سياج شيفرة، وصنِّف أي نوع جديد من أقسام H2 في
src/apothem/lib/claude_skill_split.py؛ إذ يفشل tests/unit/test_claude_skill_split.py
عند وجود نوع غير مُصنَّف. والقواعد موجودة في عقد تقسيم إصدار المهارات
(Skill-emission split contract) ضمن src/apothem/commands/README.md.
4. حدّث ملف README وملف CHANGELOG.md
أضف صفًّا إلى جدول قسم الأمر في src/apothem/commands/README.md، إضافةً إلى صفّ جدول الاستدعاء من الخطوة 2؛ وأضف صفًّا في CHANGELOG تحت قسم ### Added الخاص بالإصدار التالي.
5. تحقّق
استدعِ مهارة ecosystem-audit، مع التركيز على الأوامر:
Invoke the ecosystem-audit skill with --focus commands --fixخطوة بخطوة: إضافة مساعِد جديد
المساعِدات تعريفات دائمة لعمّال مُفوَّضين للعمل المتوازي.
1. حدّد النمط
هل يندرج هذا المساعِد ضمن أحد أنماط الفرق المُدرَجة أدناه؟
- فريق البحث: للقراءة فقط، وجمع المعلومات
- فريق التدقيق: التحقّق، وفحوص الاتساق
- فريق التنفيذ: تغييرات متوازية في الشيفرة
- فريق الجودة: الفحص الساكن، والاختبار، وفحص الأنواع، والأمان
- فريق التوثيق: تحديثات الوثائق
- أخرى: مهمة متخصّصة
2. أنشئ الملف
المسار:
src/apothem/agents/{name}.mdالبيانات الأمامية:
---
name: "my-helper"
version: "X.Y.Z"
updated: "2026-04-20"
description: "What this helper specializes in"
tools: "Read, Glob, Grep, Bash"
disallowedTools: "Write, Edit"
maxTurns: 15
portability: "universal"
---أغفِل model وeffort وpermissionMode كي يرث المساعِد
اختيارات الجلسة (الوضعية المحايدة)، وأغفِل memory ما لم يحتج
المساعِد إلى نطاق ذاكرة دائمة (user أو project أو local).
3. اكتب المحتوى
الأقسام:
- مبادئ التشغيل (للقراءة فقط، قائمة على الأدلّة، أحكام ثنائية، شاملة)
- سير العمل (خطوات مرقّمة)
- عقد الإرجاع (الحدّ الأقصى للرموز، والبنية، والحقول المطلوبة)
4. حدّث ملف README وملف CHANGELOG.md
أضف صفًّا إلى جدول الفهرس في src/apothem/agents/README.md؛ وأضف صفًّا في CHANGELOG تحت قسم ### Added الخاص بالإصدار التالي.
5. اختبر
انشر المساعِد في سيناريو حقيقي وتحقّق من أنه يعمل كما هو موثَّق.
خطوة بخطوة: إضافة مهارة جديدة
المهارات تقنيات قابلة لإعادة الاستخدام والكشف.
1. حدّد قابلية إعادة الاستخدام
قبل كتابة مهارة:
- هل صادفت هذه المشكلة/التقنية 3 مرات فأكثر؟
- هل يمكن كشفها؟ (هل يشير إليها نمطٌ في طلبات المستخدم؟)
- هل يمكنك تدوينها بطريقة قابلة لإعادة الإنتاج؟
إذا كانت الإجابة نعم عن الثلاثة جميعًا، فاكتب مهارة.
2. أنشئ البنية
%%{ init: { "theme": "neutral" } }%%
%% verified: 2026-04-27 %%
%% provenance: site/content/docs/reference/artifact-schema.mdx (skill artifact schema) %%
%% cross-reference: src/apothem/skills/plan-suite/SKILL.md (canonical example) %%
flowchart TD
accTitle: New skill directory structure
accDescr: Top-down flowchart of the directory structure for a new skill under src/apothem/skills: a {skill-name} folder holding the required SKILL.md plus optional examples and templates subfolders.
SKILLS["src/apothem/skills/"]
SKILLS --> NAME["{skill-name}/"]
NAME --> SKILLMD["SKILL.md<br/>(main definition · required)"]
NAME --> EX["examples/<br/>(optional · example workflows)"]
NAME --> TPL["templates/<br/>(optional · reusable templates)"]3. اكتب SKILL.md
البيانات الأمامية:
---
name: "skill-name"
version: "X.Y.Z"
updated: "2026-04-20"
description: "What this skill teaches"
archetype: "workflow-template"
userInvocable: true | false
disable-model-invocation: true | false
allowed-tools: "Read, Glob, Grep"
argument-hint: "[args]" # optional; if userInvocable
---بنية المحتوى:
- الغرض
- متى تُستخدم هذه المهارة
- المتطلّبات المسبقة
- الإجراء خطوة بخطوة
- الأخطاء الشائعة
- الأمثلة
4. حدّث ملف README وملف CHANGELOG.md
أضف صفًّا إلى جدول الفهرس، وصفًّا لكل ملف من ملفات المهارة إلى جدول محتويات المجلّد، في src/apothem/skills/README.md؛ وأضف صفًّا في CHANGELOG تحت قسم ### Added الخاص بالإصدار التالي.
5. تحقّق
استدعِ مهارة ecosystem-audit، مع التركيز على المهارات:
Invoke the ecosystem-audit skill with --focus skills --fixقائمة فحوص التحقّق قبل إنشاء الكوميت
- تجتاز البيانات الأمامية فحص صيغة YAML
- جميع الحقول الإلزامية موجودة وفق المخطط
- يستخدم الحقل
nameصيغة kebab-case -
version(للأصناف ذات النسخ فقط؛ فالقواعد لا تحمل نسخة) دلالي (MAJOR.MINOR.PATCH) ورُفِع إن تغيّر السلوك -
updatedيطابق تاريخ اليوم لأيّ مُنتَج عدّلته يحمل هذا الحقل - الحقل
portabilityمضبوط وصالح (إلزامي في الأوامر، واختياري في المساعِدات) - يحمل CHANGELOG.md التغيير في الفئة المناسبة تحت قسم الإصدار التالي
- لا إحالات داخلية خاصة بالخطط (امتثالًا لـ CM-7)
- الإحالات المتبادلة متّسقة مع المُنتَجات الأخرى
- المُنتَج الجديد مُسجَّل في فهرس README الخاص بمجلّده
- المُنتَج مُختبَر (إن انطبق ذلك)
- تعمل مهارة
ecosystem-auditدون أخطاء - يتّبع المحتوى الاصطلاحات البنيوية (صيغة العنوان، والأقسام، وما إلى ذلك)
الإحالة إلى مُنتَجات أخرى
استخدم هذه الاصطلاحات بدقّة:
الإحالة إلى قاعدة
See `src/apothem/rules/operational-mandates.md` or shorthand: the Operational Mandates rule.
In prose: ... per CM-1–10 (Operational Mandates rule) ...الإحالة إلى أمر
See `/plan-execute` command. Or: Run `/plan-execute`.
In prose: The `/plan-execute` command handles phase execution.الإحالة إلى مساعِد
Deploy the `codebase-explorer` delegated worker.
In prose: The codebase-explorer worker finds patterns.الإحالة إلى مهارة
Use the `plan-suite` skill.
In prose: The plan-suite skill provides the Master Plan Suite template.الإحالة إلى أقسام CLAUDE.md
See CLAUDE.md § Harness Adapter Pattern.
Or: § Plans Discipline.الفحص الساكن والتنسيق
تستخدم جميع المُنتَجات:
- Markdown: GFM (GitHub Flavored Markdown)
- YAML: متوافق مع YAML 1.2
- نهايات الأسطر: LF (نمط Unix)
- الترميز: UTF-8
- عرض السطر: التفاف مرن عند 100 حرف للمحتوى (دون فواصل أسطر ثابتة)
استخدم المُنسِّق / المدقّق Ruff لملفات Python. ولملفات Markdown، استخدم
prettier أو ما يعادله.
الاختبار والقياس
تشغيل مجموعة الاختبارات
python -m pytest # unit, integration, property, conformity, scripts
python -m pytest tests/property # Hypothesis properties (profile loader, frontmatter, merge)مجموعة الاختبارات محكمة العزل: تنجح والنسخة المسحوبة تحت $TMPDIR، ومع
python على PATH يفتقر إلى المتطلّبات المسبقة لواجهة سطر الأوامر، لأن
اختبارات التكامل تُشغِّل المُفسِّر نفسه الذي يُشغِّل pytest، وتستبدل برموزٍ مساراتِ
المجلّدات المؤقّتة والمصدر المتداخلة بدءًا بالأطول.
التغطية لكل حزمة
يقيس CI ثلاث حزم ويُلزِم كلًّا منها بحدّها الأدنى الخاص. ولا تُدمَج أيٌّ منها في أخرى.
| الحزمة | المسارات | الحدّ الأدنى | موضع الحدّ الأدنى |
|---|---|---|---|
| engine | cli، harnesses، lib، hooks، statuslines | 80 | [tool.coverage.report] fail_under |
| conformity | src/apothem/conformity | 81 | [tool.coverage.package-floors] |
| audit | src/apothem/audit | 70 | [tool.coverage.package-floors] |
الرقم هو تغطية الأسطر مع الفروع، وهو النسبة المئوية نفسها التي يُبلغ عنها coverage.py
مع branch = true؛ ويسجّل مُنتَج المقاييس أيضًا رقم التغطية المقتصر على
العبارات تحت coverage_lines. والحدّ الأدنى لكل حزمة هو القيمة المقيسة لتغطية
الأسطر مع الفروع مُقرَّبةً إلى الأدنى. ارفع الحدّ الأدنى عندما ترتفع التغطية؛ ولا
تخفضه أبدًا لتمرير تغيير. للتحقّق محليًا:
python -m pytest --cov=src/apothem --cov-report=json:coverage.json
python scripts/dev/collect_metrics.py --coverage-json coverage.json --check-floors \
--skip-hooks --skip-coldstart --harness zedمُنتَج المقاييس
تُشغِّل مهمة metrics في CI النص البرمجي scripts/dev/collect_metrics.py عند كل دفع
وكل طلب سحب، وترفع metrics.json (schema_version: 1). وكل قيمة
تساوي null تحمل سببها تحت nulls.
| المفتاح | ما يقيسه |
|---|---|
coverage.engine، coverage.conformity، coverage.audit | النسبة المئوية لتغطية الأسطر مع الفروع لكل حزمة، مع coverage_floors. |
always_on_bytes[harness]، always_on_files[harness] | لكلٍّ من أُطُر العمل الـ 17، بعد profile init وinstall --harness <id> في HOME ومشروع مؤقّتين: حجم ملفات التعليمات التي يُحمِّلها إطار العمل كاملةً عند الإقلاع، بالبايت على القرص. |
cli_coldstart_ms | الوسيط لزمن python -m apothem --version (مع --help تحت cli_coldstart_detail_ms). |
hook_e2e_ms[event]، hook_injected_chars[event] | لكل حدث ومُطابِق مُسجَّلَين (PreToolUse:Write، Stop، …): الزمن الإجمالي الوسيط لسلسلة الخطّافات على حمولة حقيقية، وعدد أحرف السياق التي تحقنها. |
تحديد الملفات التي تُعدّ مُحمَّلةً عند الإقلاع قاعدةٌ خاصة بكل إطار عمل، مأخوذة من
أسطح التعليمات الموثَّقة لدى كل مورّد. ولا تُحتسَب القوائم التي لا تحمل سوى وصف
(المهارات، والأوامر، والعوامل الفرعية). ويُكتَب نصّ القاعدة أيضًا في المُنتَج تحت
rules.always_on_bytes:
antigravity ~/.gemini/{GEMINI,AGENTS}.md, ~/.gemini/config/{GEMINI,AGENTS}.md,
~/.gemini/config/rules/*.md with trigger: always_on, project
GEMINI.md and AGENTS.md. The plugin rules/ folder is not a
documented launch surface.
claude-code ~/.claude/CLAUDE.md and ~/.claude/rules/**/*.md without paths:
frontmatter, plus the project equivalents.
codebuddy .codebuddy/rules/**/*.md (project and home) unless
alwaysApply: false, plus CODEBUDDY.md.
codex ~/.codex/AGENTS.md and the project AGENTS.md.
cursor .cursor/rules/**/*.mdc with alwaysApply: true, and AGENTS.md.
gemini-cli ~/.gemini/GEMINI.md and the project GEMINI.md.
github-copilot .github/copilot-instructions.md and the project AGENTS.md.
hermes ~/.hermes/SOUL.md, project .hermes.md, AGENTS.md, CLAUDE.md.
The support tree and apothem/rules/ are not launch surfaces.
kimi-code ~/.kimi-code/AGENTS.md, project AGENTS.md and .kimi-code/AGENTS.md.
kiro .kiro/steering/**/*.md with inclusion: always or no inclusion
key, and the project AGENTS.md.
open-claw Workspace bootstrap files ~/.openclaw/workspace/*.md.
opencode ~/.config/opencode/AGENTS.md, the project AGENTS.md, and every
file the instructions globs in opencode.json match.
qwen-code The context files named by context.fileName in
~/.qwen/settings.json (default QWEN.md), in ~/.qwen/ and the project.
trae .trae/rules/**/*.md with alwaysApply: true, and
~/.trae/user_rules/*.md.
windsurf .devin/rules/**/*.md and .windsurf/rules/**/*.md with
trigger: always_on, the global global_rules.md, and AGENTS.md.
zed The first of .rules, .cursorrules, .windsurfrules, .clinerules,
.github/copilot-instructions.md, AGENT.md, AGENTS.md, CLAUDE.md,
GEMINI.md in the project, plus ~/.config/zed/AGENTS.md.
glm Nothing: GLM is a model backend and loads no instruction files.التقييمات السلوكية
تقيس المجموعة الموجودة تحت evals/ السلوكَ لا الشكل: 148 حالة إطلاق
(كل أمر وكل مهارة وكل عامل فرعي يمكن للنموذج استدعاؤه ينطلق عند طلب يقع في مجاله، ويبقى صامتًا
عند طلب قريب منه لا يخصّه، وستة أوامر لا يستدعيها إلا المستخدم لا تبدأ من تلقاء نفسها)، و32 حالة نتيجة (حالة واحدة لكل مرحلة تخطيط، ومرحلة بحث،
وبُعد تدقيق)، و6 أزواج لأثر القواعد (نصّ قاعدة من عيّنة مختارة مُفعَّلًا ومُعطَّلًا).
الحالات بيانات بسيطة يُتحقَّق منها مجانًا عبر
python -m pytest tests/unit/test_eval_suite.py؛ أمّا تشغيلها فمدفوع
التكلفة ويدوي. راجع تشغيل التقييمات السلوكية للاطّلاع على سير عمل
Evals، والتشغيل المحلي، وكيفية إضافة حالة. وبعد تعديل قاعدة
لها زوج، شغِّل python scripts/dev/sync_eval_rule_cases.py.
اختبارات الأداء المرجعية
يُشغِّل make benchmarks برامج التشغيل الخاصة بكل صنف تحت src/apothem/benchmarks/،
باستثناء bench_agents.py. ويخرج كلٌّ من برامج التشغيل بالرمز 0 عند النجاح،
أو 1 عند تجاوز الميزانية، أو 2 عند الخطأ (لم يُنفَّذ التشغيل المقيس)،
أو 3 عند عدم القياس.
- يُشغِّل
bench_hooks.pyكل أمرshell: bashيسجّلهhooks/hooks.json، كما هو مكتوب، على حمولة حقيقية لكل حدث ومُطابِق، ويُبلغ عن الزمن الإجمالي الوسيط، وأبطأ أمر (مُقارَنًا بميزانية الحدث)، وعدد الأحرف المحقونة. والأمر الذي لا يمكن تشغيله كما سُجِّل (رمز الخروج 126 عندما يفتقر نص برمجي إلى بتّ التنفيذ) يُعدّ خطأً، لا نجاحًا. - يُبلغ
bench_agents.pyعنNOT MEASURED(رمز الخروج 3): فإطلاق عامل فرعي يحتاج إلى إطار عمل مضيف واستدعاء للنموذج. ولا يُشغِّلهmake benchmarks.
يَعُدّ فحص ميزانية القواعد الفعّالة دائمًا (always-on-budget-grep) الكلماتِ
المفصولة بمسافات بيضاء، مع استبعاد قسم Bindings وأسطر الإشارة المرافقة. ويحمل
تقريره بصيغة JSON أيضًا always-on-loaded: البايتات والأحرف والكلمات
في المتون المجرّدة من البيانات الأمامية التي يُحمِّلها إطار العمل، مجموعةً على
القواعد الفعّالة دائمًا. وعند توجيه الفحص إلى مجلد القواعد المشحونة، يفشل أيضًا عندما
يتجاوز ذلك المجموع سقفًا للبايتات (يُبلَّغ عنه بوصفه always-on-ceiling-bytes) أو
يتجاوز فهرس القواعد سقفه الخاص. ويُحمِّل Claude Code نسخه من القواعد دون قسم
Bindings، لذا يكون حجمها المُحمَّل أصغر من الرقم الذي يُبلغ عنه هذا الفحص.
تدقيق المنظومة: تشغيل التحقّق
يغطّي المنظومةَ سطحا تحقّق متكاملان:
قابل للفحص آليًا (مدقّقات Python) — شغِّلها قبل كل كوميت:
python scripts/dev/validate_hooks.py # Hook structure + Python-only hygiene
python scripts/dev/validate_ecosystem.py # Full tree + frontmatter + delegated hook checks
python scripts/dev/chaos_pass.py # Adversarial sweep across configured hooks
pytest tests # Unit tests for the hook runtimeيقوده المساعد البرمجي — لتدقيقات الإحالات المتبادلة والسرد والاصطلاحات:
/ecosystem-audit --focus all --fixيُشغِّل هذا بالتوازي:
- تدقيق البنية: دقّة السجلّ، ووجود الملفات، وصلاحية البيانات الأمامية
- تدقيق المُنتَجات: الإحالات المتبادلة، وتغطية التفويضات، وترتيب خطّ الأنابيب
- تدقيق الذاكرة: ادّعاءات ملفات الذاكرة مقابل حالة نظام الملفات
المُخرَج المتوقّع: PASS مع صفر نتائج من كلا السطحين.
إذا أُبلِغ عن FINDINGS:
- راجع شدّة كل نتيجة (حرجة / مهمّة / استشارية)
- عالِج البنود الحرجة فورًا
- خطِّط للبنود المهمّة في الدورة التالية
- انظر في البنود الاستشارية في التكرار التالي
أسئلة؟
ارجع إلى:
- مخطط البيانات الأمامية:
site/content/docs/reference/artifact-schema.mdx - دورة حياة المُنتَج:
src/apothem/rules/persistent-conventions-vigilance.md§ Artifact Evolution - التفويضات التشغيلية:
src/apothem/rules/operational-mandates.mdCM-1–10 - مرجع حزمة الخطة:
src/apothem/skills/plan-suite/master-template.md - ملاحظات الإصدار:
CHANGELOG.md