LangGraph विकल्प
एजेंट वर्कफ़्लो के लिए रनटाइम, आपकी ऐप के भीतर एक लाइब्रेरी नहीं।
LangGraph कोड में एजेंट ग्राफ़ व्यक्त करने का अच्छा तरीका है। Dagu वह परत है जो उसे चलाती है: एक अकेली सेल्फ़-होस्टेड बाइनरी जिसमें वर्कफ़्लो YAML है, एजेंट सामान्य स्टेप हैं, और शेड्यूल, कतारें, retries, टिकाऊ ठहराव तथा रन इतिहास इंजन से आते हैं, उस ऐप्लिकेशन से नहीं जो आप उसके चारों ओर लिखते हैं।
# triage.yaml
schedule: "*/15 * * * *"
max_active_runs: 1
steps:
- id: fetch
run: ./scripts/fetch-new-issues.sh
output: ISSUES
- id: classify
action: harness.run
with:
provider: claude
prompt: Classify each issue in ${ISSUES}. Return JSON.
output_schema: schemas/triage.json
retry_policy:
limit: 3
interval_sec: 30
depends: [fetch]
- id: apply_labels
run: ./scripts/apply-labels.sh
depends: [classify]वर्कफ़्लो YAML हैं, ऐप्लिकेशन कोड नहीं
स्टेप प्रोसेस हैं, इसलिए कोई भी भाषा या CLI चलती है
शेड्यूल, कतारें, retries और इतिहास बाइनरी के साथ ही आते हैं
प्रतीक्षारत रन प्रोसेस छोड़ देता है और बाद में फिर शुरू होता है
At a glance
चलाने वालों की नज़र से LangGraph और Dagu
एक वर्कफ़्लो इंजन जिसे आप बाइनरी की तरह चलाते हैं।
एक लाइब्रेरी जिसे Python या JavaScript ऐप्लिकेशन में जोड़ा जाता है।
घोषणात्मक YAML, उसी कोड के साथ वर्ज़न किया जाता है जिसे वह चलाता है।
ऐप्लिकेशन कोड के भीतर ग्राफ़ का निर्माण।
शेड्यूल, कतारें, retries, artifacts और रन इतिहास इंजन के साथ आते हैं।
Checkpointer ग्राफ़ की स्थिति सहेजते हैं; शेड्यूलिंग और सेवा देना आपकी सेवा या LangGraph Platform के ज़िम्मे है।
एक प्रोसेस: कोई भी भाषा, कोई भी CLI, ज़रूरत हो तो कंटेनर के भीतर।
होस्ट प्रोसेस के भीतर एक फ़ंक्शन।
In depth
Where each tool fits
लाइब्रेरी को ऐप्लिकेशन चाहिए। इंजन को नहीं।
LangGraph ग्राफ़ बनाता है। फिर भी किसी को उसे शेड्यूल करना, कतार में लगाना, दोबारा चलाना, स्थिति सहेजना और यह दिखाना पड़ता है कि क्या हुआ। वह कोई या तो आपकी लिखी सेवा है या LangGraph Platform। Dagu पहले से ही वही परत है।
- एक बाइनरी चलाइए। न कोई वेब सेवा लिखनी है, न worker pool डिज़ाइन करना है
- शेड्यूल, कतारें, retries और रन इतिहास इंजन की क्षमताएँ हैं, जोड़े गए इंटीग्रेशन नहीं
- वही परिभाषा लैपटॉप पर, एक VM पर, या coordinator और workers पर चलती है
स्टेप प्रोसेस हैं, इसलिए वर्कफ़्लो किसी भाषा से बँधा नहीं
LangGraph के नोड आपके प्रोसेस में चलने वाले Python या JavaScript फ़ंक्शन हैं। Dagu का स्टेप एक कमांड है, इसलिए काम की इकाई वही है जो आपके परिवेश में पहले से चलती है।
- एक ही वर्कफ़्लो से shell स्क्रिप्ट, बाइनरी, कंटेनर, SSH कमांड, HTTP endpoint और SQL बुलाइए
- harness.run से coding agents चलाइए: Claude, Codex, Gemini, OpenCode या कोई आंतरिक CLI
- किसी भी स्टेप को स्पष्ट mounts, toolchain और egress नियमों वाला कंटेनर sandbox दीजिए
जब ग्राफ़ खींच सकें तब खींचिए, जब न खींच सकें तब क्रम सौंप दीजिए
LangGraph हर रास्ता खींचने को कहता है, जो तब तक ठीक है जब तक क्रम इस पर निर्भर न होने लगे कि समीक्षक ने क्या कहा। Dagu type: graph को डिफ़ॉल्ट रखता है और उस काम के लिए type: controller जोड़ता है जो कभी एक ग्राफ़ में समाया ही नहीं।
- Controller वर्कफ़्लो पूर्णता की शर्तें घोषित करता है और अगला action मॉडल चुनता है
- मॉडल केवल घोषित स्टेप में से चुनता है, इसलिए प्रभाव क्षेत्र वही फ़ाइल है
- दोनों प्रकार एक ही रन देते हैं, वही लॉग, retries, artifacts और इतिहास
FAQ
Practical questions before adopting Dagu
क्या Dagu LangGraph की सीधी जगह ले लेता है?
नहीं। दोनों अलग परतों पर हैं। अगर आप Python या JavaScript में मॉडल कॉल जोड़ना और ग्राफ़ की स्थिति पर बारीक नियंत्रण चाहते हैं तो LangGraph उपयुक्त है। Dagu तब बेहतर है जब काम कमांड और एजेंट CLI का समूह हो जिसे शेड्यूल, retries, अनुमोदन और ऑडिट निशान चाहिए।
क्या Dagu के भीतर LangGraph इस्तेमाल करते रह सकते हैं?
हाँ। LangGraph ऐप्लिकेशन को स्क्रिप्ट या कंटेनर के रूप में रखिए और उसे एक स्टेप की तरह चलाइए। उसके चारों ओर शेड्यूल, retry नीति, लॉग, artifacts और रन इतिहास Dagu देता है।
Dagu human-in-the-loop को कैसे संभालता है?
Human tasks, और controller वर्कफ़्लो के भीतर ask_user, रन को टिकाऊ ढंग से रोक देते हैं। प्रोसेस समाप्त होता है, worker slot मुक्त होता है, और किसी के उत्तर देते ही रन नए प्रोसेस पर फिर शुरू हो जाता है।
क्या Dagu को डेटाबेस चाहिए?
नहीं। Dagu एक अकेली बाइनरी है जो परिभाषाएँ, रन इतिहास और लॉग फ़ाइलों के रूप में रखती है, इसलिए पहले रन से पहले न कोई metadata डेटाबेस चलाना है, न message broker।
Next step
Start with one workflow.
Install Dagu, move one fragile script or agent task into YAML, and decide from a real run history.