تنسيق متعدد الوكلاء

شغّل وكلاء متعددين، ودع controller يقرر الترتيب.

بعض الأعمال لا يمكن كتابة ترتيبها مسبقًا. اضبط type: controller، وأعلن ما يجب أن يكون صحيحًا عند انتهاء التشغيل، فيدع Dagu النموذج يختار خطوة الوكيل التالية كلما وردت الملاحظات. يبقى كل إجراء خطوة مسار عادية، مع السجلات وإعادة المحاولة والموافقات وسجل التدقيق.

مراجعان ومصحّح واحد، دون أي depends
# code-review.yaml
type: controller

llm:
  provider: anthropic
  model: claude-opus-5
  system: |
    Get top_n.py past both reviews. When a review fails, pass its finding
    to revise, then ask that same reviewer again. A revision made for one
    reviewer can break the other.

steps:
  - name: review_simplicity
    description: Judge simplicity. Prints PASS, or FAIL with what to change.
    action: harness.run
    with:
      provider: opencode
      prompt: Read top_n.py. Print "PASS" or "FAIL: <what to change>".

  - name: review_correctness
    description: Judge correctness. Prints PASS, or FAIL with the bug.
    action: harness.run
    with:
      provider: codex
      prompt: Read top_n.py. Print "PASS" or "FAIL: <the bug>".

  - name: revise
    description: Edit top_n.py to resolve one review finding.
    action: dag.run
    with: { dag: revise }

tasks:
  - name: simplicity_passed
    description: The latest simplicity review returned PASS on the current file.
  - name: correctness_passed
    description: The latest correctness review returned PASS on the current file.

أعلن معايير الإنجاز بدل ترتيب الخطوات

كل إجراء هو واجهة وكيل حقيقية: Claude وCodex وGemini وOpenCode

تُحسم كل مهمة بحالة completed أو skipped أو failed

انتظار رد الإنسان لا يترك أي عملية قائمة

At a glance

مسارات controller مقابل أطر الوكلاء

شرط الانتهاء
Dagu

أنت تعلن معايير الإنجاز. ينتهي التشغيل حين لا تبقى مهمة مفتوحة.

إطار وكلاء

إما أن يقرر النموذج بنفسه أنه انتهى، أو تُرسم كل المسارات مسبقًا وتُصان يدويًا.

الاستدامة
Dagu

التشغيل المنتظر ينهي عمليته ويستأنف على عملية أخرى.

إطار وكلاء

الانتظار الطويل يعني عادةً عملية يجب إبقاؤها حية ومخزن حالة يجب تشغيله.

التشغيل والصيانة
Dagu

الجدولة والطوابير وإعادة المحاولة والمخرجات وسجل التدقيق تأتي من تشغيل DAG.

إطار وكلاء

يُعاد بناؤها في كل مشروع، أو تُسلَّم إلى مستوى تحكّم مُستضاف.

نطاق الأثر
Dagu

مجموعة الخطوات المكتوبة في ملف المسار.

إطار وكلاء

كل ما تسمح به تعريفات الأدوات.

In depth

Where each tool fits

01

الترتيب هو تحديدًا ما لا يمكن كتابته

يستطيع الرسم البياني التفرّع حسب رمز الخروج، لكنه لا يستطيع التفرّع حسب ما قالته المراجعة فعلًا. يبقي مسار controller الإجراءات ثابتة ويسلّم الترتيب وحده.

  • تصبح الخطوات فهرس إجراءات، فلا يبقى depends يحتاج صيانة
  • تعلن قائمة tasks ما يجب أن يكون صحيحًا عند انتهاء التشغيل
  • ينقل controller ملاحظة وكيل إلى معاملات الوكيل التالي
02

النموذج يختار الترتيب، لا القدرات

يختار controller من الخطوات التي أعلنتها فقط. لا يمكنه اختراع خطوة، ولا كتابة أمر shell خاص به، ولا الوصول إلى ما لا يسمّيه الملف، فيكون نطاق الأثر هو تعريف المسار نفسه.

  • شغّل كل وكيل على المضيف أو داخل حاوية معزولة بنقاط تحميل وقواعد خروج صريحة
  • امنح كل دور مزوّده ونموذجه، حتى لا يصحّح نموذج واحد عمله بنفسه
  • ما تثق به مع الوقت ينتقل إلى مسار فرعي فيتوقف عن كونه قرارًا
03

ضوابط الإنتاج تأتي من التشغيل لا من إطار عمل

تشغيل controller هو تشغيل DAG. تنطبق الجدولة والطوابير وإعادة المحاولة والمخرجات وسجل التدقيق كما هي، وحدود إنفاق الوكيل إعدادات في المحرك لا تعليمات في الموجّه.

  • يعلّق ask_user التشغيل تعليقًا دائمًا: تنتهي العملية ويتحرر مقعد العامل
  • يجيب شخص ما بعد ساعات فيستأنف التشغيل على عملية جديدة
  • حدود الجولات ومحاولات الإجراء والأسئلة تُفشل التشغيل بدل الإنفاق بلا سقف
04

يمكن إعادة بناء أي تشغيل لاحقًا

لا توجد في controller حواف اعتماد، لذا يُعرض التشغيل بوصفه تسلسل القرارات التي اتُّخذت فعلًا لا بوصفه رسمًا بيانيًا.

  • خط زمني للقرارات: سطر لكل جولة، مع عدد المحاولات والمدة ورابط التشغيل الفرعي الناتج
  • عرض للمهام يبيّن سبب حسم controller لكل هدف
  • النص الكامل للجلسة، بما في ذلك كل نتيجة أداة رآها النموذج

FAQ

Practical questions before adopting Dagu

بم يختلف مسار controller عن حلقة وكيل؟

الحلقة المجردة تترك للنموذج تقرير متى انتهى. أما controller فيحتفظ بالحلقة ويستعيد شرط التوقف: أنت تعلن المهام ومعنى الإنجاز، وينتهي التشغيل حين لا تبقى مهمة مفتوحة.

ماذا يحدث إذا تبيّن أن مهمة ما غير ضرورية؟

يعلّمها controller بحالة skipped ويسجّل السبب، ويبقى التشغيل ناجحًا. skipped وfailed حالتان منفصلتان لأن «لم يكن هناك ما يُعمل» و«تعذّر تنفيذه» نتيجتان مختلفتان في سجل التدقيق.

هل يمكن أن تستخدم الخطوات المختلفة نماذج مختلفة؟

نعم. كل خطوة Agent Harness تسمّي مزوّدها ونموذجها، ونموذج controller نفسه يُضبط على حدة، فيمكن لنموذج رخيص أن يقود متخصصين مكلفين، أو لمزوّدَين أن يتحققا من بعضهما.

كيف أمنع التشغيل من الإنفاق بلا حدود؟

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

متى يبقى الرسم البياني العادي هو الخيار الصحيح؟

إن كان بإمكانك رسم الرسم البياني فارسمه. يبقى type: graph هو الافتراضي لأنه أسرع وأرخص وقابل لإعادة الإنتاج. لا تلجأ إلى controller إلا حين يتوقف الترتيب فعلًا على ما أنتجته الخطوات السابقة.

Next step

Start with one workflow.

Install Dagu, move one fragile script or agent task into YAML, and decide from a real run history.