Aller au contenu

System prompt

OpenClaw génère un prompt système personnalisé pour chaque exécution d’agent. Le prompt est propriété de OpenClaw et n’utilise pas de prompt d’exécution par défaut.

Le prompt est assemblé par OpenClaw et injecté dans chaque exécution d’agent.

L’assemblage du prompt comporte trois couches :

  • buildAgentSystemPrompt génère le prompt à partir d’entrées explicites. Il doit rester un générateur pur et ne pas lire la configuration globale directement.
  • resolveAgentSystemPromptConfig résout les paramètres de prompt basés sur la configuration, tels que l’affichage du propriétaire, les indices TTS, les alias de modèle, le mode de citation de mémoire et le mode de délégation de sous-agent pour un agent spécifique.
  • Les adaptateurs d’exécution (intégré, CLI, aperçus de commande/exportation, compactage) rassemblent des faits en direct tels que les outils, l’état du bac à sable, les capacités du canal, les fichiers de contexte, et les contributions de prompt du fournisseur, puis appellent la façade de prompt configurée.

Cela permet de maintenir les surfaces de prompt exportées/déboguées alignées avec les exécutions en direct sans transformer chaque détail spécifique à l’exécution en un constructeur monolithique.

Les plugins de fournisseur peuvent contribuer à des directives de prompt conscientes du cache sans remplacer le prompt entier propriété de OpenClaw. Le runtime du fournisseur peut :

  • remplacer un petit ensemble de sections principales nommées (interaction_style, tool_call_style, execution_bias)
  • injecter un préfixe stable au-dessus de la limite du cache de prompt
  • injecter un suffixe dynamique en dessous de la limite du cache de prompt

Utilisez les contributions propriétaires du fournisseur pour un réglage spécifique à la famille de modèles. Conservez la mutation de prompt before_prompt_build héritée pour la compatibilité ou les modifications de prompt véritablement globales, et non pour le comportement normal du fournisseur.

La superposition de la famille OpenAI GPT-5 garde la règle d’exécution principale petite et ajoute des directives spécifiques au modèle pour l’accrochage de la persona, la sortie concise, la discipline des outils, la recherche parallèle, la couverture des livrables, la vérification, le contexte manquant et l’hygiène des outils de terminal.

Le prompt est intentionnellement compact et utilise des sections fixes :

  • Outils : rappel de la source de vérité des outils structurés plus directives d’utilisation des outils à l’exécution.
  • Biais d’exécution : directives compactes de suivi : agir à tour de rôle sur les demandes actionnables, continuer jusqu’à ce que ce soit terminé ou bloqué, récupérer des résultats d’outils faibles, vérifier l’état mutable en direct et vérifier avant de finaliser.
  • Sécurité : court rappel des garde-fous pour éviter les comportements de recherche de pouvoir ou le contournement de la supervision.
  • Skills (lorsqu’elles sont disponibles) : indique au modèle comment charger les instructions de skills à la demande.
  • OpenClaw Control : indique au modèle de privilégier l’outil OpenClawgateway pour le travail de configuration/redémarrage et d’éviter d’inventer des commandes CLI.
  • OpenClaw Mise à jour automatique : comment inspecter la configuration en toute sécurité avec config.schema.lookup, appliquer un correctif à la configuration avec config.patch, remplacer la configuration complète par config.apply et exécuter update.run uniquement sur demande explicite de l’utilisateur. L’outil gateway orienté agent refuse également de réécrire tools.exec.ask / tools.exec.security, y compris les alias tools.bash.* obsolètes qui sont normalisés vers ces chemins d’exécution protégés.
  • Workspace : répertoire de travail (agents.defaults.workspace).
  • Documentation : chemin local vers la documentation/la source d’OpenClaw et quand les lire.
  • Workspace Files (injected) : indique que les fichiers d’amorçage sont inclus ci-dessous.
  • Sandbox (lorsqu’activé) : indique l’exécution isolée (sandboxed), les chemins du bac à sable (sandbox), et si l’exécution avec élévation est disponible.
  • Current Date & Time : fuseau horaire uniquement (stable dans le cache ; l’horloge en direct provient de session_status).
  • Assistant Output Directives : syntaxe de pièce jointe compacte, de note vocale et de balise de réponse.
  • Heartbeats : comportement du prompt et de l’accusé de réception des battements de cœur (heartbeat), lorsque ceux-ci sont activés pour l’agent par défaut.
  • Runtime : hôte, système d’exploitation, nœud, modèle, racine du dépôt (lorsqu’elle est détectée), niveau de réflexion (une ligne).
  • Reasoning : niveau de visibilité actuel + indice de basculement /reasoning.

