Gateway
Configuration — agents
Clés de configuration propres aux agents sous agents.*, multiAgent.*, session.*,
messages.* et talk.*. Pour les canaux, les outils, l’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 est prioritaire 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 de dépôt facultative affichée dans 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 de Skills par défaut facultative 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: [] }, // aucun skill ], },}- Omettez
agents.defaults.skillspour autoriser tous les Skills par défaut. - Omettez
agents.list[].skillspour hériter des valeurs par défaut. - Définissez
agents.list[].skills: []pour n’autoriser aucun skill. - 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
Détermine quand 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": les tours de continuation sûrs (après une réponse terminée de l’assistant) ignorent la réinjection de l’amorçage de l’espace de travail, 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 de l’amorçage de l’espace de travail et des fichiers de contexte à chaque tour. Utilisez cette option uniquement pour les agents qui gèrent entièrement 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 les remplacements du profil d’amorçage par agent lorsqu’un agent requiert 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’avis de troncature dans le prompt système."once": injecte une 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 courant de WebChat ne reçoit que l’avis concis de récupération.
{ agents: { defaults: { bootstrapPromptTruncationWarning: "always" } }, // off | once | always}Carte de responsabilité des budgets de contexte
OpenClaw comporte plusieurs budgets de prompt/contexte à volume élevé, qui sont intentionnellement répartis par sous-système plutôt que de passer tous 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.* |
La liste compacte de Skills injectée dans le prompt système |
agents.defaults.contextLimits.* |
Extraits d’exécution bornés et blocs injectés appartenant à l’environnement d’exécution |
memory.qmd.limits.* |
Dimensionnement des extraits de recherche dans la mémoire indexée et de leur 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 du premier tour injecté lors des exécutions du modèle après une réinitialisation ou au 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 de contexte d’exécution bornées.
{ 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 persistés 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 plafonné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ée 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 de 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 de 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’outil avant les appels au fournisseur.
Valeur par défaut : 1200.
Des valeurs plus faibles réduisent généralement l’utilisation des jetons de vision et la taille de la charge utile des requêtes pour les exécutions riches en 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/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 la progression 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 à haut niveau de détail ou ceux par défaut, tandis que les tours comportant plusieurs images sont compressés plus agressivement 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 la progression 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 le fuseau horaire de l’hôte par défaut.
{ 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 secours ordonnés.
utilityModel: référenceprovider/modelou alias facultatif pour les courtes tâches internes. Il est actuellement utilisé pour générer les titres de session de l’interface de contrôle, les titres de sujets de messages privés Telegram, les titres automatiques de fils Discord et la narration des brouillons de progression. Lorsqu’il n’est pas défini, OpenClaw utilise le petit modèle par défaut déclaré par le fournisseur principal, s’il en existe un (OpenAI →gpt-5.6-luna, Anthropic →claude-haiku-4-5) ; sinon, les tâches de génération de titres se rabattent sur 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 à un agent le désactive pour cet agent), et un remplacement de modèle propre à une opération prévaut sur les deux. Les tâches utilitaires effectuent des appels de modèle distincts et envoient au fournisseur de modèle sélectionné du contenu propre à la tâche. La génération de 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 compacts et expurgés des outils. Choisissez un fournisseur adapté à 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 son modèle de vision. - Également utilisé comme routage de secours lorsque le modèle sélectionné ou par défaut ne peut pas accepter d’image en entrée.
- Privilégiez les références
provider/modelexplicites. Les identifiants seuls sont acceptés pour compatibilité ; si un identifiant seul correspond de manière unique à une entrée configurée compatible avec les images dansmodels.providers.*.models, OpenClaw le qualifie avec ce fournisseur. 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 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 un fournisseur par défaut 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 un fournisseur par défaut 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 un fournisseur par défaut 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 du modèle. - En cas d’omission, l’outil PDF se rabat sur
imageModel, puis sur 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 pour l’outilpdflorsquemaxBytesMbn’est pas transmis au moment de l’appel.pdfMaxPages: nombre maximal de pages prises en compte par défaut par le mode de secours d’extraction 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 des résumés d’outils de/verboseet des 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 à un 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 à un agent remplace cette valeur par défaut. Les valeurs de raisonnement par défaut configurées ne sont appliquées qu’aux propriétaires, aux expéditeurs autorisés ou aux contextes d’administration opérateur du Gateway lorsqu’aucun remplacement du raisonnement propre au message ou à la 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 ne se rabat qu’ensuite sur le fournisseur par défaut configuré (comportement de compatibilité obsolète ; privilégiez donc unprovider/modelexplicite). Si ce fournisseur n’expose plus le modèle par défaut configuré, OpenClaw se rabat sur le premier fournisseur/modèle configuré au lieu de signaler une valeur par défaut obsolète provenant d’un fournisseur supprimé.models: catalogue de modèles configuré et liste d’autorisation pour/model. Chaque entrée peut inclurealias(raccourci) etparams(propres au fournisseur, par exempletemperature,maxTokens,cacheRetention,context1m,responsesServerCompaction,responsesCompactThreshold, le 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écution exacteprovider/modelprévaut toujours 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 ou d’intégration propres à un fournisseur fusionnent les modèles du fournisseur sélectionné dans cette table et préservent les autres fournisseurs déjà configurés.
- Pour les modèles directs OpenAI Responses, la Compaction côté serveur est activée automatiquement. Utilisez
params.responsesServerCompaction: falsepour ne plus injectercontext_management, ouparams.responsesCompactThresholdpour remplacer le seuil. Consultez Compaction OpenAI côté serveur.
- 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 invites pour plus de détails. models.providers.openrouter.params.provider: politique de routage des fournisseurs par défaut à l’échelle d’OpenRouter. OpenClaw la transmet à l’objetproviderde la requête OpenRouter ;agents.defaults.models["openrouter/<model>"].params.providerpar modèle et les paramètres de l’agent remplacent les valeurs par clé. Consultez Routage des fournisseurs OpenRouter.params.extra_body/params.extraBody: objet 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 des clés de requête générées, le corps supplémentaire prévaut ; les routes de complétion non natives suppriment néanmoins ensuite la cléstorepropre à 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-*avec le raisonnement désactivé, le Plugin vLLM intégré envoie automatiquementenable_thinking: falseetforce_nonempty_content: true; les valeurschat_template_kwargsexplicites remplacent les valeurs générées par défaut, etextra_body.chat_template_kwargsconserve la priorité finale. Les modèles de raisonnement Qwen et Nemotron vLLM configurés proposent des choix/thinkbinaires (off,on) au lieu de l’échelle d’effort à plusieurs niveaux.compat.thinkingFormat: style de charge utile de raisonnement compatible avec OpenAI. Utilisez"together"pourreasoning.enabledau format Together,"qwen"pourenable_thinkingau premier niveau au format Qwen, ou"qwen-chat-template"pourchat_template_kwargs.enable_thinkingsur les systèmes dorsaux de la famille Qwen prenant en charge les arguments de modèle de discussion au niveau de la requête, comme vLLM. OpenClaw associe le raisonnement désactivé àfalseet le raisonnement activé àtrue, et les modèles Qwen vLLM configurés proposent des choix/thinkbinaires pour ces formats.compat.supportedReasoningEfforts: liste des niveaux d’effort de raisonnement compatibles avec OpenAI par 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 système dorsal attend une valeur propre au fournisseur pour un niveau canonique.params.preserveThinking: activation facultative, propre à Z.AI, de la conservation du raisonnement. Lorsqu’elle est activée et que le raisonnement est actif, OpenClaw envoiethinking.clear_thinking: falseet rejoue le contenureasoning_contentantérieur ; consultez Raisonnement Z.AI et conservation du raisonnement.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"), lancecommandavecargssi 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 actif jusqu’à la fermeture 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’environnement d’exécution appartient aux fournisseurs ou aux modèles, et non à
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 au modèle. Un préfixe fournisseur/modèle ne sélectionne jamais à lui seul un harnais. Lorsque l’environnement d’exécution n’est pas défini ou vautauto, OpenAI peut sélectionner implicitement Codex uniquement pour une route officielle HTTPS Platform Responses ou ChatGPT Responses exacte, sans remplacement de requête défini par l’utilisateur. Consultez Environnement d’exécution implicite de l’agent 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 modèles de secours) enregistrent la forme objet canonique et préservent les listes de modèles de secours existantes lorsque cela est possible. maxConcurrent: nombre maximal d’exécutions d’agents en parallèle entre les sessions (chaque session reste traitée en série). Valeur par défaut :4.
Politique d’environnement 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 d’exécution de Plugin enregistré ou l’alias d’un 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 d’exécution de 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. Un environnement d’exécution de Plugin explicite tel queid: "codex"exige cet environnement ainsi qu’une route effective compatible ; il é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 v2026.5.22 et les versions antérieures. Les nouvelles configurations doivent utiliseropenclaw.- La priorité des environnements d’exécution est d’abord la stratégie 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 stratégie globale du fournisseur dansmodels.providers.<provider>.agentRuntime. - Les clés d’environnement d’exécution couvrant l’agent entier sont héritées.
agents.defaults.agentRuntime,agents.list[].agentRuntime, les environnements d’exécution épinglés aux sessions etOPENCLAW_AGENT_RUNTIMEsont ignorés lors de la sélection de l’environnement d’exécution. Exécutezopenclaw doctor --fixpour supprimer les valeurs obsolètes. - Les routes officielles HTTPS OpenAI Responses/ChatGPT exactes et admissibles, sans remplacement explicite dans la requête, peuvent utiliser implicitement l’environnement Codex. La valeur 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érences héritéesclaude-cli/<model>fonctionnent encore à des fins de compatibilité, mais les nouvelles configurations doivent conserver une sélection fournisseur/modèle canonique et placer le backend d’exécution dans la stratégie d’environnement d’exécution du fournisseur/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/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 le 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 gérée par le fournisseur Anthropic est high. Les modèles Claude 4.6 utilisent par défaut adaptive lorsqu’aucun niveau de réflexion explicite n’est défini.
agents.defaults.cliBackends
Backends CLI facultatifs pour les exécutions de secours textuelles uniquement (sans appels d’outils). Utiles comme solution de repli lorsque les fournisseurs d’API échouent.
{ 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", // Vous pouvez aussi utiliser systemPromptFileArg lorsque la CLI accepte un indicateur de fichier d’invite. systemPromptWhen: "first", imageArg: "--image", imageMode: "repeat", }, }, }, },}- Les backends CLI privilégient le texte ; 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 des chemins de fichiers. reseedFromRawTranscriptWhenUncompacted: truepermet à un backend de restaurer des sessions invalidées de manière sûre à partir d’une fin bornée de transcription brute OpenClaw avant l’existence du premier résumé de Compaction. Les changements de profil d’authentification ou d’époque des identifiants ne déclenchent toujours jamais de réamorçage à 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 gérées par 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é.- La valeur héritée
plugins.entries.openai.config.personalityest encore lue 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 cette option non définie pour utiliseragents.defaults.timeoutSecondslorsqu’elle est définie, sinon la cadence du Heartbeat plafonnée à 600 secondes.directPolicy: stratégie de livraison directe/par message privé.allow(valeur par défaut) autorise la livraison vers une cible directe.blocksupprime la livraison vers une cible directe et émetreason=dm-blocked.lightContext: lorsque la valeur est true, les exécutions de Heartbeat utilisent un contexte d’amorçage léger 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 Cron avecsessionTarget: "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 en fonction des voies occupées supplémentaires de cet agent : le travail de sous-agent indexé par sa propre clé de session ou le travail de commande imbriqué. 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 de 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"], // permet d’activer la réinjection de sections d’AGENTS.md model: "openrouter/anthropic/claude-sonnet-4-6", // remplacement facultatif du modèle réservé à la Compaction truncateAfterCompaction: true, // effectue une rotation vers un successeur JSONL plus petit après la Compaction maxActiveTranscriptBytes: "20mb", // déclencheur local facultatif de Compaction préalable notifyUser: true, // signale le début/la fin de la Compaction et la dégradation du vidage de la mémoire (valeur par défaut : false) memoryFlush: { enabled: true, model: "ollama/qwen3:8b", // remplacement facultatif 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 segments pour les historiques longs). Consultez Compaction.provider: identifiant d’un Plugin de fournisseur de Compaction enregistré. Lorsqu’il est défini, la méthodesummarize()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é. Définir un fournisseur imposemode: "safeguard". Consultez Compaction.timeoutSeconds: nombre maximal de secondes autorisé pour une seule opération de Compaction avant qu’OpenClaw ne l’interrompe. Valeur par défaut :180.reserveTokens: marge de jetons conservée 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 le runtime intégré. Définissez-la sur0pour désactiver ce minimum. Ce minimum reste soumis au plafond de la fenêtre de contexte active.keepRecentTokens: budget du point de coupure de l’agent permettant de conserver textuellement la partie la plus récente de la transcription. La commande manuelle/compactle respecte lorsqu’il est explicitement défini ; sinon, la Compaction manuelle constitue un point de contrôle strict.recentTurnsPreserve: nombre de tours utilisateur/assistant les plus récents conservés textuellement hors du résumé de sauvegarde. 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(par défaut),offoucustom.strictajoute au début des instructions intégrées pour la conservation des identifiants opaques pendant le résumé de Compaction.identifierInstructions: texte personnalisé facultatif de conservation des identifiants, utilisé lorsqueidentifierPolicy=custom.qualityGuard: contrôles avec nouvelle tentative en cas de sortie mal formée pour les résumés de sauvegarde. Activés par défaut en mode sauvegarde ; définissezenabled: falsepour ignorer l’audit.midTurnPrecheck: contrôle facultatif de la pression exercée sur la boucle d’outils. Lorsqueenabled: true, OpenClaw vérifie la pression sur le contexte après l’ajout des résultats d’outils et avant l’appel suivant au modèle. Si le contexte ne tient plus, il interrompt la tentative en cours avant de soumettre l’invite et réutilise le chemin de récupération existant de la vérification préalable pour tronquer les résultats d’outils ou effectuer une Compaction et réessayer. Fonctionne avec les modes de Compactiondefaultetsafeguard. Valeur par défaut : désactivé.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 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 lorsque le contexte supplémentaire justifie le risque de dupliquer les directives du projet déjà intégrées au résumé de Compaction.model:provider/model-idfacultatif ou alias simple issu deagents.defaults.models, uniquement pour le 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 s’exécuter sur un autre ; lorsqu’elle n’est pas définie, la Compaction utilise le modèle principal de la session.truncateAfterCompaction: fait pivoter la transcription de la session active après la Compaction afin que les tours futurs 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 telles que"20mb") qui déclenche une Compaction locale normale avant une exécution lorsque l’historique de transcription dépasse le seuil. NécessitetruncateAfterCompactionafin qu’une Compaction réussie puisse effectuer une rotation vers une transcription suivante plus petite. Désactivé lorsqu’il n’est pas défini ou vaut0.notifyUser: lorsque cette option vauttrue, 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 »), ainsi que lorsqu’un vidage de mémoire préalable à la Compaction est épuisé et 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 de ne pas afficher ces notifications.memoryFlush: tour agentique silencieux avant la Compaction automatique afin de stocker les souvenirs durables. Définissezmodelsur un fournisseur/modèle exact, tel queollama/qwen3:8b, lorsque ce tour de maintenance doit rester sur un modèle local ; le remplacement n’hérite pas de la chaîne de repli de la session active.forceFlushTranscriptBytesforce 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 le runtime d’agent intégré, afin d’empêcher les boucles d’exécution infinies pendant la récupération après un échec. Ce paramètre s’applique uniquement au runtime d’agent intégré, et non aux runtimes ACP ou CLI.
{ agents: { defaults: { runRetries: { base: 24, perProfile: 8, min: 32, max: 160, }, }, list: [ { id: "main", runRetries: { max: 50 }, // remplacements facultatifs par agent }, ], },}base: nombre de base d’itérations de nouvelle tentative pour la boucle d’exécution externe. Valeur par défaut :24.perProfile: itérations supplémentaires de nouvelle tentative accordées par profil de repli candidat. Valeur par défaut :8.min: limite absolue minimale d’itérations de nouvelle tentative. Valeur par défaut :32.max: limite absolue maximale d’itérations de nouvelle tentative afin d’empêcher 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", // désactivé (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 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 ratios sont fondés sur le nombre de caractères (approximatif), et non sur un nombre exact de jetons.
- S’il existe moins de
keepLastAssistantsmessages d’assistant, l’élagage est ignoré.
Consultez Élagage de session 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 (par défaut) | natural | custom (utilise minMs/maxMs) }, },}- Les canaux autres que Telegram nécessitent explicitement
*.blockStreaming: truepour activer les réponses par blocs. - Remplacements par canal :
channels.<channel>.blockStreamingCoalesce(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 segment 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(avec repli sur la plage naturelle pour toute limite non définie). Remplacement par agent :agents.list[].humanDelay.
Consultez Diffusion pour plus de détails sur le comportement et la segmentation.
Indicateurs de saisie
{ agents: { defaults: { typingMode: "instant", // never | instant | thinking | message typingIntervalSeconds: 6, }, },}- Valeurs par défaut :
instantpour les discussions directes/mentions,messagepour les discussions de groupe sans mention. - Valeur par défaut de
typingIntervalSeconds:6. - Remplacements par session :
session.typingMode,session.typingIntervalSeconds.
Consultez Indicateurs de saisie.
agents.defaults.sandbox
Mise en bac à sable facultative pour l’agent intégré. Consultez 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", // SecretRefs / contenu intégré é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 indiqué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 exemples.
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 propres à chaque portée (par défaut :/tmp/openclaw-sandboxes)identityFile/certificateFile/knownHostsFile: fichiers locaux existants transmis à OpenSSHidentityData/certificateData/knownHostsData: contenu intégré ou SecretRefs qu’OpenClaw matérialise dans des fichiers temporaires lors de l’exécutionstrictHostKeyChecking/updateHostKeys: paramètres de stratégie d’OpenSSH pour les clés d’hôte (tous deux définis surtruepar défaut)
Ordre de priorité de l’authentification SSH :
identityDataprévaut suridentityFilecertificateDataprévaut surcertificateFileknownHostsDataprévaut surknownHostsFile- Les valeurs
*Datareposant sur SecretRef 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 seule 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 de 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, avec l’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 de stratégie OpenShell facultatif providers: ["openai"], // facultatif autoProviders: true, timeoutSeconds: 120, }, }, },},}Mode OpenShell :
mirror: initialise l’environnement distant à partir de l’environnement local avant l’exécution, puis resynchronise après l’exécution ; l’espace de travail local reste canoniqueremote: initialise une seule fois l’environnement 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 à l’hôte effectuées 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 seule 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-le sur "bridge" (ou sur un réseau bridge personnalisé) si l’agent nécessite un accès sortant.
"host" est bloqué. "container:<id>" est bloqué par défaut, sauf si vous définissez explicitement
sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true (solution 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 hôtes supplémentaires ; 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 l’authentification VNC par défaut et OpenClaw génère une URL de jeton à courte durée de vie (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-le surbridgeuniquement lorsque 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 hôtes supplémentaires 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 démarre toujours avec
--no-sandbox --disable-setuid-sandbox(les conteneurs ne disposent pas des primitives du noyau nécessaires au propre bac à sable de Chrome) ; aucun paramètre de configuration ne permet de modifier ce comportement. - Les valeurs de lancement par défaut sont définies dans
scripts/sandbox-browser-entrypoint.shet optimisées pour les 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>, ou définissez-la sur0pour utiliser la limite de processus par défaut de Chromium.--headless=newuniquement lorsqueheadlessest activé.- Les valeurs par défaut constituent 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 copie de travail des sources) :
scripts/sandbox-setup.sh # image principale du bac à sablescripts/sandbox-browser-setup.sh # image facultative du navigateurPour les installations npm sans copie de travail des sources, consultez Mise en bac à sable § Images et configuration pour les commandes docker build intégrées.
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é récursivement avec la configuration globale
messages.tts, afin que les identifiants partagés puissent rester regroupés tandis que chaque
agent remplace uniquement 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 propre à l’agent reasoningDefault: "on", // remplacement de la visibilité du raisonnement propre à l’agent fastModeDefault: false, // remplacement du mode rapide propre à l’agent params: { cacheRetention: "none" }, // remplace par clé les paramètres correspondants de defaults.models tts: { providers: { elevenlabs: { speakerVoiceId: "EXAVITQu4vr4xnSDxMaL" }, }, }, skills: ["docs-search"], // remplace agents.defaults.skills lorsqu’il est défini identity: { name: "Samantha", theme: "paresseux serviable", 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 stable de l’agent (obligatoire).default: lorsque plusieurs valeurs sont définies, la première l’emporte (un avertissement est consigné). Si aucune n’est définie, 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 activer les modèles de secours pour cet agent, 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 de discussion. Utilise en secoursagents.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 les remplacements propres à un agent, tels quecacheRetention,temperatureoumaxTokens, sans dupliquer l’intégralité du catalogue de modèles.tts: remplacements facultatifs de synthèse vocale par agent. Le bloc est fusionné en profondeur par-dessusmessages.tts; conservez donc les identifiants du fournisseur et la stratégie de secours partagés dansmessages.tts, et ne définissez ici que les valeurs propres au personnage, telles que le fournisseur, la voix, le modèle, le style ou le mode automatique.skills: liste d’autorisation facultative de Skills par agent. Si elle est omise, l’agent hérite deagents.defaults.skillslorsque cette valeur est définie ; une liste explicite remplace les valeurs par défaut au lieu de les fusionner, et[]signifie qu’aucune Skills n’est disponible.thinkingDefault: niveau de réflexion par défaut facultatif pour chaque agent (off | minimal | low | medium | high | xhigh | adaptive | max). Remplaceagents.defaults.thinkingDefaultpour cet agent lorsqu’aucun remplacement n’est défini au niveau du message ou de la session. Le profil de 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 pour chaque agent (on | off | stream). Remplaceagents.defaults.reasoningDefaultpour cet agent lorsqu’aucun remplacement du raisonnement n’est défini au niveau du message ou de la session.fastModeDefault: valeur par défaut facultative du mode rapide pour chaque agent ("auto" | true | false). S’applique lorsqu’aucun remplacement du mode rapide n’est défini au niveau du message ou de la session.models: remplacements facultatifs du catalogue de modèles et 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 à un agent.runtime: descripteur facultatif de l’environnement d’exécution par agent. Utiliseztype: "acp"avec les valeurs par défaut deruntime.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 locaux
identity.avatarrelatifs à l’espace de travail sont limités à 2 MB. Les URLhttp(s)et les URIdata:ne sont pas soumises à la limite de taille des fichiers locaux. identitydéduit des valeurs par défaut :ackReactionà partir deemoji, etmentionPatternsà partir dename/emoji.subagents.allowAgents: liste d’autorisation des identifiants d’agents configurés pour les cibles explicitessessions_spawn.agentId(["*"]= toute cible configurée ; valeur par défaut : le même agent uniquement). Incluez l’identifiant du demandeur lorsque les appelsagentIdciblant ce même agent 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ée minimaleagents.list[]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 isolée dans un bac à sable,
sessions_spawnrejette les cibles qui s’exécuteraient sans bac à sable. subagents.requireAgentId: lorsque la valeur est vraie, bloque les appelssessions_spawnqui omettentagentId(impose une sélection explicite du profil ; valeur par défaut : faux).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 dans 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 (si le type est absent, la valeur par défaut est route),acppour les liaisons persistantes de conversations ACP.match.channel(obligatoire)match.accountId(facultatif ;*= tout compte ; valeur omise = 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(correspondance exacte, sans pair/guilde/équipe)match.accountId: "*"(à l’échelle du canal)- Agent par défaut
Dans chaque niveau, la première entrée correspondante de bindings 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-agents pour en savoir plus sur les règles de 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, // désactivation automatique par défaut après une inactivité exprimée en heures (`0` désactive cette fonction) maxAgeHours: 0, // âge maximal strict par défaut en heures (`0` désactive cette fonction) }, mainKey: "main", // hérité (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 de sessions de base pour les contextes de discussion de groupe.per-sender(par défaut) : chaque expéditeur dispose d’une session isolée dans 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: isole selon l’identifiant de l’expéditeur sur l’ensemble des canaux.per-channel-peer: isole par canal + expéditeur (recommandé pour les boîtes de réception multi-utilisateurs).per-account-channel-peer: isole par compte + canal + expéditeur (recommandé pour les configurations multicomptes).identityLinks: associe les identifiants canoniques aux correspondants 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 basculer l’itinéraire de réponse de la session active vers un autre correspondant de canal lié ; consultez Ancrage de canal.reset: stratégie principale de réinitialisation.dailyréinitialise à l’heure locale définie paratHour;idleréinitialise aprèsidleMinutes. Lorsque les deux sont configurés, le premier délai arrivé à expiration l’emporte. La fraîcheur de la réinitialisation quotidienne utilise la valeursessionStartedAtde la ligne de session ; celle de la réinitialisation pour inactivité utiliselastInteractionAt. Les écritures d’événements en arrière-plan ou système, telles que les Heartbeat, les réveils Cron, les notifications d’exécution et la tenue des registres 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 directement surresetByType/resetpour cette session. À utiliser uniquement lorsqu’un canal nécessite un comportement de réinitialisation différent de la stratégie définie au niveau du type.mainKey: ancien champ. L’environnement d’exécution utilise toujours"main"pour le compartiment principal de discussion directe.agentToAgent.maxPingPongTurns: nombre maximal d’allers-retours de réponse entre agents pendant les échanges d’agent à agent (entier, plage :0-20, valeur par défaut :5).0désactive l’enchaînement des allers-retours.sendPolicy: établit la 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’ancienneté 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 maximal 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 du Gateway, de courte durée, utilisent une conservation fixe de
24h, mais leur nettoyage est conditionné par 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. Lorsque le nettoyage des exécutions de modèle s’effectue, il précède le nettoyage plus général des entrées obsolètes parpruneAfteret la limitemaxEntries. rotateBytes: obsolète et ignoré ;openclaw doctor --fixle supprime des anciennes configurations.resetArchiveRetention: durée de conservation des archives de transcription*.reset.<timestamp>. UtilisepruneAfterpar défaut ; définissezfalsepour la désactiver.maxDiskBytes: budget disque facultatif du répertoire des sessions. En modewarn, il consigne des avertissements ; en modeenforce, il supprime d’abord les artefacts/sessions les plus anciens.highWaterBytes: cible facultative après le nettoyage lié au budget. Utilise par défaut80%demaxDiskBytes.writeLock: contrôles du verrou d’écriture des transcriptions de session. Ajustez-les uniquement lorsque la préparation légitime des transcriptions, le nettoyage, la Compaction ou la mise en miroir provoquent une contention plus longue que celle prévue par les stratégies 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 avant qu’un verrou existant soit 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: nombre de millisecondes pendant lesquelles un verrou détenu dans le processus peut le rester avant que le chien de garde 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 une période d’inactivité, en heures (0désactive cette fonction ; les fournisseurs peuvent la remplacer)maxAgeHours: ancienneté maximale absolue par défaut, en heures (0désactive cette fonction ; les fournisseurs peuvent la remplacer)spawnSessions: autorisation par défaut de créer des sessions de travail liées à un fil à partir desessions_spawnet de créations de fils ACP. Utilise par défauttruelorsque les liaisons de fils sont activées ; les fournisseurs/comptes peuvent la remplacer.defaultSpawnContext: contexte natif de sous-agent par défaut pour les créations liées à un fil ("fork"ou"isolated"). Utilise par défaut"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 cette fonction byChannel: { whatsapp: 5000, slack: 1500, }, }, },}Préfixe de réponse
Remplacements par canal/compte : channels.<channel>.responsePrefix, channels.<channel>.accounts.<id>.responsePrefix.
Résolution (la valeur la plus spécifique l’emporte) : compte → canal → global. "" désactive la fonction et interrompt la cascade. "auto" produit [{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 sont insensibles à la casse. {think} est un alias de {thinkingLevel}.
Réaction d’accusé de réception
- Utilise par défaut la valeur
identity.emojide l’agent actif, ou"👀"à défaut. Définissez""pour désactiver cette fonction. - Remplacements par canal :
channels.<channel>.ackReaction,channels.<channel>.accounts.<id>.ackReaction. - Ordre de résolution : compte → canal →
messages.ackReaction→ valeur de repli de 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-la explicitement surtruepour activer les réactions d’état du cycle de vie. Par défaut, Slack utilise son état natif de fil d’assistant ainsi que des messages de chargement alternés pour indiquer la progression, tout en conservant statique 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 qui ne sont pas pris en charge utilisent donc la variante d’état prise en charge la plus proche pour cette discussion.
File d’attente
mode: stratégie de file d’attente pour les messages entrants qui arrivent 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 une fois l’exécution active terminée.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 injecté. Valeur par défaut :500.cap: nombre maximal de messages en file d’attente avant l’application de la stratégie d’abandon. Valeur par défaut :20.drop: stratégie appliquée lorsque la limite est dépassée."summarize"(par défaut) abandonne les entrées les plus anciennes, mais conserve des résumés compacts ;"old"abandonne 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 rapides ne contenant que du texte et provenant du même expéditeur en un seul tour d’agent. Les médias/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 message
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 de canal.messages.visibleReplies: contrôle les réponses sources visibles dans les conversations directes, de groupe et de canal ("message_tool"exigemessage(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 d’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.allowProviderest facultatif.- Les clés d’API utilisent par défaut
ELEVENLABS_API_KEY/XI_API_KEYetOPENAI_API_KEY. - Les fournisseurs de synthèse vocale intégrés appartiennent à des 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 utilisateur de contrôle dans le 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 donnez des réponses brèves.", 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 Talk sont configurés.- Les anciennes clés Talk plates (
talk.voiceId,talk.voiceAliases,talk.modelId,talk.outputFormat,talk.apiKey) sont réservées à la compatibilité. Exécutezopenclaw doctor --fixpour réécrire la configuration persistée danstalk.providers.<provider>. - Les identifiants vocaux se replient sur
ELEVENLABS_VOICE_IDouSAG_VOICE_ID(comportement du client Talk sous macOS). providers.*.apiKeyaccepte des chaînes en texte brut ou des objets SecretRef.- Le repli
ELEVENLABS_API_KEYs’applique uniquement lorsqu’aucune clé d’API Talk n’est configurée. providers.*.voiceAliasespermet aux directives Talk 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-ttsinclus 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 pour l’exécution complète de l’agent OpenClaw derrière les appelsopenclaw_agent_consulten temps réel de Talk dans l’interface de contrôle. Laissez cette option non définie 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 de Talk dans 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 Talk sous iOS/macOS. Laissez cette option non définie pour utiliser la valeur par défaut de l’appareil.silenceTimeoutMscontrôle la durée pendant laquelle le mode Talk 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 consignesopenclaw_agent_consultpar défaut.realtime.vadThresholddéfinit le seuil d’activité vocale du fournisseur, de0(sensibilité maximale) à1(sensibilité minimale). Une valeur non définie conserve la valeur par défaut du fournisseur.realtime.silenceDurationMsdéfinit la fenêtre de silence, exprimée sous forme de nombre entier positif, avant que le fournisseur ne valide une intervention 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 sous forme de 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"(valeur 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 connexes
- Référence de configuration — toutes les autres clés de configuration
- Configuration — tâches courantes et configuration rapide
- Exemples de configuration