agent हुक बिना टर्न, बजट या समय सीमा के लूप में चलने वाले एजेंट रनटाइम पकड़ता है। यह बेकाबू स्वायत्तता वाली वह खामी है जो जान-बूझकर गढ़े गए एक इनपुट को असीमित ख़र्च या बढ़ते प्रॉम्प्ट इंजेक्शन हमले में बदल देती है। यह भाषा को पहचानता है और एजेंट फ़्रेमवर्क के दो इकोसिस्टम कवर करता है: JavaScript (Claude एजेंट SDK का query रनटाइम) और Python (LangChain, LangGraph, CrewAI, OpenAI Agents)। यह llm विशेषज्ञता के पीछे का नियतात्मक इंजन है, जिसे आप खुद scan या check मोड में चला सकते हैं।
चलाएँ
- कोडबेस स्कैन करें
- कोई कॉल जाँचें
npx lagune read agent # scans the whole project
npx lagune read agent --dir src/ai # scans a directory
npx lagune read agent --file chat.ts # scans a single file
npx lagune read agent --lang javascript --pattern 'query({ prompt })' # => uncapped
npx lagune read agent --lang javascript --pattern 'query({ prompt, options: { maxTurns: 5 } })' # => safe
npx lagune read agent --lang python --pattern 'AgentExecutor(agent=a, max_iterations=None)' # => uncapped
Uncapped agent loops found के नीचे की हर लाइन किसी ऐसी फ़ाइल में मिली है जो एजेंट SDK इंपोर्ट करती है, और वह दो में से एक चीज़ है: या तो बिना टर्न, बजट या समय सीमा के बुलाया गया Claude एजेंट SDK का query रनटाइम (JavaScript, जहाँ डिफ़ॉल्ट रूप से कोई सीमा नहीं होती), या किसी फ़्रेमवर्क की डिफ़ॉल्ट सीमा को साफ़ तौर पर हटाना, जैसे max_iterations=None / max_turns=None (Python, जहाँ डिफ़ॉल्ट रूप से सीमा होती है)। दोनों ही मामलों में हुक नॉन-ज़ीरो एग्ज़िट कोड देता है। Vercel AI SDK के generateText/streamText डिफ़ॉल्ट रूप से एक ही स्टेप चलाते हैं (stopWhen: stepCountIs(1)), इसलिए वहाँ बिना विकल्पों वाली कॉल लूप नहीं कर सकती और पकड़ी नहीं जाती, और एक आम db.query(...) को कभी एजेंट कॉल नहीं समझा जाता। कुछ न मिलने पर यह no uncapped agent loops found छापता है।
फ़ैसला कैसे पढ़ें
| फ़ैसला | मतलब |
|---|---|
uncapped | बिना सीमा वाली query रनटाइम कॉल (JS), या सीमा को साफ़ तौर पर हटाना (=None, Py)। |
safe | सीमा तय करने वाली query कॉल, एक स्टेप वाला जनरेशन, या ऐसे फ़्रेमवर्क की कॉल जिसमें डिफ़ॉल्ट रूप से सीमा होती है। |
invalid | कोड के टुकड़े में फ़ैसले के लिए कोई पहचानने लायक एजेंट कॉल नहीं है। |
CLI विकल्प
| विकल्प | वैल्यू | विवरण |
|---|---|---|
--pattern | कोड का टुकड़ा | एक कॉल जाँचें। कई कॉल जाँचने के लिए इसे दोहराएँ, हर लाइन में एक फ़ैसला। |
--lang | एक भाषा | --pattern के साथ ज़रूरी: javascript या python। |
--dir | एक डायरेक्टरी | स्कैन को एक डायरेक्टरी तक सीमित करें। इसे दोहराया जा सकता है और --file के साथ जोड़ा जा सकता है। |
--file | एक फ़ाइल | स्कैन को एक फ़ाइल तक सीमित करें। इसे दोहराया जा सकता है और --dir के साथ जोड़ा जा सकता है। |
कोई विकल्प न देने पर यह पूरा प्रोजेक्ट स्कैन करता है। --pattern के साथ --lang चाहिए, और इसे --dir या --file के साथ नहीं जोड़ा जा सकता।
चुनें कि यह क्या स्कैन करे
यह उन चीज़ों को छोड़ देता है जिन्हें Git अनदेखा करता है। और ज़्यादा छोड़ने के लिए, या Git की अनदेखी चीज़ों को भी स्कैन करने के लिए, agent को उसकी अपनी सेटिंग्स दें:
npx lagune write add --ignore test/fixtures --checker agent
{
"checkers": {
"agent": { "gitignore": false, "ignore": ["test/fixtures"] }
}
}
हर सेटिंग की जानकारी हुक कॉन्फ़िगर करें पेज पर है।
हाथ से लिखा गया एजेंट लूप, किसी भी भाषा में, स्टैटिक स्कैन की पकड़ से बाहर है। इसे एक मज़बूत न्यूनतम आधार मानें, पूरी सूची नहीं।
हुक सिर्फ़ सीमा के बारे में फ़ैसला करता है: क्षमताओं का दायरा, अलग-अलग भरोसे वाले इनपुट का आपस में मिलना और ऑथराइज़ेशन ऐसे मामले हैं जिनमें विवेक चाहिए, और उन्हें अब भी llm विशेषज्ञता कवर करती है।
अक्सर पूछे जाने वाले सवाल
बिना सीमा वाले एजेंट को असीमित रिकर्शन, ख़र्च या बढ़ते प्रॉम्प्ट इंजेक्शन हमले की ओर धकेला जा सकता है। maxTurns/maxBudgetUsd/stopWhen/signal सेट करने से उसकी हद तय होती है, और agent हुक ऐसी query रनटाइम कॉल को पकड़ता है जिसमें इनमें से कुछ भी सेट न हो।
