एजेंट हार्नेस बनाने का सबसे कठिन हिस्सा इसका क्रिया स्थान (action space) तैयार करना है।
Claude, Tool Calling के माध्यम से काम करता है, लेकिन Claude API में bash, skills और हाल ही में कोड एक्ज़ीक्यूशन जैसे प्रिमिटिव के साथ टूल बनाने के कई तरीके हैं (Claude API पर प्रोग्रामेटिक टूल कॉलिंग के बारे में @RLanceMartin के नए लेख में और पढ़ें)।
इन सभी विकल्पों को देखते हुए, आप अपने एजेंट के टूल कैसे डिज़ाइन करते हैं? क्या आपको कोड एक्ज़ीक्यूशन या bash जैसे सिर्फ एक टूल की ज़रूरत है? क्या होगा अगर आपके पास 50 टूल हों, प्रत्येक उस यूज़ केस के लिए जिसमें आपका एजेंट काम कर सकता है?
खुद को मॉडल के नज़रिए से देखने के लिए, मैं कल्पना करता हूँ कि मुझे एक कठिन गणित की समस्या दी गई है। इसे हल करने के लिए आप कौन से टूल चाहेंगे? यह आपके अपने कौशल पर निर्भर करेगा!
कागज़ न्यूनतम होगा, लेकिन आप मैन्युअल गणनाओं तक सीमित रहेंगे। कैलकुलेटर बेहतर होगा, लेकिन आपको अधिक उन्नत विकल्पों को संचालित करना आना होगा। सबसे तेज़ और सबसे शक्तिशाली विकल्प कंप्यूटर होगा, लेकिन आपको यह जानना होगा कि कोड लिखने और निष्पादित करने के लिए इसका उपयोग कैसे किया जाए।
यह आपके एजेंट को डिज़ाइन करने के लिए एक उपयोगी ढाँचा है। आप इसे ऐसे टूल देना चाहते हैं जो इसकी अपनी क्षमताओं के अनुरूप हों। लेकिन आप कैसे जानते हैं कि वे क्षमताएँ क्या हैं? आप ध्यान देते हैं, इसके आउटपुट पढ़ते हैं, प्रयोग करते हैं। आप एक एजेंट की तरह देखना सीखते हैं।
यहाँ कुछ सबक दिए गए हैं जो हमने Claude Code बनाते समय Claude पर ध्यान देने से सीखे हैं।
एलिसिटेशन और AskUserQuestion टूल में सुधार

AskUserQuestion टूल बनाते समय, हमारा लक्ष्य Claude की प्रश्न पूछने की क्षमता (जिसे अक्सर एलिसिटेशन कहा जाता है) में सुधार करना था।
जबकि Claude सादे टेक्स्ट में प्रश्न पूछ सकता था, हमने पाया कि उन प्रश्नों का उत्तर देने में अनावश्यक रूप से अधिक समय लगता था। हम इस घर्षण को कैसे कम कर सकते हैं और उपयोगकर्ता और Claude के बीच संचार की बैंडविड्थ कैसे बढ़ा सकते हैं?
प्रयास #1 - ExitPlanTool को संपादित करना
पहली चीज़ जो हमने आज़माई वह ExitPlanTool में एक पैरामीटर जोड़ना था ताकि योजना के साथ-साथ प्रश्नों की एक सरणी (array) हो। इसे लागू करना सबसे आसान था, लेकिन इसने Claude को भ्रमित कर दिया क्योंकि हम एक साथ एक योजना और योजना के बारे में प्रश्नों का एक सेट माँग रहे थे। क्या होगा अगर उपयोगकर्ता के उत्तर योजना में कही गई बातों से टकराते हैं? क्या Claude को ExitPlanTool को दो बार कॉल करने की आवश्यकता होगी? हमें एक और दृष्टिकोण की आवश्यकता थी।
(आप प्रॉम्प्ट कैशिंग पर हमारी पोस्ट में ExitPlanTool बनाने के बारे में अधिक पढ़ सकते हैं)
प्रयास #2 - आउटपुट फ़ॉर्मेट बदलना
इसके बाद हमने Claude के आउटपुट निर्देशों को संशोधित करने का प्रयास किया ताकि वह थोड़ा संशोधित मार्कडाउन फ़ॉर्मेट प्रस्तुत कर सके जिसका उपयोग वह प्रश्न पूछने के लिए कर सके। उदाहरण के लिए, हम इसे कोष्ठकों में विकल्पों के साथ बुलेट पॉइंट प्रश्नों की एक सूची आउटपुट करने के लिए कह सकते हैं। फिर हम उस प्रश्न को पार्स और फ़ॉर्मेट करके उपयोगकर्ता के लिए UI के रूप में प्रस्तुत कर सकते हैं।
जबकि यह सबसे सामान्य परिवर्तन था जो हम कर सकते थे और Claude इसे आउटपुट करने में ठीक लग रहा था, यह गारंटीड नहीं था। Claude अतिरिक्त वाक्य जोड़ देता था, विकल्पों को छोड़ देता था, या पूरी तरह से एक अलग फ़ॉर्मेट का उपयोग करता था।
प्रयास #3 - AskUserQuestion टूल

