उप-एजेंट
Sub-agents बैकग्राउंड एजेंट रन होते हैं जो किसी मौजूदा एजेंट रन से शुरू किए जाते हैं। वे अपने स्वयं के सेशन (agent:<agentId>:subagent:<uuid>) में चलते हैं और पूरा होने पर अपना परिणाम अनुरोधकर्ता चैट चैनल में announce करते हैं।
Slash कमांड
वर्तमान सेशन के लिए sub-agent रन की जाँच या नियंत्रण करने हेतु/subagents का उपयोग करें:
/subagents list/subagents kill <id|#|all>/subagents log <id|#> [limit] [tools]/subagents info <id|#>/subagents send <id|#> <message>
- मुख्य रन को ब्लॉक किए बिना “research / लंबा कार्य / धीमा टूल” कार्यों को समानांतर करना।
- डिफ़ॉल्ट रूप से sub-agents को अलग-थलग रखना (सेशन पृथक्करण + वैकल्पिक sandboxing)।
- टूल सतह को दुरुपयोग से सुरक्षित रखना: sub-agents को डिफ़ॉल्ट रूप से सेशन टूल्स नहीं मिलते।
- orchestrator पैटर्न के लिए कॉन्फ़िगर करने योग्य nesting depth का समर्थन करना।
agents.defaults.subagents.model या प्रति-एजेंट ओवरराइड के माध्यम से कॉन्फ़िगर कर सकते हैं।
टूल
sessions_spawn का उपयोग करें:
- एक sub-agent रन शुरू करता है (
deliver: false, global lane:subagent) - फिर एक announce चरण चलाता है और announce उत्तर को अनुरोधकर्ता चैट चैनल में पोस्ट करता है
- डिफ़ॉल्ट मॉडल: कॉलर से विरासत में मिलता है जब तक आप
agents.defaults.subagents.model(या प्रति-एजेंटagents.list[].subagents.model) सेट नहीं करते; स्पष्टsessions_spawn.modelहमेशा प्राथमिकता लेता है। - डिफ़ॉल्ट thinking: कॉलर से विरासत में मिलता है जब तक आप
agents.defaults.subagents.thinking(या प्रति-एजेंटagents.list[].subagents.thinking) सेट नहीं करते; स्पष्टsessions_spawn.thinkingहमेशा प्राथमिकता लेता है।
task(आवश्यक)label?(वैकल्पिक)agentId?(वैकल्पिक; अनुमति होने पर किसी अन्य एजेंट id के अंतर्गत शुरू करें)model?(वैकल्पिक; sub-agent मॉडल को ओवरराइड करता है; अमान्य मानों को छोड़ दिया जाता है और sub-agent डिफ़ॉल्ट मॉडल पर चलता है, टूल परिणाम में एक चेतावनी के साथ)thinking?(वैकल्पिक; sub-agent रन के लिए thinking स्तर को ओवरराइड करता है)runTimeoutSeconds?(डिफ़ॉल्ट0; सेट होने पर, sub-agent रन N सेकंड के बाद निरस्त कर दिया जाता है)cleanup?(delete|keep, डिफ़ॉल्टkeep)
agents.list[].subagents.allowAgents: एजेंट ids की सूची जिन्हेंagentIdके माध्यम से लक्षित किया जा सकता है (["*"]किसी भी को अनुमति देने के लिए)। डिफ़ॉल्ट: केवल अनुरोधकर्ता एजेंट।
- यह देखने के लिए
agents_listका उपयोग करें कि वर्तमान मेंsessions_spawnके लिए कौन-से एजेंट ids अनुमत हैं।
- Sub-agent सत्र
agents.defaults.subagents.archiveAfterMinutes(डिफ़ॉल्ट: 60) के बाद स्वचालित रूप से आर्काइव कर दिए जाते हैं। - Archive
sessions.deleteका उपयोग करता है और ट्रांसक्रिप्ट का नाम बदलकर*.deleted.<timestamp>कर देता है` (उसी फ़ोल्डर में)। cleanup: "delete"announce के तुरंत बाद आर्काइव कर देता है (फिर भी rename के माध्यम से ट्रांसक्रिप्ट सुरक्षित रहता है)।- Auto-archive best-effort आधार पर काम करता है; यदि gateway पुनः शुरू होता है तो लंबित टाइमर खो जाते हैं।
runTimeoutSecondsauto-archive नहीं करता; यह केवल रन को रोकता है। सत्र auto-archive होने तक बना रहता है।- Auto-archive depth-1 और depth-2 सत्रों पर समान रूप से लागू होता है।
Nested Sub-Agents
डिफ़ॉल्ट रूप से, sub-agents अपने स्वयं के sub-agents शुरू नहीं कर सकते (maxSpawnDepth: 1)। आप maxSpawnDepth: 2 सेट करके एक स्तर की nesting सक्षम कर सकते हैं, जो orchestrator pattern की अनुमति देता है: main → orchestrator sub-agent → worker sub-sub-agents।
सक्षम कैसे करें
समवर्तीता
| Depth | Session key आकार | भूमिका | क्या spawn कर सकता है? |
|---|---|---|---|
| 0 | agent:<id>:main | Main agent | हमेशा |
| 1 | agent:<id>:subagent:<uuid> | Sub-agent (जब depth 2 की अनुमति हो तो orchestrator) | केवल यदि maxSpawnDepth >= 2 |
| 2 | agent:<id>:subagent:<uuid>:subagent:<uuid> | Sub-sub-agent (leaf worker) | कभी नहीं |
Announce श्रृंखला
Sub-agents use a dedicated queue lane (subagent) separate from the main agent queue, so sub-agent runs don’t block inbound replies.
- Depth-2 worker समाप्त होता है → अपने parent (depth-1 orchestrator) को announce करता है
- Depth-1 orchestrator announce प्राप्त करता है, परिणामों को संयोजित करता है, समाप्त होता है → main को announce करता है
- Main agent announce प्राप्त करता है और उपयोगकर्ता को प्रदान करता है
Depth के अनुसार Tool नीति
- Depth 1 (orchestrator, जब
maxSpawnDepth >= 2):sessions_spawn,subagents,sessions_list,sessions_historyप्राप्त करता है ताकि वह अपने children को प्रबंधित कर सके। अन्य session/system tools प्रतिबंधित रहते हैं। - Depth 1 (leaf, जब
maxSpawnDepth == 1): कोई session tools नहीं (वर्तमान डिफ़ॉल्ट व्यवहार)। - Depth 2 (leaf worker): कोई session tools नहीं — depth 2 पर
sessions_spawnहमेशा प्रतिबंधित रहता है। आगे और children spawn नहीं कर सकता।
The sessions_spawn Tool
प्रत्येक agent सत्र (किसी भी depth पर) में एक समय में अधिकतम maxChildrenPerAgent (डिफ़ॉल्ट: 5) सक्रिय children हो सकते हैं। यह एक ही orchestrator से अनियंत्रित fan-out को रोकता है।
पैरामीटर
गहराई-1 orchestrator को रोकने पर उसके सभी गहराई-2 child स्वतः रुक जाते हैं:/stopको मुख्य चैट में भेजने से सभी गहराई-1 agents रुक जाते हैं और यह उनके गहराई-2 children तक क्रमिक रूप से लागू होता है।/subagents kill <id>किसी विशिष्ट sub-agent को रोकता है और उसके children तक क्रमिक रूप से लागू होता है।/subagents kill allअनुरोधकर्ता के सभी sub-agents को रोकता है और क्रमिक रूप से लागू होता है।
प्रमाणीकरण
उप-एजेंट प्रमाणीकरण एजेंट आईडी द्वारा हल किया जाता है, सत्र प्रकार द्वारा नहीं:- sub-agent session key है
agent:<agentId>:subagent:<uuid>। - auth store उस agent के
agentDirसे लोड किया जाता है। - मुख्य agent के auth profiles को fallback के रूप में मर्ज किया जाता है; टकराव होने पर agent profiles, main profiles को ओवरराइड करते हैं।
घोषणा
Sub-agents एक announce step के माध्यम से वापस रिपोर्ट करते हैं:- announce step sub-agent session के अंदर चलता है (अनुरोधकर्ता session में नहीं)।
- यदि sub-agent ठीक-ठीक
ANNOUNCE_SKIPउत्तर देता है, तो कुछ भी पोस्ट नहीं किया जाता। - अन्यथा announce का उत्तर अनुरोधकर्ता के चैट चैनल में एक follow-up
agentकॉल (deliver=true) के माध्यम से पोस्ट किया जाता है। - उपलब्ध होने पर घोषणा उत्तर थ्रेड/टॉपिक रूटिंग को संरक्षित रखते हैं (Slack थ्रेड्स, Telegram टॉपिक्स, Matrix थ्रेड्स)।
- Announce संदेशों को एक स्थिर टेम्पलेट में सामान्यीकृत किया जाता है:
Status:रन के परिणाम (success,error,timeout, याunknown) से प्राप्त।Result:announce step की सारांश सामग्री (या अनुपलब्ध होने पर(not available))।Notes:त्रुटि विवरण और अन्य उपयोगी संदर्भ।
Statusमॉडल आउटपुट से अनुमानित नहीं होता; यह runtime outcome signals से आता है।
- Runtime (उदाहरण के लिए,
runtime 5m12s) - टोकन उपयोग (इनपुट/आउटपुट/कुल)
- जब model pricing कॉन्फ़िगर हो (
models.providers.*.models[].cost) तो अनुमानित लागत sessionKey,sessionId, और transcript path (ताकि मुख्य agentsessions_historyके माध्यम से इतिहास प्राप्त कर सके या डिस्क पर फ़ाइल की जाँच कर सके)
Managing Sub-Agents (/subagents)
Use the /subagents slash command to inspect and control sub-agent runs for the current session:
sessions_listsessions_historysessions_sendsessions_spawn
1, 2), run id prefix, full session key, or last.
config के माध्यम से ओवरराइड करें:
समवर्तीता
Sub-agents एक समर्पित in-process queue lane का उपयोग करते हैं:- Lane नाम:
subagent - Concurrency:
agents.defaults.subagents.maxConcurrent(डिफ़ॉल्ट8)
रोकना
- अनुरोधकर्ता चैट में
/stopभेजने से अनुरोधकर्ता session निरस्त हो जाता है और उससे शुरू किए गए सभी सक्रिय sub-agent runs रुक जाते हैं, तथा nested children तक क्रमिक रूप से लागू होता है। /subagents kill <id>किसी विशिष्ट sub-agent को रोकता है और उसके children तक क्रमिक रूप से लागू होता है।
सीमाएँ
- Sub-agent announce best-effort है। यदि gateway पुनः प्रारंभ होता है, तो लंबित “announce back” कार्य खो जाता है।
- Sub-agents अभी भी वही gateway process संसाधन साझा करते हैं;
maxConcurrentको एक सुरक्षा वाल्व के रूप में मानें। sessions_spawnहमेशा non-blocking है: यह तुरंत{ status: "accepted", runId, childSessionKey }लौटाता है।- Sub-agent context केवल
AGENTS.md+TOOLS.mdinject करता है (SOUL.md,IDENTITY.md,USER.md,HEARTBEAT.md, याBOOTSTRAP.mdनहीं)। - अधिकतम nesting depth 5 है (
maxSpawnDepthसीमा: 1–5)। अधिकांश उपयोग मामलों के लिए Depth 2 अनुशंसित है। maxChildrenPerAgentप्रति सत्र सक्रिय children की सीमा निर्धारित करता है (default: 5, range: 1–20)।