Gateway
Configuration — agents
Clés de configuration propres aux agents sous agents.*, multiAgent.*, session.*,
messages.* et talk.*. Pour les canaux, les outils, l’environnement d’exécution du Gateway et les autres
clés de premier niveau, consultez la référence de configuration.
Valeurs par défaut des agents
agents.defaults.workspace
Valeur par défaut : OPENCLAW_WORKSPACE_DIR lorsqu’elle est définie, sinon ~/.openclaw/workspace (ou ~/.openclaw/workspace-<profile> lorsque OPENCLAW_PROFILE est défini sur un profil autre que celui par défaut).
{ agents: { defaults: { workspace: "~/.openclaw/workspace" } },}Une valeur explicite de agents.defaults.workspace prévaut sur
OPENCLAW_WORKSPACE_DIR. Utilisez la variable d’environnement pour faire pointer les agents par défaut
vers un espace de travail monté lorsque vous ne souhaitez pas inscrire ce chemin dans la configuration.
agents.defaults.repoRoot
Racine facultative du dépôt affichée sur la ligne Runtime du prompt système. Si elle n’est pas définie, OpenClaw la détecte automatiquement en remontant depuis l’espace de travail.
{ agents: { defaults: { repoRoot: "~/Projects/openclaw" } },}agents.defaults.skills
Liste d’autorisation facultative de Skills par défaut pour les agents qui ne définissent pas
agents.list[].skills.
{ agents: { defaults: { skills: ["github", "weather"] }, list: [ { id: "writer" }, // hérite de github, weather { id: "docs", skills: ["docs-search"] }, // remplace les valeurs par défaut { id: "locked-down", skills: [] }, // aucune Skills ], },}- Omettez
agents.defaults.skillspour autoriser toutes les Skills par défaut. - Omettez
agents.list[].skillspour hériter des valeurs par défaut. - Définissez
agents.list[].skills: []pour n’autoriser aucune Skills. - Une liste
agents.list[].skillsnon vide constitue l’ensemble final pour cet agent ; elle n’est pas fusionnée avec les valeurs par défaut.
agents.defaults.skipBootstrap
Désactive la création automatique des fichiers d’amorçage de l’espace de travail (AGENTS.md, SOUL.md, TOOLS.md, IDENTITY.md, USER.md, HEARTBEAT.md, BOOTSTRAP.md).
{ agents: { defaults: { skipBootstrap: true } },}agents.defaults.skipOptionalBootstrapFiles
Ignore la création de certains fichiers facultatifs de l’espace de travail tout en continuant à écrire les fichiers d’amorçage requis (AGENTS.md, TOOLS.md, BOOTSTRAP.md). Valeurs valides : SOUL.md, USER.md, HEARTBEAT.md et IDENTITY.md.
{ agents: { defaults: { skipOptionalBootstrapFiles: ["SOUL.md", "USER.md"], }, },}agents.defaults.contextInjection
Contrôle le moment où les fichiers d’amorçage de l’espace de travail sont injectés dans le prompt système. Valeur par défaut : "always".
"continuation-skip": lors des tours de continuation sûrs (après une réponse terminée de l’assistant), la réinjection de l’amorçage de l’espace de travail est ignorée, ce qui réduit la taille du prompt. Les exécutions Heartbeat et les nouvelles tentatives après Compaction reconstruisent toujours le contexte."never": désactive l’injection des fichiers d’amorçage et de contexte de l’espace de travail à chaque tour. Utilisez cette option uniquement pour les agents qui gèrent intégralement le cycle de vie de leur prompt (moteurs de contexte personnalisés, environnements d’exécution natifs qui construisent leur propre contexte ou workflows spécialisés sans amorçage). Les tours Heartbeat et de récupération après Compaction ignorent également l’injection.
{ agents: { defaults: { contextInjection: "continuation-skip" } },}Remplacement par agent : agents.list[].contextInjection. Les valeurs omises héritent de
agents.defaults.contextInjection.
agents.defaults.bootstrapMaxChars
Nombre maximal de caractères par fichier d’amorçage de l’espace de travail avant troncature. Valeur par défaut : 20000.
{ agents: { defaults: { bootstrapMaxChars: 20000 } },}Remplacement par agent : agents.list[].bootstrapMaxChars. Les valeurs omises héritent de
agents.defaults.bootstrapMaxChars.
agents.defaults.bootstrapTotalMaxChars
Nombre total maximal de caractères injectés pour l’ensemble des fichiers d’amorçage de l’espace de travail. Valeur par défaut : 60000.
{ agents: { defaults: { bootstrapTotalMaxChars: 60000 } },}Remplacement par agent : agents.list[].bootstrapTotalMaxChars. Les valeurs omises
héritent de agents.defaults.bootstrapTotalMaxChars.
Remplacements du profil d’amorçage par agent
Utilisez des remplacements du profil d’amorçage par agent lorsqu’un agent nécessite un comportement
d’injection du prompt différent des valeurs par défaut partagées. Les champs omis héritent de
agents.defaults.
{ agents: { defaults: { contextInjection: "continuation-skip", bootstrapMaxChars: 20000, bootstrapTotalMaxChars: 60000, }, list: [ { id: "strict-worker", contextInjection: "always", bootstrapMaxChars: 50000, bootstrapTotalMaxChars: 300000, }, ], },}agents.defaults.bootstrapPromptTruncationWarning
Contrôle l’avis visible par l’agent dans le prompt système lorsque le contexte d’amorçage est tronqué.
Valeur par défaut : "always".
"off": n’injecte jamais de texte d’avertissement de troncature dans le prompt système."once": injecte une seule fois un avis concis pour chaque signature de troncature unique."always": injecte un avis concis à chaque exécution lorsqu’une troncature existe (recommandé).
Les décomptes bruts/injectés détaillés et les champs de réglage de la configuration restent dans les diagnostics tels que les rapports de contexte/d’état et les journaux ; le contexte utilisateur/d’exécution WebChat courant ne reçoit que l’avis concis de récupération.
{ agents: { defaults: { bootstrapPromptTruncationWarning: "always" } }, // off | once | always}Carte de propriété des budgets de contexte
OpenClaw comporte plusieurs budgets à volume élevé pour les prompts et le contexte, qui sont intentionnellement répartis par sous-système plutôt que de tous passer par un unique paramètre générique.
| Budget | Couvre |
|---|---|
agents.defaults.bootstrapMaxChars / bootstrapTotalMaxChars |
Injection normale de l’amorçage de l’espace de travail |
agents.defaults.startupContext.* |
Préambule ponctuel d’exécution du modèle lors d’une réinitialisation ou d’un démarrage, y compris les fichiers quotidiens récents memory/*.md. Les commandes de chat seules /new et /reset sont confirmées sans invoquer le modèle |
skills.limits.* |
Liste compacte des Skills injectée dans le prompt système |
agents.defaults.contextLimits.* |
Extraits bornés de l’environnement d’exécution et blocs injectés appartenant à celui-ci |
memory.qmd.limits.* |
Dimensionnement de l’extrait indexé de recherche en mémoire et de son injection |
Remplacements correspondants par agent :
agents.list[].skillsLimits.maxSkillsPromptCharsagents.list[].contextInjectionagents.list[].bootstrapMaxCharsagents.list[].bootstrapTotalMaxCharsagents.list[].contextLimits.*
agents.defaults.startupContext
Contrôle le préambule de démarrage injecté au premier tour lors des exécutions du modèle après une réinitialisation ou un démarrage.
Les commandes de chat seules /new et /reset confirment la réinitialisation sans invoquer
le modèle ; elles ne chargent donc pas ce préambule.
{ agents: { defaults: { startupContext: { enabled: true, applyOn: ["new", "reset"], dailyMemoryDays: 2, maxFileBytes: 16384, maxFileChars: 1200, maxTotalChars: 2800, }, }, },}agents.defaults.contextLimits
Valeurs par défaut partagées pour les surfaces bornées du contexte d’exécution.
{ agents: { defaults: { contextLimits: { memoryGetMaxChars: 12000, memoryGetDefaultLines: 120, postCompactionMaxChars: 1800, }, }, },}memoryGetMaxChars: limite par défaut de l’extraitmemory_getavant l’ajout des métadonnées de troncature et de l’avis de continuation.memoryGetDefaultLines: fenêtre de lignes par défaut dememory_getlorsquelinesest omis.toolResultMaxChars: plafond avancé des résultats d’outils en direct, utilisé pour les résultats persistants et la récupération après dépassement. Laissez-le non défini pour utiliser la limite automatique du contexte du modèle :16000caractères en dessous de 100K jetons,32000caractères à partir de 100K jetons et64000caractères à partir de 200K jetons. Les valeurs explicites jusqu’à1000000sont acceptées pour les modèles à contexte long, mais la limite effective reste limitée à environ 30 % de la fenêtre de contexte du modèle.openclaw doctor --deepaffiche la limite effective, et doctor n’émet un avertissement que lorsqu’un remplacement explicite est obsolète ou sans effet.postCompactionMaxChars: limite de l’extrait AGENTS.md utilisé lors de l’injection d’actualisation après Compaction.
agents.list[].contextLimits
Remplacement par agent des paramètres partagés contextLimits. Les champs omis héritent
de agents.defaults.contextLimits.
{ agents: { defaults: { contextLimits: { memoryGetMaxChars: 12000 }, }, list: [ { id: "tiny-local", contextLimits: { memoryGetMaxChars: 6000, toolResultMaxChars: 8000, // plafond avancé pour cet agent }, }, ], },}skills.limits.maxSkillsPromptChars
Limite globale de la liste compacte des Skills injectée dans le prompt système. Cela
n’affecte pas la lecture à la demande des fichiers SKILL.md.
{ skills: { limits: { maxSkillsPromptChars: 18000 } },}agents.list[].skillsLimits.maxSkillsPromptChars
Remplacement par agent du budget du prompt des Skills.
{ agents: { list: [{ id: "tiny-local", skillsLimits: { maxSkillsPromptChars: 6000 } }], },}agents.defaults.imageMaxDimensionPx
Taille maximale en pixels du côté le plus long de l’image dans les blocs d’images de transcription/d’outils avant les appels au fournisseur.
Valeur par défaut : 1200.
Des valeurs plus faibles réduisent généralement l’utilisation de jetons de vision et la taille des charges utiles de requête pour les exécutions comportant de nombreuses captures d’écran. Des valeurs plus élevées préservent davantage de détails visuels.
{ agents: { defaults: { imageMaxDimensionPx: 1200 } },}agents.defaults.imageQuality
Préférence de compression et de niveau de détail de l’outil d’image pour les images chargées depuis des chemins de fichiers, des URL et des références de médias.
Valeur par défaut : auto.
OpenClaw adapte l’échelle de redimensionnement au modèle d’image sélectionné. Par exemple, Claude Opus 4.8, OpenAI GPT-5.6 Sol, Qwen VL et les modèles de vision Llama 4 hébergés peuvent utiliser des images plus grandes que les anciens chemins de vision ou ceux à haut niveau de détail par défaut, tandis que les tours comportant plusieurs images sont compressés plus fortement en mode auto afin de maîtriser le coût en jetons et la latence.
Valeurs :
auto: s’adapte aux limites du modèle et au nombre d’images.efficient: privilégie des images plus petites pour réduire l’utilisation de jetons et d’octets.balanced: utilise l’échelle intermédiaire standard.high: préserve davantage de détails pour les captures d’écran, les diagrammes et les images de documents.
{ agents: { defaults: { imageQuality: "auto" } },}agents.defaults.userTimezone
Fuseau horaire du contexte du prompt système (et non des horodatages des messages). Utilise par défaut le fuseau horaire de l’hôte.
{ agents: { defaults: { userTimezone: "America/Chicago" } },}agents.defaults.timeFormat
Format de l’heure dans le prompt système. Valeur par défaut : auto (préférence du système d’exploitation).
{ agents: { defaults: { timeFormat: "auto" } }, // auto | 12 | 24}agents.defaults.model
{ agents: { defaults: { models: { "anthropic/claude-opus-4-6": { alias: "opus" }, "minimax/MiniMax-M2.7": { alias: "minimax" }, }, model: { primary: "anthropic/claude-opus-4-6", fallbacks: ["minimax/MiniMax-M2.7"], }, utilityModel: "openai/gpt-5.4-mini", imageModel: { primary: "openrouter/qwen/qwen-2.5-vl-72b-instruct:free", fallbacks: ["openrouter/google/gemini-2.0-flash-vision:free"], }, imageGenerationModel: { primary: "openai/gpt-image-2", fallbacks: ["google/gemini-3.1-flash-image-preview"], }, videoGenerationModel: { primary: "qwen/wan2.6-t2v", fallbacks: ["qwen/wan2.6-i2v"], }, pdfModel: { primary: "anthropic/claude-opus-4-6", fallbacks: ["openai/gpt-5.4-mini"], }, params: { cacheRetention: "long" }, // paramètres globaux par défaut du fournisseur pdfMaxBytesMb: 10, pdfMaxPages: 20, thinkingDefault: "low", verboseDefault: "off", toolProgressDetail: "explain", reasoningDefault: "off", elevatedDefault: "on", timeoutSeconds: 600, mediaMaxMb: 5, contextTokens: 200000, maxConcurrent: 4, }, },}model: accepte soit une chaîne ("provider/model"), soit un objet ({ primary, fallbacks }).- La forme chaîne définit uniquement le modèle principal.
- La forme objet définit le modèle principal ainsi que les modèles de basculement ordonnés.
utilityModel: référence ou aliasprovider/modelfacultatif pour les tâches internes courtes. Il est actuellement utilisé pour générer les titres de session de l’interface Control UI, les titres des sujets de messages privés Telegram, les titres des fils de discussion automatiques Discord et la narration des brouillons de progression. Lorsqu’il n’est pas défini, OpenClaw utilise la valeur par défaut déclarée par le fournisseur principal pour les petits modèles lorsqu’elle existe (OpenAI →gpt-5.6-luna, Anthropic →claude-haiku-4-5) ; sinon, les tâches de génération de titres utilisent le modèle principal de l’agent, tandis que la narration reste désactivée. DéfinissezutilityModel: ""pour désactiver entièrement le routage des tâches utilitaires.agents.list[].utilityModelremplace la valeur par défaut (une valeur vide propre à l’agent le désactive pour cet agent), et un remplacement de modèle propre à l’opération prévaut sur les deux. Les tâches utilitaires effectuent des appels de modèle distincts et envoient au fournisseur du modèle sélectionné le contenu propre à la tâche. La génération des titres du tableau de bord envoie au maximum les 1 000 premiers caractères du premier message qui n’est pas une commande ; la narration envoie la requête entrante ainsi que des résumés d’outils compacts et expurgés. Choisissez un fournisseur qui répond à vos exigences de coût et de traitement des données.imageModel: accepte soit une chaîne ("provider/model"), soit un objet ({ primary, fallbacks }).- Utilisé par le chemin de l’outil
imagecomme configuration de modèle de vision lorsque le modèle actif ne peut pas accepter d’images. Les modèles dotés nativement de capacités de vision reçoivent directement les octets des images chargées. - Également utilisé comme routage de secours lorsque le modèle sélectionné ou par défaut ne peut pas accepter d’images en entrée.
- Privilégiez les références
provider/modelexplicites. Les identifiants seuls sont acceptés à des fins de compatibilité ; si un identifiant seul correspond de manière unique à une entrée configurée prenant en charge les images dansmodels.providers.*.models, OpenClaw lui ajoute le fournisseur correspondant. Les correspondances configurées ambiguës nécessitent un préfixe de fournisseur explicite.
- Utilisé par le chemin de l’outil
imageGenerationModel: accepte soit une chaîne ("provider/model"), soit un objet ({ primary, fallbacks }).- Utilisé par la fonctionnalité partagée de génération d’images et par toute future surface d’outil ou de Plugin générant des images.
- Valeurs courantes :
google/gemini-3.1-flash-image-previewpour la génération d’images native de Gemini,fal/fal-ai/flux/devpour fal,openai/gpt-image-2pour OpenAI Images ouopenai/gpt-image-1.5pour une sortie OpenAI PNG/WebP avec arrière-plan transparent. - Si vous sélectionnez directement un fournisseur/modèle, configurez également l’authentification correspondante du fournisseur (par exemple
GEMINI_API_KEYouGOOGLE_API_KEYpourgoogle/*,OPENAI_API_KEYou OAuth OpenAI Codex pouropenai/gpt-image-2/openai/gpt-image-1.5,FAL_KEYpourfal/*). - En cas d’omission,
image_generatepeut toujours déduire une valeur par défaut de fournisseur disposant d’une authentification. Il essaie d’abord le fournisseur par défaut actuel, puis les autres fournisseurs de génération d’images enregistrés, dans l’ordre de leur identifiant.
musicGenerationModel: accepte soit une chaîne ("provider/model"), soit un objet ({ primary, fallbacks }).- Utilisé par la fonctionnalité partagée de génération musicale et l’outil intégré
music_generate. - Valeurs courantes :
google/lyria-3-clip-preview,google/lyria-3-pro-previewouminimax/music-2.6. - En cas d’omission,
music_generatepeut toujours déduire une valeur par défaut de fournisseur disposant d’une authentification. Il essaie d’abord le fournisseur par défaut actuel, puis les autres fournisseurs de génération musicale enregistrés, dans l’ordre de leur identifiant. - Si vous sélectionnez directement un fournisseur/modèle, configurez également l’authentification ou la clé d’API correspondante du fournisseur.
- Utilisé par la fonctionnalité partagée de génération musicale et l’outil intégré
videoGenerationModel: accepte soit une chaîne ("provider/model"), soit un objet ({ primary, fallbacks }).- Utilisé par la fonctionnalité partagée de génération vidéo et l’outil intégré
video_generate. - Valeurs courantes :
qwen/wan2.6-t2v,qwen/wan2.6-i2v,qwen/wan2.6-r2v,qwen/wan2.6-r2v-flashouqwen/wan2.7-r2v. - En cas d’omission,
video_generatepeut toujours déduire une valeur par défaut de fournisseur disposant d’une authentification. Il essaie d’abord le fournisseur par défaut actuel, puis les autres fournisseurs de génération vidéo enregistrés, dans l’ordre de leur identifiant. - Si vous sélectionnez directement un fournisseur/modèle, configurez également l’authentification ou la clé d’API correspondante du fournisseur.
- Le Plugin officiel de génération vidéo Qwen prend en charge jusqu’à 1 vidéo de sortie, 1 image d’entrée, 4 vidéos d’entrée, une durée de 10 secondes ainsi que les options de niveau fournisseur
size,aspectRatio,resolution,audioetwatermark.
- Utilisé par la fonctionnalité partagée de génération vidéo et l’outil intégré
pdfModel: accepte soit une chaîne ("provider/model"), soit un objet ({ primary, fallbacks }).- Utilisé par l’outil
pdfpour le routage des modèles. - En cas d’omission, l’outil PDF utilise
imageModelcomme solution de secours, puis le modèle résolu de la session ou le modèle par défaut.
- Utilisé par l’outil
pdfMaxBytesMb: limite de taille PDF par défaut de l’outilpdflorsquemaxBytesMbn’est pas transmis lors de l’appel.pdfMaxPages: nombre maximal de pages prises en compte par défaut par le mode d’extraction de secours de l’outilpdf.verboseDefault: niveau de verbosité par défaut des agents. Valeurs :"off","on","full". Valeur par défaut :"off".toolProgressDetail: mode de détail pour les résumés de l’outil/verboseet les lignes d’outils des brouillons de progression. Valeurs :"explain"(par défaut, libellés humains compacts) ou"raw"(ajoute la commande ou les détails bruts lorsqu’ils sont disponibles). La valeuragents.list[].toolProgressDetailpropre à l’agent remplace cette valeur par défaut.reasoningDefault: visibilité du raisonnement par défaut pour les agents. Valeurs :"off","on","stream". La valeuragents.list[].reasoningDefaultpropre à l’agent remplace cette valeur par défaut. Les valeurs par défaut de raisonnement configurées ne sont appliquées qu’aux propriétaires, aux expéditeurs autorisés ou aux contextes Gateway d’administrateur opérateur lorsqu’aucun remplacement du raisonnement par message ou par session n’est défini.elevatedDefault: niveau de sortie élevée par défaut pour les agents. Valeurs :"off","on","ask","full". Valeur par défaut :"on".model.primary: formatprovider/model(par exempleopenai/gpt-5.6-solpour l’accès OAuth Codex). Si vous omettez le fournisseur, OpenClaw essaie d’abord un alias, puis une correspondance unique parmi les fournisseurs configurés pour cet identifiant de modèle exact, et utilise seulement ensuite le fournisseur par défaut configuré comme solution de secours (comportement de compatibilité obsolète ; privilégiez donc une valeurprovider/modelexplicite). Si ce fournisseur n’expose plus le modèle par défaut configuré, OpenClaw utilise à la place le premier fournisseur/modèle configuré plutôt que de signaler une valeur par défaut obsolète correspondant à un fournisseur supprimé.models: catalogue de modèles et liste d’autorisation configurés pour/model. Chaque entrée peut inclurealias(raccourci) etparams(propre au fournisseur, par exempletemperature,maxTokens,cacheRetention,context1m,responsesServerCompaction,responsesCompactThreshold, routage OpenRouterprovider,chat_template_kwargs,extra_body/extraBody).- Utilisez des entrées
provider/*telles que"openai/*": {}ou"vllm/*": {}pour afficher tous les modèles découverts des fournisseurs sélectionnés sans répertorier manuellement chaque identifiant de modèle. - Ajoutez
agentRuntimeà une entréeprovider/*lorsque tous les modèles découverts dynamiquement pour ce fournisseur doivent utiliser le même environnement d’exécution. La politique d’environnement d’exécutionprovider/modelexacte reste prioritaire sur le caractère générique. - Modifications sûres : utilisez
openclaw config set agents.defaults.models '<json>' --strict-json --mergepour ajouter des entrées.config setrefuse les remplacements qui supprimeraient des entrées existantes de la liste d’autorisation, sauf si vous transmettez--replace. - Les flux de configuration et d’intégration propres à un fournisseur fusionnent les modèles du fournisseur sélectionné dans cette table et conservent les autres fournisseurs déjà configurés.
- Pour les modèles OpenAI Responses directs, la Compaction côté serveur est activée automatiquement. Utilisez
params.responsesServerCompaction: falsepour cesser d’injectercontext_management, ouparams.responsesCompactThresholdpour remplacer le seuil. Consultez Compaction côté serveur d’OpenAI.
- Utilisez des entrées
params: paramètres globaux par défaut du fournisseur appliqués à tous les modèles. À définir dansagents.defaults.params(par exemple{ cacheRetention: "long" }).- Priorité de fusion de
params(configuration) :agents.defaults.params(base globale) est remplacé paragents.defaults.models["provider/model"].params(par modèle), puisagents.list[].params(identifiant d’agent correspondant) remplace les valeurs par clé. Consultez Mise en cache des prompts pour plus de détails. models.providers.openrouter.params.provider: politique globale par défaut de routage des fournisseurs pour OpenRouter. OpenClaw la transmet à l’objetproviderde la requête OpenRouter ; les valeursagents.defaults.models["openrouter/<model>"].params.providerpropres au modèle et les paramètres de l’agent les remplacent par clé. Consultez Routage des fournisseurs OpenRouter.params.extra_body/params.extraBody: JSON avancé transmis tel quel et fusionné dans les corps de requêteapi: "openai-completions"pour les proxys compatibles avec OpenAI. En cas de conflit avec les clés de requête générées, le corps supplémentaire prévaut ; les routes de complétion non natives suppriment tout de même ensuite la valeurstorepropre à OpenAI.params.chat_template_kwargs: arguments de modèle de discussion compatibles avec vLLM/OpenAI, fusionnés dans les corps de requêteapi: "openai-completions"de premier niveau. Pourvllm/nemotron-3-*lorsque la réflexion est désactivée, le Plugin vLLM intégré envoie automatiquementenable_thinking: falseetforce_nonempty_content: true; les valeurschat_template_kwargsexplicites remplacent les valeurs par défaut générées, etextra_body.chat_template_kwargsconserve la priorité finale. Les modèles de réflexion Qwen et Nemotron configurés avec vLLM proposent des choix/thinkbinaires (off,on) au lieu de l’échelle d’effort à plusieurs niveaux.compat.thinkingFormat: style de charge utile de réflexion compatible avec OpenAI. Utilisez"together"pourreasoning.enabledau format Together,"qwen"pourenable_thinkingde premier niveau au format Qwen, ou"qwen-chat-template"pourchat_template_kwargs.enable_thinkingsur les moteurs de la famille Qwen prenant en charge les arguments nommés de modèle de discussion au niveau de la requête, tels que vLLM. OpenClaw associe la réflexion désactivée àfalseet la réflexion activée àtrue, et les modèles Qwen configurés avec vLLM proposent des choix/thinkbinaires pour ces formats.compat.supportedReasoningEfforts: liste des niveaux d’effort de raisonnement compatibles avec OpenAI, propre à chaque modèle. Incluez"xhigh"pour les points de terminaison personnalisés qui l’acceptent réellement ; OpenClaw expose alors/think xhighdans les menus de commandes, les lignes de session du Gateway, la validation des modifications de session, la validation de la CLI de l’agent et la validation dellm-taskpour ce fournisseur/modèle configuré. Utilisezcompat.reasoningEffortMaplorsque le moteur attend une valeur propre au fournisseur pour un niveau canonique.params.preserveThinking: option d’activation propre à Z.AI pour conserver la réflexion. Lorsqu’elle est activée et que la réflexion est active, OpenClaw envoiethinking.clear_thinking: falseet rejoue les valeursreasoning_contentantérieures ; consultez Réflexion et conservation de la réflexion avec Z.AI.localService: gestionnaire de processus facultatif au niveau du fournisseur pour les serveurs de modèles locaux ou auto-hébergés. Lorsque le modèle sélectionné appartient à ce fournisseur, OpenClaw sondehealthUrl(oubaseUrl + "/models"), démarrecommandavecargssi le point de terminaison est indisponible, attend jusqu’àreadyTimeoutMs, puis envoie la requête au modèle.commanddoit être un chemin absolu.idleStopMs: 0maintient le processus en cours d’exécution jusqu’à l’arrêt d’OpenClaw ; une valeur positive arrête le processus lancé par OpenClaw après ce nombre de millisecondes d’inactivité. Consultez Services de modèles locaux.- La politique d’exécution doit être définie sur les fournisseurs ou les modèles, et non sur
agents.defaults. Utilisezmodels.providers.<provider>.agentRuntimepour les règles à l’échelle du fournisseur ouagents.defaults.models["provider/model"].agentRuntime/agents.list[].models["provider/model"].agentRuntimepour les règles propres à un modèle. Un préfixe de fournisseur/modèle ne sélectionne jamais à lui seul un environnement d’exécution. Lorsque le runtime n’est pas défini ou vautauto, OpenAI ne peut sélectionner implicitement Codex que pour une route HTTPS officielle exacte de Platform Responses ou ChatGPT Responses, sans remplacement explicite dans la requête. Consultez le runtime d’agent implicite d’OpenAI. - Les outils d’écriture de configuration qui modifient ces champs (par exemple
/models set,/models set-imageet les commandes d’ajout ou de suppression de solutions de repli) enregistrent la forme objet canonique et conservent, si possible, les listes de solutions de repli existantes. maxConcurrent: nombre maximal d’exécutions d’agents en parallèle entre les sessions (chaque session restant sérialisée). Valeur par défaut :4.
Politique d’exécution
{ models: { providers: { openai: { agentRuntime: { id: "codex" }, }, }, }, agents: { defaults: { model: "openai/gpt-5.6-sol", models: { "anthropic/claude-opus-4-8": { agentRuntime: { id: "claude-cli" }, }, "vllm/*": { agentRuntime: { id: "openclaw" }, }, }, }, },}id:"auto","openclaw", l’identifiant d’un environnement Plugin enregistré ou un alias de backend CLI pris en charge. Le Plugin Codex intégré enregistrecodex; le Plugin Anthropic intégré fournit le backend CLIclaude-cli.id: "auto"permet aux environnements Plugin enregistrés de prendre en charge les routes effectives qui déclarent ou satisfont autrement leur contrat de prise en charge, et utilise OpenClaw lorsqu’aucun environnement ne correspond. Une exécution Plugin explicite telle queid: "codex"exige cet environnement ainsi qu’une route effective compatible ; elle échoue de manière fermée si l’un des deux est indisponible ou si l’exécution échoue.id: "pi"est accepté uniquement comme alias obsolète deopenclawafin de préserver les configurations publiées avec la version v2026.5.22 ou une version antérieure. Les nouvelles configurations doivent utiliseropenclaw.- L’ordre de priorité de l’exécution est d’abord la politique du modèle exact (
agents.list[].models["provider/model"],agents.defaults.models["provider/model"]oumodels.providers.<provider>.models[]), puisagents.list[]/agents.defaults.models["provider/*"], et enfin la politique globale du fournisseur dansmodels.providers.<provider>.agentRuntime. - Les clés d’exécution applicables à l’ensemble de l’agent sont obsolètes.
agents.defaults.agentRuntime,agents.list[].agentRuntime, les épinglages d’exécution de session etOPENCLAW_AGENT_RUNTIMEsont ignorés lors de la sélection de l’exécution. Exécutezopenclaw doctor --fixpour supprimer les valeurs obsolètes. - Les routes HTTPS officielles OpenAI Responses/ChatGPT exactes et admissibles qui ne comportent aucune substitution de requête définie peuvent utiliser implicitement l’environnement Codex. Le paramètre de fournisseur/modèle
agentRuntime.id: "codex"fait de Codex une exigence à échec fermé, mais ne rend pas compatible une route incompatible. - Pour les déploiements Claude CLI, privilégiez
model: "anthropic/claude-opus-4-8"avecagentRuntime.id: "claude-cli"limité au modèle. Les référencesclaude-cli/<model>héritées fonctionnent toujours à des fins de compatibilité, mais les nouvelles configurations doivent conserver une sélection canonique du fournisseur et du modèle, et placer le backend d’exécution dans la politique d’exécution du fournisseur ou du modèle. - Cela contrôle uniquement l’exécution des tours d’agent textuels. La génération de médias, la vision, les PDF, la musique, la vidéo et la synthèse vocale utilisent toujours leurs paramètres de fournisseur et de modèle.
Raccourcis d’alias intégrés (s’appliquent uniquement lorsque le modèle figure dans agents.defaults.models) :
| Alias | Modèle |
|---|---|
opus |
anthropic/claude-opus-4-8 |
sonnet |
anthropic/claude-sonnet-4-6 |
gpt |
openai/gpt-5.4 |
gpt-mini |
openai/gpt-5.4-mini |
gpt-nano |
openai/gpt-5.4-nano |
gemini |
google/gemini-3.1-pro-preview |
gemini-flash |
google/gemini-3-flash-preview |
gemini-flash-lite |
google/gemini-3.1-flash-lite |
Vos alias configurés ont toujours priorité sur les valeurs par défaut.
Les modèles Z.AI GLM-4.x activent automatiquement le mode de réflexion, sauf si vous définissez --thinking off ou agents.defaults.models["zai/<model>"].params.thinking vous-même.
Les modèles Z.AI activent tool_stream par défaut pour la diffusion en continu des appels d’outils. Définissez agents.defaults.models["zai/<model>"].params.tool_stream sur false pour la désactiver.
Anthropic Claude Opus 4.8 conserve la réflexion désactivée par défaut dans OpenClaw ; lorsque la réflexion adaptative est explicitement activée, la valeur d’effort par défaut propre au fournisseur Anthropic est high. Les modèles Claude 4.6 utilisent adaptive par défaut lorsqu’aucun niveau de réflexion explicite n’est défini.
agents.defaults.cliBackends
Backends CLI facultatifs pour les exécutions de secours en mode texte uniquement (sans appel d’outil). Utiles comme solution de repli en cas d’échec des fournisseurs d’API.
{ agents: { defaults: { cliBackends: { "claude-cli": { command: "/opt/homebrew/bin/claude", }, "my-cli": { command: "my-cli", args: ["--json"], output: "json", modelArg: "--model", sessionArg: "--session", sessionMode: "existing", systemPromptArg: "--system", // Ou utilisez systemPromptFileArg lorsque la CLI accepte une option de fichier d’invite. systemPromptWhen: "first", imageArg: "--image", imageMode: "repeat", }, }, }, },}- Les backends CLI sont principalement textuels ; les outils sont toujours désactivés.
- Les sessions sont prises en charge lorsque
sessionArgest défini. - La transmission directe des images est prise en charge lorsque
imageArgaccepte les chemins de fichiers. reseedFromRawTranscriptWhenUncompacted: truepermet à un backend de récupérer des sessions invalidées en toute sécurité à partir d’une fin bornée de transcription OpenClaw brute avant la création du premier résumé de Compaction. Les changements de profil d’authentification ou d’époque des identifiants ne réamorcent toujours jamais une session à partir des données brutes.
agents.defaults.promptOverlays
Surcouches d’invite indépendantes du fournisseur, appliquées par famille de modèles aux surfaces d’invite assemblées par OpenClaw. Les identifiants de modèles de la famille GPT-5 reçoivent le contrat de comportement partagé sur les routes OpenClaw/fournisseur ; personality contrôle uniquement la couche de style d’interaction conviviale. Les routes natives du serveur d’application Codex conservent les instructions de base et de modèle propres à Codex au lieu de cette surcouche GPT-5 d’OpenClaw, et OpenClaw désactive la personnalité intégrée de Codex pour les fils natifs.
{ agents: { defaults: { promptOverlays: { gpt5: { personality: "friendly", // friendly | on | off }, }, }, },}"friendly"(valeur par défaut) et"on"activent la couche de style d’interaction conviviale."off"désactive uniquement la couche conviviale ; le contrat de comportement GPT-5 balisé reste activé.- L’ancien paramètre
plugins.entries.openai.config.personalityest toujours lu lorsque ce paramètre partagé n’est pas défini.
agents.defaults.heartbeat
Exécutions périodiques de Heartbeat.
{ agents: { defaults: { heartbeat: { every: "30m", // 0m désactive model: "openai/gpt-5.4-mini", includeReasoning: false, includeSystemPromptSection: true, // valeur par défaut : true ; false omet la section Heartbeat de l’invite système lightContext: false, // valeur par défaut : false ; true conserve uniquement HEARTBEAT.md parmi les fichiers d’amorçage de l’espace de travail isolatedSession: false, // valeur par défaut : false ; true exécute chaque Heartbeat dans une nouvelle session (sans historique de conversation) skipWhenBusy: false, // valeur par défaut : false ; true attend également les voies de sous-agent/imbriquées de cet agent session: "main", to: "+15555550123", directPolicy: "allow", // allow (valeur par défaut) | block target: "none", // valeur par défaut : none | options : last | whatsapp | telegram | discord | ... prompt: "Lisez HEARTBEAT.md s’il existe...", ackMaxChars: 300, suppressToolErrorWarnings: false, timeoutSeconds: 45, }, }, },}every: chaîne de durée (ms/s/m/h). Valeur par défaut :30m(authentification par clé d’API) ou1h(authentification OAuth). Définissez-la sur0mpour désactiver.includeSystemPromptSection: lorsque la valeur est false, omet la section Heartbeat de l’invite système et ignore l’injection deHEARTBEAT.mddans le contexte d’amorçage. Valeur par défaut :true.suppressToolErrorWarnings: lorsque la valeur est true, supprime les charges utiles d’avertissement d’erreur d’outil pendant les exécutions de Heartbeat.timeoutSeconds: durée maximale en secondes autorisée pour un tour d’agent Heartbeat avant son abandon. Laissez ce paramètre non défini pour utiliseragents.defaults.timeoutSecondslorsqu’il est défini ; sinon, la cadence de Heartbeat est plafonnée à 600 secondes.directPolicy: politique de livraison directe/par message privé.allow(valeur par défaut) autorise la livraison à une cible directe.blocksupprime la livraison à une cible directe et émetreason=dm-blocked.lightContext: lorsque la valeur est true, les exécutions de Heartbeat utilisent un contexte d’amorçage allégé et conservent uniquementHEARTBEAT.mdparmi les fichiers d’amorçage de l’espace de travail.isolatedSession: lorsque la valeur est true, chaque Heartbeat s’exécute dans une nouvelle session sans historique de conversation antérieur. Même modèle d’isolation que CronsessionTarget: "isolated". Réduit le coût en jetons par Heartbeat d’environ 100K à environ 2-5K jetons.skipWhenBusy: lorsque la valeur est true, les exécutions de Heartbeat sont différées sur les voies occupées supplémentaires de cet agent : les tâches de sous-agent indexées par sa propre clé de session ou les commandes imbriquées. Les voies Cron diffèrent toujours les Heartbeats, même sans cet indicateur.- Par agent : définissez
agents.list[].heartbeat. Lorsqu’un agent définitheartbeat, seuls ces agents exécutent des Heartbeats. - Les Heartbeats exécutent des tours d’agent complets — des intervalles plus courts consomment davantage de jetons.
agents.defaults.compaction
{ agents: { defaults: { compaction: { mode: "safeguard", // default | safeguard provider: "my-provider", // identifiant d’un Plugin fournisseur de Compaction enregistré (facultatif) timeoutSeconds: 180, reserveTokensFloor: 24000, keepRecentTokens: 50000, recentTurnsPreserve: 3, maxHistoryShare: 0.7, identifierPolicy: "strict", // strict | off | custom identifierInstructions: "Conservez exactement les identifiants de déploiement, les identifiants de ticket et les paires hôte:port.", // utilisé lorsque identifierPolicy=custom qualityGuard: { enabled: true, maxRetries: 1 }, midTurnPrecheck: { enabled: false }, // vérification facultative de la pression dans la boucle d’outils postIndexSync: "async", // off | async | await postCompactionSections: ["Session Startup", "Red Lines"], // active la réinjection des sections d’AGENTS.md model: "openrouter/anthropic/claude-sonnet-4-6", // substitution facultative du modèle réservé à la Compaction truncateAfterCompaction: true, // fait pivoter vers un fichier JSONL successeur plus petit après la Compaction maxActiveTranscriptBytes: "20mb", // déclencheur local facultatif de Compaction préalable notifyUser: true, // notifications au démarrage/à la fin de la Compaction et en cas de dégradation du vidage de la mémoire (valeur par défaut : false) memoryFlush: { enabled: true, model: "ollama/qwen3:8b", // substitution facultative du modèle réservé au vidage de la mémoire softThresholdTokens: 6000, forceFlushTranscriptBytes: "2mb", systemPrompt: "La session approche de la Compaction. Stockez maintenant les souvenirs durables.", prompt: "Écrivez toute note durable dans memory/YYYY-MM-DD.md ; répondez avec le jeton silencieux exact NO_REPLY s’il n’y a rien à stocker.", }, }, }, },}mode:defaultousafeguard(résumé par blocs pour les historiques longs). Voir Compaction.provider: identifiant d'un Plugin fournisseur de Compaction enregistré. Lorsqu'il est défini, la fonctionsummarize()du fournisseur est appelée à la place du résumé intégré par LLM. En cas d'échec, le résumé intégré est utilisé. La définition d'un fournisseur imposemode: "safeguard". Voir Compaction.timeoutSeconds: nombre maximal de secondes autorisé pour une seule opération de Compaction avant son interruption par OpenClaw. Valeur par défaut :180.reserveTokens: marge de jetons maintenue disponible pour la sortie du modèle et les futurs résultats d'outils après la Compaction. Lorsque la fenêtre de contexte du modèle est connue, OpenClaw plafonne la réserve effective afin qu'elle ne puisse pas consommer le budget de l'invite.reserveTokensFloor: réserve minimale imposée par l'environnement d'exécution intégré. Définissez0pour désactiver ce seuil minimal. Celui-ci reste soumis au plafond de la fenêtre de contexte active.keepRecentTokens: budget du point de coupure de l'agent pour conserver textuellement la partie la plus récente de la transcription. La commande manuelle/compactrespecte cette valeur lorsqu'elle est explicitement définie ; sinon, la Compaction manuelle constitue un point de contrôle strict.recentTurnsPreserve: nombre de tours utilisateur/assistant les plus récents conservés textuellement en dehors du résumé de protection. Valeur par défaut :3.maxHistoryShare: fraction maximale du budget de contexte total autorisée pour l'historique conservé après la Compaction (plage0.1-0.9).identifierPolicy:strict(valeur par défaut),offoucustom.strictajoute au début les instructions intégrées de conservation des identifiants opaques pendant le résumé de Compaction.identifierInstructions: texte personnalisé facultatif de conservation des identifiants utilisé lorsqueidentifierPolicy=custom.qualityGuard: vérifications avec nouvelle tentative en cas de sortie mal formée pour les résumés de protection. Activées par défaut en mode de protection ; définissezenabled: falsepour ignorer l'audit.midTurnPrecheck: vérification facultative de la pression exercée par la boucle d'outils. Lorsqueenabled: true, OpenClaw vérifie la pression du contexte après l'ajout des résultats d'outils et avant l'appel suivant du modèle. Si le contexte ne tient plus, il interrompt la tentative en cours avant d'envoyer l'invite et réutilise le chemin de récupération existant de la vérification préalable afin de tronquer les résultats d'outils ou d'effectuer une Compaction puis de réessayer. Fonctionne avec les modes de Compactiondefaultetsafeguard. Valeur par défaut : désactivée.postIndexSync: mode de réindexation de la mémoire de session après la Compaction. Valeur par défaut :"async". Utilisez"await"pour une actualité maximale,"async"pour réduire la latence de la Compaction, ou"off"uniquement lorsque la synchronisation de la mémoire de session est gérée ailleurs.postCompactionSections: noms facultatifs de sections H2/H3 d'AGENTS.md à réinjecter après la Compaction. La réinjection est désactivée lorsque cette option n'est pas définie ou vaut[]. Définir explicitement["Session Startup", "Red Lines"]active cette paire et conserve le mécanisme de repli historiqueEvery Session/Safety. N'activez cette option que si le contexte supplémentaire justifie le risque de dupliquer des consignes de projet déjà incluses dans le résumé de Compaction.model:provider/model-idfacultatif ou alias simple provenant deagents.defaults.models, réservé au résumé de Compaction. Les alias simples sont résolus avant l'envoi ; les identifiants de modèle littéraux configurés restent prioritaires en cas de collision. Utilisez cette option lorsque la session principale doit conserver un modèle, mais que les résumés de Compaction doivent être exécutés sur un autre ; lorsqu'elle n'est pas définie, la Compaction utilise le modèle principal de la session.truncateAfterCompaction: effectue une rotation de la transcription de la session active après la Compaction afin que les tours suivants ne chargent que le résumé et la partie non résumée, tandis que la transcription complète précédente reste archivée. Empêche la croissance illimitée de la transcription active dans les sessions de longue durée. Valeur par défaut :false.maxActiveTranscriptBytes: seuil facultatif en octets (numberou chaînes comme"20mb") qui déclenche une Compaction locale normale avant une exécution lorsque l'historique de transcription dépasse ce seuil. NécessitetruncateAfterCompactionafin qu'une Compaction réussie puisse effectuer une rotation vers une transcription suivante plus petite. Désactivé lorsque cette option n'est pas définie ou vaut0.notifyUser: lorsquetrue, envoie à l'utilisateur de brèves notifications de maintenance du contexte : au début et à la fin de la Compaction (par exemple, « Compaction du contexte... » et « Compaction terminée »), et lorsque le vidage de la mémoire précédant la Compaction est épuisé, de sorte que la réponse se poursuit dans un état dégradé (par exemple, « La maintenance de la mémoire a temporairement échoué ; poursuite de votre réponse. »). Désactivé par défaut afin que ces notifications restent silencieuses.memoryFlush: tour agentique silencieux avant la Compaction automatique pour stocker les souvenirs durables. Définissezmodelsur un fournisseur/modèle exact tel queollama/qwen3:8blorsque ce tour de maintenance doit rester sur un modèle local ; la substitution n'hérite pas de la chaîne de repli de la session active.forceFlushTranscriptBytesimpose le vidage lorsque la taille de la transcription atteint le seuil, même si les compteurs de jetons sont obsolètes. Ignoré lorsque l'espace de travail est en lecture seule.
agents.defaults.runRetries
Limites d'itérations de nouvelle tentative de la boucle d'exécution externe pour l'environnement d'exécution d'agent intégré, afin d'éviter les boucles d'exécution infinies pendant la récupération après un échec. Ce paramètre s'applique uniquement à l'environnement d'exécution d'agent intégré, et non aux environnements d'exécution ACP ou CLI.
{ agents: { defaults: { runRetries: { base: 24, perProfile: 8, min: 32, max: 160, }, }, list: [ { id: "main", runRetries: { max: 50 }, // substitutions facultatives par agent }, ], },}base: nombre de base d'itérations de nouvelle tentative d'exécution pour la boucle d'exécution externe. Valeur par défaut :24.perProfile: nombre d'itérations supplémentaires de nouvelle tentative d'exécution accordées pour chaque profil de repli candidat. Valeur par défaut :8.min: limite absolue minimale d'itérations de nouvelle tentative d'exécution. Valeur par défaut :32.max: limite absolue maximale d'itérations de nouvelle tentative d'exécution afin d'éviter une exécution incontrôlée. Valeur par défaut :160.
agents.defaults.contextPruning
Élague les anciens résultats d'outils du contexte en mémoire avant l'envoi au LLM. Ne modifie pas l'historique de session sur le disque. Désactivé par défaut ; définissez mode: "cache-ttl" pour l'activer.
{ agents: { defaults: { contextPruning: { mode: "cache-ttl", // off (valeur par défaut) | cache-ttl ttl: "1h", // durée (ms/s/m/h), unité par défaut : minutes ; valeur par défaut : 5m keepLastAssistants: 3, softTrimRatio: 0.3, hardClearRatio: 0.5, minPrunableToolChars: 50000, softTrim: { maxChars: 4000, headChars: 1500, tailChars: 1500 }, hardClear: { enabled: true, placeholder: "[Contenu de l'ancien résultat d'outil effacé]" }, tools: { deny: ["browser", "canvas"] }, }, }, },}Comportement du mode cache-ttl
mode: "cache-ttl"active les passes d'élagage.ttldétermine la fréquence à laquelle l'élagage peut être réexécuté (après le dernier accès au cache). Valeur par défaut :5m.- L'élagage tronque d'abord partiellement les résultats d'outils surdimensionnés, puis efface entièrement les résultats d'outils plus anciens si nécessaire.
softTrimRatioethardClearRatioacceptent des valeurs comprises entre0.0et1.0; la validation de la configuration rejette les valeurs situées hors de cette plage.
La troncature partielle conserve le début et la fin, et insère ... au milieu.
L'effacement complet remplace l'intégralité du résultat d'outil par le texte de remplacement.
Remarques :
- Les blocs d'images ne sont jamais tronqués ni effacés.
- Les rapports sont fondés sur les caractères (de manière approximative), et non sur un nombre exact de jetons.
- S'il existe moins de
keepLastAssistantsmessages d'assistant, l'élagage est ignoré.
Voir Élagage des sessions pour plus de détails sur le comportement.
Diffusion par blocs
{ agents: { defaults: { blockStreamingDefault: "off", // on | off blockStreamingBreak: "text_end", // text_end | message_end blockStreamingChunk: { minChars: 800, maxChars: 1200, breakPreference: "paragraph" }, blockStreamingCoalesce: { idleMs: 1000 }, humanDelay: { mode: "natural" }, // off (valeur par défaut) | natural | custom (utilise minMs/maxMs) }, },}- Les canaux autres que Telegram nécessitent un paramètre
*.streaming.block.enabled: trueexplicite pour activer les réponses par blocs. QQ Bot fait exception : il ne possède aucune cléstreaming.blocket diffuse les réponses par blocs, sauf sichannels.qqbot.streaming.modevaut"off". - Substitutions propres aux canaux :
channels.<channel>.streaming.block.coalesce(ainsi que les variantes par compte). Discord, Google Chat, Mattermost, MS Teams, Signal et Slack utilisent par défautminChars: 1500/idleMs: 1000. blockStreamingChunk.breakPreference: limite de bloc privilégiée ("paragraph" | "newline" | "sentence").humanDelay: pause aléatoire entre les réponses par blocs. Valeur par défaut :off.natural= 800-2500ms.customutiliseminMs/maxMs(revient à la plage naturelle pour toute limite non définie). Substitution par agent :agents.list[].humanDelay.
Voir Diffusion en continu pour plus de détails sur le comportement et le découpage en blocs.
Indicateurs de saisie
{ agents: { defaults: { typingMode: "instant", // never | instant | thinking | message typingIntervalSeconds: 6, }, },}- Valeurs par défaut :
instantpour les conversations directes/mentions,messagepour les conversations de groupe sans mention. - Valeur par défaut de
typingIntervalSeconds:6. - Substitutions par session :
session.typingMode,session.typingIntervalSeconds.
Voir Indicateurs de saisie.
agents.defaults.sandbox
Mise en bac à sable facultative pour l'agent intégré. Voir Mise en bac à sable pour le guide complet.
{ agents: { defaults: { sandbox: { mode: "non-main", // off (par défaut) | non-main | all backend: "docker", // docker (par défaut) | ssh | openshell scope: "agent", // session | agent (par défaut) | shared workspaceAccess: "none", // none (par défaut) | ro | rw workspaceRoot: "~/.openclaw/sandboxes", docker: { image: "openclaw-sandbox:bookworm-slim", containerPrefix: "openclaw-sbx-", workdir: "/workspace", readOnlyRoot: true, tmpfs: ["/tmp", "/var/tmp", "/run"], network: "none", user: "1000:1000", capDrop: ["ALL"], env: { LANG: "C.UTF-8" }, setupCommand: "apt-get update && apt-get install -y git curl jq", pidsLimit: 256, memory: "1g", memorySwap: "2g", cpus: 1, gpus: "all", ulimits: { nofile: { soft: 1024, hard: 2048 }, nproc: 256, }, seccompProfile: "/path/to/seccomp.json", apparmorProfile: "openclaw-sandbox", dns: ["1.1.1.1", "8.8.8.8"], extraHosts: ["internal.service:10.0.0.5"], binds: ["/home/user/source:/source:rw"], }, ssh: { target: "user@gateway-host:22", command: "ssh", workspaceRoot: "/tmp/openclaw-sandboxes", strictHostKeyChecking: true, updateHostKeys: true, identityFile: "~/.ssh/id_ed25519", certificateFile: "~/.ssh/id_ed25519-cert.pub", knownHostsFile: "~/.ssh/known_hosts", // Les SecretRefs et le contenu en ligne sont également pris en charge : // identityData: { source: "env", provider: "default", id: "SSH_IDENTITY" }, // certificateData: { source: "env", provider: "default", id: "SSH_CERTIFICATE" }, // knownHostsData: { source: "env", provider: "default", id: "SSH_KNOWN_HOSTS" }, }, browser: { enabled: false, image: "openclaw-sandbox-browser:bookworm-slim", network: "openclaw-sandbox-browser", cdpPort: 9222, cdpSourceRange: "172.21.0.1/32", vncPort: 5900, noVncPort: 6080, headless: false, enableNoVnc: true, allowHostControl: false, autoStart: true, autoStartTimeoutMs: 12000, }, prune: { idleHours: 24, maxAgeDays: 7, }, }, }, }, tools: { sandbox: { tools: { allow: [ "exec", "process", "read", "write", "edit", "apply_patch", "sessions_list", "sessions_history", "sessions_send", "sessions_spawn", "session_status", ], deny: ["browser", "canvas", "nodes", "cron", "discord", "gateway"], }, }, },}Les valeurs par défaut présentées ci-dessus (image off/docker/agent/none/bookworm-slim/réseau none/etc.) sont les véritables valeurs par défaut d’OpenClaw, et non de simples valeurs d’illustration.
Détails du bac à sable
Backend :
docker: environnement d’exécution Docker local (par défaut)ssh: environnement d’exécution distant générique reposant sur SSHopenshell: environnement d’exécution OpenShell
Lorsque backend: "openshell" est sélectionné, les paramètres propres à l’environnement d’exécution sont déplacés vers
plugins.entries.openshell.config.
Configuration du backend SSH :
target: cible SSH au formatuser@host[:port]command: commande du client SSH (par défaut :ssh)workspaceRoot: racine distante absolue utilisée pour les espaces de travail de chaque portée (par défaut :/tmp/openclaw-sandboxes)identityFile/certificateFile/knownHostsFile: fichiers locaux existants transmis à OpenSSHidentityData/certificateData/knownHostsData: contenu en ligne ou SecretRefs qu’OpenClaw matérialise dans des fichiers temporaires lors de l’exécutionstrictHostKeyChecking/updateHostKeys: options de stratégie des clés d’hôte OpenSSH (toutes deux définies par défaut surtrue)
Ordre de priorité de l’authentification SSH :
identityDataprévaut suridentityFilecertificateDataprévaut surcertificateFileknownHostsDataprévaut surknownHostsFile- Les valeurs
*Datareposant sur des SecretRefs sont résolues à partir de l’instantané actif de l’environnement d’exécution des secrets avant le démarrage de la session du bac à sable
Comportement du backend SSH :
- initialise une fois l’espace de travail distant après sa création ou sa recréation
- conserve ensuite l’espace de travail SSH distant comme référence canonique
- achemine
exec, les outils de fichiers et les chemins des médias via SSH - ne synchronise pas automatiquement les modifications distantes vers l’hôte
- ne prend pas en charge les conteneurs de navigateur du bac à sable
Accès à l’espace de travail :
none: espace de travail du bac à sable propre à chaque portée sous~/.openclaw/sandboxes(par défaut)ro: espace de travail du bac à sable dans/workspace, espace de travail de l’agent monté en lecture seule dans/agentrw: espace de travail de l’agent monté en lecture/écriture dans/workspace
Portée :
session: un conteneur et un espace de travail par sessionagent: un conteneur et un espace de travail par agent (par défaut)shared: conteneur et espace de travail partagés (aucune isolation entre les sessions)
Configuration du plugin OpenShell :
{plugins: { entries: { openshell: { enabled: true, config: { mode: "mirror", // mirror (par défaut) | remote command: "openshell", from: "openclaw", remoteWorkspaceDir: "/sandbox", remoteAgentWorkspaceDir: "/agent", gateway: "lab", // facultatif gatewayEndpoint: "https://lab.example", // facultatif policy: "strict", // identifiant facultatif de la stratégie OpenShell providers: ["openai"], // facultatif autoProviders: true, timeoutSeconds: 120, }, }, },},}Mode OpenShell :
mirror: initialise l’espace distant à partir de l’espace local avant l’exécution, puis le resynchronise après l’exécution ; l’espace de travail local reste la référence canoniqueremote: initialise une fois l’espace distant lors de la création du bac à sable, puis conserve l’espace de travail distant comme référence canonique
En mode remote, les modifications locales apportées sur l’hôte en dehors d’OpenClaw ne sont pas automatiquement synchronisées dans le bac à sable après l’étape d’initialisation.
Le transport s’effectue par SSH vers le bac à sable OpenShell, mais le plugin gère le cycle de vie du bac à sable et la synchronisation miroir facultative.
setupCommand s’exécute une fois après la création du conteneur (via sh -lc). Nécessite un accès réseau sortant, une racine accessible en écriture et l’utilisateur root.
Les conteneurs utilisent network: "none" par défaut — définissez cette valeur sur "bridge" (ou sur un réseau bridge personnalisé) si l’agent a besoin d’un accès sortant.
"host" est bloqué. "container:<id>" est bloqué par défaut, sauf si vous définissez explicitement
sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true (mesure de dernier recours).
Les tours du serveur d’application Codex dans un bac à sable OpenClaw actif utilisent ce même paramètre de sortie pour l’accès réseau natif de leur mode code.
Les pièces jointes entrantes sont placées dans media/inbound/* au sein de l’espace de travail actif.
docker.binds monte des répertoires supplémentaires de l’hôte ; les montages globaux et ceux propres à chaque agent sont fusionnés.
Navigateur en bac à sable (sandbox.browser.enabled, valeur par défaut : false) : Chromium + CDP dans un conteneur. L’URL noVNC est injectée dans le prompt système. Ne nécessite pas browser.enabled dans openclaw.json.
L’accès d’observation noVNC utilise par défaut l’authentification VNC et OpenClaw génère une URL à jeton de courte durée (au lieu d’exposer le mot de passe dans l’URL partagée).
allowHostControl: false(par défaut) empêche les sessions en bac à sable de cibler le navigateur de l’hôte.networkutilise par défautopenclaw-sandbox-browser(réseau bridge dédié). Définissez cette valeur surbridgeuniquement si vous souhaitez explicitement une connectivité bridge globale."host"est également bloqué ici.cdpSourceRangerestreint facultativement l’accès entrant CDP à la périphérie du conteneur à une plage CIDR (par exemple172.21.0.1/32).sandbox.browser.bindsmonte des répertoires supplémentaires de l’hôte uniquement dans le conteneur du navigateur en bac à sable. Lorsqu’il est défini (y compris sur[]), il remplacedocker.bindspour le conteneur du navigateur.- Chromium, dans le conteneur du navigateur en bac à sable, est toujours lancé avec
--no-sandbox --disable-setuid-sandbox(les conteneurs ne disposent pas des primitives du noyau requises par le propre bac à sable de Chrome) ; aucune option de configuration ne permet de modifier ce comportement. - Les valeurs de lancement par défaut sont définies dans
scripts/sandbox-browser-entrypoint.shet adaptées aux hôtes de conteneurs : --remote-debugging-address=127.0.0.1--remote-debugging-port=<derived from OPENCLAW_BROWSER_CDP_PORT>--user-data-dir=${HOME}/.chrome--no-first-run--no-default-browser-check--disable-dev-shm-usage--disable-background-networking--disable-breakpad--disable-crash-reporter--no-zygote--metrics-recording-only--password-store=basic--use-mock-keychain--disable-3d-apis,--disable-gpuet--disable-software-rasterizersont activés par défaut et peuvent être désactivés avecOPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0si l’utilisation de WebGL/3D l’exige.--disable-extensions(activé par défaut) ;OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0réactive les extensions si votre flux de travail en dépend.--renderer-process-limit=2par défaut ; modifiez cette valeur avecOPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>, définissez0pour utiliser la limite de processus par défaut de Chromium.--headless=newuniquement lorsqueheadlessest activé.- Les valeurs par défaut correspondent à la configuration de référence de l’image du conteneur ; utilisez une image de navigateur personnalisée avec un point d’entrée personnalisé pour modifier les valeurs par défaut du conteneur.
La mise en bac à sable du navigateur et sandbox.docker.binds sont uniquement disponibles avec Docker.
Construisez les images (depuis une extraction du code source) :
scripts/sandbox-setup.sh # image principale du bac à sablescripts/sandbox-browser-setup.sh # image facultative du navigateurPour les installations npm sans extraction du code source, consultez Mise en bac à sable § Images et configuration pour les commandes docker build en ligne.
agents.list (remplacements propres à chaque agent)
Utilisez agents.list[].tts pour attribuer à un agent son propre fournisseur TTS, sa propre voix, son propre modèle,
son propre style ou son propre mode TTS automatique. Le bloc de l’agent est fusionné en profondeur avec la configuration globale
messages.tts, afin que les identifiants partagés puissent rester centralisés tandis que chaque
agent ne remplace que les champs de voix ou de fournisseur dont il a besoin. Le remplacement de l’agent actif
s’applique aux réponses vocales automatiques, à /tts audio, à /tts status et
à l’outil d’agent tts. Consultez Synthèse vocale
pour obtenir des exemples de fournisseurs et connaître l’ordre de priorité.
{ agents: { list: [ { id: "main", default: true, name: "Main Agent", workspace: "~/.openclaw/workspace", agentDir: "~/.openclaw/agents/main/agent", model: "anthropic/claude-opus-4-6", // ou { primary, fallbacks } utilityModel: "openai/gpt-5.4-mini", thinkingDefault: "high", // remplacement du niveau de réflexion par agent reasoningDefault: "on", // remplacement de la visibilité du raisonnement par agent fastModeDefault: false, // remplacement du mode rapide par agent params: { cacheRetention: "none" }, // remplace les paramètres defaults.models correspondants par clé tts: { providers: { elevenlabs: { speakerVoiceId: "EXAVITQu4vr4xnSDxMaL" }, }, }, skills: ["docs-search"], // remplace agents.defaults.skills lorsque défini identity: { name: "Samantha", theme: "helpful sloth", emoji: "🦥", avatar: "avatars/samantha.png", }, groupChat: { mentionPatterns: ["@openclaw"] }, sandbox: { mode: "off" }, runtime: { type: "acp", acp: { agent: "codex", backend: "acpx", mode: "persistent", // persistent | oneshot cwd: "/workspace/openclaw", }, }, subagents: { allowAgents: ["*"] }, tools: { profile: "coding", allow: ["browser"], deny: ["canvas"], elevated: { enabled: true }, }, }, ], },}id: identifiant d’agent stable (obligatoire).default: lorsque plusieurs sont définis, le premier l’emporte (un avertissement est consigné). Si aucun n’est défini, la première entrée de la liste est utilisée par défaut.model: la forme chaîne définit un modèle principal strict par agent, sans modèle de secours ; la forme objet{ primary }est également stricte, sauf si vous ajoutezfallbacks. Utilisez{ primary, fallbacks: [...] }pour autoriser cet agent à recourir au modèle de secours, ou{ primary, fallbacks: [] }pour rendre explicite le comportement strict. Les tâches Cron qui remplacent uniquementprimaryhéritent toujours des modèles de secours par défaut, sauf si vous définissezfallbacks: [].utilityModel: remplacement facultatif par agent pour les courtes tâches internes, telles que la génération des titres de session et de fil. Utilise à défautagents.defaults.utilityModel, puis le petit modèle par défaut déclaré par le fournisseur principal, puis le modèle principal de cet agent. Une chaîne vide désactive le routage utilitaire pour cet agent.params: paramètres de flux par agent fusionnés par-dessus l’entrée du modèle sélectionné dansagents.defaults.models. Utilisez-les pour des remplacements propres à l’agent, tels quecacheRetention,temperatureoumaxTokens, sans dupliquer l’intégralité du catalogue de modèles.tts: remplacements facultatifs de la synthèse vocale par agent. Le bloc est fusionné en profondeur par-dessusmessages.tts; conservez donc les identifiants d’authentification partagés du fournisseur et la stratégie de secours dansmessages.tts, et ne définissez ici que les valeurs propres à la persona, telles que le fournisseur, la voix, le modèle, le style ou le mode automatique.skills: liste d’autorisation facultative des Skills par agent. Si elle est omise, l’agent hérite deagents.defaults.skillslorsque celui-ci est défini ; une liste explicite remplace les valeurs par défaut au lieu de les fusionner, et[]signifie qu’aucun Skills n’est disponible.thinkingDefault: niveau de réflexion par défaut facultatif par agent (off | minimal | low | medium | high | xhigh | adaptive | max). Remplaceagents.defaults.thinkingDefaultpour cet agent lorsqu’aucun remplacement par message ou par session n’est défini. Le profil du fournisseur/modèle sélectionné détermine les valeurs valides ; pour Google Gemini,adaptiveconserve la réflexion dynamique gérée par le fournisseur (thinkingLevelomis sur Gemini 3/3.1,thinkingBudget: -1sur Gemini 2.5).reasoningDefault: visibilité par défaut facultative du raisonnement par agent (on | off | stream). Remplaceagents.defaults.reasoningDefaultpour cet agent lorsqu’aucun remplacement du raisonnement par message ou par session n’est défini.fastModeDefault: valeur par défaut facultative du mode rapide par agent ("auto" | true | false). S’applique lorsqu’aucun remplacement du mode rapide par message ou par session n’est défini.models: remplacements facultatifs du catalogue de modèles/de l’environnement d’exécution par agent, indexés par les identifiantsprovider/modelcomplets. Utilisezmodels["provider/model"].agentRuntimepour les exceptions d’environnement d’exécution propres à l’agent.runtime: descripteur facultatif de l’environnement d’exécution par agent. Utiliseztype: "acp"avec les valeurs par défautruntime.acp(agent,backend,mode,cwd) lorsque l’agent doit utiliser par défaut des sessions de harnais ACP.identity.avatar: chemin relatif à l’espace de travail, URLhttp(s)ou URIdata:.- Les fichiers image
identity.avatarlocaux relatifs à l’espace de travail sont limités à 2 MB. Les URLhttp(s)et les URIdata:ne sont pas soumises à la limite locale de taille des fichiers. identitydéduit les valeurs par défaut :ackReactionà partir deemoji,mentionPatternsà partir dename/emoji.subagents.allowAgents: liste d’autorisation des identifiants d’agents configurés pour les ciblessessions_spawn.agentIdexplicites (["*"]= toute cible configurée ; valeur par défaut : le même agent uniquement). Incluez l’identifiant du demandeur lorsque les appelsagentIdse ciblant eux-mêmes doivent être autorisés. Les entrées obsolètes dont la configuration d’agent a été supprimée sont rejetées parsessions_spawnet omises deagents_list; exécutezopenclaw doctor --fixpour les nettoyer, ou ajoutez une entréeagents.list[]minimale si cette cible doit rester instanciable tout en héritant des valeurs par défaut.- Protection de l’héritage du bac à sable : si la session du demandeur est placée dans un bac à sable,
sessions_spawnrejette les cibles qui s’exécuteraient sans bac à sable. subagents.requireAgentId: lorsque la valeur est true, bloque les appelssessions_spawnqui omettentagentId(impose la sélection explicite d’un profil ; valeur par défaut : false).subagents.maxConcurrent: nombre maximal d’exécutions simultanées d’agents enfants pour l’ensemble de l’exécution des sous-agents. Valeur par défaut :8.subagents.maxChildrenPerAgent: nombre maximal d’enfants actifs qu’une même session d’agent peut instancier. Valeur par défaut :5.subagents.maxSpawnDepth: profondeur maximale d’imbrication pour l’instanciation de sous-agents (1-5). Valeur par défaut :1(aucune imbrication).subagents.archiveAfterMinutes: délai avant l’archivage de l’état d’un sous-agent terminé. Valeur par défaut :60.
Routage multi-agent
Exécutez plusieurs agents isolés au sein d’un même Gateway. Consultez Multi-Agent.
{ agents: { list: [ { id: "home", default: true, workspace: "~/.openclaw/workspace-home" }, { id: "work", workspace: "~/.openclaw/workspace-work" }, ], }, bindings: [ { agentId: "home", match: { channel: "whatsapp", accountId: "personal" } }, { agentId: "work", match: { channel: "whatsapp", accountId: "biz" } }, ],}Champs de correspondance des liaisons
type(facultatif) :routepour le routage normal (un type absent utilise route par défaut),acppour les liaisons persistantes de conversations ACP.match.channel(obligatoire)match.accountId(facultatif ;*= n’importe quel compte ; omis = compte par défaut)match.peer(facultatif ;{ kind: direct|group|channel, id })match.guildId/match.teamId(facultatif ; propre au canal)acp(facultatif ; uniquement pourtype: "acp") :{ mode, label, cwd, backend }
Ordre de correspondance déterministe :
match.peermatch.guildIdmatch.teamIdmatch.accountId(exact, sans pair/guilde/équipe)match.accountId: "*"(à l’échelle du canal)- Agent par défaut
Dans chaque niveau, la première entrée bindings correspondante l’emporte.
Pour les entrées type: "acp", OpenClaw effectue la résolution selon l’identité exacte de la conversation (match.channel + compte + match.peer.id) et n’utilise pas l’ordre des niveaux de liaison de routage ci-dessus.
Profils d’accès par agent
Accès complet (sans bac à sable)
{agents: { list: [ { id: "personal", workspace: "~/.openclaw/workspace-personal", sandbox: { mode: "off" }, }, ],},}Outils et espace de travail en lecture seule
{agents: { list: [ { id: "family", workspace: "~/.openclaw/workspace-family", sandbox: { mode: "all", scope: "agent", workspaceAccess: "ro" }, tools: { allow: [ "read", "sessions_list", "sessions_history", "sessions_send", "sessions_spawn", "session_status", ], deny: ["write", "edit", "apply_patch", "exec", "process", "browser"], }, }, ],},}Aucun accès au système de fichiers (messagerie uniquement)
{agents: { list: [ { id: "public", workspace: "~/.openclaw/workspace-public", sandbox: { mode: "all", scope: "agent", workspaceAccess: "none" }, tools: { allow: [ "sessions_list", "sessions_history", "sessions_send", "sessions_spawn", "session_status", "whatsapp", "telegram", "slack", "discord", "gateway", ], deny: [ "read", "write", "edit", "apply_patch", "exec", "process", "browser", "canvas", "nodes", "cron", "gateway", "image", ], }, }, ],},}Consultez Bac à sable et outils multi-agent pour plus de détails sur la priorité.
Session
{ session: { scope: "per-sender", dmScope: "main", // main | per-peer | per-channel-peer | per-account-channel-peer identityLinks: { alice: ["telegram:123456789", "discord:987654321012345678"], }, reset: { mode: "daily", // daily | idle atHour: 4, idleMinutes: 60, }, resetByType: { thread: { mode: "daily", atHour: 4 }, direct: { mode: "idle", idleMinutes: 240 }, group: { mode: "idle", idleMinutes: 120 }, }, resetByChannel: { discord: { mode: "idle", idleMinutes: 30 }, }, resetTriggers: ["/new", "/reset"], store: "~/.openclaw/agents/{agentId}/sessions/sessions.json", maintenance: { mode: "enforce", // enforce (par défaut) | warn pruneAfter: "30d", maxEntries: 500, resetArchiveRetention: "30d", // durée ou false maxDiskBytes: "500mb", // plafond strict facultatif highWaterBytes: "400mb", // cible de nettoyage facultative }, writeLock: { acquireTimeoutMs: 60000, staleMs: 1800000, maxHoldMs: 300000, }, threadBindings: { enabled: true, idleHours: 24, // retrait automatique de la sélection après une inactivité par défaut, en heures (`0` désactive) maxAgeHours: 0, // âge maximal strict par défaut, en heures (`0` désactive) }, mainKey: "main", // ancien (l’environnement d’exécution utilise toujours "main") agentToAgent: { maxPingPongTurns: 5 }, sendPolicy: { rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }], default: "allow", }, },}Détails des champs de session
scope: stratégie de regroupement des sessions de base pour les contextes de discussion de groupe.per-sender(par défaut) : chaque expéditeur dispose d'une session isolée au sein d'un contexte de canal.global: tous les participants d'un contexte de canal partagent une session unique (à utiliser uniquement lorsqu'un contexte partagé est souhaité).dmScope: mode de regroupement des messages privés.main: tous les messages privés partagent la session principale.per-peer: isolation par identifiant d'expéditeur sur tous les canaux.per-channel-peer: isolation par canal et expéditeur (recommandé pour les boîtes de réception multiutilisateurs).per-account-channel-peer: isolation par compte, canal et expéditeur (recommandé pour les configurations multicomptes).identityLinks: associe les identifiants canoniques à des pairs préfixés par le fournisseur afin de partager les sessions entre les canaux. Les commandes d'ancrage telles que/dock_discordutilisent la même association pour faire basculer la route de réponse de la session active vers un autre pair de canal lié ; consultez Ancrage de canal.reset: politique principale de réinitialisation.dailyeffectue la réinitialisation à l'heure localeatHour;idlel'effectue aprèsidleMinutes. Lorsque les deux sont configurés, la première échéance atteinte l'emporte. La fraîcheur de la réinitialisation quotidienne repose sur le champsessionStartedAtde la ligne de session ; celle de la réinitialisation après inactivité repose surlastInteractionAt. Les écritures d'événements en arrière-plan ou système, telles que les Heartbeats, les réveils Cron, les notifications d'exécution et la comptabilité du Gateway, peuvent mettre à jourupdatedAt, mais elles ne maintiennent pas la fraîcheur des sessions quotidiennes ou inactives.resetByType: remplacements par type (direct,group,thread). L'anciendmest accepté comme alias dedirect.resetByChannel: remplacements de réinitialisation par canal, indexés par identifiant de fournisseur/canal. Lorsque le canal de la session possède une entrée correspondante, celle-ci l'emporte entièrement surresetByType/resetpour cette session. À utiliser uniquement lorsqu'un canal nécessite un comportement de réinitialisation différent de la politique définie au niveau du type.mainKey: champ hérité. L'environnement d'exécution utilise toujours"main"pour le compartiment principal des discussions directes.agentToAgent.maxPingPongTurns: nombre maximal de tours de réponse entre agents lors des échanges d'agent à agent (entier, plage :0-20, valeur par défaut :5).0désactive l'enchaînement en ping-pong.sendPolicy: correspondance selonchannel,chatType(direct|group|channel, avec l'ancien aliasdm),keyPrefixourawKeyPrefix. Le premier refus l'emporte.maintenance: contrôles de nettoyage et de conservation du magasin de sessions.mode:enforceapplique le nettoyage et constitue la valeur par défaut ;warnémet uniquement des avertissements.pruneAfter: seuil d'âge des entrées obsolètes (valeur par défaut :30d).maxEntries: nombre maximal d'entrées de session SQLite (valeur par défaut :500). Les écritures de l'environnement d'exécution effectuent le nettoyage par lots avec une petite marge au-dessus du seuil pour les limites adaptées à la production ;openclaw sessions cleanup --enforceapplique immédiatement la limite.- Les sessions de sondage d'exécution de modèle à courte durée de vie du Gateway utilisent une conservation fixe de
24h, mais le nettoyage dépend de la pression : il ne supprime les lignes obsolètes de sondage strict d'exécution de modèle que lorsque la maintenance des entrées de session ou la pression liée à la limite est atteinte. Seules les clés de sondage explicites strictes correspondant àagent:*:explicit:model-run-<uuid>sont admissibles ; les sessions normales directes, de groupe, de fil, Cron, de hook, Heartbeat, ACP et de sous-agent n'héritent pas de cette conservation de 24 h. Lorsqu'il est exécuté, le nettoyage des exécutions de modèle précède le nettoyage plus général des entrées obsolètes selonpruneAfteret l'application de la limitemaxEntries. - L'ancien
rotateBytesest rejeté par le schéma actuel ;openclaw doctor --fixle supprime des anciennes configurations. resetArchiveRetention: conservation basée sur l'âge des archives de transcriptions réinitialisées ou supprimées. Par défaut, les archives sont conservées jusqu'à leur éviction en raison du budget disque ; définissez une durée pour activer leur suppression selon le temps écoulé, oufalsepour la désactiver explicitement.maxDiskBytes: budget disque facultatif pour le répertoire des sessions. En modewarn, des avertissements sont consignés ; en modeenforce, les artefacts et sessions les plus anciens sont supprimés en premier.highWaterBytes: cible facultative après le nettoyage lié au budget. La valeur par défaut est80%demaxDiskBytes.writeLock: contrôles du verrouillage en écriture des transcriptions de session. À ajuster uniquement lorsque des opérations légitimes de préparation de transcription, de nettoyage, de Compaction ou de mise en miroir sont en concurrence plus longtemps que ne le prévoient les politiques par défaut.acquireTimeoutMs: nombre de millisecondes d'attente lors de l'acquisition d'un verrou avant de signaler que la session est occupée. Valeur par défaut :60000; remplacement par la variable d'environnementOPENCLAW_SESSION_WRITE_LOCK_ACQUIRE_TIMEOUT_MS.staleMs: nombre de millisecondes après lequel un verrou existant est considéré comme obsolète et récupéré. Valeur par défaut :1800000; remplacement par la variable d'environnementOPENCLAW_SESSION_WRITE_LOCK_STALE_MS.maxHoldMs: durée maximale, en millisecondes, pendant laquelle un verrou détenu dans le processus peut le rester avant que le mécanisme de surveillance ne le libère. Valeur par défaut :300000; remplacement par la variable d'environnementOPENCLAW_SESSION_WRITE_LOCK_MAX_HOLD_MS.threadBindings: valeurs globales par défaut des fonctionnalités de session liées aux fils.enabled: interrupteur principal par défaut (les fournisseurs peuvent le remplacer ; Discord utilisechannels.discord.threadBindings.enabled)idleHours: désactivation automatique par défaut de la focalisation après inactivité, en heures (0la désactive ; les fournisseurs peuvent la remplacer)maxAgeHours: âge maximal absolu par défaut, en heures (0le désactive ; les fournisseurs peuvent le remplacer)spawnSessions: contrôle par défaut de la création de sessions de travail liées à un fil à partir desessions_spawnet des créations de fils ACP. La valeur par défaut esttruelorsque les liaisons de fils sont activées ; les fournisseurs et les comptes peuvent la remplacer.defaultSpawnContext: contexte natif de sous-agent par défaut pour les créations liées à un fil ("fork"ou"isolated"). La valeur par défaut est"fork".
Messages
{ messages: { responsePrefix: "🦞", // ou "auto" ackReaction: "👀", ackReactionScope: "group-mentions", // group-mentions | group-all | direct | all | off | none removeAckAfterReply: false, queue: { mode: "steer", // steer (par défaut) | followup | collect | interrupt debounceMs: 500, cap: 20, drop: "summarize", // old | new | summarize (par défaut) byChannel: { whatsapp: "followup", telegram: "followup", }, }, inbound: { debounceMs: 2000, // 0 désactive byChannel: { whatsapp: 5000, slack: 1500, }, }, },}Préfixe de réponse
Remplacements par canal/compte : channels.<channel>.responsePrefix, channels.<channel>.accounts.<id>.responsePrefix.
Résolution (le plus spécifique l'emporte) : compte → canal → global. "" désactive et interrompt la cascade. "auto" dérive [{identity.name}].
Variables du modèle :
| Variable | Description | Exemple |
|---|---|---|
{model} |
Nom court du modèle | claude-opus-4-6 |
{modelFull} |
Identifiant complet du modèle | anthropic/claude-opus-4-6 |
{provider} |
Nom du fournisseur | anthropic |
{thinkingLevel} |
Niveau de réflexion actuel | high, low, off |
{identity.name} |
Nom de l'identité de l'agent | (identique à "auto") |
Les variables ne sont pas sensibles à la casse. {think} est un alias de {thinkingLevel}.
Réaction d'accusé de réception
- Utilise par défaut
identity.emojide l'agent actif, sinon"👀". Définissez""pour désactiver. - Remplacements par canal :
channels.<channel>.ackReaction,channels.<channel>.accounts.<id>.ackReaction. - Ordre de résolution : compte → canal →
messages.ackReaction→ repli sur l'identité. - Portée :
group-mentions(par défaut),group-all,direct,allouoff/none(désactive entièrement les réactions d'accusé de réception). removeAckAfterReply: supprime l'accusé de réception après la réponse sur les canaux prenant en charge les réactions, tels que Slack, Discord, Signal, Telegram, WhatsApp et iMessage.messages.statusReactions.enabled: active les réactions d'état du cycle de vie sur Slack, Discord, Signal, Telegram et WhatsApp. Sur Discord, l'absence de valeur maintient les réactions d'état activées lorsque les réactions d'accusé de réception sont actives. Sur Slack, Signal, Telegram et WhatsApp, définissez-le explicitement surtruepour activer les réactions d'état du cycle de vie. Par défaut, Slack utilise son état natif de fil d'assistant et des messages de chargement alternés pour indiquer la progression, tout en conservant la réaction d'accusé de réception configurée.messages.statusReactions.emojis: remplace les clés d'émoji du cycle de vie :queued,thinking,compacting,tool,coding,web,deploy,build,concierge,done,error,stallSoftetstallHard. Telegram n'autorise qu'un ensemble fixe de réactions ; les émojis configurés non pris en charge sont donc remplacés par la variante d'état compatible la plus proche pour cette discussion.
File d'attente
mode: stratégie de mise en file d'attente des messages entrants reçus pendant l'exécution active d'une session. Valeur par défaut :"steer".steer: injecte la nouvelle invite dans l'exécution active.followup: exécute la nouvelle invite après la fin de l'exécution active.collect: regroupe les messages compatibles et les exécute ensemble ultérieurement.interrupt: interrompt l'exécution active avant de lancer l'invite la plus récente.
debounceMs: délai avant l'envoi d'un message mis en file d'attente ou redirigé. Valeur par défaut :500.cap: nombre maximal de messages en file d'attente avant l'application de la politique d'abandon. Valeur par défaut :20.drop: stratégie lorsque la limite est dépassée."summarize"(par défaut) supprime les entrées les plus anciennes tout en conservant des résumés compacts ;"old"supprime les plus anciennes sans résumé ;"new"rejette l'élément le plus récent.byChannel: remplacements demodepar canal, indexés par identifiant de fournisseur.debounceMsByChannel: remplacements dedebounceMspar canal, indexés par identifiant de fournisseur.
Temporisation des messages entrants
Regroupe les messages textuels envoyés rapidement par un même expéditeur en un seul tour d'agent. Les contenus multimédias et pièces jointes déclenchent immédiatement l'envoi. Les commandes de contrôle contournent la temporisation. Valeur par défaut de debounceMs : 2000.
Autres clés de messages
messages.messagePrefix: texte de préfixe ajouté aux messages utilisateur entrants avant qu'ils n'atteignent l'environnement d'exécution de l'agent. À utiliser avec parcimonie pour les marqueurs de contexte du canal.messages.visibleReplies: contrôle les réponses sources visibles dans les conversations directes, de groupe et de canal ("message_tool"nécessitemessage(action=send)pour produire une sortie visible ;"automatic"publie les réponses normales comme auparavant).messages.usageTemplate/messages.responseUsage: modèle personnalisé de pied de page/usageet mode d'utilisation par défaut pour chaque réponse (off | tokens | full, ainsi que l'ancien aliasondetokens).messages.groupChat.mentionPatterns/historyLimit: déclencheurs de mention dans les messages de groupe et dimensionnement de la fenêtre d'historique.messages.suppressToolErrors: lorsque défini surtrue, masque les avertissements d'erreur de l'outil⚠️affichés à l'utilisateur (l'agent voit toujours les erreurs dans le contexte et peut réessayer). Valeur par défaut :false.
TTS (synthèse vocale)
{ messages: { tts: { auto: "off", // off (par défaut) | always | inbound | tagged mode: "final", // final | all provider: "elevenlabs", summaryModel: "openai/gpt-5.4-mini", modelOverrides: { enabled: true }, maxTextLength: 4000, timeoutMs: 30000, prefsPath: "~/.openclaw/settings/tts.json", providers: { elevenlabs: { apiKey: "elevenlabs_api_key", baseUrl: "https://api.elevenlabs.io", speakerVoiceId: "voice_id", modelId: "eleven_multilingual_v2", seed: 42, applyTextNormalization: "auto", languageCode: "en", voiceSettings: { stability: 0.5, similarityBoost: 0.75, style: 0.0, useSpeakerBoost: true, speed: 1.0, }, }, microsoft: { speakerVoice: "en-US-MichelleNeural", lang: "en-US", outputFormat: "audio-24khz-48kbitrate-mono-mp3", }, openai: { apiKey: "openai_api_key", baseUrl: "https://api.openai.com/v1", model: "gpt-4o-mini-tts", speakerVoice: "coral", }, }, }, },}autocontrôle le mode TTS automatique par défaut :off,always,inboundoutagged./tts on|offpeut remplacer les préférences locales, et/tts statusaffiche l’état effectif.summaryModelremplaceagents.defaults.model.primarypour le résumé automatique.modelOverridesest activé par défaut (enabled !== false) ;modelOverrides.allowProviderdoit être activé explicitement.- Les clés API utilisent à défaut
ELEVENLABS_API_KEY/XI_API_KEYetOPENAI_API_KEY. - Les fournisseurs de synthèse vocale intégrés appartiennent aux plugins. Si
plugins.allowest défini, incluez chaque plugin de fournisseur TTS que vous souhaitez utiliser, par exemplemicrosoftpour Edge TTS. L’ancien identifiant de fournisseuredgeest accepté comme alias demicrosoft. providers.openai.baseUrlremplace le point de terminaison TTS d’OpenAI. L’ordre de résolution est la configuration, puisOPENAI_TTS_BASE_URL, puishttps://api.openai.com/v1.- Lorsque
providers.openai.baseUrlpointe vers un point de terminaison autre qu’OpenAI, OpenClaw le traite comme un serveur TTS compatible avec OpenAI et assouplit la validation du modèle et de la voix.
Conversation
Valeurs par défaut du mode Conversation (macOS/iOS/Android et interface de contrôle du navigateur).
{ talk: { provider: "elevenlabs", providers: { elevenlabs: { speakerVoiceId: "elevenlabs_voice_id", voiceAliases: { Clawd: "EXAVITQu4vr4xnSDxMaL", Roger: "CwhRBWXzGAHq8TQ4Fs17", }, modelId: "eleven_multilingual_v2", outputFormat: "mp3_44100_128", apiKey: "elevenlabs_api_key", }, mlx: { modelId: "mlx-community/Soprano-80M-bf16", }, system: {}, }, consultThinkingLevel: "low", consultFastMode: true, speechLocale: "ru-RU", silenceTimeoutMs: 1500, interruptOnSpeech: true, realtime: { provider: "openai", providers: { openai: { model: "gpt-realtime-2.1", speakerVoice: "cedar", }, }, instructions: "Parlez chaleureusement et répondez brièvement.", mode: "realtime", // realtime | stt-tts | transcription transport: "webrtc", // webrtc | provider-websocket | gateway-relay | managed-room vadThreshold: 0.5, silenceDurationMs: 500, prefixPaddingMs: 300, reasoningEffort: "medium", brain: "agent-consult", // agent-consult | direct-tools | none }, },}talk.providerdoit correspondre à une clé danstalk.providerslorsque plusieurs fournisseurs du mode Conversation sont configurés.- Les anciennes clés plates du mode Conversation (
talk.voiceId,talk.voiceAliases,talk.modelId,talk.outputFormat,talk.apiKey) sont uniquement destinées à la compatibilité. Exécutezopenclaw doctor --fixpour réécrire la configuration persistante danstalk.providers.<provider>. - Les identifiants de voix utilisent à défaut
ELEVENLABS_VOICE_IDouSAG_VOICE_ID(comportement du client Conversation sous macOS). providers.*.apiKeyaccepte des chaînes en texte brut ou des objets SecretRef.- Le repli
ELEVENLABS_API_KEYs’applique uniquement lorsqu’aucune clé API du mode Conversation n’est configurée. providers.*.voiceAliasespermet aux directives du mode Conversation d’utiliser des noms conviviaux.providers.mlx.modelIdsélectionne le dépôt Hugging Face utilisé par l’assistant MLX local de macOS. En cas d’omission, macOS utilisemlx-community/Soprano-80M-bf16.- La lecture MLX sous macOS passe par l’assistant
openclaw-mlx-ttsintégré lorsqu’il est présent, ou par un exécutable dansPATH;OPENCLAW_MLX_TTS_BINremplace le chemin de l’assistant pour le développement. consultThinkingLevelcontrôle le niveau de réflexion de l’exécution complète de l’agent OpenClaw à l’origine des appelsopenclaw_agent_consulten temps réel du mode Conversation de l’interface de contrôle. Laissez ce paramètre non défini pour préserver le comportement normal de la session et du modèle.consultFastModedéfinit un remplacement ponctuel du mode rapide pour les consultations en temps réel du mode Conversation de l’interface de contrôle, sans modifier le réglage normal du mode rapide de la session.speechLocaledéfinit l’identifiant de paramètres régionaux BCP 47 utilisé par la reconnaissance vocale du mode Conversation sous iOS/macOS. Laissez ce paramètre non défini pour utiliser la valeur par défaut de l’appareil.silenceTimeoutMscontrôle la durée pendant laquelle le mode Conversation attend après le silence de l’utilisateur avant d’envoyer la transcription. Une valeur non définie conserve la fenêtre de pause par défaut de la plateforme (700 ms on macOS and Android, 900 ms on iOS).realtime.instructionsajoute des instructions système destinées au fournisseur à l’invite en temps réel intégrée d’OpenClaw, afin de permettre la configuration du style vocal sans perdre les directivesopenclaw_agent_consultpar défaut.realtime.vadThresholddéfinit le seuil d’activité vocale du fournisseur, de0(le plus sensible) à1(le moins sensible). Une valeur non définie conserve la valeur par défaut du fournisseur.realtime.silenceDurationMsdéfinit la fenêtre de silence exprimée par un nombre entier positif avant que le fournisseur ne valide un tour utilisateur en temps réel. Une valeur non définie conserve la valeur par défaut du fournisseur.realtime.prefixPaddingMsdéfinit la quantité d’audio, exprimée par un nombre entier non négatif, conservée avant le début de la parole détectée. Une valeur non définie conserve la valeur par défaut du fournisseur.realtime.reasoningEffortdéfinit le niveau de raisonnement propre au fournisseur pour les sessions en temps réel. Une valeur non définie conserve la valeur par défaut du fournisseur.realtime.consultRouting:"provider-direct"(par défaut) préserve les réponses directes du fournisseur lorsque le fournisseur en temps réel produit une transcription utilisateur finale sansopenclaw_agent_consult."force-agent-consult"achemine plutôt la requête finalisée via OpenClaw.
Pages associées
- Référence de configuration — toutes les autres clés de configuration
- Configuration — tâches courantes et configuration rapide
- Exemples de configuration