Plongée au cœur de l'architecture des prompts système d'OpenClaw Agent : une analyse détaillée en 9 couches

@servasyy_ai
CHINOISil y a 4 mois · 05 mars 2026
641K
1.7K
410
51
0

TL;DR

Un guide technique détaillé expliquant l'architecture en 9 couches des prompts système d'OpenClaw Agents, couvrant tous les aspects, des règles fondamentales du framework aux fichiers d'espace de travail contrôlables par l'utilisateur et aux hooks dynamiques.

This document provides a detailed breakdown of the complete System Prompt structure sent by OpenClaw Agent to the LLM.

Translation: <blockquote>

<p>Ce document fournit une analyse détaillée de la structure complète du System Prompt envoyé par l'Agent OpenClaw au LLM.</p>

</blockquote>

Then the empty blockquotes: preserve exactly.

Next blockquote: <blockquote>

<p>Version:</p>

</blockquote> -> <blockquote>

<p>Version :</p>

</blockquote> (Note: French uses a space before colon? Actually, in French typography, there is a space before colon when it's not part of a time. But in Markdown, we can keep as is or adjust. The instruction says preserve formatting, so we can translate the text and keep the bold marks. "Version :" is fine.

Then empty blockquotes.

Next: <blockquote>

<p>v2.1</p>

</blockquote> -> keep as v2.1

Next empty blockquotes.

Next: <blockquote>

<p>Update Time:</p>

</blockquote> -> <blockquote>

<p>Date de mise à jour :</p>

</blockquote>

Empty blockquotes.

Next: <blockquote>

<p>2026-03-05</p>

</blockquote> -> keep as is.

Now the main content.

Heading: ## Overall Architecture Diagram -> ## Diagramme d'architecture générale

Then <payload-block id="blk_0" type="upload" /> -> keep.

Heading: ## Quick Navigation (TL;DR) -> ## Navigation rapide (TL;DR)

Then the list items: "Must-read for Beginners:" -> "Lecture indispensable pour les débutants :" (Note: use colon with space in French? Usually no space before colon in French? Actually, in French typography, there is a space before colon (espace insécable) but in Markdown we can just put a colon after. I'll use a colon without extra space, but the bold part includes the colon. Alternatively, we can write "Lecture indispensable pour les débutants :" The original has colon after the bold, so we keep that.

Then numbered list items:

  1. Layer 7 (Workspace Files) - Configuration files you can edit directly.
  2. Layer 8 (Bootstrap Hook) - Where you can write scripts to dynamically inject content.
  3. Other layers are automatically generated by the framework; just understand them.

Translate:

  1. Couche 7 (Fichiers de l'espace de travail) - Fichiers de configuration que vous pouvez modifier directement.
  2. Couche 8 (Hook Bootstrap) - Où vous pouvez écrire des scripts pour injecter dynamiquement du contenu.
  3. Les autres couches sont générées automatiquement par le framework ; il suffit de les comprendre.

Then "Common Needs:" -> "Besoins courants :"

Then list items:

  • 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:

  • Vous voulez définir l'identité de l'Agent ? → Modifiez IDENTITY.md dans la Couche 7.
  • Vous voulez ajouter de la documentation de projet ? → Utilisez le Hook bootstrap-extra-files dans la Couche 8.
  • Vous voulez injecter du contexte en temps réel ? → Utilisez le Hook before_prompt_build dans la Couche 8.
  • Vous voulez contrôler la taille des fichiers ? → Ajustez la configuration bootstrapMaxChars.

Note: "Layer" is kept as "Couche" because it's a technical term but has a natural French translation. Alternatively, we could keep "Layer" but since the text uses "Layer 7" etc., and in French we often say "Couche 7". But the original instruction says "Preserve any technical terms" - "Layer" might be considered a technical term, but it's also a common word. I think translating to "Couche" is appropriate. However, the prompt says "Keep technical terms in English unless official translation exists". There is no official translation for "Layer" in this context, but it's a common computing term. Since the document is about system architecture, "Couche" is perfectly fine. I'll use "Couche" consistently.

Now move to ## Layer 1: OpenClaw Framework Core -> ## Couche 1 : Cœur du framework OpenClaw

"Analogy" -> "Analogie"

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: <blockquote>

<p>Comme la section "Mode d'emploi" d'un manuel d'utilisation — expliquant au LLM qui vous êtes, ce que vous pouvez faire et comment vous devez répondre.</p>

</blockquote>

Then "Components" -> "Composants"

Then payload block.

"Practical Example" -> "Exemple pratique"

Text: "You are running as a 'Creative Partner,' an AI content creation expert Agent." -> "Vous agissez en tant que 'Partenaire créatif', un Agent expert en création de contenu IA."

Then "Current Time: 2026-03-05 14:37:00 CST" -> keep time as is.

Then "=== Tool Calling Specification ===" -> keep as is? Actually, it's a heading-like line. We can keep the === and translate the text: "=== Spécification d'appel d'outil ==="

Then list items:

  • Use XML-style tool calling format. -> Utilisez le format d'appel d'outil de style XML.
  • Each tool call must include a unique tool_call_id. -> Chaque appel d'outil doit inclure un tool_call_id unique.
  • Tool results are returned via <tool_result> tags. -> Les résultats d'outil sont retournés via les balises <tool_result>.
  • Consider AbortSignal when executing tools to support cancellation. -> Considérez AbortSignal lors de l'exécution des outils pour prendre en charge l'annulation.

Note: Keep HTML tags like <tool_result> as is.

Then "=== Safety Boundaries ===" -> "=== Limites de sécurité ==="

List items:

  • Strictly prohibited from executing destructive operations (rm -rf, formatting, etc.). -> Strictement interdit d'exécuter des opérations destructrices (rm -rf, formatage, etc.).
  • Sensitive user information must be encrypted when handled. -> Les informations sensibles de l'utilisateur doivent être cryptées lors de leur traitement.
  • Prohibited from sending messages to unauthorized channels. -> Interdit d'envoyer des messages à des canaux non autorisés.

Then "Design Trade-offs" -> "Compromis de conception"

"Why design it this way?" -> "Pourquoi concevoir ainsi ?" (or "Pourquoi cette conception ?")

Then bullet points. Translate:

  • Trade-off: Flexibility vs. Consistency -> Compromis : Flexibilité vs Cohérence
  • Decision: Unified generation at the framework layer ensures consistent basic behavior for all Agents. -> Décision : La génération unifiée au niveau du framework garantit un comportement de base cohérent pour tous les 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. -> Avantages : Les utilisateurs n'ont pas besoin de répéter les règles de base pour chaque Agent. Tous les Agents bénéficient automatiquement des nouvelles capacités lors des mises à jour du framework. Réduit le risque d'erreurs de configuration.
  • Cost: Users cannot modify these core rules. Special behaviors must be implemented indirectly via Layer 7/8. -> Coût : Les utilisateurs ne peuvent pas modifier ces règles de base. Les comportements spéciaux doivent être implémentés indirectement via les Couches 7/8.

Continue similarly for all sections.

Now, for the JSON example in "Tool Definition Example": we need to translate the string values. The JSON is not wrapped in code fences, so we treat it as regular text. Translate the description strings. For example:

"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." -> "description": "Lit le contenu d'un fichier. Prend en charge les fichiers texte et les images (jpg/png/gif/webp). Les images sont envoyées en pièces jointes. La sortie texte est limitée à 2000 lignes ou 50 Ko."

Also the description inside properties:

"description": "File path (relative or absolute)" -> "description": "Chemin du fichier (relatif ou absolu)"

"description": "Starting line number (1-indexed)" -> "description": "Numéro de ligne de départ (indexé à partir de 1)"

"description": "Maximum lines to read" -> "description": "Nombre maximum de lignes à lire"

Keep the JSON keys and structure.

Now, there are many payload blocks and lists. Translate all text.

For the "Bootstrap Hook System" section, there are code examples. Those are for machine reading? Actually, they are code examples that the user would read and potentially use. The instruction for <code-segment> tags doesn't apply here because these are not wrapped in code-segment tags. They are presented as code blocks (indented with four spaces). We need to judge: "Is this for a human to READ or for a machine to RUN?" The code examples are TypeScript/JavaScript code that the user would read to understand how to register hooks. They are human-readable code snippets. So we should translate the comments and string literals inside the code, but keep the code structure and variable names. For example:

registerInternalHook("agent:bootstrap", (event) => {

const context = event.context as AgentBootstrapHookContext;

// Full control over bootstrapFiles array

context.bootstrapFiles = [

{ path: "CUSTOM.md", content: "Custom Content" }

];

});

We should translate the comment "// Full control over bootstrapFiles array" -> "// Contrôle total sur le tableau bootstrapFiles" and the string "Custom Content" -> "Contenu personnalisé". But the string "agent:bootstrap" is an event name, keep as is. The variable names like context, event are code terms, keep as is. Similarly for other code examples.

Also, there is a JSON config example:

{

"hooks": {

"bootstrap-extra-files": {

"enabled": true,

"paths": ["extra/*.md", "docs/CONTEXT.md"]

}

}

}

Translate the string values? "extra/*.md" and "docs/CONTEXT.md" are file paths, keep as is. "enabled" key and value true keep. So no translation needed except maybe the comment? No comment.

Another JSON example for config item:

{

"agents": {

"defaults": {

"bootstrapMaxChars": 20000,

"bootstrapTotalMaxChars": 150000

}

}

}

Keep as is.

There are also sections with "Practical Advice" and bullet points. Translate all.

For the "Size Comparison Table" heading, translate.

Blockquote with warning: <blockquote>

<p>⚠️</p>

</blockquote> keep as is.

Then empty blockquotes.

Then <blockquote>

<p>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.</p>

</blockquote>

Translate: <blockquote>

<p>Remarque : Les données suivantes sont des estimations ; les tailles réelles varient selon la configuration et le contexte d'exécution. Les couches du framework (Couches 1-6 + 9) devraient théoriquement être identiques mais peuvent varier légèrement en raison des définitions d'outils, des compétences chargées, etc.</p>

</blockquote>

Then payload block, notes list.

Optimization suggestions: translate headings and content.

Conclusion section: translate.

We need to be careful with the use of "System Prompt" - keep as "System Prompt" or translate to "Invite système"? Since it's a technical term, but "System Prompt" is common even in French. I'll keep "System Prompt" because it's a specific term. However, the document uses it repeatedly. I'll keep it in English.

Also, "Agent" is kept as "Agent" (capitalized) as it's a product term.

"LLM" is kept.

"Bootstrap Hook" etc. are product-specific, keep as is.

Now, let's write the entire translated text. Since the output is long, I'll provide it in the final answer.</think><blockquote>

<p>Ce document fournit une analyse détaillée de la structure complète du System Prompt envoyé par l'Agent OpenClaw au LLM.</p>

</blockquote>



Version :



v2.1



Date de mise à jour :



2026-03-05

Diagramme d'architecture générale

huangserva - inline image

Navigation rapide (TL;DR)

Lecture indispensable pour les débutants :

  1. Couche 7 (Fichiers de l'espace de travail) – Fichiers de configuration que vous pouvez modifier directement.
  2. Couche 8 (Hook Bootstrap) – Où vous pouvez écrire des scripts pour injecter dynamiquement du contenu.
  3. Les autres couches sont générées automatiquement par le framework ; il suffit de les comprendre.

Besoins courants :

  • Vous voulez définir l'identité de l'Agent ? → Modifiez IDENTITY.md dans la Couche 7.
  • Vous voulez ajouter de la documentation de projet ? → Utilisez le Hook bootstrap-extra-files dans la Couche 8.
  • Vous voulez injecter du contexte en temps réel ? → Utilisez le Hook before_prompt_build dans la Couche 8.
  • Vous voulez contrôler la taille des fichiers ? → Ajustez la configuration bootstrapMaxChars.

Couche 1 : Cœur du framework OpenClaw

Analogie

Comme la section « Mode d'emploi » d'un manuel d'utilisation — expliquant au LLM qui vous êtes, ce que vous pouvez faire et comment vous devez répondre.

Composants

huangserva - inline image

Exemple pratique

Vous agissez en tant que « Partenaire créatif », un Agent expert en création de contenu IA.

Heure actuelle : 2026-03-05 14:37:00 CST

=== Spécification d'appel d'outil ===

  • Utilisez le format d'appel d'outil de style XML.
  • Chaque appel d'outil doit inclure un tool_call_id unique.
  • Les résultats d'outil sont retournés via les balises <tool_result>.
  • Considérez AbortSignal lors de l'exécution des outils pour prendre en charge l'annulation.

=== Limites de sécurité ===

  • Strictement interdit d'exécuter des opérations destructrices (rm -rf, formatage, etc.).
  • Les informations sensibles de l'utilisateur doivent être cryptées lors de leur traitement.
  • Interdit d'envoyer des messages à des canaux non autorisés.

Compromis de conception

Pourquoi concevoir ainsi ?

  • Compromis : Flexibilité vs Cohérence
  • Décision : La génération unifiée au niveau du framework garantit un comportement de base cohérent pour tous les Agents.
  • Avantages : Les utilisateurs n'ont pas besoin de répéter les règles de base pour chaque Agent. Tous les Agents bénéficient automatiquement des nouvelles capacités lors des mises à jour du framework. Réduit le risque d'erreurs de configuration.
  • Coût : Les utilisateurs ne peuvent pas modifier ces règles de base. Les comportements spéciaux doivent être implémentés indirectement via les Couches 7/8.

Couche 2 : Définitions des outils

Analogie

Comme la liste des outils d'un couteau suisse — expliquant au LLM quels outils vous avez, ce que chacun fait et comment les utiliser.

Composants

huangserva - inline image

Exemple de définition d'outil

{

"name": "read",

"description": "Lit le contenu d'un fichier. Prend en charge les fichiers texte et les images (jpg/png/gif/webp). Les images sont envoyées en pièces jointes. La sortie texte est limitée à 2000 lignes ou 50 Ko.",

"parameters": {

"type": "object",

"properties": {

"path": {

"type": "string",

"description": "Chemin du fichier (relatif ou absolu)"

},

"offset": {

"type": "number",

"description": "Numéro de ligne de départ (indexé à partir de 1)"

},

"limit": {

"type": "number",

"description": "Nombre maximum de lignes à lire"

}

},

"required": ["path"]

}

}

Compromis de conception

Pourquoi utiliser JSON Schema ?

  • Compromis : Flexibilité vs Sécurité des types
  • Décision : Utiliser un JSON Schema strict pour définir les paramètres des outils.
  • Avantages : Le LLM comprend plus précisément l'utilisation de l'outil. Le framework peut valider les paramètres avant l'appel. Génère automatiquement la documentation et les définitions de types.
  • Coût : Ajouter un nouvel outil nécessite d'écrire un Schema complet. Impossible de prendre en charge des structures de paramètres entièrement dynamiques.

Couche 3 : Registre des compétences

Analogie

Comme le « Menu des spécialités » d'un restaurant — expliquant au LLM quelles « recettes » professionnelles sont disponibles.

Compromis de conception

Pourquoi utiliser un scan de répertoire plutôt qu'un enregistrement manuel ?

  • Compromis : Flexibilité vs Coût de maintenance
  • Décision : Scanner automatiquement le répertoire ~/development/openclaw/skills/.
  • Avantages : Ajouter une nouvelle compétence nécessite simplement de la placer dans le répertoire ; aucun changement de configuration nécessaire. Tous les Agents bénéficient automatiquement de la nouvelle compétence. Réduit les risques d'erreurs de configuration.
  • Coût : Impossible de contrôler précisément quelles compétences sont disponibles pour chaque Agent. Toutes les compétences sont injectées dans le System Prompt (augmentation de la consommation de tokens).

Composants

huangserva - inline image

Couche 4 : Alias de modèles

Analogie

Comme des « Raccourcis » — donnant des alias courts aux chemins de modèles complexes pour faciliter l'appel.

Compromis de conception

Pourquoi des alias de modèles sont-ils nécessaires ?

  • Compromis : Flexibilité vs Lisibilité
  • Décision : Permettre aux utilisateurs de définir des alias courts pour les modèles fréquemment utilisés.
  • Avantages : Simplifie les appels de modèles (glm-5 au lieu de zhipu/glm-5). Permet de basculer entre plusieurs fournisseurs (le même alias peut correspondre à différents fournisseurs). Facilite les tests A/B et la migration de modèles.
  • Coût : Nécessite de maintenir un fichier de configuration d'alias. Peut prêter à confusion (le même alias peut pointer vers différents modèles pour différents Agents).

Composants

huangserva - inline image

Exemple pratique

Dans le System Prompt, les alias de modèles s'affichent comme suit :

Alias de modèles

  • GLM-5 : zhipu/glm-5
  • Opus 4.6 : xiaowang886/claude-opus-4-6-thinking
  • Sonnet 4.5 : xiaowang886/claude-sonnet-4-5

Les LLM peuvent utiliser des alias pour changer de modèle : /model glm-5

Couche 5 : Spécifications des protocoles

Analogie

Comme des « Règles de circulation » — définissant les protocoles standards pour l'interaction de l'Agent avec le système.

Compromis de conception

Pourquoi des spécifications de protocoles sont-elles nécessaires ?

  • Compromis : Liberté vs Cohérence
  • Décision : Définir des protocoles d'interaction standardisés (Réponses silencieuses, Heartbeats, Tags de réponse, etc.).
  • Avantages : Garantit un comportement cohérent entre tous les Agents. Prend en charge la surveillance automatisée et les vérifications de santé. Simplifie la collaboration multi-Agent.
  • Coût : Limite la liberté d'expression de l'Agent. Exige que le LLM suive strictement les protocoles (qui peuvent être ignorés).

Composants

huangserva - inline image

Exemple pratique

Exemple de réponse silencieuse :

Utilisateur : Reçu

Agent : NO_REPLY

Exemple de Heartbeat :

Système : [Heartbeat Poll]

Agent : HEARTBEAT_OK

Exemple de tag de réponse :

Agent : [[reply_to_current]] Tâche terminée ✓

Couche 6 : Informations d'exécution

Analogie

Comme un « Tableau de bord » — indiquant au LLM l'état en temps réel de l'environnement d'exécution actuel.

Compromis de conception

Pourquoi injecter les informations d'exécution à chaque fois ?

  • Compromis : Consommation de tokens vs Précision du contexte
  • Décision : Injecter le dernier état d'exécution avec chaque requête.
  • Avantages : Le LLM connaît l'heure actuelle (évite la confusion temporelle). Le LLM connaît le modèle actuel (évite les erreurs de jugement de capacité). Le LLM connaît l'environnement actuel (évite les erreurs de chemin).
  • Coût : Consomme environ 2 Ko de tokens par requête. Les informations peuvent contenir des redondances.

Composants

huangserva - inline image

Exemple pratique

Runtime

Couche 7 : Fichiers de l'espace de travail ★ Contrôlable par l'utilisateur

Analogie

Comme vos « Notes de travail » — ce sont des fichiers de configuration statiques que vous pouvez modifier directement.

Compromis de conception

Pourquoi seule cette couche est-elle modifiable statiquement ?

  • Compromis : Stabilité du framework vs Liberté de l'utilisateur
  • Décision : Séparer le « changeant » de l'« immuable » ; la couche framework assure la cohérence tandis que la couche utilisateur permet la personnalisation.
  • Avantages : Les utilisateurs peuvent définir l'identité de l'Agent, les spécifications de travail et la mémoire. Les mises à jour du framework ne cassent pas les configurations utilisateur. Les fichiers de configuration peuvent être versionnés, sauvegardés et partagés.
  • Coût : Les utilisateurs ne peuvent pas modifier le comportement de base du framework. Nécessite d'apprendre le framework TELOS et la structure des fichiers.

Fichiers principaux

huangserva - inline image

Couche 8 : Système de Hook Bootstrap ★ Contrôlable par l'utilisateur

Analogie

Comme une « Seringue programmable » — vous pouvez écrire des scripts pour injecter dynamiquement du contenu dans le System Prompt au moment de l'exécution.

Compromis de conception

Pourquoi un système de Hook est-il nécessaire ?

  • Compromis : Simplicité de la configuration statique vs Flexibilité de l'injection dynamique
  • Décision : Fournir un mécanisme de Hook dynamique en complément des fichiers statiques de l'espace de travail.
  • Avantages : Permet d'ajuster dynamiquement le contenu injecté en fonction du contexte (canal, expéditeur, heure). Permet d'exécuter des commandes shell et d'injecter leur sortie (ex. météo actuelle, statut Git). Permet de lire des fichiers externes et de les injecter (ex. documentation projet, documentation API). Prend en charge la logique conditionnelle (if/else).
  • Coût : Nécessite d'apprendre la syntaxe du système de Hook et les mécanismes de déclenchement. Les erreurs de script Hook peuvent provoquer des anomalies dans le System Prompt. Augmente la complexité du système.

Quatre mécanismes de Hook

  1. Hook agent:bootstrap (Système de Hook interne)

Emplacement de déclenchement : applyBootstrapHookOverrides() dans bootstrap-hooks.ts

Capacités :

  • Contrôle total sur le tableau bootstrapFiles.
  • Peut ajouter, supprimer ou modifier des fichiers.
  • Peut réorganiser les fichiers.
  • Peut modifier le contenu des fichiers.

Qui peut s'enregistrer :

  • Les plugins OpenClaw.
  • Les Hooks de l'espace de travail (~/.openclaw/workspace-*/hooks/ directory).
  • Les modules internes.

Exemple de code :

registerInternalHook("agent:bootstrap", (event) => {

const context = event.context as AgentBootstrapHookContext;

// Contrôle total sur le tableau bootstrapFiles

context.bootstrapFiles = [

{ path: "CUSTOM.md", content: "Contenu personnalisé" }

];

});

  1. Hook bootstrap-extra-files (Hook intégré)

Emplacement de déclenchement : handler.ts dans hooks/bundled/bootstrap-extra-files/

Capacités :

  • Ajoute uniquement des fichiers ; ne modifie pas les fichiers existants.
  • Spécifie les fichiers supplémentaires via un fichier de configuration.

Exemple de configuration :

{

"hooks": {

"bootstrap-extra-files": {

"enabled": true,

"paths": ["extra/*.md", "docs/CONTEXT.md"]

}

}

}

Scénarios applicables :

  • Nécessité d'injecter des fichiers de contexte spécifiques au projet.
  • Souhait de ne pas modifier les 8 fichiers Bootstrap par défaut.
  • Nécessité de charger dynamiquement de la documentation supplémentaire.
  1. Hook before_prompt_build (Hook plugin)

Emplacement de déclenchement : runBeforePromptBuild() dans attempt.ts

Capacités :

  • Modifie le prompt final (après construction du System Prompt, avant envoi au LLM).
  • Peut ajouter du contexte avant le prompt (ajouter du contenu avant le prompt).
  • Peut remplacer systemPrompt.

Données de l'événement :

{

prompt: string; // Saisie utilisateur

messages: unknown[]; // Historique des messages de la session

}

Valeur de retour :

{

prependContext?: string; // Contenu ajouté avant le prompt

systemPrompt?: string; // Remplace le System Prompt

}

Scénarios applicables :

  • Nécessité d'ajuster dynamiquement le prompt en fonction de l'historique de la session.
  • Nécessité d'injecter du contexte en temps réel (ex. heure actuelle, météo).
  • Nécessité de remplacer complètement le System Prompt.
  1. bootstrapMaxChars / bootstrapTotalMaxChars (Élément de configuration)

Type : Élément de configuration (pas un Hook)

Capacités :

  • Contrôle le budget de caractères.
  • Fichier individuel par défaut : 20 Ko.
  • Total par défaut : 150 Ko.
  • Le dépassement est tronqué en prenant les 70 % premiers + les 20 % derniers.

Emplacement de configuration :

{

"agents": {

"defaults": {

"bootstrapMaxChars": 20000,

"bootstrapTotalMaxChars": 150000

}

}

}

Conseils pratiques

Scénario 1 : Je veux ajouter de la documentation de projet

Solution recommandée : bootstrap-extra-files

{

"hooks": {

"bootstrap-extra-files": {

"enabled": true,

"paths": ["docs/API.md", "docs/ARCHITECTURE.md"]

}

}

}

Scénario 2 : Je veux charger dynamiquement des fichiers en fonction du type de tâche

Solution recommandée : Hook agent:bootstrap personnalisé

registerInternalHook("agent:bootstrap", (event) => {

const context = event.context as AgentBootstrapHookContext;

const sessionKey = context.sessionKey;

// Charge différents fichiers selon le type de session

if (sessionKey.includes("coding")) {

context.bootstrapFiles.push({

path: "CODING_GUIDELINES.md",

content: fs.readFileSync("...").toString()

});

}

});

Scénario 3 : Je veux injecter du contexte en temps réel (comme l'heure actuelle)

Solution recommandée : Hook before_prompt_build

on("before_prompt_build", (event, ctx) => {

return {

prependContext: Heure actuelle : ${new Date().toISOString()}

};

});

Couche 9 : Contexte entrant

Analogie

Comme des « Informations routières en temps réel » — injecte dynamiquement les informations contextuelles de la conversation en cours à chaque requête.

Compromis de conception

Pourquoi injecter le contexte à chaque fois ?

  • Compromis : Consommation de tokens vs Cohérence de la conversation
  • Décision : Injecter les dernières métadonnées de message, les informations de l'expéditeur et l'historique de la conversation à chaque requête.
  • Avantages : Le LLM sait qui parle actuellement (évite la confusion sur l'expéditeur). Le LLM connaît l'historique de la conversation (maintient la cohérence du contexte). Le LLM sait s'il a été @mentionné (décide s'il doit répondre).
  • Coût : Consomme environ 3 Ko de tokens par requête. L'historique de la conversation peut contenir du bruit.

Composants

huangserva - inline image

Processus complet d'assemblage du System Prompt

huangserva - inline image
huangserva - inline image
huangserva - inline image

Récapitulatif des couches contrôlables par l'utilisateur

OpenClaw fournit 3 types de mécanismes contrôlables par l'utilisateur :

  1. Couche 7 (Fichiers de l'espace de travail) – Fichiers de configuration statiques. Scénario : Définir l'identité de l'Agent, les spécifications de travail, la mémoire. Avantages : Simple, intuitif, contrôle de version facile. Inconvénients : Impossible de s'adapter dynamiquement.
  2. Couche 8 (Système de Hook Bootstrap) – Scripts d'injection dynamique. Scénario : Injecter du contenu en fonction du contexte, exécuter des commandes, lire des fichiers externes. Avantages : Flexible, puissant, prend en charge la logique et les commandes. Inconvénients : Nécessite d'apprendre le système de Hook ; les erreurs de script causent des problèmes.
  3. Contrôle indirect de la Couche 9 (Contexte entrant) – Influencer le contexte en envoyant des messages. Scénario : Influencer le comportement du LLM via l'historique des messages ou les citations. Avantages : Aucune configuration nécessaire, interaction naturelle. Inconvénients : Impossible de contrôler précisément.

Tableau comparatif des tailles

⚠️



Remarque : Les données suivantes sont des estimations ; les tailles réelles varient selon la configuration et le contexte d'exécution. Les couches du framework (Couches 1-6 + 9) devraient théoriquement être identiques mais peuvent varier légèrement en raison des définitions d'outils, des compétences chargées, etc.

huangserva - inline image

Remarques :

  • Les Couches 7 et 8 sont contrôlables par l'utilisateur ; les tailles varient selon la configuration de l'Agent.
  • Les autres couches sont générées automatiquement et théoriquement identiques entre les Agents.
  • Les mesures réelles peuvent différer en raison de la disponibilité des outils, du chargement des compétences et du contexte d'exécution.

Suggestions d'optimisation

  1. Optimisation de la partie contrôlable par l'utilisateur (Couches 7 + 8)

Puisque les Couches 7 et 8 sont contrôlées par l'utilisateur, voici des stratégies d'optimisation :

Optimisation de la Couche 7 (Fichiers statiques) :

✅ Stratégies allégées recommandées :

  • IDENTITY.md : Conserver le framework TELOS de base, supprimer les descriptions redondantes, utiliser des tableaux plutôt que des paragraphes.
  • AGENTS.md : Utiliser des listes de vérification au lieu de longs paragraphes, afficher les commandes dans des blocs de code, supprimer les explications de règles en double.
  • MEMORY.md : Se fier à l'export automatique de MemOS ; ne pas ajouter de contenu manuellement — laisser le système le maintenir.

❌ Pratiques à éviter :

  • Ne pas répéter les descriptions déjà connues par le framework OpenClaw.
  • Ne pas copier des descriptions détaillées de compétences dans les fichiers de l'espace de travail.
  • Ne pas utiliser un excès de rhétorique ou un langage décoratif.

Optimisation de la Couche 8 (Système de Hook) :

✅ Stratégies d'utilisation recommandées :

  • Privilégier bootstrap-extra-files (scénarios simples).
  • Utiliser agent:bootstrap lorsqu'une logique conditionnelle est nécessaire (scénarios complexes).
  • Utiliser before_prompt_build pour le contexte en temps réel (scénarios dynamiques).

❌ Pratiques à éviter :

  • Ne pas exécuter d'opérations longues dans les Hooks (bloque la génération du System Prompt).
  • Ne pas injecter trop de contenu dans les Hooks (dépasse les limites de tokens).
  • Ne pas utiliser de dépendances externes instables dans les Hooks (provoque un échec au démarrage).
  1. Stratégie d'élagage du Prompt

Si le System Prompt est trop volumineux, envisagez :

huangserva - inline image

Conclusion

Le System Prompt d'OpenClaw n'est pas un fichier unique, mais une architecture à 9 couches soigneusement orchestrée :

  • Couches 1-6 : Générées automatiquement par le framework, garantissant cohérence et stabilité.
  • Couche 7 : Fichiers de configuration statiques modifiables par l'utilisateur (IDENTITY.md, AGENTS.md, etc.).
  • Couche 8 : Scripts d'injection dynamique programmables par l'utilisateur (Système de Hook Bootstrap).
  • Couche 9 : Contexte en temps réel injecté automatiquement par le framework (Contexte entrant).

Il y a 2 couches contrôlables par l'utilisateur (Couches 7 + 8), et non seulement la Couche 7 comme indiqué précédemment.

Comprendre les différences et les connexions entre ces couches est essentiel pour maîtriser la configuration d'OpenClaw.

Enregistrer en un clic

Lire les articles viraux en profondeur avec l’IA de YouMind

Save the source, ask focused questions, summarize the argument, and turn a viral article into reusable notes in one AI workspace.

Explore YouMind
Pour les créateurs

Transformez votre Markdown en un article 𝕏 impeccable

Quand vous publiez vos propres textes longs, la mise en forme 𝕏 des images, tableaux et blocs de code est pénible. YouMind transforme un brouillon Markdown complet en un article 𝕏 impeccable, prêt à publier.

Essayer Markdown vers 𝕏

D'autres patterns à décoder

Articles viraux récents

Explorer plus d'articles viraux