ورقة مرجعية لهارنس الوكيل: المكوّنات والملفات والمشكلات الشائعة وقائمة التشغيل
يتكون هارنس الوكيل من خمسة أنظمة فرعية: التعليمات والأدوات والبيئة والحالة والتغذية الراجعة. وأدنى مجموعة من الملفات تشمل AGENTS.md كموجّه قصير، وسكربت التحقق (make check وverify.sh)، وملف التقدم، وقائمة ميزات بحالات. وحالة «الاكتمال» يضعها السكربت، لا الوكيل.
الأنظمة الفرعية الخمسة للهارنس
| النظام الفرعي | المعنى | المخرجات | علامة التعطل |
|---|---|---|---|
| التعليمات | ما ينبغي للوكيل معرفته عن المشروع | AGENTS.md / CLAUDE.md، وskills، وdocs/، وADR | يخرق أعرافًا معروفة |
| الأدوات | ما يستطيع الوكيل فعله | shell، والاختبارات، والمدقق، والمتصفح، وخوادم MCP | «يريد لكنه لا يستطيع» |
| البيئة | أين يعمل الوكيل | ملفات القفل، وDocker/devcontainer، وgit worktree، وصندوق الرمل، وinit.sh | كل جلسة تبدأ بإصلاح البيئة |
| الحالة | ما يبقى بعد إعادة التشغيل | PROGRESS.md، وDECISIONS.md، وfeature_list.json، وcommits | الجلسة الجديدة لا تعرف أين توقف العمل |
| التغذية الراجعة | كيف يعلم الوكيل أنه أخطأ | make check، وE2E، والخطافات، وفحص المعمارية، والمُقيِّم | «اكتمل» والميزة لا تعمل |
ترتيب البناء من الصفر: التغذية الراجعة ← التعليمات ← الحالة ← البيئة ← الأدوات.
ملفات الهارنس
| الملف | الغرض | القاعدة |
|---|---|---|
| AGENTS.md / CLAUDE.md | نقطة الدخول: ما هو المشروع، وكيف يُشغَّل، وكيف يُتحقَّق منه | موجّه قصير (نحو 80 سطرًا)، مع روابط للوثائق مشروطة بـ«متى تُقرأ» |
| docs/*.md | تفاصيل كل موضوع | تُقرأ عند الحاجة، لا تُحمَّل كلها |
| .claude/skills/*/SKILL.md | إجراءات متكررة (النشر، والمراجعة) | تُحمَّل عندما تتطابق المهمة مع الوصف |
| PROGRESS.md | الحالة، والمنجَز، والعوائق، والخطوة التالية | يُحدَّث في نهاية كل جلسة |
| DECISIONS.md | القرار، والسبب، والخيارات المرفوضة | يُسجَّل المسار، لا النتيجة فقط |
| feature_list.json | الميزات: behavior، وverification، وstate | ميزة واحدة فقط active (WIP=1) |
| scripts/verify.sh | يتحقق من الميزة ويضعها passing | الوحيد الذي يضع passing، مع SHA للـ commit |
| scripts/arch-check.sh | يفحص حدود المعمارية | رمز خروج 1، مع WHY وFIX في المخرجات |
| scripts/init.sh | يفحص البيئة قبل العمل | البيئة سليمة، وشجرة git نظيفة، وmake check أخضر، وتوجد ميزة نشطة |
| sprint contract | اتفاق على الميزة قبل كتابة الشيفرة | ضمن النطاق / خارج النطاق / أسئلة مفتوحة |
| .claude/settings.json | صلاحيات Claude Code وخطافاته | فحوص عند الأحداث، لا تعتمد على ذاكرة الوكيل |
هيكل AGENTS.md
# المشروع: الواجهة الخلفية للدفع (FastAPI، PostgreSQL)
## التشغيل
docker compose up -d && ./scripts/init.sh
## التحقق
make check # المدقق، والأنواع، واختبارات الوحدة، وarch-check
make e2e # سيناريوهات من طرف إلى طرف
## تعريف الإنجاز
- ينتهي make check وmake e2e برمز 0
- تُوضع الميزة passing عبر السكربت scripts/verify.sh
- يكون PROGRESS.md محدَّثًا
## MUST
- الوصول إلى قاعدة البيانات عبر المستودعات فقط
- الأسرار تُقرأ من متغيرات البيئة فقط
## الوثائق
- docs/payments.md — عندما تتعلق المهمة بالدفع والاسترداد
- docs/migrations.md — عندما يتغير مخطط قاعدة البيانات
حالات الميزة
| الحالة | المعنى | من يغيّرها |
|---|---|---|
| pending | في الانتظار | المخطِّط |
| active | قيد العمل (واحدة فقط في كل مرة) | الوكيل عند بدء العمل |
| passing | اجتازت التحقق | verify.sh وحده |
| blocked | تحتاج قرارًا بشريًا، مع ذكر السبب | الوكيل |
مستويات التحقق
| المستوى | المحتوى | متى |
|---|---|---|
| 1 | المدقق، والأنواع | دائمًا |
| 2 | اختبارات الوحدة والتكامل | دائمًا |
| 3 | اختبارات E2E | عند تغيير يمس أكثر من طبقة؛ وقبل كلمة «اكتمل» |
| 4 | arch-check | عند ظهور استيراد جديد عبر الطبقات |
لا يحق إعلان «اكتمل» إلا بعد اجتياز أعلى مستوى. الاختبارات الوحدوية الخضراء ليست اكتمالًا.
تحويل القواعد إلى آليات
| المستوى | الأداة | التكلفة |
|---|---|---|
| حارس grep | سكربت يبحث عن نمط ويطبع WHY/FIX | دقائق |
| قاعدة مدقق | import-linter (Python)، وdependency-cruiser، وeslint-plugin-boundaries (JS/TS) | نحو ساعة |
| اختبار معماري | اختبار في CI يفشل عند كسر الطبقات | أكثر، لكنه مرئي في make check |
#!/usr/bin/env bash
fail=0
if grep -rn "from app.db" app/services/; then
echo "WHY: طبقة الخدمات لا تصل إلى قاعدة البيانات مباشرة"
echo "FIX: استخدم المستودع من app/repositories/"
fail=1
fi
exit $fail
المشكلات الشائعة وحلولها
| المشكلة | النظام الفرعي | الحل |
|---|---|---|
| القاعدة في CLAUDE.md لا تُحترم | التعليمات | اختصار الملف، وتحويل القاعدة إلى فحص أو خطاف |
| الوكيل لا يستطيع تشغيل الاختبارات | الأدوات | السماح بالأمر، وتثبيت التبعيات في الصورة |
| سلوك مختلف بين الأجهزة | البيئة | ملفات القفل، وDocker/devcontainer، وتثبيت إصدار بيئة التشغيل |
| فقدان الذاكرة بين الجلسات | الحالة | PROGRESS.md، وملاحظة تسليم الجلسة، والقراءة عند البداية |
| بدأت ثلاث ميزات ولم تكتمل أي منها | الحالة | WIP=1 في feature_list.json |
| «اكتمل» والميزة لا تعمل | التغذية الراجعة | تعريف الإنجاز، وE2E، وverify.sh، ومُقيِّم مستقل |
| الاختبارات الوحدوية خضراء والميزة معطلة | التغذية الراجعة | E2E بقاعدة بيانات وإعدادات حقيقية |
| يكرر الوكيل أنماطًا سيئة | التغذية الراجعة | arch-check من اليوم الأول |
| لا يُعرف ما الذي فعله الوكيل | الحالة | commits صغيرة، وتقرير في PROGRESS.md، وتسجيل في DECISIONS.md |
| الوكيل كسر البيئة بين ليلة وضحاها | البيئة | صندوق رمل، وgit worktree، ونقاط حفظ، والتراجع عبر init.sh |
| التعليق نفسه في المراجعة ظهر مرتين | الهارنس كله | تحويله إلى فحص في make check، وحذفه من التعليمات |
الأدوار في المهام الطويلة
| الدور | يتولى | لا يتولى |
|---|---|---|
| المخطِّط | ميزات مع معايير قبول | لا يكتب شيفرة |
| المولِّد | ينفّذ ميزة واحدة ويشغّل الاختبارات | لا يقرر الإنجاز |
| المُقيِّم | حكم وفق المعايير، مع الاستشهاد بملف أو سطر أو سجل | لا يرى استدلال المولِّد |
| الدمج | يُنفَّذ عندما تكون المراجعة pass | هذه شيفرة، لا وكيل |
ميزانية العمل المستقل
- هدف يُكتب في جملة واحدة (مثلًا: جعل كل الميزات passing).
- WIP=1، وحدود زمن ومحاولات لكل ميزة.
- المؤشر يتزايد باطراد، وأي تراجع يعني تراجعًا فوريًا.
- الترحيلات والبنية التحتية والأموال تُحال إلى إنسان.
- بعد عدة إخفاقات في المراجعة، تبدأ الميزة من جديد بسياق نظيف.
قائمة تشغيل الوكيل
- يوجد AGENTS.md: التقنيات، وطريقة التشغيل، وأوامر التحقق، وتعريف الإنجاز.
- ينجح make check على نسخة نظيفة من المستودع.
- البيئة قابلة للتكرار: ملفات قفل، وDocker أو devcontainer.
- للوكيل الصلاحيات للأوامر اللازمة، والأوامر الخطرة ممنوعة أو داخل صندوق رمل.
- يوجد اختبار E2E واحد على الأقل للسيناريو الرئيسي.
- يوجد PROGRESS.md، والقاعدة تقضي بقراءته عند بداية الجلسة.
- قائمة الميزات فيها حالات، والنشطة واحدة فقط.
- حالة passing يضعها السكربت.
- رسائل الفحوص تتضمن WHY وFIX.
- للمهمة معايير قبول، وحدود نطاق واضحة.
- معروف ما الذي يحتاج قرارًا بشريًا.
- قبل التغييرات، حُسبت فجوة التحقق لتكون مرجعًا للمقارنة لاحقًا.
مقاييس الهارنس
| المقياس | طريقة الحساب |
|---|---|
| Verification gap | نسبة المهام من 10 التي أُعلن فيها «اكتمل» دون تأكيد التحقق |
| MTTR | الزمن من وقوع العطل حتى استعادة حالة صالحة للعمل |
| البدء البارد | هل تجيب جلسة جديدة عن «أين نحن، وما التالي؟» دون تخمين |
| الاستئصال (ablation) | الانخفاض عند إزالة نظام فرعي واحد على مجموعة مهام ثابتة |
الخلاصة
الهارنس دورة مغلقة وليس ملفًا واحدًا: تعليمات، وأدوات، وبيئة، وحالة، وتغذية راجعة. ابدأ بالتحقق، واجعل AGENTS.md قصيرًا، واترك حكم الإنجاز للسكربت، وراجع الهارنس بانتظام. وكل ذلك يتجمع في دورة هندسة الهارنس ضمن هارنس متكامل على مشروع حقيقي.
الأسئلة الشائعة
ما الفرق بين AGENTS.md وCLAUDE.md؟
الغرض واحد، وكلاهما ملف تعليمات للوكيل. يقرأ Claude Code ملف CLAUDE.md، أما AGENTS.md فصيغة مشتركة بين وكلاء متعددين، ويمكن الإشارة إليه من CLAUDE.md.
كم يجب أن يكون طول AGENTS.md؟
لا يوجد حد صارم، لكن ملف الدخول ينبغي أن يبقى قصيرًا، نحو مئة سطر، كفهرس. والتفاصيل تُنقل إلى وثائق منفصلة.
هل يحتاج مشروع صغير إلى feature_list.json؟
لا يحتاجه في التعديلات المنفردة الصغيرة. تظهر فائدته عندما يعمل الوكيل على ميزات متعددة متتالية أو عبر عدة جلسات.
أين أحفظ الأسرار التي يحتاجها الوكيل؟
في متغيرات البيئة أو مدير الأسرار، لا في ملفات التعليمات ولا في الشيفرة. تمنح الوكيل وصولًا إلى البيئة، لا القيم المكتوبة في النص.
يُشرح هذا الموضوع بالتفصيل مع التطبيق العملي في دورة «Harness Engineering: инженерия надёжности AI-агентов».
- Из чего состоит harness AI-агента: инструкции, инструменты, среда, состояние, обратная связь
- Харнес AI-агента с нуля: AGENTS.md, feature_list.json, verify.sh и автономный цикл