This document provides a detailed breakdown of the complete System Prompt structure sent by OpenClaw Agent to the LLM.
Translation: यह दस्तावेज़ OpenClaw Agent द्वारा LLM को भेजे गए पूर्ण सिस्टम प्रॉम्प्ट संरचना का विस्तृत विवरण प्रस्तुत करता है।
Note: Keep "OpenClaw Agent" and "LLM" as is.
Then empty blockquotes (just <p></p>). Keep them exactly.
Next blockquote with "Version:" and "Update Time:" and values. Translate the text inside.
"Version:" -> "संस्करण:"
"Update Time:" -> "अद्यतन समय:"
"v2.1" -> keep as "v2.1"
"2026-03-05" -> keep.
Now heading "## Overall Architecture Diagram" -> "## समग्र आर्किटेक्चर आरेख"
Payload-block: <payload-block id="blk_0" type="upload" /> - keep exactly.
Heading: "## Quick Navigation (TL;DR)" -> "## त्वरित नेविगेशन (TL;DR)"
Then "Must-read for Beginners:" -> "शुरुआती लोगों के लिए आवश्यक पठन:"
List items:
- Layer 7 (Workspace Files) - Configuration files you can edit directly.
- Layer 8 (Bootstrap Hook) - Where you can write scripts to dynamically inject content.
- Other layers are automatically generated by the framework; just understand them.
Translate:
- लेयर 7 (वर्कस्पेस फ़ाइलें) - कॉन्फ़िगरेशन फ़ाइलें जिन्हें आप सीधे संपादित कर सकते हैं।
- लेयर 8 (बूटस्ट्रैप हुक) - जहाँ आप डायनामिक रूप से सामग्री इंजेक्ट करने के लिए स्क्रिप्ट लिख सकते हैं।
- अन्य लेयर फ्रेमवर्क द्वारा स्वचालित रूप से जनरेट होते हैं; बस उन्हें समझें।
"Common Needs:" -> "सामान्य आवश्यकताएँ:"
List:
- Want to define Agent identity? → Edit IDENTITY.md in Layer 7.
- Want to add project documentation? → Use the bootstrap-extra-files Hook in Layer 8.
- Want to inject real-time context? → Use the before_prompt_build Hook in Layer 8.
- Want to control file size? → Adjust the bootstrapMaxChars configuration.
Translate:
- Agent की पहचान परिभाषित करना चाहते हैं? → लेयर 7 में IDENTITY.md संपादित करें।
- प्रोजेक्ट दस्तावेज़ीकरण जोड़ना चाहते हैं? → लेयर 8 में bootstrap-extra-files हुक का उपयोग करें।
- रीयल-टाइम संदर्भ इंजेक्ट करना चाहते हैं? → लेयर 8 में before_prompt_build हुक का उपयोग करें।
- फ़ाइल का आकार नियंत्रित करना चाहते हैं? → bootstrapMaxChars कॉन्फ़िगरेशन समायोजित करें।
Note: Keep "IDENTITY.md", "bootstrap-extra-files", "before_prompt_build", "bootstrapMaxChars" as is.
Now "## Layer 1: OpenClaw Framework Core" -> "## लेयर 1: OpenClaw फ्रेमवर्क कोर"
Then "Analogy" -> "समानता"
Blockquote: <blockquote><p>Like the "Instructions for Use" section of an operation manual—telling the LLM who you are, what you can do, and how you should respond.</p></blockquote>
Translate: जैसे किसी ऑपरेशन मैनुअल का "उपयोग के निर्देश" अनुभाग—LLM को बताना कि आप कौन हैं, आप क्या कर सकते हैं, और आपको कैसे प्रतिक्रिया देनी चाहिए।
"Components" -> "घटक"
Payload-block: keep.
"Practical Example" -> "व्यावहारिक उदाहरण"
Text: "You are running as a "Creative Partner," an AI content creation expert Agent." -> "आप एक "क्रिएटिव पार्टनर" के रूप में काम कर रहे हैं, जो AI सामग्री निर्माण विशेषज्ञ Agent है।"
"Current Time: 2026-03-05 14:37:00 CST" -> "वर्तमान समय: 2026-03-05 14:37:00 CST" (keep time as is, but might add "CST" explanation? No, keep as is.)
"=== Tool Calling Specification ===" -> translate: "=== टूल कॉलिंग विनिर्देश ==="
Then bullet points:
- Use XML-style tool calling format.
- Each tool call must include a unique tool_call_id.
- Tool results are returned via <tool_result> tags.
- Consider AbortSignal when executing tools to support cancellation.
Translate:
- XML-शैली टूल कॉलिंग प्रारूप का उपयोग करें।
- प्रत्येक टूल कॉल में एक अद्वितीय tool_call_id शामिल होना चाहिए।
- टूल परिणाम <tool_result> टैग के माध्यम से लौटाए जाते हैं।
- टूल निष्पादित करते समय AbortSignal पर विचार करें ताकि रद्दीकरण का समर्थन हो सके।
"=== Safety Boundaries ===" -> "=== सुरक्षा सीमाएँ ==="
Bullets:
- Strictly prohibited from executing destructive operations (rm -rf, formatting, etc.).
- Sensitive user information must be encrypted when handled.
- Prohibited from sending messages to unauthorized channels.
Translate:
- विनाशकारी संचालन (rm -rf, फ़ॉर्मेटिंग, आदि) निष्पादित करने से सख्त मनाही है।
- संवेदनशील उपयोगकर्ता जानकारी को संभालने पर एन्क्रिप्ट किया जाना चाहिए।
- अनधिकृत चैनलों पर संदेश भेजना प्रतिबंधित है।
"Design Trade-offs" -> "डिज़ाइन व्यापार-बंद"
Why design it this way? -> इसे इस तरह से डिज़ाइन क्यों किया गया?
- Trade-off: Flexibility vs. Consistency -> व्यापार-बंद: लचीलापन बनाम स्थिरता
- Decision: Unified generation at the framework layer ensures consistent basic behavior for all Agents. -> निर्णय: फ्रेमवर्क परत पर एकीकृत जनरेशन सभी Agents के लिए सुसंगत मूल व्यवहार सुनिश्चित करता है।
- Benefits: Users don't need to repeat basic rules for every Agent. All Agents automatically gain new capabilities when the framework upgrades. Reduces the risk of configuration errors. -> लाभ: उपयोगकर्ताओं को प्रत्येक Agent के लिए मूल नियमों को दोहराने की आवश्यकता नहीं है। फ्रेमवर्क अपग्रेड होने पर सभी Agents स्वचालित रूप से नई क्षमताएँ प्राप्त करते हैं। कॉन्फ़िगरेशन त्रुटियों का जोखिम कम करता है।
- Cost: Users cannot modify these core rules. Special behaviors must be implemented indirectly via Layer 7/8. -> लागत: उपयोगकर्ता इन मुख्य नियमों को संशोधित नहीं कर सकते। विशेष व्यवहार को लेयर 7/8 के माध्यम से अप्रत्यक्ष रूप से लागू किया जाना चाहिए।
"## Layer 2: Tool Definitions" -> "## लेयर 2: टूल परिभाषाएँ"
Analogy blockquote: "Like a Swiss Army knife's tool list—telling the LLM what tools you have, what each does, and how to use them." -> "जैसे स्विस आर्मी नाइफ की टूल सूची—LLM को बताना कि आपके पास कौन से टूल हैं, प्रत्येक क्या करता है, और उनका उपयोग कैसे करें।"
Components payload-block.
"Tool Definition Example" -> "टूल परिभाषा उदाहरण"
Now the JSON code block. We need to translate string values. The JSON:
{
"name": "read",
"description": "Read file content. Supports text files and images (jpg/png/gif/webp). Images are sent as attachments. Text output is limited to 2000 lines or 50KB.",
"parameters": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "File path (relative or absolute)"
},
"offset": {
"type": "number",
"description": "Starting line number (1-indexed)"
},
"limit": {
"type": "number",
"description": "Maximum lines to read"
}
},
"required": ["path"]
}
}
Translate the string values (the descriptions and the name values? "name" value is "read" - it's a function name, should keep as is. For description, translate:
"Read file content. Supports text files and images (jpg/png/gif/webp). Images are sent as attachments. Text output is limited to 2000 lines or 50KB."
-> "फ़ाइल सामग्री पढ़ें। टेक्स्ट फ़ाइलों और छवियों (jpg/png/gif/webp) का समर्थन करता है। छवियाँ अटैचमेंट के रूप में भेजी जाती हैं। टेक्स्ट आउटपुट 2000 पंक्तियों या 50KB तक सीमित है।"
For "path" description: "File path (relative or absolute)" -> "फ़ाइल पथ (सापेक्ष या निरपेक्ष)"
"offset" description: "Starting line number (1-indexed)" -> "प्रारंभिक पंक्ति संख्या (1-आधारित)"
"limit" description: "Maximum lines to read" -> "पढ़ने के लिए अधिकतम पंक्तियाँ"
Keep keys and structure as is. Also keep "required": ["path"] unchanged.
Now "Design Trade-offs" for Layer 2:
Why use JSON Schema? -> JSON Schema का उपयोग क्यों?
- Trade-off: Flexibility vs. Type Safety -> व्यापार-बंद: लचीलापन बनाम प्रकार सुरक्षा
- Decision: Use strict JSON Schema to define tool parameters. -> निर्णय: टूल पैरामीटर परिभाषित करने के लिए सख्त JSON Schema का उपयोग करें।
- Benefits: LLM understands tool usage more accurately. The framework can validate parameters before calling. Automatically generates documentation and type definitions. -> लाभ: LLM टूल उपयोग को अधिक सटीक रूप से समझता है। फ्रेमवर्क कॉल करने से पहले पैरामीटर मान्य कर सकता है। स्वचालित रूप से दस्तावेज़ीकरण और प्रकार परिभाषाएँ उत्पन्न करता है।
- Cost: Adding new tools requires writing a full Schema. Cannot support completely dynamic parameter structures. -> लागत: नए टूल जोड़ने के लिए पूर्ण Schema लिखने की आवश्यकता होती है। पूरी तरह से गतिशील पैरामीटर संरचनाओं का समर्थन नहीं कर सकता।
"## Layer 3: Skills Registry" -> "## लेयर 3: स्किल्स रजिस्ट्री"
Analogy blockquote: "Like a restaurant's "Specialty Menu"—telling the LLM which professional "recipes" are available to call." -> "जैसे किसी रेस्तरां का "विशेष मेनू"—LLM को बताना कि कॉल करने के लिए कौन से पेशेवर "रेसिपीज़" उपलब्ध हैं।"
Design Trade-offs:
Why use directory scanning instead of manual registration? -> मैनुअल रजिस्ट्रेशन के बजाय डायरेक्टरी स्कैनिंग का उपयोग क्यों?
- Trade-off: Flexibility vs. Maintenance Cost -> व्यापार-बंद: लचीलापन बनाम रखरखाव लागत
- Decision: Automatically scan the ~/development/openclaw/skills/ directory. -> निर्णय: ~/development/openclaw/skills/ डायरेक्टरी को स्वचालित रूप से स्कैन करें।
- Benefits: Adding a new Skill only requires placing it in the directory; no config changes needed. All Agents automatically get the new Skill. Reduces configuration error risks. -> लाभ: नया स्किल जोड़ने के लिए केवल इसे डायरेक्टरी में रखने की आवश्यकता है; कॉन्फ़िगरेशन बदलने की आवश्यकता नहीं। सभी Agents स्वचालित रूप से नया स्किल प्राप्त करते हैं। कॉन्फ़िगरेशन त्रुटि जोखिम कम करता है।
- Cost: Cannot precisely control which Skills are available to each Agent. All Skills are injected into the System Prompt (increasing token consumption). -> लागत: प्रत्येक Agent के लिए कौन से स्किल उपलब्ध हैं, इसे सटीक रूप से नियंत्रित नहीं कर सकते। सभी स्किल सिस्टम प्रॉम्प्ट में इंजेक्ट हो जाते हैं (टोकन खपत बढ़ाते हैं)।
Components payload-block.
"## Layer 4: Model Aliases" -> "## लेयर 4: मॉडल उपनाम"
Analogy: "Like "Shortcuts"—giving complex model paths short aliases for easy calling." -> "जैसे "शॉर्टकट"—जटिल मॉडल पथों को आसान कॉलिंग के लिए छोटे उपनाम देना।"
Design Trade-offs:
Why are model aliases needed? -> मॉडल उपनामों की आवश्यकता क्यों है?
- Trade-off: Flexibility vs. Readability -> व्यापार-बंद: लचीलापन बनाम पठनीयता
- Decision: Allow users to define short aliases for commonly used models. -> निर्णय: उपयोगकर्ताओं को सामान्यतः उपयोग किए जाने वाले मॉडलों के लिए छोटे उपनाम परिभाषित करने की अनुमति दें।
- Benefits: Simplifies model calls (glm-5 instead of zhipu/glm-5). Supports switching between multiple Providers (same alias can map to different Providers). Facilitates A/B testing and model migration. -> लाभ: मॉडल कॉल को सरल बनाता है (zhipu/glm-5 के बजाय glm-5)। एकाधिक प्रदाताओं के बीच स्विचिंग का समर्थन करता है (एक ही उपनाम विभिन्न प्रदाताओं से मैप हो सकता है)। A/B परीक्षण और मॉडल माइग्रेशन की सुविधा प्रदान करता है।
- Cost: Requires maintaining an alias configuration file. Can cause confusion (the same alias might point to different models for different Agents). -> लागत: एक उपनाम कॉन्फ़िगरेशन फ़ाइल बनाए रखने की आवश्यकता है। भ्रम पैदा कर सकता है (एक ही उपनाम विभिन्न Agents के लिए अलग-अलग मॉडलों की ओर इशारा कर सकता है)।
Components payload-block.
"Practical Example" heading.
Text: "In the System Prompt, model aliases are displayed as:" -> "सिस्टम प्रॉम्प्ट में, मॉडल उपनाम इस प्रकार प्रदर्शित होते हैं:"
Then the list:
Model Aliases
- GLM-5: zhipu/glm-5
- Opus 4.6: xiaowang886/claude-opus-4-6-thinking
- Sonnet 4.5: xiaowang886/claude-sonnet-4-5
Translate the heading "## Model Aliases" -> "## मॉडल उपनाम"
The list items keep the names as is.
"LLMs can use aliases to switch models: /model glm-5" -> "LLMs उपनामों का उपयोग करके मॉडल बदल सकते हैं: /model glm-5"
"## Layer 5: Protocol Specifications" -> "## लेयर 5: प्रोटोकॉल विनिर्देश"
Analogy: "Like "Traffic Rules"—defining standard protocols for Agent interaction with the system." -> "जैसे "ट्रैफ़िक नियम"—सिस्टम के साथ Agent इंटरैक्शन के लिए मानक प्रोटोकॉल परिभाषित करना।"
Design Trade-offs:
Why are protocol specifications needed? -> प्रोटोकॉल विनिर्देशों की आवश्यकता क्यों है?
- Trade-off: Freedom vs. Consistency -> व्यापार-बंद: स्वतंत्रता बनाम स्थिरता
- Decision: Define standardized interaction protocols (Silent Replies, Heartbeats, Reply Tags, etc.). -> निर्णय: मानकीकृत इंटरैक्शन प्रोटोकॉल परिभाषित करें (मूक उत्तर, हार्टबीट, उत्तर टैग, आदि)।
- Benefits: Ensures consistent behavior across all Agents. Supports automated monitoring and health checks. Simplifies multi-Agent collaboration. -> लाभ: सभी Agents में सुसंगत व्यवहार सुनिश्चित करता है। स्वचालित निगरानी और स्वास्थ्य जांच का समर्थन करता है। बहु-Agent सहयोग को सरल बनाता है।
- Cost: Limits the Agent's freedom of expression. Requires the LLM to strictly follow protocols (which might be ignored). -> लागत: Agent की अभिव्यक्ति की स्वतंत्रता को सीमित करता है। LLM को प्रोटोकॉल का सख्ती से पालन करने की आवश्यकता है (जिसे अनदेखा किया जा सकता है)।
Components payload-block.
"Practical Example" -> "व्यावहारिक उदाहरण"
Silent Replies Example:
User: Received
Agent: NO_REPLY
Translate: मूक उत्तर उदाहरण:
उपयोगकर्ता: Received
Agent: NO_REPLY
(Keep "Received" and "NO_REPLY" as is? "Received" is a common term, could translate to "प्राप्त". I'll translate to "प्राप्त" for naturalness.)
Heartbeats Example:
System: [Heartbeat Poll]
Agent: HEARTBEAT_OK
Translate: हार्टबीट उदाहरण:
सिस्टम: [हार्टबीट पोल]
Agent: HEARTBEAT_OK
Reply Tags Example:
Agent: [[reply_to_current]] Task completed ✓
Translate: उत्तर टैग उदाहरण:
Agent: [[reply_to_current]] कार्य पूर्ण ✓
"## Layer 6: Runtime Info" -> "## लेयर 6: रनटाइम जानकारी"
Analogy: "Like a "Dashboard"—telling the LLM the real-time status of the current running environment." -> "जैसे एक "डैशबोर्ड"—LLM को वर्तमान चल रहे वातावरण की रीयल-टाइम स्थिति बताना।"
Design Trade-offs:
Why inject runtime info every time? -> हर बार रनटाइम जानकारी क्यों इंजेक्ट करें?
- Trade-off: Token Consumption vs. Context Accuracy -> व्यापार-बंद: टोकन खपत बनाम संदर्भ सटीकता
- Decision: Inject the latest runtime status with every request. -> निर्णय: प्रत्येक अनुरोध के साथ नवीनतम रनटाइम स्थिति इंजेक्ट करें।
- Benefits: LLM knows the current time (avoids time confusion). LLM knows the current model (avoids capability misjudgment). LLM knows the current environment (avoids path errors). -> लाभ: LLM वर्तमान समय जानता है (समय भ्रम से बचाता है)। LLM वर्तमान मॉडल जानता है (क्षमता गलत आकलन से बचाता है)। LLM वर्तमान वातावरण जानता है (पथ त्रुटियों से बचाता है)।
- Cost: Consumes ~2KB tokens per request. Information may contain redundancy. -> लागत: प्रति अनुरोध ~2KB टोकन खपत करता है। जानकारी में अतिरेक हो सकता है।
Components payload-block.
"Practical Example" -> "व्यावहारिक उदाहरण"
"## Runtime" -> "## रनटाइम"
But the actual text is just "## Runtime" then a line? In the source it's "## Runtime" then blank? Actually source shows:
Runtime
Then next heading. So translate heading.
"## Layer 7: Workspace Files ★ User Controllable" -> "## लेयर 7: वर्कस्पेस फ़ाइलें ★ उपयोगकर्ता नियंत्रणीय"
Analogy: "Like "Your Work Notes"—these are static configuration files you can edit directly." -> "जैसे "आपके कार्य नोट्स"—ये स्थिर कॉन्फ़िगरेशन फ़ाइलें हैं जिन्हें आप सीधे संपादित कर सकते हैं।"
Design Trade-offs:
Why is only this layer statically editable? -> केवल यही परत स्थिर रूप से संपादन योग्य क्यों है?
- Trade-off: Framework Stability vs. User Freedom -> व्यापार-बंद: फ्रेमवर्क स्थिरता बनाम उपयोगकर्ता स्वतंत्रता
- Decision: Separate the "changing" from the "unchanging"; the framework layer ensures consistency while the user layer allows personalization. -> निर्णय: "बदलने वाली" को "अपरिवर्तनीय" से अलग करें; फ्रेमवर्क परत स्थिरता सुनिश्चित करती है जबकि उपयोगकर्ता परत वैयक्तिकरण की अनुमति देती है।
- Benefits: Users can define Agent identity, work specs, and memory. Framework upgrades won't break user configs. Config files can be version-controlled, backed up, and shared. -> लाभ: उपयोगकर्ता Agent पहचान, कार्य विशिष्टताएँ और मेमोरी परिभाषित कर सकते हैं। फ्रेमवर्क अपग्रेड उपयोगकर्ता कॉन्फ़िग को नहीं तोड़ेंगे। कॉन्फ़िग फ़ाइलों को संस्करण-नियंत्रित, बैकअप और साझा किया जा सकता है।
- Cost: Users cannot modify core framework behavior. Requires learning the TELOS framework and file structure. -> लागत: उपयोगकर्ता कोर फ्रेमवर्क व्यवहार को संशोधित नहीं कर सकते। TELOS फ्रेमवर्क और फ़ाइल संरचना सीखने की आवश्यकता है।
"Core Files" -> "मुख्य फ़ाइलें"
Payload-block.
"## Layer 8: Bootstrap Hook System ★ User Controllable" -> "## लेयर 8: बूटस्ट्रैप हुक सिस्टम ★ उपयोगकर्ता नियंत्रणीय"
Analogy: "Like a "Programmable Syringe"—you can write scripts to dynamically inject content into the System Prompt at runtime." -> "जैसे एक "प्रोग्रामेबल सिरिंज"—आप रनटाइम पर सिस्टम प्रॉम्प्ट में डायनामिक रूप से सामग्री इंजेक्ट करने के लिए स्क्रिप्ट लिख सकते हैं।"
Design Trade-offs:
Why is a Hook system needed? -> हुक सिस्टम की आवश्यकता क्यों है?
- Trade-off: Simplicity of Static Config vs. Flexibility of Dynamic Injection -> व्यापार-बंद: स्थिर कॉन्फ़िग की सादगी बनाम डायनामिक इंजेक्शन का लचीलापन
- Decision: Provide a dynamic Hook mechanism alongside static Workspace Files. -> निर्णय: स्थिर वर्कस्पेस फ़ाइलों के साथ एक डायनामिक हुक तंत्र प्रदान करें।
- Benefits: Can dynamically adjust injected content based on context (channel, sender, time). Can execute shell commands and inject output (e.g., current weather, Git status). Can read external files and inject them (e.g., project docs, API docs). Supports conditional logic (if/else). -> लाभ: संदर्भ के आधार पर इंजेक्ट की गई सामग्री को डायनामिक रूप से समायोजित कर सकते हैं (चैनल, प्रेषक, समय)। शेल कमांड निष्पादित कर सकते हैं और आउटपुट इंजेक्ट कर सकते हैं (जैसे, वर्तमान मौसम, Git स्थिति)। बाहरी फ़ाइलें पढ़ सकते हैं और उन्हें इंजेक्ट कर सकते हैं (जैसे, प्रोजेक्ट दस्तावेज़, API दस्तावेज़)। सशर्त तर्क (if/else) का समर्थन करता है।
- Cost: Requires learning Hook system syntax and trigger mechanisms. Hook script errors can cause System Prompt anomalies. Increases system complexity. -> लागत: हुक सिस्टम सिंटैक्स और ट्रिगर तंत्र सीखने की आवश्यकता है। हुक स्क्रिप्ट त्रुटियाँ सिस्टम प्रॉम्प्ट में विसंगतियाँ पैदा कर सकती हैं। सिस्टम जटिलता बढ़ाता है।
"Four Hook Mechanisms" -> "चार हुक तंत्र"
Then numbered list with headings. First heading: "1. agent:bootstrap Hook (Internal Hook System)" -> "1. agent:bootstrap हुक (आंतरिक हुक सिस्टम)"
Then subtext:
Trigger Location: applyBootstrapHookOverrides() in bootstrap-hooks.ts -> ट्रिगर स्थान: bootstrap-hooks.ts में applyBootstrapHookOverrides()
Capabilities: (list) -> क्षमताएँ:
- Full control over the bootstrapFiles array. -> bootstrapFiles ऐरे पर पूर्ण नियंत्रण।
- Can add, delete, or modify files. -> फ़ाइलें जोड़, हटा या संशोधित कर सकते हैं।
- Can reorder files. -> फ़ाइलों को पुनर्क्रमित कर सकते हैं।
- Can modify file content. -> फ़ाइल सामग्री संशोधित कर सकते हैं।
Who can register: -> कौन पंजीकरण कर सकता है:
- OpenClaw plugins. -> OpenClaw प्लगइन्स।
- Workspace Hooks (~/.openclaw/workspace-/hooks/ directory). -> वर्कस्पेस हुक (~/.openclaw/workspace-/hooks/ निर्देशिका)।
- Internal modules. -> आंतरिक मॉड्यूल।
Code Example: -> कोड उदाहरण:
The code block:
registerInternalHook("agent:bootstrap", (event) => {
const context = event.context as AgentBootstrapHookContext;
// Full control over bootstrapFiles array
context.bootstrapFiles = [
{ path: "CUSTOM.md", content: "Custom Content" }
];
});
Translate the strings inside? The code is for machine to run? Actually it's an example code. The comment "// Full control over bootstrapFiles array" is a comment that should be translated? According to rule 4: "If the body contains comments in English alongside actual code, translate ONLY the comments." So we translate the comment to Hindi: "// bootstrapFiles ऐरे पर पूर्ण नियंत्रण"
But the rest of the code (function calls, variable names) should be kept as is. So:
registerInternalHook("agent:bootstrap", (event) => {
const context = event.context as AgentBootstrapHookContext;
// bootstrapFiles ऐरे पर पूर्ण नियंत्रण
context.bootstrapFiles = [
{ path: "CUSTOM.md", content: "कस्टम सामग्री" }
];
});
Note: "Custom Content" can be translated to "कस्टम सामग्री".
Second mechanism: "1. bootstrap-extra-files Hook (Bundled Hook)" -> "1. bootstrap-extra-files हुक (बंडल हुक)" (but note the numbering: source has "1." again? Actually source shows:
- agent:bootstrap Hook
- bootstrap-extra-files Hook
- before_prompt_build Hook
- bootstrapMaxChars / bootstrapTotalMaxChars
So the numbers are all "1." in source. In translation, we can keep as "1." or use bullet? Better to keep as numbered list with same number? But Markdown will render as ordered list. I'll use bullet numbers as in source: "1." for each. But to avoid confusion, I'll follow source exactly: "1." for each item.
For second "1.":
Trigger Location: handler.ts in hooks/bundled/bootstrap-extra-files/
Capabilities: Only appends files; does not modify existing ones. Specifies extra files via configuration file.
Config Example:
{
"hooks": {
"bootstrap-extra-files": {
"enabled": true,
"paths": ["extra/*.md", "docs/CONTEXT.md"]
}
}
}
Translate:
ट्रिगर स्थान: hooks/bundled/bootstrap-extra-files/ में handler.ts
क्षमताएँ: केवल फ़ाइलें जोड़ता है; मौजूदा फ़ाइलों को संशोधित नहीं करता। कॉन्फ़िगरेशन फ़ाइल के माध्यम से अतिरिक्त फ़ाइलें निर्दिष्ट करता है।
कॉन्फ़िग उदाहरण: (keep JSON as is, but translate string values? The JSON has "enabled": true, "paths" array. The paths are file globs, keep as is. Only "bootstrap-extra-files" key is a technical term, kept as is. So no translation needed.)
Applicable Scenarios: -> लागू परिदृश्य:
- Need to inject project-specific context files. -> प्रोजेक्ट-विशिष्ट संदर्भ फ़ाइलों को इंजेक्ट करने की आवश्यकता।
- Don't want to modify the default 8 Bootstrap files. -> डिफ़ॉल्ट 8 बूटस्ट्रैप फ़ाइलों को संशोधित नहीं करना चाहते।
- Need to dynamically load extra documentation. -> अतिरिक्त दस्तावेज़ीकरण को डायनामिक रूप से लोड करने की आवश्यकता।
Third mechanism: "1. before_prompt_build Hook (Plugin Hook)"
Trigger Location: runBeforePromptBuild() in attempt.ts
Capabilities: Modifies the final prompt (after system prompt construction, before sending to LLM). Can prepend context (add content before the prompt). Can override systemPrompt.
Event Data:
{
prompt: string; // User input
messages: unknown[]; // Session message history
}
Return Value:
{
prependContext?: string; // Content added before the prompt
systemPrompt?: string; // Overrides the system prompt
}
Applicable Scenarios:
- Need to dynamically adjust prompt based on session history.
- Need to inject real-time context (e.g., current time, weather).
- Need to completely replace the system prompt.
Translate:
ट्रिगर स्थान: attempt.ts में runBeforePromptBuild()
क्षमताएँ: अंतिम प्रॉम्प्ट को संशोधित करता है (सिस्टम प्रॉम्प्ट निर्माण के बाद, LLM को भेजने से पहले)। संदर्भ को प्रस्तुत कर सकता है (प्रॉम्प्ट से पहले सामग्री जोड़ें)। systemPrompt को ओवरराइड कर सकता है।
ईवेंट डेटा:
{
prompt: string; // उपयोगकर्ता इनपुट
messages: unknown[]; // सत्र संदेश इतिहास
}
वापसी मान:
{
prependContext?: string; // प्रॉम्प्ट से पहले जोड़ी गई सामग्री
systemPrompt?: string; // सिस्टम प्रॉम्प्ट को ओवरराइड करता है
}
लागू परिदृश्य:
- सत्र इतिहास के आधार पर प्रॉम्प्ट को डायनामिक रूप से समायोजित करने की आवश्यकता।
- रीयल-टाइम संदर्भ (जैसे, वर्तमान समय, मौसम) इंजेक्ट करने की आवश्यकता।
- सिस्टम प्रॉम्प्ट को पूरी तरह से बदलने की आवश्यकता।
Fourth mechanism: "1. bootstrapMaxChars / bootstrapTotalMaxChars (Config Item)"
Type: Configuration item (not a hook)
Capabilities: Controls character budget. Single file default: 20K. Total default: 150K. Excess is truncated by taking the first 70% + last 20%.
Config Location:
{
"agents": {
"defaults": {
"bootstrapMaxChars": 20000,
"bootstrapTotalMaxChars": 150000
}
}
}
Translate:
प्रकार: कॉन्फ़िगरेशन आइटम (हुक नहीं)
क्षमताएँ: कैरेक्टर बजट को नियंत्रित करता है। एकल फ़ाइल डिफ़ॉल्ट: 20K। कुल डिफ़ॉल्ट: 150K। अतिरिक्त को पहले 70% + अंतिम 20% लेकर काट दिया जाता है।
कॉन्फ़िग स्थान: (keep JSON as is)
Then "Practical Advice" (actually the source has "Practical Advice" but it's not a heading? It appears as a heading? Let's check source: After the four mechanisms, there is "Practical Advice" as a subheading? Yes, it's in bold? Actually source: "Practical Advice" then three scenario subheadings. So translate "Practical Advice" -> "व्यावहारिक सलाह"
Scenario 1: "Scenario 1: I want to add project documentation" -> "परिदृश्य 1: मैं प्रोजेक्ट दस्तावेज़ीकरण जोड़ना चाहता हूँ"
Recommended Solution: bootstrap-extra-files -> अनुशंसित समाधान: bootstrap-extra-files
Then config block as before.
Scenario 2: "Scenario 2: I want to dynamically load files based on task type" -> "परिदृश्य 2: मैं कार्य प्रकार के आधार पर फ़ाइलों को डायनामिक रूप से लोड करना चाहता हूँ"
Recommended Solution: Custom agent:bootstrap Hook -> अनुशंसित समाधान: कस्टम agent:bootstrap हुक
Then code example with comment to translate.
Scenario 3: "Scenario 3: I want to inject real-time context (like current time)" -> "परिदृश्य 3: मैं रीयल-टाइम संदर्भ (जैसे वर्तमान समय) इंजेक्ट करना चाहता हूँ"
Recommended Solution: before_prompt_build Hook -> अनुशंसित समाधान: before_prompt_build हुक
Then code example.
Now "## Layer 9: Inbound Context" -> "## लेयर 9: इनबाउंड संदर्भ"
Analogy: "Like "Real-time Traffic Info"—dynamically injects context information of the current conversation with every request." -> "जैसे "रीयल-टाइम ट्रैफ़िक जानकारी"—प्रत्येक अनुरोध के साथ वर्तमान वार्तालाप की संदर्भ जानकारी को डायनामिक रूप से इंजेक्ट करता है।"
Design Trade-offs:
Why inject context every time? -> हर बार संदर्भ क्यों इंजेक्ट करें?
- Trade-off: Token Consumption vs. Conversation Coherence -> व्यापार-बंद: टोकन खपत बनाम वार्तालाप सुसंगतता
- Decision: Inject the latest message metadata, sender info, and conversation history with every request. -> निर्णय: प्रत्येक अनुरोध के साथ नवीनतम संदेश मेटाडेटा, प्रेषक जानकारी और वार्तालाप इतिहास इंजेक्ट करें।
- Benefits: LLM knows who is currently speaking (avoids sender confusion). LLM knows conversation history (maintains context coherence). LLM knows if it was @mentioned (decides whether to respond). -> लाभ: LLM जानता है कि वर्तमान में कौन बोल रहा है (प्रेषक भ्रम से बचाता है)। LLM वार्तालाप इतिहास जानता है (संदर्भ सुसंगतता बनाए रखता है)। LLM जानता है कि क्या @उल्लेख किया गया था (प्रतिक्रिया देने का निर्णय करता है)।
- Cost: Consumes ~3KB tokens per request. Conversation history may contain noise. -> लागत: प्रति अनुरोध ~3KB टोकन खपत करता है। वार्तालाप इतिहास में शोर हो सकता है।
Components payload-block.
"## Complete System Prompt Assembly Process" -> "## पूर्ण सिस्टम प्रॉम्प्ट असेंबली प्रक्रिया"
Then three payload-blocks.
"Summary of User-Controllable Layers" -> "उपयोगकर्ता-नियंत्रणीय परतों का सारांश"
Text: "OpenClaw provides 3 types of user-controllable mechanisms:"
-> "OpenClaw 3 प्रकार के उपयोगकर्ता-नियंत्रणीय तंत्र प्रदान करता है:"
Then list:
- Layer 7 (Workspace Files) - Static configuration files. Scenario: Defining Agent identity, work specs, memory. Pros: Simple, intuitive, easy version control. Cons: Cannot adjust dynamically.
- Layer 8 (Bootstrap Hook System) - Dynamic injection scripts. Scenario: Injecting content based on context, executing commands, reading external files. Pros: Flexible, powerful, supports logic and commands. Cons: Requires learning the Hook system; script errors cause issues.
- Indirect Control of Layer 9 (Inbound Context) - Influencing context by sending messages. Scenario: Influencing LLM behavior via chat history or quoted messages. Pros: No config needed, natural interaction. Cons: Cannot precisely control.
Translate:
- लेयर 7 (वर्कस्पेस फ़ाइलें) - स्थिर कॉन्फ़िगरेशन फ़ाइलें। परिदृश्य: Agent पहचान, कार्य विशिष्टताएँ, मेमोरी परिभाषित करना। लाभ: सरल, सहज, आसान संस्करण नियंत्रण। हानि: डायनामिक रूप से समायोजित नहीं कर सकते।
- लेयर 8 (बूटस्ट्रैप हुक सिस्टम) - डायनामिक इंजेक्शन स्क्रिप्ट। परिदृश्य: संदर्भ के आधार पर सामग्री इंजेक्ट करना, कमांड निष्पादित करना, बाहरी फ़ाइलें पढ़ना। लाभ: लचीला, शक्तिशाली, तर्क और कमांड का समर्थन करता है। हानि: हुक सिस्टम सीखने की आवश्यकता; स्क्रिप्ट त्रुटियाँ समस्याएँ पैदा करती हैं।
- लेयर 9 का अप्रत्यक्ष नियंत्रण (इनबाउंड संदर्भ) - संदेश भेजकर संदर्भ को प्रभावित करना। परिदृश्य: चैट इतिहास या उद्धृत संदेशों के माध्यम से LLM व्यवहार को प्रभावित करना। लाभ: कोई कॉन्फ़िग नहीं, प्राकृतिक इंटरैक्शन। हानि: सटीक रूप से नियंत्रित नहीं कर सकते।
"## Size Comparison Table" -> "## आकार तुलना तालिका"
Blockquote with warning: <blockquote><p>⚠️</p></blockquote> - keep as is, but translate the note? Actually the blockquote contains just "⚠️" and empty paragraphs. Then a note paragraph. Translate the note:
⚠️
Note: The following data are estimates; actual sizes vary by config and runtime context. Framework layers (Layer 1-6 + 9) should theoretically be the same but may vary slightly due to tool definitions, Skills loaded, etc.
Translate the note: "नोट: निम्नलिखित डेटा अनुमान हैं; वास्तविक आकार कॉन्फ़िग और रनटाइम संदर्भ के अनुसार भिन्न होते हैं। फ्रेमवर्क परतें (लेयर 1-6 + 9) सैद्धांतिक रूप से समान होनी चाहिए लेकिन टूल परिभाषाओं, लोड किए गए स्किल्स आदि के कारण थोड़ी भिन्न हो सकती हैं।"
Payload-block.
Notes: (list)
- Layer 7 and Layer 8 are user-controllable; sizes vary by Agent config.
- Other layers are auto-generated and theoretically identical across Agents.
- Actual measurements may differ due to tool availability, Skills loading, and runtime context.
Translate:
- लेयर 7 और लेयर 8 उपयोगकर्ता-नियंत्रणीय हैं; आकार Agent कॉन्फ़िग के अनुसार भिन्न होते हैं।
- अन्य परतें स्वचालित रूप से जनरेट होती हैं और सैद्धांतिक रूप से सभी Agents में समान होती हैं।
- टूल उपलब्धता, स्किल्स लोडिंग और रनटाइम संदर्भ के कारण वास्तविक माप भिन्न हो सकते हैं।
"## Optimization Suggestions" -> "## अनुकूलन सुझाव"
Then two subheadings under that: "1. User-Controllable Part Optimization (Layer 7 + 8)" and "1. Prompt Pruning Strategy" (again with same numbering). Translate:
"1. User-Controllable Part Optimization (Layer 7 + 8)" -> "1. उपयोगकर्ता-नियंत्रणीय भाग अनुकूलन (लेयर 7 + 8)"
Then "Since Layer 7 and 8 are user-controlled, here are optimization strategies:" -> "चूंकि लेयर 7 और 8 उपयोगकर्ता-नियंत्रित हैं, यहाँ अनुकूलन रणनीतियाँ दी गई हैं:"
Layer 7 (Static Files) Optimization: -> लेयर 7 (स्थिर फ़ाइलें) अनुकूलन:
✅ Recommended Lean Strategies: -> ✅ अनुशंसित दुबली रणनीतियाँ:
- IDENTITY.md: Keep core TELOS framework, remove redundant descriptions, use tables instead of paragraphs. -> IDENTITY.md: मुख्य TELOS फ्रेमवर्क रखें, अनावश्यक विवरण हटाएँ, पैराग्राफ के बजाय तालिकाओं का उपयोग करें।
- AGENTS.md: Use checklists instead of long paragraphs, show commands in code blocks, remove duplicate rule explanations. -> AGENTS.md: लंबे पैराग्राफ के बजाय चेकलिस्ट का उपयोग करें, कमांड को कोड ब्लॉक में दिखाएँ, डुप्लिकेट नियम स्पष्टीकरण हटाएँ।
- MEMORY.md: Rely on MemOS auto-export; don't add content manually—let the system maintain it. -> MEMORY.md: MemOS ऑटो-एक्सपोर्ट पर भरोसा करें; मैन्युअल रूप से सामग्री न जोड़ें—सिस्टम को इसे बनाए रखने दें।
❌ Practices to Avoid: -> ❌ टालने योग्य अभ्यास:
- Don't repeat descriptions the OpenClaw framework already knows. -> OpenClaw फ्रेमवर्क को पहले से ज्ञात विवरण न दोहराएँ।
- Don't copy detailed Skill descriptions into Workspace Files. -> विस्तृत स्किल विवरणों को वर्कस्पेस फ़ाइलों में कॉपी न करें।
- Don't use excessive rhetoric or decorative language. -> अत्यधिक बयानबाजी या सजावटी भाषा का उपयोग न करें।
Layer 8 (Hook System) Optimization: -> लेयर 8 (हुक सिस्टम) अनुकूलन:
✅ Recommended Usage Strategies: -> ✅ अनुशंसित उपयोग रणनीतियाँ:
- Prioritize bootstrap-extra-files (simple scenarios). -> bootstrap-extra-files को प्राथमिकता दें (सरल परिदृश्य)।
- Use agent:bootstrap when conditional logic is needed (complex scenarios). -> जब सशर्त तर्क की आवश्यकता हो तो agent:bootstrap का उपयोग करें (जटिल परिदृश्य)।
- Use before_prompt_build for real-time context (dynamic scenarios). -> रीयल-टाइम संदर्भ के लिए before_prompt_build का उपयोग करें (डायनामिक परिदृश्य)।
❌ Practices to Avoid: -> ❌ टालने योग्य अभ्यास:
- Don't execute time-consuming operations in Hooks (blocks System Prompt generation). -> हुक में समय लेने वाले संचालन न निष्पादित करें (सिस्टम प्रॉम्प्ट जनरेशन को अवरुद्ध करता है)।
- Don't inject too much content in Hooks (exceeds token limits). -> हुक में बहुत अधिक सामग्री इंजेक्ट न करें (टोकन सीमा से अधिक)।
- Don't use unstable external dependencies in Hooks (causes startup failure). -> हुक में अस्थिर बाहरी निर्भरताओं का उपयोग न करें (स्टार्टअप विफलता का कारण बनता है)।
"1. Prompt Pruning Strategy" -> "1. प्रॉम्प्ट प्रूनिंग रणनीति"
Text: "If the System Prompt is too large, consider:" -> "यदि सिस्टम प्रॉम्प्ट बहुत बड़ा है, तो विचार करें:"
Payload-block.
"Conclusion" -> "निष्कर्ष"
Then paragraph: "OpenClaw's System Prompt is not a single file, but a carefully orchestrated 9-layer architecture: "
-> "OpenClaw का सिस्टम प्रॉम्प्ट एक एकल फ़ाइल नहीं है, बल्कि एक सावधानीपूर्वक संयोजित 9-परत आर्किटेक्चर है:"
Then bullet list:
- Layer 1-6: Auto-generated by the framework, ensuring consistency and stability.
- Layer 7: User-editable static config files (IDENTITY.md, AGENTS.md, etc.).
- Layer 8: User-programmable dynamic injection scripts (Bootstrap Hook System).
- Layer 9: Real-time context automatically injected by the framework (Inbound Context).
Translate:
- लेयर 1-6: फ्रेमवर्क द्वारा स्वचालित रूप से जनरेट, स्थिरता और सुसंगतता सुनिश्चित करता है।
- लेयर 7: उपयोगकर्ता-संपादन योग्य स्थिर कॉन्फ़िग फ़ाइलें (IDENTITY.md, AGENTS.md, आदि)।
- लेयर 8: उपयोगकर्ता-प्रोग्रामेबल डायनामिक इंजेक्शन स्क्रिप्ट (बूटस्ट्रैप हुक सिस्टम)।
- लेयर 9: फ्रेमवर्क द्वारा स्वचालित रूप से इंजेक्ट किया गया रीयल-टाइम संदर्भ (इनबाउंड संदर्भ)।
"There are 2 user-controllable layers (Layer 7 + 8) , not just Layer 7 as previously misstated."
-> "2 उपयोगकर्ता-नियंत्रणीय परतें हैं (लेयर 7 + 8) , न कि केवल लेयर 7 जैसा कि पहले गलत कहा गया था।"
"Understanding the differences and connections between these layers is key to mastering OpenClaw configuration."
-> "इन परतों के बीच अंतर और संबंधों को समझना OpenClaw कॉन्फ़िगरेशन में महारत हासिल करने की कुंजी है।"
Now we need to output the full translated text with all markdown and tags preserved. Also ensure that we don't add any extra spaces or change formatting.
Let's compile the entire translation.</think><blockquote>
<p>यह दस्तावेज़ OpenClaw Agent द्वारा LLM को भेजे गए पूर्ण सिस्टम प्रॉम्प्ट संरचना का विस्तृत विवरण प्रस्तुत करता है।</p>
</blockquote>
संस्करण:
v2.1
अद्यतन समय:
2026-03-05
समग्र आर्किटेक्चर आरेख

त्वरित नेविगेशन (TL;DR)
शुरुआती लोगों के लिए आवश्यक पठन:
- लेयर 7 (वर्कस्पेस फ़ाइलें) - कॉन्फ़िगरेशन फ़ाइलें जिन्हें आप सीधे संपादित कर सकते हैं।
- लेयर 8 (बूटस्ट्रैप हुक) - जहाँ आप डायनामिक रूप से सामग्री इंजेक्ट करने के लिए स्क्रिप्ट लिख सकते हैं।
- अन्य लेयर फ्रेमवर्क द्वारा स्वचालित रूप से जनरेट होते हैं; बस उन्हें समझें।
सामान्य आवश्यकताएँ:
- Agent की पहचान परिभाषित करना चाहते हैं? → लेयर 7 में IDENTITY.md संपादित करें।
- प्रोजेक्ट दस्तावेज़ीकरण जोड़ना चाहते हैं? → लेयर 8 में bootstrap-extra-files हुक का उपयोग करें।
- रीयल-टाइम संदर्भ इंजेक्ट करना चाहते हैं? → लेयर 8 में before_prompt_build हुक का उपयोग करें।
- फ़ाइल का आकार नियंत्रित करना चाहते हैं? → bootstrapMaxChars कॉन्फ़िगरेशन समायोजित करें।
लेयर 1: OpenClaw फ्रेमवर्क कोर
समानता
जैसे किसी ऑपरेशन मैनुअल का "उपयोग के निर्देश" अनुभाग—LLM को बताना कि आप कौन हैं, आप क्या कर सकते हैं, और आपको कैसे प्रतिक्रिया देनी चाहिए।
घटक

व्यावहारिक उदाहरण
आप एक "क्रिएटिव पार्टनर" के रूप में काम कर रहे हैं, जो AI सामग्री निर्माण विशेषज्ञ Agent है।
वर्तमान समय: 2026-03-05 14:37:00 CST
=== टूल कॉलिंग विनिर्देश ===
- XML-शैली टूल कॉलिंग प्रारूप का उपयोग करें।
- प्रत्येक टूल कॉल में एक अद्वितीय tool_call_id शामिल होना चाहिए।
- टूल परिणाम <tool_result> टैग के माध्यम से लौटाए जाते हैं।
- टूल निष्पादित करते समय AbortSignal पर विचार करें ताकि रद्दीकरण का समर्थन हो सके।
=== सुरक्षा सीमाएँ ===
- विनाशकारी संचालन (rm -rf, फ़ॉर्मेटिंग, आदि) निष्पादित करने से सख्त मनाही है।
- संवेदनशील उपयोगकर्ता जानकारी को संभालने पर एन्क्रिप्ट किया जाना चाहिए।
- अनधिकृत चैनलों पर संदेश भेजना प्रतिबंधित है।
डिज़ाइन व्यापार-बंद
इसे इस तरह से डिज़ाइन क्यों किया गया?
- व्यापार-बंद: लचीलापन बनाम स्थिरता
- निर्णय: फ्रेमवर्क परत पर एकीकृत जनरेशन सभी Agents के लिए सुसंगत मूल व्यवहार सुनिश्चित करता है।
- लाभ: उपयोगकर्ताओं को प्रत्येक Agent के लिए मूल नियमों को दोहराने की आवश्यकता नहीं है। फ्रेमवर्क अपग्रेड होने पर सभी Agents स्वचालित रूप से नई क्षमताएँ प्राप्त करते हैं। कॉन्फ़िगरेशन त्रुटियों का जोखिम कम करता है।
- लागत: उपयोगकर्ता इन मुख्य नियमों को संशोधित नहीं कर सकते। विशेष व्यवहार को लेयर 7/8 के माध्यम से अप्रत्यक्ष रूप से लागू किया जाना चाहिए।
लेयर 2: टूल परिभाषाएँ
समानता
जैसे स्विस आर्मी नाइफ की टूल सूची—LLM को बताना कि आपके पास कौन से टूल हैं, प्रत्येक क्या करता है, और उनका उपयोग कैसे करें।
घटक

टूल परिभाषा उदाहरण
{
"name": "read",
"description": "फ़ाइल सामग्री पढ़ें। टेक्स्ट फ़ाइलों और छवियों (jpg/png/gif/webp) का समर्थन करता है। छवियाँ अटैचमेंट के रूप में भेजी जाती हैं। टेक्स्ट आउटपुट 2000 पंक्तियों या 50KB तक सीमित है।",
"parameters": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "फ़ाइल पथ (सापेक्ष या निरपेक्ष)"
},
"offset": {
"type": "number",
"description": "प्रारंभिक पंक्ति संख्या (1-आधारित)"
},
"limit": {
"type": "number",
"description": "पढ़ने के लिए अधिकतम पंक्तियाँ"
}
},
"required": ["path"]
}
}
डिज़ाइन व्यापार-बंद
JSON Schema का उपयोग क्यों?
- व्यापार-बंद: लचीलापन बनाम प्रकार सुरक्षा
- निर्णय: टूल पैरामीटर परिभाषित करने के लिए सख्त JSON Schema का उपयोग करें।
- लाभ: LLM टूल उपयोग को अधिक सटीक रूप से समझता है। फ्रेमवर्क कॉल करने से पहले पैरामीटर मान्य कर सकता है। स्वचालित रूप से दस्तावेज़ीकरण और प्रकार परिभाषाएँ उत्पन्न करता है।
- लागत: नए टूल जोड़ने के लिए पूर्ण Schema लिखने की आवश्यकता होती है। पूरी तरह से गतिशील पैरामीटर संरचनाओं का समर्थन नहीं कर सकता।
लेयर 3: स्किल्स रजिस्ट्री
समानता
जैसे किसी रेस्तरां का "विशेष मेनू"—LLM को बताना कि कॉल करने के लिए कौन से पेशेवर "रेसिपीज़" उपलब्ध हैं।
डिज़ाइन व्यापार-बंद
मैनुअल रजिस्ट्रेशन के बजाय डायरेक्टरी स्कैनिंग का उपयोग क्यों?
- व्यापार-बंद: लचीलापन बनाम रखरखाव लागत
- निर्णय: ~/development/openclaw/skills/ डायरेक्टरी को स्वचालित रूप से स्कैन करें।
- लाभ: नया स्किल जोड़ने के लिए केवल इसे डायरेक्टरी में रखने की आवश्यकता है; कॉन्फ़िगरेशन बदलने की आवश्यकता नहीं। सभी Agents स्वचालित रूप से नया स्किल प्राप्त करते हैं। कॉन्फ़िगरेशन त्रुटि जोखिम कम करता है।
- लागत: प्रत्येक Agent के लिए कौन से स्किल उपलब्ध हैं, इसे सटीक रूप से नियंत्रित नहीं कर सकते। सभी स्किल सिस्टम प्रॉम्प्ट में इंजेक्ट हो जाते हैं (टोकन खपत बढ़ाते हैं)।
घटक

लेयर 4: मॉडल उपनाम
समानता
जैसे "शॉर्टकट"—जटिल मॉडल पथों को आसान कॉलिंग के लिए छोटे उपनाम देना।
डिज़ाइन व्यापार-बंद
मॉडल उपनामों की आवश्यकता क्यों है?
- व्यापार-बंद: लचीलापन बनाम पठनीयता
- निर्णय: उपयोगकर्ताओं को सामान्यतः उपयोग किए जाने वाले मॉडलों के लिए छोटे उपनाम परिभाषित करने की अनुमति दें।
- लाभ: मॉडल कॉल को सरल बनाता है (zhipu/glm-5 के बजाय glm-5)। एकाधिक प्रदाताओं के बीच स्विचिंग का समर्थन करता है (एक ही उपनाम विभिन्न प्रदाताओं से मैप हो सकता है)। A/B परीक्षण और मॉडल माइग्रेशन की सुविधा प्रदान करता है।
- लागत: एक उपनाम कॉन्फ़िगरेशन फ़ाइल बनाए रखने की आवश्यकता है। भ्रम पैदा कर सकता है (एक ही उपनाम विभिन्न Agents के लिए अलग-अलग मॉडलों की ओर इशारा कर सकता है)।
घटक

व्यावहारिक उदाहरण
सिस्टम प्रॉम्प्ट में, मॉडल उपनाम इस प्रकार प्रदर्शित होते हैं:
मॉडल उपनाम
- GLM-5: zhipu/glm-5
- Opus 4.6: xiaowang886/claude-opus-4-6-thinking
- Sonnet 4.5: xiaowang886/claude-sonnet-4-5
LLMs उपनामों का उपयोग करके मॉडल बदल सकते हैं: /model glm-5
लेयर 5: प्रोटोकॉल विनिर्देश
समानता
जैसे "ट्रैफ़िक नियम"—सिस्टम के साथ Agent इंटरैक्शन के लिए मानक प्रोटोकॉल परिभाषित करना।
डिज़ाइन व्यापार-बंद
प्रोटोकॉल विनिर्देशों की आवश्यकता क्यों है?
- व्यापार-बंद: स्वतंत्रता बनाम स्थिरता
- निर्णय: मानकीकृत इंटरैक्शन प्रोटोकॉल परिभाषित करें (मूक उत्तर, हार्टबीट, उत्तर टैग, आदि)।
- लाभ: सभी Agents में सुसंगत व्यवहार सुनिश्चित करता है। स्वचालित निगरानी और स्वास्थ्य जांच का समर्थन करता है। बहु-Agent सहयोग को सरल बनाता है।
- लागत: Agent की अभिव्यक्ति की स्वतंत्रता को सीमित करता है। LLM को प्रोटोकॉल का सख्ती से पालन करने की आवश्यकता है (जिसे अनदेखा किया जा सकता है)।
घटक

व्यावहारिक उदाहरण
मूक उत्तर उदाहरण:
उपयोगकर्ता: प्राप्त
Agent: NO_REPLY
हार्टबीट उदाहरण:
सिस्टम: [हार्टबीट पोल]
Agent: HEARTBEAT_OK
उत्तर टैग उदाहरण:
Agent: [[reply_to_current]] कार्य पूर्ण ✓
लेयर 6: रनटाइम जानकारी
समानता
जैसे एक "डैशबोर्ड"—LLM को वर्तमान चल रहे वातावरण की रीयल-टाइम स्थिति बताना।
डिज़ाइन व्यापार-बंद
हर बार रनटाइम जानकारी क्यों इंजेक्ट करें?
- व्यापार-बंद: टोकन खपत बनाम संदर्भ सटीकता
- निर्णय: प्रत्येक अनुरोध के साथ नवीनतम रनटाइम स्थिति इंजेक्ट करें।
- लाभ: LLM वर्तमान समय जानता है (समय भ्रम से बचाता है)। LLM वर्तमान मॉडल जानता है (क्षमता गलत आकलन से बचाता है)। LLM वर्तमान वातावरण जानता है (पथ त्रुटियों से बचाता है)।
- लागत: प्रति अनुरोध ~2KB टोकन खपत करता है। जानकारी में अतिरेक हो सकता है।
घटक

व्यावहारिक उदाहरण
रनटाइम
लेयर 7: वर्कस्पेस फ़ाइलें ★ उपयोगकर्ता नियंत्रणीय
समानता
जैसे "आपके कार्य नोट्स"—ये स्थिर कॉन्फ़िगरेशन फ़ाइलें हैं जिन्हें आप सीधे संपादित कर सकते हैं।
डिज़ाइन व्यापार-बंद
केवल यही परत स्थिर रूप से संपादन योग्य क्यों है?
- व्यापार-बंद: फ्रेमवर्क स्थिरता बनाम उपयोगकर्ता स्वतंत्रता
- निर्णय: "बदलने वाली" को "अपरिवर्तनीय" से अलग करें; फ्रेमवर्क परत स्थिरता सुनिश्चित करती है जबकि उपयोगकर्ता परत वैयक्तिकरण की अनुमति देती है।
- लाभ: उपयोगकर्ता Agent पहचान, कार्य विशिष्टताएँ और मेमोरी परिभाषित कर सकते हैं। फ्रेमवर्क अपग्रेड उपयोगकर्ता कॉन्फ़िग को नहीं तोड़ेंगे। कॉन्फ़िग फ़ाइलों को संस्करण-नियंत्रित, बैकअप और साझा किया जा सकता है।
- लागत: उपयोगकर्ता कोर फ्रेमवर्क व्यवहार को संशोधित नहीं कर सकते। TELOS फ्रेमवर्क और फ़ाइल संरचना सीखने की आवश्यकता है।
मुख्य फ़ाइलें

लेयर 8: बूटस्ट्रैप हुक सिस्टम ★ उपयोगकर्ता नियंत्रणीय
समानता
जैसे एक "प्रोग्रामेबल सिरिंज"—आप रनटाइम पर सिस्टम प्रॉम्प्ट में डायनामिक रूप से सामग्री इंजेक्ट करने के लिए स्क्रिप्ट लिख सकते हैं।
डिज़ाइन व्यापार-बंद
हुक सिस्टम की आवश्यकता क्यों है?
- व्यापार-बंद: स्थिर कॉन्फ़िग की सादगी बनाम डायनामिक इंजेक्शन का लचीलापन
- निर्णय: स्थिर वर्कस्पेस फ़ाइलों के साथ एक डायनामिक हुक तंत्र प्रदान करें।
- लाभ: संदर्भ के आधार पर इंजेक्ट की गई सामग्री को डायनामिक रूप से समायोजित कर सकते हैं (चैनल, प्रेषक, समय)। शेल कमांड निष्पादित कर सकते हैं और आउटपुट इंजेक्ट कर सकते हैं (जैसे, वर्तमान मौसम, Git स्थिति)। बाहरी फ़ाइलें पढ़ सकते हैं और उन्हें इंजेक्ट कर सकते हैं (जैसे, प्रोजेक्ट दस्तावेज़, API दस्तावेज़)। सशर्त तर्क (if/else) का समर्थन करता है।
- लागत: हुक सिस्टम सिंटैक्स और ट्रिगर तंत्र सीखने की आवश्यकता है। हुक स्क्रिप्ट त्रुटियाँ सिस्टम प्रॉम्प्ट में विसंगतियाँ पैदा कर सकती हैं। सिस्टम जटिलता बढ़ाता है।
चार हुक तंत्र
- agent:bootstrap हुक (आंतरिक हुक सिस्टम)
ट्रिगर स्थान: bootstrap-hooks.ts में applyBootstrapHookOverrides()
क्षमताएँ:
- bootstrapFiles ऐरे पर पूर्ण नियंत्रण।
- फ़ाइलें जोड़, हटा या संशोधित कर सकते हैं।
- फ़ाइलों को पुनर्क्रमित कर सकते हैं।
- फ़ाइल सामग्री संशोधित कर सकते हैं।
कौन पंजीकरण कर सकता है:
- OpenClaw प्लगइन्स।
- वर्कस्पेस हुक (~/.openclaw/workspace-*/hooks/ निर्देशिका)।
- आंतरिक मॉड्यूल।
कोड उदाहरण:
registerInternalHook("agent:bootstrap", (event) => {
const context = event.context as AgentBootstrapHookContext;
// bootstrapFiles ऐरे पर पूर्ण नियंत्रण
context.bootstrapFiles = [
{ path: "CUSTOM.md", content: "कस्टम सामग्री" }
];
});
- bootstrap-extra-files हुक (बंडल हुक)
ट्रिगर स्थान: hooks/bundled/bootstrap-extra-files/ में handler.ts
क्षमताएँ:
- केवल फ़ाइलें जोड़ता है; मौजूदा फ़ाइलों को संशोधित नहीं करता।
- कॉन्फ़िगरेशन फ़ाइल के माध्यम से अतिरिक्त फ़ाइलें निर्दिष्ट करता है।
कॉन्फ़िग उदाहरण:
{
"hooks": {
"bootstrap-extra-files": {
"enabled": true,
"paths": ["extra/*.md", "docs/CONTEXT.md"]
}
}
}
लागू परिदृश्य:
- प्रोजेक्ट-विशिष्ट संदर्भ फ़ाइलों को इंजेक्ट करने की आवश्यकता।
- डिफ़ॉल्ट 8 बूटस्ट्रैप फ़ाइलों को संशोधित नहीं करना चाहते।
- अतिरिक्त दस्तावेज़ीकरण को डायनामिक रूप से लोड करने की आवश्यकता।
- before_prompt_build हुक (प्लगइन हुक)
ट्रिगर स्थान: attempt.ts में runBeforePromptBuild()
क्षमताएँ:
- अंतिम प्रॉम्प्ट को संशोधित करता है (सिस्टम प्रॉम्प्ट निर्माण के बाद, LLM को भेजने से पहले)।
- संदर्भ को प्रस्तुत कर सकता है (प्रॉम्प्ट से पहले सामग्री जोड़ें)।
- systemPrompt को ओवरराइड कर सकता है।
ईवेंट डेटा:
{
prompt: string; // उपयोगकर्ता इनपुट
messages: unknown[]; // सत्र संदेश इतिहास
}
वापसी मान:
{
prependContext?: string; // प्रॉम्प्ट से पहले जोड़ी गई सामग्री
systemPrompt?: string; // सिस्टम प्रॉम्प्ट को ओवरराइड करता है
}
लागू परिदृश्य:
- सत्र इतिहास के आधार पर प्रॉम्प्ट को डायनामिक रूप से समायोजित करने की आवश्यकता।
- रीयल-टाइम संदर्भ (जैसे, वर्तमान समय, मौसम) इंजेक्ट करने की आवश्यकता।
- सिस्टम प्रॉम्प्ट को पूरी तरह से बदलने की आवश्यकता।
- bootstrapMaxChars / bootstrapTotalMaxChars (कॉन्फ़िग आइटम)
प्रकार: कॉन्फ़िगरेशन आइटम (हुक नहीं)
क्षमताएँ:
- कैरेक्टर बजट को नियंत्रित करता है।
- एकल फ़ाइल डिफ़ॉल्ट: 20K।
- कुल डिफ़ॉल्ट: 150K।
- अतिरिक्त को पहले 70% + अंतिम 20% लेकर काट दिया जाता है।
कॉन्फ़िग स्थान:
{
"agents": {
"defaults": {
"bootstrapMaxChars": 20000,
"bootstrapTotalMaxChars": 150000
}
}
}
व्यावहारिक सलाह
परिदृश्य 1: मैं प्रोजेक्ट दस्तावेज़ीकरण जोड़ना चाहता हूँ
अनुशंसित समाधान: bootstrap-extra-files
{
"hooks": {
"bootstrap-extra-files": {
"enabled": true,
"paths": ["docs/API.md", "docs/ARCHITECTURE.md"]
}
}
}
परिदृश्य 2: मैं कार्य प्रकार के आधार पर फ़ाइलों को डायनामिक रूप से लोड करना चाहता हूँ
अनुशंसित समाधान: कस्टम agent:bootstrap हुक
registerInternalHook("agent:bootstrap", (event) => {
const context = event.context as AgentBootstrapHookContext;
const sessionKey = context.sessionKey;
// सत्र प्रकार के आधार पर विभिन्न फ़ाइलें लोड करें
if (sessionKey.includes("coding")) {
context.bootstrapFiles.push({
path: "CODING_GUIDELINES.md",
content: fs.readFileSync("...").toString()
});
}
});
परिदृश्य 3: मैं रीयल-टाइम संदर्भ (जैसे वर्तमान समय) इंजेक्ट करना चाहता हूँ
अनुशंसित समाधान: before_prompt_build हुक
on("before_prompt_build", (event, ctx) => {
return {
prependContext: वर्तमान समय: ${new Date().toISOString()}
};
});
लेयर 9: इनबाउंड संदर्भ
समानता
जैसे "रीयल-टाइम ट्रैफ़िक जानकारी"—प्रत्येक अनुरोध के साथ वर्तमान वार्तालाप की संदर्भ जानकारी को डायनामिक रूप से इंजेक्ट करता है।
डिज़ाइन व्यापार-बंद
हर बार संदर्भ क्यों इंजेक्ट करें?
- व्यापार-बंद: टोकन खपत बनाम वार्तालाप सुसंगतता
- निर्णय: प्रत्येक अनुरोध के साथ नवीनतम संदेश मेटाडेटा, प्रेषक जानकारी और वार्तालाप इतिहास इंजेक्ट करें।
- लाभ: LLM जानता है कि वर्तमान में कौन बोल रहा है (प्रेषक भ्रम से बचाता है)। LLM वार्तालाप इतिहास जानता है (संदर्भ सुसंगतता बनाए रखता है)। LLM जानता है कि क्या @उल्लेख किया गया था (प्रतिक्रिया देने का निर्णय करता है)।
- लागत: प्रति अनुरोध ~3KB टोकन खपत करता है। वार्तालाप इतिहास में शोर हो सकता है।
घटक

पूर्ण सिस्टम प्रॉम्प्ट असेंबली प्रक्रिया



उपयोगकर्ता-नियंत्रणीय परतों का सारांश
OpenClaw 3 प्रकार के उपयोगकर्ता-नियंत्रणीय तंत्र प्रदान करता है:
- लेयर 7 (वर्कस्पेस फ़ाइलें) - स्थिर कॉन्फ़िगरेशन फ़ाइलें। परिदृश्य: Agent पहचान, कार्य विशिष्टताएँ, मेमोरी परिभाषित करना। लाभ: सरल, सहज, आसान संस्करण नियंत्रण। हानि: डायनामिक रूप से समायोजित नहीं कर सकते।
- लेयर 8 (बूटस्ट्रैप हुक सिस्टम) - डायनामिक इंजेक्शन स्क्रिप्ट। परिदृश्य: संदर्भ के आधार पर सामग्री इंजेक्ट करना, कमांड निष्पादित करना, बाहरी फ़ाइलें पढ़ना। लाभ: लचीला, शक्तिशाली, तर्क और कमांड का समर्थन करता है। हानि: हुक सिस्टम सीखने की आवश्यकता; स्क्रिप्ट त्रुटियाँ समस्याएँ पैदा करती हैं।
- लेयर 9 का अप्रत्यक्ष नियंत्रण (इनबाउंड संदर्भ) - संदेश भेजकर संदर्भ को प्रभावित करना। परिदृश्य: चैट इतिहास या उद्धृत संदेशों के माध्यम से LLM व्यवहार को प्रभावित करना। लाभ: कोई कॉन्फ़िग नहीं, प्राकृतिक इंटरैक्शन। हानि: सटीक रूप से नियंत्रित नहीं कर सकते।
आकार तुलना तालिका
⚠️
नोट: निम्नलिखित डेटा अनुमान हैं; वास्तविक आकार कॉन्फ़िग और रनटाइम संदर्भ के अनुसार भिन्न होते हैं। फ्रेमवर्क परतें (लेयर 1-6 + 9) सैद्धांतिक रूप से समान होनी चाहिए लेकिन टूल परिभाषाओं, लोड किए गए स्किल्स आदि के कारण थोड़ी भिन्न हो सकती हैं।

नोट्स:
- लेयर 7 और लेयर 8 उपयोगकर्ता-नियंत्रणीय हैं; आकार Agent कॉन्फ़िग के अनुसार भिन्न होते हैं।
- अन्य परतें स्वचालित रूप से जनरेट होती हैं और सैद्धांतिक रूप से सभी Agents में समान होती हैं।
- टूल उपलब्धता, स्किल्स लोडिंग और रनटाइम संदर्भ के कारण वास्तविक माप भिन्न हो सकते हैं।
अनुकूलन सुझाव
- उपयोगकर्ता-नियंत्रणीय भाग अनुकूलन (लेयर 7 + 8)
चूंकि लेयर 7 और 8 उपयोगकर्ता-नियंत्रित हैं, यहाँ अनुकूलन रणनीतियाँ दी गई हैं:
लेयर 7 (स्थिर फ़ाइलें) अनुकूलन:
✅ अनुशंसित दुबली रणनीतियाँ:
- IDENTITY.md: मुख्य TELOS फ्रेमवर्क रखें, अनावश्यक विवरण हटाएँ, पैराग्राफ के बजाय तालिकाओं का उपयोग करें।
- AGENTS.md: लंबे पैराग्राफ के बजाय चेकलिस्ट का उपयोग करें, कमांड को कोड ब्लॉक में दिखाएँ, डुप्लिकेट नियम स्पष्टीकरण हटाएँ।
- MEMORY.md: MemOS ऑटो-एक्सपोर्ट पर भरोसा करें; मैन्युअल रूप से सामग्री न जोड़ें—सिस्टम को इसे बनाए रखने दें।
❌ टालने योग्य अभ्यास:
- OpenClaw फ्रेमवर्क को पहले से ज्ञात विवरण न दोहराएँ।
- विस्तृत स्किल विवरणों को वर्कस्पेस फ़ाइलों में कॉपी न करें।
- अत्यधिक बयानबाजी या सजावटी भाषा का उपयोग न करें।
लेयर 8 (हुक सिस्टम) अनुकूलन:
✅ अनुशंसित उपयोग रणनीतियाँ:
- bootstrap-extra-files को प्राथमिकता दें (सरल परिदृश्य)।
- जब सशर्त तर्क की आवश्यकता हो तो agent:bootstrap का उपयोग करें (जटिल परिदृश्य)।
- रीयल-टाइम संदर्भ के लिए before_prompt_build का उपयोग करें (डायनामिक परिदृश्य)।
❌ टालने योग्य अभ्यास:
- हुक में समय लेने वाले संचालन न निष्पादित करें (सिस्टम प्रॉम्प्ट जनरेशन को अवरुद्ध करता है)।
- हुक में बहुत अधिक सामग्री इंजेक्ट न करें (टोकन सीमा से अधिक)।
- हुक में अस्थिर बाहरी निर्भरताओं का उपयोग न करें (स्टार्टअप विफलता का कारण बनता है)।
- प्रॉम्प्ट प्रूनिंग रणनीति
यदि सिस्टम प्रॉम्प्ट बहुत बड़ा है, तो विचार करें:

निष्कर्ष
OpenClaw का सिस्टम प्रॉम्प्ट एक एकल फ़ाइल नहीं है, बल्कि एक सावधानीपूर्वक संयोजित 9-परत आर्किटेक्चर है:
- लेयर 1-6: फ्रेमवर्क द्वारा स्वचालित रूप से जनरेट, स्थिरता और सुसंगतता सुनिश्चित करता है।
- लेयर 7: उपयोगकर्ता-संपादन योग्य स्थिर कॉन्फ़िग फ़ाइलें (IDENTITY.md, AGENTS.md, आदि)।
- लेयर 8: उपयोगकर्ता-प्रोग्रामेबल डायनामिक इंजेक्शन स्क्रिप्ट (बूटस्ट्रैप हुक सिस्टम)।
- लेयर 9: फ्रेमवर्क द्वारा स्वचालित रूप से इंजेक्ट किया गया रीयल-टाइम संदर्भ (इनबाउंड संदर्भ)।
2 उपयोगकर्ता-नियंत्रणीय परतें हैं (लेयर 7 + 8) , न कि केवल लेयर 7 जैसा कि पहले गलत कहा गया था।
इन परतों के बीच अंतर और संबंधों को समझना OpenClaw कॉन्फ़िगरेशन में महारत हासिल करने की कुंजी है।