OpenClaw conserve le contenu stable important, y compris le Contexte du Projet, au-dessus de la limite du cache de prompt interne. Les sections volatiles de canal/session telles que les conseils intégrés de l’interface utilisateur de contrôle, la Messagerie, la Voix, le Contexte de Discussion de Groupe, les Réactions, les Battements de Cœur (Heartbeats) et le Runtime sont ajoutées sous cette limite afin que les backends locaux avec des préfixes de cache puissent réutiliser le préfixe d’espace de travail stable à travers les tours de canal. Les descriptions des outils doivent également éviter d’intégrer les noms de canal actuels lorsque le schéma accepté transporte déjà ce détail d’exécution.

La section Outils (Tooling) inclut également des conseils d’exécution pour le travail de longue durée :

  • utilisez cron pour les suivis futurs (check back later, rappels, travail récurrent) au lieu des boucles de veille exec, des astuces de délai yieldMs ou des interrogations process répétées
  • utilisez exec / process uniquement pour les commandes qui commencent maintenant et continuent de s’exécuter en arrière-plan
  • lorsque le réveil automatique à l’achèvement est activé, lancez la commande une seule fois et comptez sur le chemin de réveil basé sur le push lorsqu’elle émet une sortie ou échoue
  • utilisez process pour les journaux, le statut, la saisie ou l’intervention lorsque vous devez inspecter une commande en cours d’exécution
  • si la tâche est plus importante, préférez sessions_spawn ; l’achèvement du sous-agent est basé sur le push et s’annonce automatiquement au demandeur
  • n’interrogez pas subagents list / sessions_list en boucle juste pour attendre l’achèvement

agents.defaults.subagents.delegationMode peut renforcer cette recommandation. Le mode par défaut suggest conserve le rappel de base. prefer ajoute une section dédiée Délégation de sous-agent indiquant à l’agent principal d’agir en tant que coordinateur réactif et de transmettre tout ce qui dépasse une réponse directe via sessions_spawn. Cela concerne uniquement le prompt ; la stratégie d’outil contrôle toujours si sessions_spawn est disponible.

Lorsque l’outil expérimental update_plan est activé, la partie Outiling indique également au modèle de ne l’utiliser que pour le travail multi-étapes non trivial, de garder exactement une étape in_progress, et d’éviter de répéter l’intégralité du plan après chaque mise à jour.

Les garde-fous de sécurité dans le système de prompt sont consultatifs. Ils guident le comportement du modèle mais n’appliquent pas la stratégie. Utilisez la stratégie d’outil, les approbations d’exécution, la mise en bac à sable et les listes de canaux autorisés pour une application stricte ; les opérateurs peuvent les désactiver par conception.

Sur les canaux avec des boutons/cartes d’approbation natifs, le prompt d’exécution indique désormais à l’agent de s’appuyer d’abord sur cette interface d’approbation native. Il ne doit inclure une commande manuelle /approve que lorsque le résultat de l’outil indique que les approbations par chat sont indisponibles ou que l’approbation manuelle est le seul chemin possible.