अंत में, हम एक ऐसा टूल बनाने पर सहमत हुए जिसे Claude किसी भी समय कॉल कर सकता था, लेकिन विशेष रूप से प्लान मोड के दौरान ऐसा करने के लिए प्रेरित किया गया था। जब टूल ट्रिगर होता था, तो हम प्रश्न प्रदर्शित करने के लिए एक मोडल दिखाते थे और उपयोगकर्ता के उत्तर देने तक एजेंट के लूप को ब्लॉक करते थे।
इस टूल ने हमें Claude को एक संरचित आउटपुट के लिए प्रेरित करने की अनुमति दी और इसने हमें यह सुनिश्चित करने में मदद की कि Claude उपयोगकर्ता को कई विकल्प दे। इसने उपयोगकर्ताओं को इस कार्यक्षमता को संयोजित करने के तरीके भी दिए, उदाहरण के लिए इसे Agent SDK में कॉल करना या skills में इसका संदर्भ देना।
सबसे महत्वपूर्ण बात, Claude को यह टूल कॉल करना पसंद आया और हमने पाया कि इसके आउटपुट अच्छी तरह से काम करते थे। यहाँ तक कि सबसे अच्छा डिज़ाइन किया गया टूल भी काम नहीं करता अगर Claude यह नहीं समझता कि इसे कैसे कॉल करना है।
क्या यह Claude Code में एलिसिटेशन का अंतिम रूप है? हमें यकीन नहीं है। जैसा कि आप अगले उदाहरण में देखेंगे, एक मॉडल के लिए जो काम करता है वह दूसरे के लिए सबसे अच्छा नहीं हो सकता है।
क्षमताओं के साथ अपडेट करना - कार्य और टूडू