OpenClaw peut générer des invites système plus petites pour les sous-agents. Le runtime définit un OpenClawpromptMode pour chaque exécution (pas une configuration visible par l’utilisateur) :

  • full (par défaut) : inclut toutes les sections ci-dessus.
  • minimalOpenClaw : utilisé pour les sous-agents ; omet Memory Recall, OpenClaw Self-Update, Model Aliases, User Identity, Assistant Output Directives, Messaging, Silent Replies, et Heartbeats. Les outils, Safety, Skills (si fournis), l’espace de travail, le bac à sable, la date et l’heure actuelles (si connues), le runtime et le contexte injecté restent disponibles.
  • none : renvoie uniquement la ligne d’identité de base.

Lorsque promptMode=minimal, les invites supplémentaires injectées sont étiquetées Subagent Context au lieu de Group Chat Context.

Pour les exécutions de réponse automatique de channel, OpenClaw omet la section générique Silent Replies lorsque le contexte direct, de groupe ou exclusif à l’outil de message possède le contrat de réponse visible. Seul l’ancien mode automatique de groupe/channel doit afficher NO_REPLY ; les discussions directes et les réponses exclusives à l’outil de message ne reçoivent pas de guidance sur les jetons silencieux.

OpenClaw conserve des instantanés d’invites validés pour le chemin heureux du runtime Codex sous OpenClawtest/fixtures/agents/prompt-snapshots/codex-runtime-happy-path/TelegramDiscord. Ils affichent les paramètres de fil/discussion du serveur d’application sélectionnés plus une pile de couches d’invites liées au modèle reconstruite pour les discussions directes Telegram, les groupes Discord et les battements de cœur. Cette pile inclut un appareil d’invite de modèle Codex gpt-5.5OpenClawOpenClaw épinglé généré à partir de la forme du catalogue/cache de modèles de Codex, le texte développeur d’autorisation du chemin heureux Codex, les instructions développeur d’OpenClaw, les instructions de mode collaboration limitées au tour lorsqu’OpenClaw les fournit, l’entrée utilisateur du tour et les références aux spécifications d’outils dynamiques.

Actualisez la fixture de prompt du modèle Codex épinglée avec pnpm prompt:snapshots:sync-codex-model. Par défaut, le script recherche le cache d’exécution de Codex à $CODEX_HOME/models_cache.json, puis ~/.codex/models_cache.json, et ne se rabat ensuite que sur la convention de checkout du mainteneur Codex à ~/code/codex/codex-rs/models-manager/models.json. Si aucune de ces sources n’existe, la commande s’arrête sans modifier la fixture validée. Passez --catalog <path> pour actualiser depuis un models_cache.json spécifique ou un fichier models.json.

Ces instantanés ne constituent toujours pas une capture brute octet par octet d’une requête OpenAI. Codex peut ajouter du contexte d’espace de travail propriétaire de l’exécution, tel que AGENTS.md, le contexte de l’environnement, les mémoires, les instructions de l’application/plugin, et les instructions intégrées de mode de collaboration par défaut dans l’exécution Codex après que OpenClaw a envoyé les paramètres de fil et de tour.

Régénérez-les avec pnpm prompt:snapshots:gen et vérifiez la dérive avec pnpm prompt:snapshots:check. L’IC exécute la vérification de dérive dans le shard de frontière supplémentaire afin que les modifications de prompt et les mises à jour d’instantanés restent attachées à la même PR.

Les fichiers d’amorçage sont résolus à partir de l’espace de travail actif, puis acheminés vers la surface de prompt qui correspond à leur durée de vie :

  • AGENTS.md
  • SOUL.md
  • TOOLS.md
  • IDENTITY.md
  • USER.md
  • HEARTBEAT.md
  • BOOTSTRAP.md (uniquement sur les espaces de travail tout neufs)
  • MEMORY.md lorsqu’il est présent

Sur le harnais natif Codex, OpenClaw évite de répéter les fichiers stables de l’espace de travail à chaque tour de l’utilisateur. Codex charge OpenClawAGENTS.md via sa propre découverte de documents de projet. SOUL.md, IDENTITY.md, TOOLS.md et USER.mdOpenClaw sont transmis en tant qu’instructions de développeur Codex. La liste compacte des compétences d’OpenClaw est également transmise en tant qu’instructions de développeur de collaboration limitées au tour. Le contenu de HEARTBEAT.md n’est pas injecté ; les tours de heartbeat reçoivent une note en mode de collaboration pointant vers le fichier lorsqu’il existe et n’est pas vide. Le contenu de MEMORY.md de l’espace de travail de l’agent configuré n’est pas collé dans chaque tour natif Codex ; lorsque les outils de mémoire sont disponibles pour cet espace de travail, les tours Codex reçoivent une petite note sur la mémoire de l’espace de travail dans les instructions de développeur de collaboration limitées au tour et doivent utiliser memory_search ou memory_get lorsque la mémoire durable est pertinente. Si les outils sont désactivés, la recherche de mémoire est indisponible, ou si l’espace de travail actif diffère de l’espace de travail de mémoire de l’agent, MEMORY.md revient au chemin normal de contexte de tour borné. Le contenu actif de BOOTSTRAP.md conserve pour l’instant le rôle normal de contexte de tour.