जब हमने पहली बार Claude Code लॉन्च किया, तो हमने महसूस किया कि मॉडल को ट्रैक पर बने रहने के लिए एक टूडू सूची की आवश्यकता थी। टूडू को शुरुआत में लिखा जा सकता था और जैसे-जैसे मॉडल काम करता था, उन्हें चेक किया जा सकता था। ऐसा करने के लिए हमने Claude को TodoWrite टूल दिया, जो टूडू लिखता या अपडेट करता था और उन्हें उपयोगकर्ता को प्रदर्शित करता था।
लेकिन तब भी हम अक्सर Claude को यह भूलते हुए देखते थे कि उसे क्या करना है। अनुकूलन के लिए, हमने हर 5 टर्न पर सिस्टम रिमाइंडर डाले जो Claude को उसके लक्ष्य की याद दिलाते थे।
लेकिन जैसे-जैसे मॉडल में सुधार हुआ, उन्हें न केवल टूडू सूची की याद दिलाने की आवश्यकता नहीं रही, बल्कि वे इसे सीमित पा सकते थे। टूडू सूची के रिमाइंडर भेजे जाने से Claude को लगता था कि उसे सूची में संशोधन करने के बजाय उस पर टिके रहना है। हमने यह भी देखा कि Opus 4.5 सबएजेंट का उपयोग करने में बहुत बेहतर हो गया था, लेकिन सबएजेंट एक साझा टूडू सूची पर कैसे समन्वय कर सकते थे?
यह देखते हुए, हमने TodoWrite को Task टूल से बदल दिया (यहाँ Tasks के बारे में और पढ़ें)। जहाँ टूडू मॉडल को ट्रैक पर रखने के बारे में थे, वहीं Tasks एजेंटों को एक-दूसरे के साथ संवाद करने में मदद करने के बारे में अधिक थे। Tasks में निर्भरताएँ शामिल हो सकती थीं, सबएजेंट में अपडेट साझा कर सकते थे और मॉडल उन्हें बदल और हटा सकता था।
जैसे-जैसे मॉडल क्षमताएँ बढ़ती हैं, आपके मॉडल को एक बार जिन टूल की आवश्यकता थी, वे अब उन्हें सीमित कर सकते हैं। पिछली धारणाओं पर लगातार पुनर्विचार करना महत्वपूर्ण है कि किन टूल की आवश्यकता है। यही कारण है कि समान क्षमता प्रोफ़ाइल वाले मॉडलों के एक छोटे सेट का समर्थन करना उपयोगी है।
एक सर्च इंटरफ़ेस डिज़ाइन करना
Claude के लिए टूल का एक विशेष रूप से महत्वपूर्ण सेट सर्च टूल हैं जिनका उपयोग अपना स्वयं का संदर्भ बनाने के लिए किया जा सकता है।
जब Claude Code पहली बार आया, तो हमने Claude के लिए संदर्भ खोजने के लिए RAG वेक्टर डेटाबेस का उपयोग किया। जबकि RAG शक्तिशाली और तेज़ था, इसके लिए इंडेक्सिंग और सेटअप की आवश्यकता थी और यह विभिन्न वातावरणों में नाजुक हो सकता था। अधिक महत्वपूर्ण बात, Claude को यह संदर्भ दिया जा रहा था, न कि वह स्वयं इसे खोज रहा था।
लेकिन अगर Claude वेब पर सर्च कर सकता है, तो आपके कोडबेस पर क्यों नहीं? Claude को Grep टूल देकर, हम इसे फ़ाइलों की खोज करने और स्वयं संदर्भ बनाने दे सकते थे।
यह एक पैटर्न है जो हमने देखा है क्योंकि Claude अधिक स्मार्ट होता जा रहा है, यह अपना संदर्भ बनाने में तेजी से अच्छा होता जा रहा है यदि इसे सही टूल दिए जाएँ।
जब हमने Agent Skills पेश किया, तो हमने प्रोग्रेसिव डिस्क्लोज़र के विचार को औपचारिक रूप दिया, जो एजेंटों को अन्वेषण के माध्यम से धीरे-धीरे प्रासंगिक संदर्भ खोजने की अनुमति देता है।
Claude स्किल फ़ाइलें पढ़ सकता था और वे फ़ाइलें फिर अन्य फ़ाइलों का संदर्भ दे सकती थीं जिन्हें मॉडल पुनरावर्ती रूप से पढ़ सकता था। वास्तव में, skills का एक सामान्य उपयोग Claude में अधिक सर्च क्षमताएँ जोड़ना है, जैसे इसे API का उपयोग करने या डेटाबेस क्वेरी करने के निर्देश देना।
एक वर्ष के दौरान, Claude वास्तव में अपना स्वयं का संदर्भ बनाने में सक्षम नहीं होने से, फ़ाइलों की कई परतों में नेस्टेड सर्च करके अपने लिए आवश्यक सटीक संदर्भ खोजने में सक्षम हो गया।
प्रोग्रेसिव डिस्क्लोज़र अब एक सामान्य तकनीक है जिसका उपयोग हम एक टूल जोड़े बिना नई कार्यक्षमता जोड़ने के लिए करते हैं।
प्रोग्रेसिव डिस्क्लोज़र - Claude Code गाइड एजेंट
Claude Code में वर्तमान में ~20 टूल हैं, और हम लगातार खुद से पूछ रहे हैं कि क्या हमें उन सभी की आवश्यकता है। एक नया टूल जोड़ने का मानक ऊँचा है, क्योंकि इससे मॉडल को सोचने के लिए एक और विकल्प मिलता है।
उदाहरण के लिए, हमने देखा कि Claude को इस बारे में पर्याप्त जानकारी नहीं थी कि Claude Code का उपयोग कैसे किया जाए। यदि आप इसे MCP जोड़ने का तरीका या स्लैश कमांड क्या करता है, पूछते, तो यह उत्तर देने में सक्षम नहीं होता।
हम इस सारी जानकारी को सिस्टम प्रॉम्प्ट में डाल सकते थे, लेकिन यह देखते हुए कि उपयोगकर्ता शायद ही कभी इसके बारे में पूछते थे, यह संदर्भ रॉट (context rot) जोड़ता और Claude Code के मुख्य काम: कोड लिखने में हस्तक्षेप करता।
इसके बजाय, हमने प्रोग्रेसिव डिस्क्लोज़र का एक रूप आज़माया। हमने Claude को उसके डॉक्स का एक लिंक दिया जिसे वह अधिक जानकारी खोजने के लिए लोड कर सकता था। यह काम कर गया, लेकिन हमने पाया कि Claude सही उत्तर खोजने के लिए संदर्भ में बहुत सारे परिणाम लोड करता था, जबकि वास्तव में आपको केवल उत्तर की आवश्यकता थी।
इसलिए हमने Claude Code गाइड सबएजेंट बनाया, जिसे Claude को कॉल करने के लिए प्रेरित किया जाता है जब आप इसके बारे में पूछते हैं, सबएजेंट के पास डॉक्स को अच्छी तरह से सर्च करने और क्या वापस करना है, इसके व्यापक निर्देश हैं।
जबकि यह सही नहीं है, Claude अभी भी भ्रमित हो सकता है जब आप इसे सेट अप करने के तरीके के बारे में पूछते हैं, यह पहले की तुलना में बहुत बेहतर है! हम एक टूल जोड़े बिना Claude के क्रिया स्थान में चीज़ें जोड़ने में सक्षम थे।
एक कला, विज्ञान नहीं
यदि आप अपने टूल बनाने के तरीके पर सख्त नियमों के एक सेट की उम्मीद कर रहे थे, तो दुर्भाग्य से यह वह गाइड नहीं है। अपने मॉडलों के लिए टूल डिज़ाइन करना उतना ही एक कला है जितना कि यह एक विज्ञान है। यह काफी हद तक आपके द्वारा उपयोग किए जा रहे मॉडल, एजेंट के लक्ष्य और जिस वातावरण में यह काम कर रहा है, उस पर निर्भर करता है।
अक्सर प्रयोग करें, अपने आउटपुट पढ़ें, नई चीज़ें आज़माएँ। एक एजेंट की तरह देखें।