Sur les harnais non-Codex, les fichiers d’amorçage continuent d’être composés dans le prompt OpenClaw selon leurs portes existantes. HEARTBEAT.md est omis lors des exécutions normales lorsque les battements de cœur sont désactivés pour l’agent par défaut ou si agents.defaults.heartbeat.includeSystemPromptSection est faux. Gardez les fichiers injectés concis, en particulier le MEMORY.md non-Codex. MEMORY.md est destiné à rester un résumé à long terme organisé ; les notes quotidiennes détaillées appartiennent à memory/*.mdmemory_search et memory_get peuvent les récupérer à la demande. Les fichiers MEMORY.md non-Codex trop volumineux augmentent l’utilisation du prompt et peuvent être partiellement injectés en raison des limites de fichiers d’amorçage ci-dessous.

Les fichiers volumineux sont tronqués à l’aide d’un marqueur. La taille maximale par fichier est contrôlée par agents.defaults.bootstrapMaxChars (par défaut : 20000). Le contenu total d’amorçage injecté sur tous les fichiers est plafonné par agents.defaults.bootstrapTotalMaxChars (par défaut : 60000). Les fichiers manquants injectent un marqueur court de fichier manquant. Lorsqu’une troncation se produit, OpenClaw peut injecter un avis d’avertissement concis sur le système de prompt ; contrôlez cela avec agents.defaults.bootstrapPromptTruncationWarning (off, once, always ; par défaut : always). Les comptes bruts/injectés détaillés restent dans les diagnostics tels que /context, /status, doctor et les journaux.

Pour les fichiers mémoire, la troncation n’est pas une perte de données : le fichier reste intact sur le disque. Sur Codex natif, MEMORY.md est lu à la demande via les outils de mémoire lorsque disponible, avec un repli de prompt borné lorsque les outils ne peuvent pas s’exécuter. Sur d’autres harnais, le modèle ne voit que la copie injectée raccourcie jusqu’à ce qu’il lise ou recherche directement la mémoire. Si MEMORY.md est tronqué de manière répétée à cet endroit, distillez-le en un résumé durable plus court et déplacez l’historique détaillé dans memory/*.md, ou augmentez intentionnellement les limites de démarrage.

Les sessions de sous-agents n’injectent que AGENTS.md et TOOLS.md (les autres fichiers de démarrage sont filtrés pour garder le contexte du sous-agent petit).

Les crochets internes peuvent intercepter cette étape via agent:bootstrap pour modifier ou remplacer les fichiers de démarrage injectés (par exemple en échangeant SOUL.md pour une autre personnalité).

Si vous voulez rendre l’agent moins générique, commencez par Guide de personnalité SOUL.md.

Pour inspecter la contribution de chaque fichier injecté (brut vs injecté, troncation, plus la surcharge du schéma d’outil), utilisez /context list ou /context detail. Voir Contexte.

Le système de prompt inclut une section dédiée Date et heure actuelles lorsque le fuseau horaire de l’utilisateur est connu. Pour garder le cache du prompt stable, il n’inclut maintenant que le fuseau horaire (pas d’horloge dynamique ni de format d’heure).

Utilisez session_status lorsque l’agent a besoin de l’heure actuelle ; la carte de statut inclut une ligne d’horodatage. Le même outil peut optionnellement définir une substitution de model par session (model=default l’efface).

Configurez avec :

  • agents.defaults.userTimezone
  • agents.defaults.timeFormat (auto | 12 | 24)

Voir Date et heure pour les détails complets du comportement.

Lorsque des compétences éligibles existent, OpenClaw injecte une liste de compétences disponibles compacte (formatSkillsForPrompt) qui inclut le chemin de fichier pour chaque compétence. Le prompt instruit le model d’utiliser read pour charger le SKILL.md à l’emplacement répertorié (espace de travail, géré ou groupé). Si aucune compétence n’est éligible, la section Skills est omise.

Les tours natifs Codex reçoivent cette liste en tant qu’instructions de développeur de collaboration limitées au tour au lieu d’une saisie utilisateur par tour, à l’exception des tours cron légers qui préservent le prompt planifié exact. Les autres harnais conservent la section de prompt normale.

L’emplacement peut pointer vers une compétence imbriquée, telle que skills/personal/foo/SKILL.md. L’imbrication est uniquement organisationnelle ; le prompt utilise toujours le nom plat de la compétence à partir du frontmatter SKILL.md.

L’éligibilité comprend les portes de métadonnées de compétences, les vérifications de l’environnement d’exécution/de configuration, et la liste blanche effective des compétences de l’agent lorsque agents.defaults.skills ou agents.list[].skills est configuré.

Les compétences groupées par plugin ne sont éligibles que lorsque leur plugin propriétaire est activé. Cela permet aux plugins d’outils d’exposer des guides d’utilisation approfondis sans intégrer toutes ces directives directement dans chaque description d’outil.

<available_skills>
<skill>
<name>...</name>
<description>...</description>
<location>...</location>
</skill>
</available_skills>

Cela maintient le prompt de base petit tout en permettant une utilisation ciblée des compétences.

Le budget de la liste des compétences appartient au sous-système de compétences :

  • Par défaut global : skills.limits.maxSkillsPromptChars
  • Remplacement par agent : agents.list[].skillsLimits.maxSkillsPromptChars

Les extraits d’exécution bornés génériques utilisent une surface différente :

  • agents.defaults.contextLimits.*
  • agents.list[].contextLimits.*

Cette séparation maintient le dimensionnement des compétences distinct du dimensionnement de la lecture/injection à l’exécution, tel que memory_get, les résultats d’outils en direct et les actualisations AGENTS.md post-compaction.

Le prompt système inclut une section Documentation. Lorsque la documentation locale est disponible, il pointe vers le répertoire de documentation local OpenClaw (docs/ dans une extraction Git ou les docs du package npm). Si la documentation locale n’est pas disponible, il revient à https://docs.openclaw.ai.

La même section inclut également l’emplacement de la source OpenClaw. Les extraits Git exposent la racine source locale afin que l’agent puisse inspecter le code directement. Les installations de package incluent l’URL source GitHub et indiquent à l’agent d’y consulter la source lorsque la documentation est incomplète ou obsolète. Le prompt note également le miroir de la documentation publique, la communauté Discord et ClawHub (https://clawhub.ai) pour la découverte de compétences. Il indique au modèle de consulter d’abord la documentation pour le comportement, les commandes, la configuration ou l’architecture OpenClaw, et d’exécuter openclaw status lui-même lorsque cela est possible (en demandant à l’utilisateur uniquement en cas d’accès manquant). Pour la configuration spécifiquement, il oriente les agents vers l’action d’outil gateway config.schema.lookup pour une documentation et des contraintes exactes au niveau des champs, puis vers docs/gateway/configuration.md et docs/gateway/configuration-reference.md pour des conseils plus généraux.