Référence de configuration
Référence de configuration principale pour~/.openclaw/openclaw.json. Pour une vue d’ensemble orientée tâches, consultez Configuration.
Cette page couvre les principales surfaces de configuration d’OpenClaw et renvoie vers d’autres pages lorsqu’un sous-système possède sa propre référence plus détaillée. Elle n’essaie pas d’intégrer sur une seule page chaque catalogue de commandes appartenant à un canal/plugin ni chaque réglage avancé de mémoire/QMD.
Source de vérité du code :
openclaw config schemaaffiche le schéma JSON actif utilisé pour la validation et l’interface Control UI, avec les métadonnées groupées/plugin/canal fusionnées lorsqu’elles sont disponiblesconfig.schema.lookuprenvoie un nœud de schéma limité à un chemin pour les outils d’exploration détailléepnpm config:docs:check/pnpm config:docs:genvalident le hachage de référence des documents de configuration par rapport à la surface actuelle du schéma
- Référence de configuration de la mémoire pour
agents.defaults.memorySearch.*,memory.qmd.*,memory.citationset la configuration de rêverie sousplugins.entries.memory-core.config.dreaming - Commandes Slash pour le catalogue actuel des commandes intégrées + groupées
- pages du canal/plugin propriétaire pour les surfaces de commandes spécifiques au canal
Canaux
Chaque canal démarre automatiquement lorsque sa section de configuration existe (sauf sienabled: false).
Accès aux messages privés et aux groupes
Tous les canaux prennent en charge des politiques pour les messages privés et pour les groupes :| Politique DM | Comportement |
|---|---|
pairing (par défaut) | Les expéditeurs inconnus reçoivent un code d’appairage à usage unique ; le propriétaire doit l’approuver |
allowlist | Seuls les expéditeurs dans allowFrom (ou le magasin d’autorisations appairées) |
open | Autoriser tous les messages privés entrants (nécessite allowFrom: ["*"]) |
disabled | Ignorer tous les messages privés entrants |
| Politique de groupe | Comportement |
|---|---|
allowlist (par défaut) | Seuls les groupes correspondant à la liste d’autorisations configurée |
open | Contourner les listes d’autorisations de groupe (le filtrage par mention s’applique toujours) |
disabled | Bloquer tous les messages de groupe/salon |
channels.defaults.groupPolicy définit la valeur par défaut lorsque groupPolicy d’un fournisseur n’est pas défini.
Les codes d’appairage expirent après 1 heure. Les demandes d’appairage DM en attente sont limitées à 3 par canal.
Si un bloc fournisseur est entièrement absent (channels.<provider> absent), la politique de groupe d’exécution revient à allowlist (échec sécurisé) avec un avertissement au démarrage.Remplacements de modèle par canal
Utilisezchannels.modelByChannel pour épingler des ID de canal spécifiques à un modèle. Les valeurs acceptent provider/model ou des alias de modèle configurés. Le mapping de canal s’applique lorsqu’une session n’a pas déjà de remplacement de modèle (par exemple défini via /model).
Valeurs par défaut des canaux et heartbeat
Utilisezchannels.defaults pour le comportement partagé de politique de groupe et de heartbeat entre les fournisseurs :
channels.defaults.groupPolicy: politique de groupe de repli lorsqu’ungroupPolicyau niveau fournisseur n’est pas défini.channels.defaults.contextVisibility: mode de visibilité du contexte supplémentaire par défaut pour tous les canaux. Valeurs :all(par défaut, inclure tout le contexte cité/de fil/d’historique),allowlist(inclure uniquement le contexte des expéditeurs autorisés),allowlist_quote(identique à allowlist mais conserve le contexte explicite de citation/réponse). Remplacement par canal :channels.<channel>.contextVisibility.channels.defaults.heartbeat.showOk: inclure les états de canal sains dans la sortie du heartbeat.channels.defaults.heartbeat.showAlerts: inclure les états dégradés/en erreur dans la sortie du heartbeat.channels.defaults.heartbeat.useIndicator: afficher une sortie de heartbeat compacte de type indicateur.
WhatsApp multi-compte
WhatsApp multi-compte
- Les commandes sortantes utilisent par défaut le compte
defaults’il est présent ; sinon, le premier ID de compte configuré (trié). channels.whatsapp.defaultAccountfacultatif remplace ce choix du compte par défaut lorsqu’il correspond à un ID de compte configuré.- L’ancien répertoire d’authentification Baileys à compte unique est migré par
openclaw doctorverswhatsapp/default. - Remplacements par compte :
channels.whatsapp.accounts.<id>.sendReadReceipts,channels.whatsapp.accounts.<id>.dmPolicy,channels.whatsapp.accounts.<id>.allowFrom.
Telegram
- Jeton du bot :
channels.telegram.botTokenouchannels.telegram.tokenFile(fichier ordinaire uniquement ; les liens symboliques sont rejetés), avecTELEGRAM_BOT_TOKENcomme solution de repli pour le compte par défaut. channels.telegram.defaultAccountfacultatif remplace la sélection du compte par défaut lorsqu’il correspond à un ID de compte configuré.- Dans les configurations multi-comptes (2 ID de compte ou plus), définissez un compte par défaut explicite (
channels.telegram.defaultAccountouchannels.telegram.accounts.default) pour éviter le routage de repli ;openclaw doctoravertit lorsque cela est manquant ou invalide. configWrites: falsebloque les écritures de configuration initiées par Telegram (migrations d’ID de supergroupe,/config set|unset).- Les entrées
bindings[]de niveau supérieur avectype: "acp"configurent des liaisons ACP persistantes pour les sujets de forum (utilisez le format canoniquechatId:topic:topicIddansmatch.peer.id). La sémantique des champs est partagée dans Agents ACP. - Les aperçus de flux Telegram utilisent
sendMessage+editMessageText(fonctionne dans les conversations directes et de groupe). - Politique de nouvelle tentative : voir Politique de nouvelle tentative.
Discord
- Jeton :
channels.discord.token, avecDISCORD_BOT_TOKENcomme solution de repli pour le compte par défaut. - Les appels sortants directs qui fournissent un
tokenDiscord explicite utilisent ce jeton pour l’appel ; les paramètres de nouvelle tentative/politique du compte proviennent toujours du compte sélectionné dans l’instantané d’exécution actif. channels.discord.defaultAccountfacultatif remplace la sélection du compte par défaut lorsqu’il correspond à un ID de compte configuré.- Utilisez
user:<id>(DM) ouchannel:<id>(canal de serveur) pour les cibles de livraison ; les ID numériques seuls sont rejetés. - Les slugs de serveur sont en minuscules avec les espaces remplacés par
-; les clés de canal utilisent le nom slugifié (sans#). Préférez les ID de serveur. - Les messages rédigés par des bots sont ignorés par défaut.
allowBots: trueles active ; utilisezallowBots: "mentions"pour n’accepter que les messages de bots qui mentionnent le bot (les propres messages restent filtrés). channels.discord.guilds.<id>.ignoreOtherMentions(et les remplacements de canal) supprime les messages qui mentionnent un autre utilisateur ou rôle mais pas le bot (à l’exclusion de @everyone/@here).maxLinesPerMessage(17 par défaut) découpe les messages hauts même lorsqu’ils font moins de 2000 caractères.channels.discord.threadBindingscontrôle le routage lié aux fils Discord :enabled: remplacement Discord pour les fonctionnalités de session liées aux fils (/focus,/unfocus,/agents,/session idle,/session max-age, et la livraison/le routage liés)idleHours: remplacement Discord pour le retrait automatique du focus après inactivité, en heures (0désactive)maxAgeHours: remplacement Discord pour l’âge maximal strict, en heures (0désactive)spawnSubagentSessions: option d’activation pour la création/liaison automatique de fil parsessions_spawn({ thread: true })
- Les entrées
bindings[]de niveau supérieur avectype: "acp"configurent des liaisons ACP persistantes pour les canaux et les fils (utilisez l’ID du canal/fil dansmatch.peer.id). La sémantique des champs est partagée dans Agents ACP. channels.discord.ui.components.accentColordéfinit la couleur d’accentuation pour les conteneurs Discord components v2.channels.discord.voiceactive les conversations dans les canaux vocaux Discord ainsi que les remplacements facultatifs d’auto-jonction + TTS.channels.discord.voice.daveEncryptionetchannels.discord.voice.decryptionFailureTolerancesont transmis aux options DAVE de@discordjs/voice(trueet24par défaut).- OpenClaw tente en outre une récupération de réception vocale en quittant puis en rejoignant à nouveau une session vocale après des échecs de déchiffrement répétés.
channels.discord.streamingest la clé canonique du mode de flux. Les anciennes valeurs booléennesstreamModeetstreamingsont migrées automatiquement.channels.discord.autoPresencemappe la disponibilité d’exécution à la présence du bot (healthy => online, degraded => idle, exhausted => dnd) et autorise des remplacements facultatifs du texte de statut.channels.discord.dangerouslyAllowNameMatchingréactive la correspondance par nom/tag modifiable (mode de compatibilité de dernier recours).channels.discord.execApprovals: livraison native Discord des approbations d’exécution et autorisation des approbateurs.enabled:true,falseou"auto"(par défaut). En mode auto, les approbations d’exécution s’activent lorsque des approbateurs peuvent être résolus depuisapproversoucommands.ownerAllowFrom.approvers: ID d’utilisateurs Discord autorisés à approuver des demandes d’exécution. Utilisecommands.ownerAllowFromcomme solution de repli si omis.agentFilter: liste d’autorisations facultative d’ID d’agent. Omettez-la pour transférer les approbations pour tous les agents.sessionFilter: motifs facultatifs de clé de session (sous-chaîne ou regex).target: emplacement d’envoi des invites d’approbation."dm"(par défaut) les envoie aux DM des approbateurs,"channel"les envoie au canal d’origine,"both"les envoie aux deux. Lorsque la cible inclut"channel", les boutons ne sont utilisables que par les approbateurs résolus.cleanupAfterResolve: lorsqu’il vauttrue, supprime les DM d’approbation après approbation, refus ou expiration.
off (aucun), own (messages du bot, par défaut), all (tous les messages), allowlist (depuis guilds.<id>.users sur tous les messages).
Google Chat
- JSON du compte de service : en ligne (
serviceAccount) ou basé sur un fichier (serviceAccountFile). - SecretRef du compte de service est également pris en charge (
serviceAccountRef). - Solutions de repli d’environnement :
GOOGLE_CHAT_SERVICE_ACCOUNTouGOOGLE_CHAT_SERVICE_ACCOUNT_FILE. - Utilisez
spaces/<spaceId>ouusers/<userId>pour les cibles de livraison. channels.googlechat.dangerouslyAllowNameMatchingréactive la correspondance par principal e-mail modifiable (mode de compatibilité de dernier recours).
Slack
- Le mode socket nécessite
botTokenetappToken(SLACK_BOT_TOKEN+SLACK_APP_TOKENpour la solution de repli d’environnement du compte par défaut). - Le mode HTTP nécessite
botTokenplussigningSecret(à la racine ou par compte). botToken,appToken,signingSecretetuserTokenacceptent des chaînes en texte brut ou des objets SecretRef.- Les instantanés de compte Slack exposent des champs de source/état par identifiant comme
botTokenSource,botTokenStatus,appTokenStatuset, en mode HTTP,signingSecretStatus.configured_unavailablesignifie que le compte est configuré via SecretRef, mais que le chemin de commande/d’exécution actuel n’a pas pu résoudre la valeur secrète. configWrites: falsebloque les écritures de configuration initiées par Slack.channels.slack.defaultAccountfacultatif remplace la sélection du compte par défaut lorsqu’il correspond à un ID de compte configuré.channels.slack.streaming.modeest la clé canonique du mode de flux Slack.channels.slack.streaming.nativeTransportcontrôle le transport de flux natif de Slack. Les anciennes valeursstreamMode, booléennesstreamingetnativeStreamingsont migrées automatiquement.- Utilisez
user:<id>(DM) ouchannel:<id>pour les cibles de livraison.
off, own (par défaut), all, allowlist (depuis reactionAllowlist).
Isolation des sessions de fil : thread.historyScope est par fil (par défaut) ou partagé à l’échelle du canal. thread.inheritParent copie la transcription du canal parent vers les nouveaux fils.
- Le flux natif Slack ainsi que l’état de fil Slack de type assistant « is typing… » nécessitent une cible de réponse dans un fil. Les DM de niveau supérieur restent hors fil par défaut ; ils utilisent donc
typingReactionou la livraison normale au lieu de l’aperçu de style fil. typingReactionajoute une réaction temporaire au message Slack entrant pendant l’exécution d’une réponse, puis la supprime à la fin. Utilisez un shortcode d’emoji Slack tel que"hourglass_flowing_sand".channels.slack.execApprovals: livraison native Slack des approbations d’exécution et autorisation des approbateurs. Même schéma que Discord :enabled(true/false/"auto"),approvers(ID d’utilisateurs Slack),agentFilter,sessionFilterettarget("dm","channel"ou"both").
| Groupe d’actions | Par défaut | Remarques |
|---|---|---|
| reactions | activé | Réagir + lister les réactions |
| messages | activé | Lire/envoyer/modifier/supprimer |
| pins | activé | Épingler/désépingler/lister |
| memberInfo | activé | Informations sur le membre |
| emojiList | activé | Liste des emojis personnalisés |
Mattermost
Mattermost est distribué comme plugin :openclaw plugins install @openclaw/mattermost.
oncall (répond sur @-mention, par défaut), onmessage (chaque message), onchar (messages commençant par un préfixe de déclenchement).
Lorsque les commandes natives Mattermost sont activées :
commands.callbackPathdoit être un chemin (par exemple/api/channels/mattermost/command), et non une URL complète.commands.callbackUrldoit résoudre vers le point de terminaison de passerelle OpenClaw et être accessible depuis le serveur Mattermost.- Les rappels slash natifs sont authentifiés avec les jetons par commande renvoyés
par Mattermost lors de l’enregistrement de la commande slash. Si l’enregistrement échoue ou si aucune
commande n’est activée, OpenClaw rejette les rappels avec
Unauthorized: invalid command token. - Pour les hôtes de rappel privés/tailnet/internes, Mattermost peut exiger que
ServiceSettings.AllowedUntrustedInternalConnectionsinclue l’hôte/domaine de rappel. Utilisez des valeurs hôte/domaine, et non des URL complètes. channels.mattermost.configWrites: autorise ou refuse les écritures de configuration initiées par Mattermost.channels.mattermost.requireMention: exige une@mentionavant de répondre dans les canaux.channels.mattermost.groups.<channelId>.requireMention: remplacement par canal du filtrage par mention ("*"pour la valeur par défaut).channels.mattermost.defaultAccountfacultatif remplace la sélection du compte par défaut lorsqu’il correspond à un ID de compte configuré.
Signal
off, own (par défaut), all, allowlist (depuis reactionAllowlist).
channels.signal.account: épingle le démarrage du canal à une identité de compte Signal spécifique.channels.signal.configWrites: autorise ou refuse les écritures de configuration initiées par Signal.channels.signal.defaultAccountfacultatif remplace la sélection du compte par défaut lorsqu’il correspond à un ID de compte configuré.
BlueBubbles
BlueBubbles est le chemin recommandé pour iMessage (pris en charge par un plugin, configuré souschannels.bluebubbles).
- Chemins de clés principaux couverts ici :
channels.bluebubbles,channels.bluebubbles.dmPolicy. channels.bluebubbles.defaultAccountfacultatif remplace la sélection du compte par défaut lorsqu’il correspond à un ID de compte configuré.- Les entrées
bindings[]de niveau supérieur avectype: "acp"peuvent lier des conversations BlueBubbles à des sessions ACP persistantes. Utilisez un handle BlueBubbles ou une chaîne cible (chat_id:*,chat_guid:*,chat_identifier:*) dansmatch.peer.id. Sémantique de champ partagée : Agents ACP. - La configuration complète du canal BlueBubbles est documentée dans BlueBubbles.
iMessage
OpenClaw lanceimsg rpc (JSON-RPC sur stdio). Aucun démon ni port n’est requis.
-
channels.imessage.defaultAccountfacultatif remplace la sélection du compte par défaut lorsqu’il correspond à un ID de compte configuré. - Nécessite un accès complet au disque pour la base de données Messages.
-
Préférez les cibles
chat_id:<id>. Utilisezimsg chats --limit 20pour lister les conversations. -
cliPathpeut pointer vers un wrapper SSH ; définissezremoteHost(hostouuser@host) pour la récupération SCP des pièces jointes. -
attachmentRootsetremoteAttachmentRootsrestreignent les chemins des pièces jointes entrantes (par défaut :/Users/*/Library/Messages/Attachments). -
SCP utilise une vérification stricte des clés d’hôte ; assurez-vous donc que la clé d’hôte du relais existe déjà dans
~/.ssh/known_hosts. -
channels.imessage.configWrites: autorise ou refuse les écritures de configuration initiées par iMessage. -
Les entrées
bindings[]de niveau supérieur avectype: "acp"peuvent lier des conversations iMessage à des sessions ACP persistantes. Utilisez un handle normalisé ou une cible de conversation explicite (chat_id:*,chat_guid:*,chat_identifier:*) dansmatch.peer.id. Sémantique de champ partagée : Agents ACP.
Exemple de wrapper SSH iMessage
Exemple de wrapper SSH iMessage
Matrix
Matrix est pris en charge par une extension et configuré souschannels.matrix.
- L’authentification par jeton utilise
accessToken; l’authentification par mot de passe utiliseuserId+password. channels.matrix.proxyachemine le trafic HTTP Matrix via un proxy HTTP(S) explicite. Les comptes nommés peuvent le remplacer avecchannels.matrix.accounts.<id>.proxy.channels.matrix.network.dangerouslyAllowPrivateNetworkautorise les homeservers privés/internes.proxyet cette activation réseau sont des contrôles indépendants.channels.matrix.defaultAccountsélectionne le compte préféré dans les configurations multi-comptes.channels.matrix.autoJoinvaut par défautoff, donc les salons invités et les nouvelles invitations de type DM sont ignorés jusqu’à ce que vous définissiezautoJoin: "allowlist"avecautoJoinAllowlistouautoJoin: "always".channels.matrix.execApprovals: livraison native Matrix des approbations d’exécution et autorisation des approbateurs.enabled:true,falseou"auto"(par défaut). En mode auto, les approbations d’exécution s’activent lorsque des approbateurs peuvent être résolus depuisapproversoucommands.ownerAllowFrom.approvers: ID d’utilisateurs Matrix (par ex.@owner:example.org) autorisés à approuver des demandes d’exécution.agentFilter: liste d’autorisations facultative d’ID d’agent. Omettez-la pour transférer les approbations pour tous les agents.sessionFilter: motifs facultatifs de clé de session (sous-chaîne ou regex).target: emplacement d’envoi des invites d’approbation."dm"(par défaut),"channel"(salon d’origine) ou"both".- Remplacements par compte :
channels.matrix.accounts.<id>.execApprovals.
channels.matrix.dm.sessionScopecontrôle la manière dont les DM Matrix sont regroupés en sessions :per-user(par défaut) partage par pair routé, tandis queper-roomisole chaque salon DM.- Les sondes d’état Matrix et les consultations de répertoire en direct utilisent la même politique de proxy que le trafic d’exécution.
- La configuration complète de Matrix, les règles de ciblage et les exemples d’installation sont documentés dans Matrix.
Microsoft Teams
Microsoft Teams est pris en charge par une extension et configuré souschannels.msteams.
- Chemins de clés principaux couverts ici :
channels.msteams,channels.msteams.configWrites. - La configuration complète de Teams (identifiants, webhook, politique DM/groupe, remplacements par équipe/par canal) est documentée dans Microsoft Teams.
IRC
IRC est pris en charge par une extension et configuré souschannels.irc.
- Chemins de clés principaux couverts ici :
channels.irc,channels.irc.dmPolicy,channels.irc.configWrites,channels.irc.nickserv.*. channels.irc.defaultAccountfacultatif remplace la sélection du compte par défaut lorsqu’il correspond à un ID de compte configuré.- La configuration complète du canal IRC (hôte/port/TLS/canaux/listes d’autorisations/filtrage par mention) est documentée dans IRC.
Multi-compte (tous les canaux)
Exécutez plusieurs comptes par canal (chacun avec son propreaccountId) :
defaultest utilisé lorsqueaccountIdest omis (CLI + routage).- Les jetons d’environnement s’appliquent uniquement au compte default.
- Les paramètres de canal de base s’appliquent à tous les comptes sauf remplacement par compte.
- Utilisez
bindings[].match.accountIdpour router chaque compte vers un agent différent. - Si vous ajoutez un compte non par défaut via
openclaw channels add(ou l’intégration du canal) alors que vous utilisez encore une configuration de canal de niveau supérieur à compte unique, OpenClaw promeut d’abord les valeurs de niveau supérieur à compte unique limitées au compte dans la map de comptes du canal afin que le compte d’origine continue de fonctionner. La plupart des canaux les déplacent verschannels.<channel>.accounts.default; Matrix peut à la place conserver une cible nommée/par défaut existante correspondante. - Les liaisons existantes limitées au canal (sans
accountId) continuent de correspondre au compte par défaut ; les liaisons limitées au compte restent facultatives. openclaw doctor --fixrépare également les formes mixtes en déplaçant les valeurs de niveau supérieur à compte unique limitées au compte vers le compte promu choisi pour ce canal. La plupart des canaux utilisentaccounts.default; Matrix peut à la place conserver une cible nommée/par défaut existante correspondante.
Autres canaux d’extension
De nombreux canaux d’extension sont configurés sous la formechannels.<id> et documentés dans leurs pages de canal dédiées (par exemple Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat et Twitch).
Consultez l’index complet des canaux : Canaux.
Filtrage par mention dans les discussions de groupe
Par défaut, les messages de groupe nécessitent une mention (mention de métadonnées ou modèles regex sûrs). Cela s’applique aux discussions de groupe WhatsApp, Telegram, Discord, Google Chat et iMessage. Types de mention :- Mentions de métadonnées : @-mentions natives de la plateforme. Ignorées en mode auto-discussion WhatsApp.
- Modèles de texte : modèles regex sûrs dans
agents.list[].groupChat.mentionPatterns. Les modèles invalides et les répétitions imbriquées non sûres sont ignorés. - Le filtrage par mention n’est appliqué que lorsque la détection est possible (mentions natives ou au moins un modèle).
messages.groupChat.historyLimit définit la valeur globale par défaut. Les canaux peuvent la remplacer avec channels.<channel>.historyLimit (ou par compte). Définissez 0 pour désactiver.
Limites d’historique des DM
telegram, whatsapp, discord, slack, signal, imessage, msteams.
Mode auto-discussion
Incluez votre propre numéro dansallowFrom pour activer le mode auto-discussion (ignore les @-mentions natives, répond uniquement aux modèles de texte) :
Commandes (gestion des commandes de chat)
Détails des commandes
Détails des commandes
- Ce bloc configure les surfaces de commande. Pour le catalogue actuel des commandes intégrées + groupées, consultez Commandes Slash.
- Cette page est une référence des clés de configuration, et non le catalogue complet des commandes. Les commandes appartenant à un canal/plugin telles que QQ Bot
/bot-ping/bot-help/bot-logs, LINE/card, device-pair/pair, memory/dreaming, phone-control/phoneet Talk/voicesont documentées dans leurs pages de canal/plugin ainsi que dans Commandes Slash. - Les commandes texte doivent être des messages autonomes avec un
/initial. native: "auto"active les commandes natives pour Discord/Telegram, et laisse Slack désactivé.nativeSkills: "auto"active les commandes de Skills natives pour Discord/Telegram, et laisse Slack désactivé.- Remplacement par canal :
channels.discord.commands.native(booléen ou"auto").falseefface les commandes précédemment enregistrées. - Remplacez l’enregistrement natif des Skills par canal avec
channels.<provider>.commands.nativeSkills. channels.telegram.customCommandsajoute des entrées supplémentaires au menu du bot Telegram.bash: trueactive! <cmd>pour le shell hôte. Nécessitetools.elevated.enabledet que l’expéditeur soit danstools.elevated.allowFrom.<channel>.config: trueactive/config(lit/écritopenclaw.json). Pour les clients de passerellechat.send, les écritures persistantes/config set|unsetnécessitent égalementoperator.admin; le/config showen lecture seule reste disponible pour les clients opérateur normaux avec portée d’écriture.mcp: trueactive/mcppour la configuration des serveurs MCP gérés par OpenClaw sousmcp.servers.plugins: trueactive/pluginspour la découverte, l’installation, et les contrôles d’activation/désactivation des plugins.channels.<provider>.configWritescontrôle les mutations de configuration par canal (par défaut : true).- Pour les canaux multi-comptes,
channels.<provider>.accounts.<id>.configWritescontrôle également les écritures qui ciblent ce compte (par exemple/allowlist --config --account <id>ou/config set channels.<provider>.accounts.<id>...). restart: falsedésactive/restartet les actions de l’outil de redémarrage de la passerelle. Par défaut :true.ownerAllowFromest la liste d’autorisations explicite du propriétaire pour les commandes/outils réservés au propriétaire. Elle est distincte deallowFrom.ownerDisplay: "hash"hache les ID du propriétaire dans le prompt système. DéfinissezownerDisplaySecretpour contrôler le hachage.allowFromest défini par fournisseur. Lorsqu’il est défini, c’est la seule source d’autorisation (les listes d’autorisations/appairages de canal etuseAccessGroupssont ignorés).useAccessGroups: falsepermet aux commandes de contourner les politiques de groupes d’accès lorsqueallowFromn’est pas défini.- Cartographie de la documentation des commandes :
Valeurs par défaut des agents
agents.defaults.workspace
Par défaut : ~/.openclaw/workspace.
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.skills
Liste d’autorisations par défaut facultative des Skills pour les agents qui ne définissent pas
agents.list[].skills.
- Omettez
agents.defaults.skillspour des Skills non restreints par défaut. - Omettez
agents.list[].skillspour hériter des valeurs par défaut. - Définissez
agents.list[].skills: []pour aucun Skills. - Une liste non vide dans
agents.list[].skillsconstitue 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 bootstrap de l’espace de travail (AGENTS.md, SOUL.md, TOOLS.md, IDENTITY.md, USER.md, HEARTBEAT.md, BOOTSTRAP.md).
agents.defaults.contextInjection
Contrôle quand les fichiers bootstrap de l’espace de travail sont injectés dans le prompt système. Par défaut : "always".
"continuation-skip": les tours de continuation sûrs (après une réponse d’assistant terminée) ignorent la réinjection du bootstrap de l’espace de travail, ce qui réduit la taille du prompt. Les exécutions heartbeat et les nouvelles tentatives après compactage reconstruisent toujours le contexte.
agents.defaults.bootstrapMaxChars
Nombre maximal de caractères par fichier bootstrap de l’espace de travail avant troncature. Par défaut : 20000.
agents.defaults.bootstrapTotalMaxChars
Nombre total maximal de caractères injectés sur l’ensemble des fichiers bootstrap de l’espace de travail. Par défaut : 150000.
agents.defaults.bootstrapPromptTruncationWarning
Contrôle le texte d’avertissement visible par l’agent lorsque le contexte bootstrap est tronqué.
Par défaut : "once".
"off": ne jamais injecter de texte d’avertissement dans le prompt système."once": injecter l’avertissement une fois par signature de troncature unique (recommandé)."always": injecter l’avertissement à chaque exécution lorsqu’une troncature existe.
agents.defaults.imageMaxDimensionPx
Taille maximale en pixels du plus long côté d’une image dans les blocs image de transcription/outil avant les appels fournisseur.
Par défaut : 1200.
Des valeurs plus faibles réduisent généralement l’utilisation de 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.userTimezone
Fuseau horaire pour le contexte du prompt système (pas pour les horodatages des messages). Utilise le fuseau horaire de l’hôte comme solution de repli.
agents.defaults.timeFormat
Format de l’heure dans le prompt système. Par défaut : auto (préférence du système d’exploitation).
agents.defaults.model
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 des modèles de bascule ordonnés.
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 repli lorsque le modèle sélectionné/par défaut ne peut pas accepter d’entrée image.
- Utilisé par le chemin de l’outil
imageGenerationModel: accepte soit une chaîne ("provider/model"), soit un objet ({ primary, fallbacks }).- Utilisé par la capacité partagée de génération d’images et toute future surface d’outil/plugin qui génère des images.
- Valeurs typiques :
google/gemini-3.1-flash-image-previewpour la génération d’images Gemini native,fal/fal-ai/flux/devpour fal, ouopenai/gpt-image-1pour OpenAI Images. - Si vous sélectionnez directement un provider/modèle, configurez également l’authentification/la clé API du provider correspondant (par exemple
GEMINI_API_KEYouGOOGLE_API_KEYpourgoogle/*,OPENAI_API_KEYpouropenai/*,FAL_KEYpourfal/*). - Si omis,
image_generatepeut tout de même déduire une valeur par défaut de provider avec authentification. Il essaie d’abord le provider par défaut actuel, puis les autres providers de génération d’images enregistrés dans l’ordre des ID de provider.
musicGenerationModel: accepte soit une chaîne ("provider/model"), soit un objet ({ primary, fallbacks }).- Utilisé par la capacité partagée de génération musicale et l’outil intégré
music_generate. - Valeurs typiques :
google/lyria-3-clip-preview,google/lyria-3-pro-preview, ouminimax/music-2.5+. - Si omis,
music_generatepeut tout de même déduire une valeur par défaut de provider avec authentification. Il essaie d’abord le provider par défaut actuel, puis les autres providers de génération musicale enregistrés dans l’ordre des ID de provider. - Si vous sélectionnez directement un provider/modèle, configurez également l’authentification/la clé API du provider correspondant.
- Utilisé par la capacité 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 capacité partagée de génération vidéo et l’outil intégré
video_generate. - Valeurs typiques :
qwen/wan2.6-t2v,qwen/wan2.6-i2v,qwen/wan2.6-r2v,qwen/wan2.6-r2v-flash, ouqwen/wan2.7-r2v. - Si omis,
video_generatepeut tout de même déduire une valeur par défaut de provider avec authentification. Il essaie d’abord le provider par défaut actuel, puis les autres providers de génération vidéo enregistrés dans l’ordre des ID de provider. - Si vous sélectionnez directement un provider/modèle, configurez également l’authentification/la clé API du provider correspondant.
- Le provider groupé 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 provider
size,aspectRatio,resolution,audioetwatermark.
- Utilisé par la capacité 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. - Si omis, l’outil PDF se replie sur
imageModel, puis sur le modèle de session/par défaut résolu.
- 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 par défaut pris en compte par le mode de repli d’extraction dans l’outilpdf.verboseDefault: niveau détaillé par défaut pour les agents. Valeurs :"off","on","full". Par défaut :"off".elevatedDefault: niveau de sortie élevée par défaut pour les agents. Valeurs :"off","on","ask","full". Par défaut :"on".model.primary: formatprovider/model(par ex.openai/gpt-5.4). Si vous omettez le provider, OpenClaw essaie d’abord un alias, puis une correspondance unique de provider configuré pour cet ID de modèle exact, et seulement ensuite revient au provider par défaut configuré (comportement de compatibilité obsolète, donc préférezprovider/modelexplicite). Si ce provider n’expose plus le modèle par défaut configuré, OpenClaw se replie sur le premier provider/modèle configuré au lieu d’exposer une valeur par défaut obsolète d’un provider supprimé.models: catalogue de modèles configuré et liste d’autorisations pour/model. Chaque entrée peut inclurealias(raccourci) etparams(spécifiques au provider, par exempletemperature,maxTokens,cacheRetention,context1m).params: paramètres provider globaux par défaut appliqués à tous les modèles. Définis dansagents.defaults.params(par ex.{ 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(ID d’agent correspondant) remplace par clé. Consultez Mise en cache des prompts pour plus de détails. - Les outils d’écriture de configuration qui mutent ces champs (par exemple
/models set,/models set-imageet les commandes d’ajout/suppression de repli) enregistrent la forme objet canonique et préservent les listes de repli existantes lorsque c’est possible. maxConcurrent: nombre maximal d’exécutions d’agent parallèles entre les sessions (chaque session reste sérialisée). Par défaut : 4.
agents.defaults.models) :
| Alias | Modèle |
|---|---|
opus | anthropic/claude-opus-4-6 |
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-preview |
--thinking off ou si vous définissez vous-même agents.defaults.models["zai/<model>"].params.thinking.
Les modèles Z.AI activent tool_stream par défaut pour le streaming des appels d’outils. Définissez agents.defaults.models["zai/<model>"].params.tool_stream sur false pour le désactiver.
Les modèles Anthropic Claude 4.6 utilisent par défaut la réflexion adaptive lorsqu’aucun niveau de réflexion explicite n’est défini.
agents.defaults.cliBackends
Backends CLI facultatifs pour les exécutions de repli texte uniquement (sans appels d’outils). Utiles comme sauvegarde lorsque les providers d’API échouent.
- Les backends CLI sont orientés texte ; les outils sont toujours désactivés.
- Les sessions sont prises en charge lorsque
sessionArgest défini. - Le passage d’image est pris en charge lorsque
imageArgaccepte des chemins de fichier.
agents.defaults.systemPromptOverride
Remplace l’intégralité du prompt système assemblé par OpenClaw par une chaîne fixe. À définir au niveau par défaut (agents.defaults.systemPromptOverride) ou par agent (agents.list[].systemPromptOverride). Les valeurs par agent ont priorité ; une valeur vide ou contenant uniquement des espaces est ignorée. Utile pour des expériences contrôlées sur les prompts.
agents.defaults.heartbeat
Exécutions heartbeat périodiques.
every: chaîne de durée (ms/s/m/h). Par défaut :30m(authentification par clé API) ou1h(authentification OAuth). Définissez0mpour désactiver.includeSystemPromptSection: lorsque false, omet la section Heartbeat du prompt système et ignore l’injection deHEARTBEAT.mddans le contexte bootstrap. Par défaut :true.suppressToolErrorWarnings: lorsque true, supprime les charges utiles d’avertissement d’erreur d’outil pendant les exécutions heartbeat.directPolicy: politique de livraison directe/DM.allow(par défaut) autorise la livraison à cible directe.blocksupprime la livraison à cible directe et émetreason=dm-blocked.lightContext: lorsque true, les exécutions heartbeat utilisent un contexte bootstrap léger et ne conservent queHEARTBEAT.mdparmi les fichiers bootstrap de l’espace de travail.isolatedSession: lorsque true, chaque exécution heartbeat se fait dans une session fraîche sans historique de conversation préalable. Même schéma d’isolation que le cronsessionTarget: "isolated". Réduit le coût en jetons par heartbeat d’environ 100K à environ 2-5K jetons.- Par agent : définissez
agents.list[].heartbeat. Lorsqu’un agent quelconque définitheartbeat, seuls ces agents exécutent des heartbeats. - Les heartbeats exécutent des tours d’agent complets — des intervalles plus courts consomment plus de jetons.
agents.defaults.compaction
mode:defaultousafeguard(résumés par blocs pour les longs historiques). Voir Compaction.provider: ID d’un plugin provider de compaction enregistré. Lorsqu’il est défini, lesummarize()du provider est appelé à la place du résumé LLM intégré. Revient à l’implémentation intégrée en cas d’échec. Définir un provider forcemode: "safeguard". Voir Compaction.timeoutSeconds: nombre maximal de secondes autorisé pour une seule opération de compaction avant qu’OpenClaw l’abandonne. Par défaut :900.identifierPolicy:strict(par défaut),offoucustom.strictajoute en préambule les consignes intégrées de conservation des identifiants opaques pendant le résumé de compaction.identifierInstructions: texte personnalisé facultatif de préservation des identifiants, utilisé lorsqueidentifierPolicy=custom.postCompactionSections: noms facultatifs de sections H2/H3 deAGENTS.mdà réinjecter après compaction. Par défaut :["Session Startup", "Red Lines"]; définissez[]pour désactiver la réinjection. Lorsqu’il n’est pas défini ou qu’il est explicitement défini sur cette paire par défaut, les anciens titresEvery Session/Safetysont également acceptés comme solution de repli héritée.model: remplacement facultatifprovider/model-idpour le résumé de compaction uniquement. Utilisez-le 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’il n’est pas défini, la compaction utilise le modèle principal de la session.notifyUser: lorsquetrue, envoie un bref avis à l’utilisateur au démarrage de la compaction (par exemple « Compactage du contexte… »). Désactivé par défaut pour garder la compaction silencieuse.memoryFlush: tour agentique silencieux avant l’auto-compaction pour stocker des souvenirs durables. Ignoré lorsque l’espace de travail est en lecture seule.
agents.defaults.contextPruning
Élague les anciens résultats d’outil du contexte en mémoire avant l’envoi au LLM. Ne modifie pas l’historique de session sur disque.
Comportement du mode cache-ttl
Comportement du mode cache-ttl
mode: "cache-ttl"active les passes d’élagage.ttlcontrôle à quelle fréquence l’élagage peut se réexécuter (après le dernier accès au cache).- L’élagage réduit d’abord partiellement les résultats d’outil surdimensionnés, puis efface complètement les résultats d’outil plus anciens si nécessaire.
... au milieu.Effacement complet remplace l’intégralité du résultat d’outil par l’espace réservé.Remarques :- Les blocs image ne sont jamais réduits/effacés.
- Les ratios sont basés sur les caractères (approximatifs), pas sur des comptes exacts de jetons.
- S’il existe moins de
keepLastAssistantsmessages assistant, l’élagage est ignoré.
Streaming par blocs
- Les canaux autres que Telegram nécessitent
*.blockStreaming: trueexplicite pour activer les réponses par blocs. - Remplacements par canal :
channels.<channel>.blockStreamingCoalesce(et variantes par compte). Signal/Slack/Discord/Google Chat utilisent par défautminChars: 1500. humanDelay: pause aléatoire entre les réponses par blocs.natural= 800–2500 ms. Remplacement par agent :agents.list[].humanDelay.
Indicateurs de saisie
- Valeurs par défaut :
instantpour les conversations directes/mentions,messagepour les discussions de groupe sans mention. - Remplacements par session :
session.typingMode,session.typingIntervalSeconds.
agents.defaults.sandbox
Sandboxing facultatif pour l’agent intégré. Consultez Sandboxing pour le guide complet.
Détails du sandbox
Détails du sandbox
Backend :Mode OpenShell :
docker: environnement Docker local (par défaut)ssh: environnement distant générique via SSHopenshell: environnement OpenShell
backend: "openshell" est sélectionné, les paramètres spécifiques à l’environnement 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 par portéeidentityFile/certificateFile/knownHostsFile: fichiers locaux existants transmis à OpenSSHidentityData/certificateData/knownHostsData: contenus en ligne ou SecretRefs qu’OpenClaw matérialise en fichiers temporaires à l’exécutionstrictHostKeyChecking/updateHostKeys: options de politique de clé d’hôte OpenSSH
identityDataa priorité suridentityFilecertificateDataa priorité surcertificateFileknownHostsDataa priorité surknownHostsFile- Les valeurs
*Databasées sur SecretRef sont résolues à partir de l’instantané actif de l’environnement des secrets avant le démarrage de la session sandbox
- initialise l’espace de travail distant une fois après création ou recréation
- conserve ensuite l’espace de travail SSH distant comme référence canonique
- achemine
exec, les outils de fichier et les chemins média via SSH - ne synchronise pas automatiquement les modifications distantes vers l’hôte
- ne prend pas en charge les conteneurs de navigateur sandbox
none: espace de travail sandbox par portée sous~/.openclaw/sandboxesro: espace de travail sandbox dans/workspace, espace de travail agent monté en lecture seule dans/agentrw: espace de travail agent monté en lecture/écriture dans/workspace
session: conteneur + espace de travail par sessionagent: un conteneur + espace de travail par agent (par défaut)shared: conteneur et espace de travail partagés (pas d’isolation inter-sessions)
mirror: initialise le distant à partir du local avantexec, resynchronise aprèsexec; l’espace de travail local reste canoniqueremote: initialise le distant une fois à la création du sandbox, puis conserve l’espace de travail distant comme canonique
remote, les modifications locales sur l’hôte effectuées en dehors d’OpenClaw ne sont pas automatiquement synchronisées dans le sandbox après l’étape d’initialisation.
Le transport se fait via SSH vers le sandbox OpenShell, mais le plugin gère le cycle de vie du sandbox et la synchronisation miroir facultative.setupCommand s’exécute une fois après la création du conteneur (via sh -lc). Nécessite une sortie réseau, une racine inscriptible et un utilisateur root.Les conteneurs utilisent par défaut network: "none" — définissez "bridge" (ou 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 (mode de dernier recours).Les pièces jointes entrantes sont placées dans media/inbound/* dans l’espace de travail actif.docker.binds monte des répertoires hôte supplémentaires ; les montages globaux et par agent sont fusionnés.Navigateur sandboxé (sandbox.browser.enabled) : 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 observateur noVNC utilise par défaut l’authentification VNC et OpenClaw émet 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 sandboxées de cibler le navigateur hôte.networkvaut par défautopenclaw-sandbox-browser(réseau bridge dédié). Définissezbridgeuniquement lorsque vous voulez explicitement une connectivité bridge globale.cdpSourceRangelimite facultativement l’entrée CDP à la périphérie du conteneur à une plage CIDR (par exemple172.21.0.1/32).sandbox.browser.bindsmonte des répertoires hôte supplémentaires uniquement dans le conteneur du navigateur sandbox. Lorsqu’il est défini (y compris[]), il remplacedocker.bindspour le conteneur du navigateur.- Les valeurs de lancement par défaut sont définies dans
scripts/sandbox-browser-entrypoint.shet ajustées pour les hôtes conteneurisés :--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-3d-apis--disable-gpu--disable-software-rasterizer--disable-dev-shm-usage--disable-background-networking--disable-features=TranslateUI--disable-breakpad--disable-crash-reporter--renderer-process-limit=2--no-zygote--metrics-recording-only--disable-extensions(activé par défaut)--disable-3d-apis,--disable-software-rasterizeret--disable-gpusont activés par défaut et peuvent être désactivés avecOPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0si l’utilisation de WebGL/3D l’exige.OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0réactive les extensions si votre flux de travail en dépend.--renderer-process-limit=2peut être modifié avecOPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>; définissez0pour utiliser la limite de processus par défaut de Chromium.- ainsi que
--no-sandboxet--disable-setuid-sandboxlorsquenoSandboxest activé. - Les valeurs par défaut sont la base de l’image conteneur ; utilisez une image de navigateur personnalisée avec un point d’entrée personnalisé pour modifier les valeurs par défaut du conteneur.
sandbox.docker.binds sont propres à Docker.
Construire les images :
agents.list (remplacements par agent)
id: ID d’agent stable (obligatoire).default: lorsque plusieurs sont définis, le premier l’emporte (un avertissement est journalisé). Si aucun n’est défini, la première entrée de la liste est l’agent par défaut.model: la forme chaîne remplace uniquementprimary; la forme objet{ primary, fallbacks }remplace les deux ([]désactive les replis globaux). Les tâches cron qui ne remplacent queprimaryhéritent toujours des replis par défaut, sauf si vous définissezfallbacks: [].params: paramètres de flux par agent fusionnés au-dessus de l’entrée de modèle sélectionnée dansagents.defaults.models. Utilisez-les pour des remplacements spécifiques à l’agent commecacheRetention,temperatureoumaxTokenssans dupliquer tout le catalogue de modèles.skills: liste d’autorisations facultative des Skills par agent. Si elle est omise, l’agent hérite deagents.defaults.skillslorsqu’elle est définie ; une liste explicite remplace les valeurs par défaut au lieu d’être fusionnée, et[]signifie aucun Skills.thinkingDefault: niveau de réflexion facultatif par défaut par agent (off | minimal | low | medium | high | xhigh | adaptive). Remplaceagents.defaults.thinkingDefaultpour cet agent lorsqu’aucun remplacement par message ou par session n’est défini.reasoningDefault: visibilité facultative du raisonnement par défaut par agent (on | off | stream). S’applique lorsqu’aucun remplacement de raisonnement par message ou par session n’est défini.fastModeDefault: valeur par défaut facultative par agent pour le mode rapide (true | false). S’applique lorsqu’aucun remplacement de mode rapide par message ou par session n’est défini.runtime: descripteur d’exécution facultatif 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:.identitydérive des valeurs par défaut :ackReactionà partir deemoji,mentionPatternsà partir dename/emoji.subagents.allowAgents: liste d’autorisations des ID d’agent poursessions_spawn(["*"]= n’importe lequel ; par défaut : même agent uniquement).- Garde-fou d’héritage du sandbox : si la session demandeuse est sandboxée,
sessions_spawnrejette les cibles qui s’exécuteraient sans sandbox. subagents.requireAgentId: lorsqu’il vaut true, bloque les appelssessions_spawnqui omettentagentId(force une sélection de profil explicite ; par défaut : false).
Routage multi-agent
Exécutez plusieurs agents isolés dans une seule Gateway. Consultez Multi-Agent.Champs de correspondance des liaisons
type(facultatif) :routepour le routage normal (type absent = route par défaut),acppour les liaisons persistantes de conversation 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 ; spécifique au canal)acp(facultatif ; uniquement pour les entréestype: "acp") :{ mode, label, cwd, backend }
match.peermatch.guildIdmatch.teamIdmatch.accountId(exact, sans pair/serveur/équipe)match.accountId: "*"(à l’échelle du canal)- Agent par défaut
bindings correspondante l’emporte.
Pour les entrées type: "acp", OpenClaw résout par identité exacte de conversation (match.channel + compte + match.peer.id) et n’utilise pas l’ordre de niveau de liaison de routage ci-dessus.
Profils d’accès par agent
Accès complet (sans sandbox)
Accès complet (sans sandbox)
Outils + espace de travail en lecture seule
Outils + espace de travail en lecture seule
Aucun accès au système de fichiers (messagerie uniquement)
Aucun accès au système de fichiers (messagerie uniquement)
Session
Détails des champs de session
Détails des champs de session
scope: stratégie de regroupement de session de base pour les contextes de discussion de groupe.per-sender(par défaut) : chaque expéditeur obtient une session isolée dans un contexte de canal.global: tous les participants d’un contexte de canal partagent une seule session (à utiliser uniquement lorsqu’un contexte partagé est souhaité).
dmScope: manière dont les DM sont regroupés.main: tous les DM partagent la session principale.per-peer: isolation par ID d’expéditeur entre les canaux.per-channel-peer: isolation par canal + expéditeur (recommandé pour les boîtes de réception multi-utilisateurs).per-account-channel-peer: isolation par compte + canal + expéditeur (recommandé pour le multi-compte).
identityLinks: mappe les ID canoniques aux pairs préfixés par fournisseur pour le partage de session inter-canaux.reset: politique de réinitialisation principale.dailyréinitialise àatHouren heure locale ;idleréinitialise aprèsidleMinutes. Lorsque les deux sont configurés, celui qui expire en premier l’emporte.resetByType: remplacements par type (direct,group,thread). L’anciendmest accepté comme alias dedirect.parentForkMaxTokens: nombre maximal detotalTokensde la session parente autorisé lors de la création d’une session de fil dérivée (par défaut100000).- Si le
totalTokensparent est supérieur à cette valeur, OpenClaw démarre une nouvelle session de fil au lieu d’hériter de l’historique de transcription parent. - Définissez
0pour désactiver cette protection et toujours autoriser la dérivation depuis le parent.
- Si le
mainKey: champ hérité. L’exécution utilise toujours"main"pour le compartiment principal de discussion directe.agentToAgent.maxPingPongTurns: nombre maximal de tours de réponse en retour entre agents lors des échanges agent-à-agent (entier, plage :0–5).0désactive l’enchaînement ping-pong.sendPolicy: correspondance parchannel,chatType(direct|group|channel, avec l’ancien aliasdm),keyPrefixourawKeyPrefix. Le premier refus l’emporte.maintenance: contrôles de nettoyage + rétention du magasin de sessions.mode:warnémet uniquement des avertissements ;enforceapplique le nettoyage.pruneAfter: seuil d’ancienneté pour les entrées obsolètes (par défaut30d).maxEntries: nombre maximal d’entrées danssessions.json(par défaut500).rotateBytes: fait tournersessions.jsonlorsqu’il dépasse cette taille (par défaut10mb).resetArchiveRetention: rétention des archives de transcription*.reset.<timestamp>. Utilise par défautpruneAfter; définissezfalsepour désactiver.maxDiskBytes: budget disque facultatif du répertoire des sessions. En modewarn, il journalise des avertissements ; en modeenforce, il supprime d’abord les artefacts/sessions les plus anciens.highWaterBytes: cible facultative après nettoyage du budget. Utilise par défaut80%demaxDiskBytes.
threadBindings: valeurs globales par défaut pour les fonctionnalités de session liées aux fils.enabled: commutateur maître par défaut (les fournisseurs peuvent remplacer ; Discord utilisechannels.discord.threadBindings.enabled)idleHours: retrait automatique du focus par défaut après inactivité, en heures (0désactive ; les fournisseurs peuvent remplacer)maxAgeHours: âge maximal strict par défaut, en heures (0désactive ; les fournisseurs peuvent remplacer)
Messages
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 arrête la cascade. "auto" dérive [{identity.name}].
Variables de 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 provider | anthropic |
{thinkingLevel} | Niveau de réflexion actuel | high, low, off |
{identity.name} | Nom d’identité de l’agent | (identique à "auto") |
{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 identité. - Portée :
group-mentions(par défaut),group-all,direct,all. removeAckAfterReply: supprime l’accusé de réception après réponse sur Slack, Discord et Telegram.messages.statusReactions.enabled: active les réactions d’état du cycle de vie sur Slack, Discord et Telegram. Sur Slack et Discord, l’absence de valeur conserve les réactions d’état activées lorsque les réactions d’accusé de réception sont actives. Sur Telegram, définissez explicitement cette valeur àtruepour activer les réactions d’état du cycle de vie.
Anti-rebond des messages entrants
Regroupe les messages texte rapides du même expéditeur en un seul tour d’agent. Les médias/pièces jointes déclenchent un envoi immédiat. Les commandes de contrôle contournent l’anti-rebond.TTS (synthèse vocale)
autocontrôle le mode auto-TTS 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 ;modelOverrides.allowProvidervaut par défautfalse(activation explicite).- Les clés API utilisent comme solution de repli
ELEVENLABS_API_KEY/XI_API_KEYetOPENAI_API_KEY. openai.baseUrlremplace le point de terminaison TTS OpenAI. L’ordre de résolution est : configuration, puisOPENAI_TTS_BASE_URL, puishttps://api.openai.com/v1.- Lorsque
openai.baseUrlpointe vers un point de terminaison non OpenAI, OpenClaw le traite comme un serveur TTS compatible OpenAI et assouplit la validation du modèle/de la voix.
Talk
Valeurs par défaut du mode Talk (macOS/iOS/Android).talk.providerdoit correspondre à une clé danstalk.providerslorsque plusieurs providers Talk sont configurés.- Les anciennes clés Talk plates (
talk.voiceId,talk.voiceAliases,talk.modelId,talk.outputFormat,talk.apiKey) ne sont conservées que pour compatibilité et sont automatiquement migrées verstalk.providers.<provider>. - Les ID de voix utilisent comme solution de repli
ELEVENLABS_VOICE_IDouSAG_VOICE_ID. providers.*.apiKeyaccepte des chaînes en texte brut ou des objets SecretRef.- La solution de repli
ELEVENLABS_API_KEYs’applique uniquement lorsqu’aucune clé API Talk n’est configurée. providers.*.voiceAliasespermet aux directives Talk d’utiliser des noms conviviaux.silenceTimeoutMscontrôle combien de temps le mode Talk attend après le silence de l’utilisateur avant d’envoyer la transcription. Si non défini, la fenêtre de pause par défaut de la plateforme est conservée (700 ms sur macOS et Android, 900 ms sur iOS).
Outils
Profils d’outils
tools.profile définit une liste d’autorisations de base avant tools.allow/tools.deny :
L’intégration locale définit par défaut les nouvelles configurations locales sur tools.profile: "coding" lorsqu’il n’est pas défini (les profils explicites existants sont conservés).
| Profil | Inclut |
|---|---|
minimal | session_status uniquement |
coding | group:fs, group:runtime, group:web, group:sessions, group:memory, cron, image, image_generate, video_generate |
messaging | group:messaging, sessions_list, sessions_history, sessions_send, session_status |
full | Aucune restriction (identique à non défini) |
Groupes d’outils
| Groupe | Outils |
|---|---|
group:runtime | exec, process, code_execution (bash est accepté comme alias de exec) |
group:fs | read, write, edit, apply_patch |
group:sessions | sessions_list, sessions_history, sessions_send, sessions_spawn, sessions_yield, subagents, session_status |
group:memory | memory_search, memory_get |
group:web | web_search, x_search, web_fetch |
group:ui | browser, canvas |
group:automation | cron, gateway |
group:messaging | message |
group:nodes | nodes |
group:agents | agents_list |
group:media | image, image_generate, video_generate, tts |
group:openclaw | Tous les outils intégrés (exclut les plugins provider) |
tools.allow / tools.deny
Politique globale d’autorisation/interdiction des outils (l’interdiction l’emporte). Insensible à la casse, prend en charge les jokers *. S’applique même lorsque le sandbox Docker est désactivé.
tools.byProvider
Restreint davantage les outils pour des providers ou modèles spécifiques. Ordre : profil de base → profil du provider → autorisation/interdiction.
tools.elevated
Contrôle l’accès exec élevé en dehors du sandbox :
- Le remplacement par agent (
agents.list[].tools.elevated) ne peut que restreindre davantage. /elevated on|off|ask|fullstocke l’état par session ; les directives en ligne s’appliquent à un seul message.execélevé contourne le sandboxing et utilise le chemin d’échappement configuré (gatewaypar défaut, ounodelorsque la cibleexecestnode).
tools.exec
tools.loopDetection
Les vérifications de sécurité des boucles d’outils sont désactivées par défaut. Définissez enabled: true pour activer la détection.
Les paramètres peuvent être définis globalement dans tools.loopDetection et remplacés par agent dans agents.list[].tools.loopDetection.
historySize: historique maximal des appels d’outils conservé pour l’analyse des boucles.warningThreshold: seuil de modèle répétitif sans progression pour les avertissements.criticalThreshold: seuil répétitif plus élevé pour bloquer les boucles critiques.globalCircuitBreakerThreshold: seuil d’arrêt dur pour toute exécution sans progression.detectors.genericRepeat: avertit en cas d’appels répétés au même outil/avec les mêmes arguments.detectors.knownPollNoProgress: avertit/bloque sur les outils de sondage connus (process.poll,command_status, etc.).detectors.pingPong: avertit/bloque sur les modèles alternés sans progression en paire.- Si
warningThreshold >= criticalThresholdoucriticalThreshold >= globalCircuitBreakerThreshold, la validation échoue.
tools.web
tools.media
Configure la compréhension des médias entrants (image/audio/vidéo) :
Champs des entrées de modèle média
Champs des entrées de modèle média
Entrée provider (
type: "provider" ou omis) :provider: ID du provider API (openai,anthropic,google/gemini,groq, etc.)model: remplacement d’ID de modèleprofile/preferredProfile: sélection de profilauth-profiles.json
type: "cli") :command: exécutable à lancerargs: arguments à modèles (prend en charge{{MediaPath}},{{Prompt}},{{MaxChars}}, etc.)
capabilities: liste facultative (image,audio,video). Valeurs par défaut :openai/anthropic/minimax→ image,google→ image+audio+video,groq→ audio.prompt,maxChars,maxBytes,timeoutSeconds,language: remplacements par entrée.- Les échecs passent à l’entrée suivante.
auth-profiles.json → variables d’environnement → models.providers.*.apiKey.Champs d’exécution asynchrone :asyncCompletion.directSend: lorsquetrue, les tâches terminées asynchronesmusic_generateetvideo_generateessaient d’abord une livraison directe au canal. Par défaut :false(ancien chemin de réveil de session du demandeur/livraison par modèle).
tools.agentToAgent
tools.sessions
Contrôle quelles sessions peuvent être ciblées par les outils de session (sessions_list, sessions_history, sessions_send).
Par défaut : tree (session actuelle + sessions lancées par celle-ci, comme les sous-agents).
self: uniquement la clé de session actuelle.tree: session actuelle + sessions lancées par la session actuelle (sous-agents).agent: toute session appartenant à l’ID d’agent actuel (peut inclure d’autres utilisateurs si vous exécutez des sessions par expéditeur sous le même ID d’agent).all: toute session. Le ciblage inter-agents nécessite toujourstools.agentToAgent.- Limitation sandbox : lorsque la session actuelle est sandboxée et que
agents.defaults.sandbox.sessionToolsVisibility="spawned", la visibilité est forcée àtreemême sitools.sessions.visibility="all".
tools.sessions_spawn
Contrôle la prise en charge des pièces jointes en ligne pour sessions_spawn.
- Les pièces jointes ne sont prises en charge que pour
runtime: "subagent". L’exécution ACP les rejette. - Les fichiers sont matérialisés dans l’espace de travail enfant sous
.openclaw/attachments/<uuid>/avec un.manifest.json. - Le contenu des pièces jointes est automatiquement masqué dans la persistance de la transcription.
- Les entrées base64 sont validées avec des vérifications strictes d’alphabet/remplissage et une protection de taille avant décodage.
- Les permissions de fichier sont
0700pour les répertoires et0600pour les fichiers. - Le nettoyage suit la politique
cleanup:deletesupprime toujours les pièces jointes ;keepne les conserve que lorsqueretainOnSessionKeep: true.
tools.experimental
Indicateurs d’outils intégrés expérimentaux. Désactivés par défaut sauf si une règle d’activation automatique spécifique à l’exécution s’applique.
planTool: active l’outil structuréupdate_planpour le suivi des travaux non triviaux à plusieurs étapes.- Par défaut :
falsepour les providers non OpenAI. Les exécutions OpenAI et OpenAI Codex l’activent automatiquement lorsqu’il n’est pas défini ; définissezfalsepour désactiver cette activation automatique. - Lorsqu’il est activé, le prompt système ajoute aussi des consignes d’utilisation afin que le modèle ne l’utilise que pour des travaux substantiels et conserve au plus une étape
in_progress.
agents.defaults.subagents
model: modèle par défaut pour les sous-agents lancés. S’il est omis, les sous-agents héritent du modèle de l’appelant.allowAgents: liste d’autorisations par défaut des ID d’agent cibles poursessions_spawnlorsque l’agent demandeur ne définit pas son propresubagents.allowAgents(["*"]= n’importe lequel ; par défaut : même agent uniquement).runTimeoutSeconds: délai d’expiration par défaut (secondes) poursessions_spawnlorsque l’appel d’outil ometrunTimeoutSeconds.0signifie aucun délai.- Politique d’outils par sous-agent :
tools.subagents.tools.allow/tools.subagents.tools.deny.
Providers personnalisés et URL de base
OpenClaw utilise le catalogue de modèles intégré. Ajoutez des providers personnalisés viamodels.providers dans la configuration ou ~/.openclaw/agents/<agentId>/agent/models.json.
- Utilisez
authHeader: true+headerspour des besoins d’authentification personnalisés. - Remplacez la racine de configuration de l’agent avec
OPENCLAW_AGENT_DIR(ouPI_CODING_AGENT_DIR, alias hérité de variable d’environnement). - Priorité de fusion pour les ID de provider correspondants :
- Les valeurs
baseUrlnon vides demodels.jsonde l’agent l’emportent. - Les valeurs
apiKeynon vides de l’agent l’emportent uniquement lorsque ce provider n’est pas géré par SecretRef dans le contexte actuel de configuration/profil d’authentification. - Les valeurs
apiKeyde provider gérées par SecretRef sont actualisées à partir des marqueurs source (ENV_VAR_NAMEpour les références env,secretref-managedpour les références fichier/exec) au lieu de persister les secrets résolus. - Les valeurs d’en-tête de provider gérées par SecretRef sont actualisées à partir des marqueurs source (
secretref-env:ENV_VAR_NAMEpour les références env,secretref-managedpour les références fichier/exec). - Les valeurs
apiKey/baseUrld’agent vides ou absentes se replient surmodels.providersdans la configuration. - Les valeurs
contextWindow/maxTokensdes modèles correspondants utilisent la valeur la plus élevée entre la configuration explicite et les valeurs implicites du catalogue. contextTokensdes modèles correspondants conserve une limite d’exécution explicite lorsqu’elle est présente ; utilisez-la pour limiter le contexte effectif sans modifier les métadonnées natives du modèle.- Utilisez
models.mode: "replace"lorsque vous voulez que la configuration réécrive entièrementmodels.json. - La persistance des marqueurs est gouvernée par la source : les marqueurs sont écrits à partir de l’instantané actif de la configuration source (pré-résolution), et non à partir des valeurs secrètes résolues à l’exécution.
- Les valeurs
Détails des champs de provider
models.mode: comportement du catalogue de providers (mergeoureplace).models.providers: map de providers personnalisés indexée par ID de provider.models.providers.*.api: adaptateur de requête (openai-completions,openai-responses,anthropic-messages,google-generative-ai, etc.).models.providers.*.apiKey: identifiant du provider (préférez SecretRef/la substitution via l’environnement).models.providers.*.auth: stratégie d’authentification (api-key,token,oauth,aws-sdk).models.providers.*.injectNumCtxForOpenAICompat: pour Ollama +openai-completions, injecteoptions.num_ctxdans les requêtes (par défaut :true).models.providers.*.authHeader: force le transport des identifiants dans l’en-têteAuthorizationlorsque nécessaire.models.providers.*.baseUrl: URL de base de l’API amont.models.providers.*.headers: en-têtes statiques supplémentaires pour le routage proxy/locataire.models.providers.*.request: remplacements de transport pour les requêtes HTTP du provider de modèles.request.headers: en-têtes supplémentaires (fusionnés avec les valeurs par défaut du provider). Les valeurs acceptent SecretRef.request.auth: remplacement de stratégie d’authentification. Modes :"provider-default"(utilise l’authentification intégrée du provider),"authorization-bearer"(avectoken),"header"(avecheaderName,value,prefixfacultatif).request.proxy: remplacement du proxy HTTP. Modes :"env-proxy"(utilise les variables d’environnementHTTP_PROXY/HTTPS_PROXY),"explicit-proxy"(avecurl). Les deux modes acceptent un sous-objet facultatiftls.request.tls: remplacement TLS pour les connexions directes. Champs :ca,cert,key,passphrase(acceptent tous SecretRef),serverName,insecureSkipVerify.request.allowPrivateNetwork: lorsquetrue, autorise HTTPS versbaseUrllorsque DNS se résout vers des plages privées, CGNAT ou similaires, via la protection de récupération HTTP du provider (activation explicite par l’opérateur pour des points de terminaison compatibles OpenAI auto-hébergés de confiance). WebSocket utilise le mêmerequestpour les en-têtes/TLS, mais pas cette protection SSRF de récupération. Par défautfalse.
models.providers.*.models: entrées explicites du catalogue de modèles du provider.models.providers.*.models.*.contextWindow: métadonnées de fenêtre de contexte native du modèle.models.providers.*.models.*.contextTokens: plafond de contexte d’exécution facultatif. Utilisez-le lorsque vous voulez un budget de contexte effectif plus petit que lecontextWindownatif du modèle.models.providers.*.models.*.compat.supportsDeveloperRole: indice de compatibilité facultatif. Pourapi: "openai-completions"avec unbaseUrlnon natif non vide (hôte différent deapi.openai.com), OpenClaw force cette valeur àfalseà l’exécution. UnbaseUrlvide/omis conserve le comportement OpenAI par défaut.models.providers.*.models.*.compat.requiresStringContent: indice de compatibilité facultatif pour les points de terminaison de chat compatibles OpenAI limités aux chaînes. Lorsquetrue, OpenClaw aplatie les tableaux purement textuelsmessages[].contenten chaînes simples avant d’envoyer la requête.plugins.entries.amazon-bedrock.config.discovery: racine des paramètres d’auto-détection Bedrock.plugins.entries.amazon-bedrock.config.discovery.enabled: active/désactive la détection implicite.plugins.entries.amazon-bedrock.config.discovery.region: région AWS pour la détection.plugins.entries.amazon-bedrock.config.discovery.providerFilter: filtre facultatif d’ID de provider pour une détection ciblée.plugins.entries.amazon-bedrock.config.discovery.refreshInterval: intervalle d’interrogation pour l’actualisation de la détection.plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow: fenêtre de contexte de repli pour les modèles détectés.plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens: nombre maximal de jetons de sortie de repli pour les modèles détectés.
Exemples de providers
Cerebras (GLM 4.6 / 4.7)
Cerebras (GLM 4.6 / 4.7)
cerebras/zai-glm-4.7 pour Cerebras ; zai/glm-4.7 pour Z.AI direct.OpenCode
OpenCode
OPENCODE_API_KEY (ou OPENCODE_ZEN_API_KEY). Utilisez les références opencode/... pour le catalogue Zen ou les références opencode-go/... pour le catalogue Go. Raccourci : openclaw onboard --auth-choice opencode-zen ou openclaw onboard --auth-choice opencode-go.Z.AI (GLM-4.7)
Z.AI (GLM-4.7)
ZAI_API_KEY. z.ai/* et z-ai/* sont des alias acceptés. Raccourci : openclaw onboard --auth-choice zai-api-key.- Point de terminaison général :
https://api.z.ai/api/paas/v4 - Point de terminaison de code (par défaut) :
https://api.z.ai/api/coding/paas/v4 - Pour le point de terminaison général, définissez un provider personnalisé avec le remplacement de l’URL de base.
Moonshot AI (Kimi)
Moonshot AI (Kimi)
baseUrl: "https://api.moonshot.cn/v1" ou openclaw onboard --auth-choice moonshot-api-key-cn.Les points de terminaison Moonshot natifs annoncent une compatibilité d’utilisation du streaming sur le transport partagé
openai-completions, et OpenClaw s’appuie là-dessus selon les capacités du point de terminaison
plutôt que sur le seul ID de provider intégré.Kimi Coding
Kimi Coding
openclaw onboard --auth-choice kimi-code-api-key.Synthetic (compatible Anthropic)
Synthetic (compatible Anthropic)
/v1 (le client Anthropic l’ajoute). Raccourci : openclaw onboard --auth-choice synthetic-api-key.MiniMax M2.7 (direct)
MiniMax M2.7 (direct)
MINIMAX_API_KEY. Raccourcis :
openclaw onboard --auth-choice minimax-global-api ou
openclaw onboard --auth-choice minimax-cn-api.
Le catalogue de modèles utilise par défaut uniquement M2.7.
Sur le chemin de streaming compatible Anthropic, OpenClaw désactive la réflexion MiniMax
par défaut sauf si vous définissez explicitement thinking vous-même. /fast on ou
params.fastMode: true réécrit MiniMax-M2.7 en
MiniMax-M2.7-highspeed.Modèles locaux (LM Studio)
Modèles locaux (LM Studio)
Consultez Modèles locaux. En bref : exécutez un grand modèle local via l’API Responses de LM Studio sur du matériel puissant ; conservez les modèles hébergés fusionnés comme solution de repli.
Skills
allowBundled: liste d’autorisations facultative pour les Skills groupées uniquement (les Skills gérées/d’espace de travail ne sont pas affectées).load.extraDirs: racines supplémentaires de Skills partagées (priorité la plus faible).install.preferBrew: lorsque true, préfère les installateurs Homebrew lorsquebrewest disponible avant de revenir à d’autres types d’installateur.install.nodeManager: préférence d’installateur Node pour les spécificationsmetadata.openclaw.install(npm|pnpm|yarn|bun).entries.<skillKey>.enabled: falsedésactive une skill même si elle est groupée/installée.entries.<skillKey>.apiKey: raccourci pratique pour les Skills qui déclarent une variable d’environnement principale (chaîne en texte brut ou objet SecretRef).
Plugins
- Chargés depuis
~/.openclaw/extensions,<workspace>/.openclaw/extensions, ainsi queplugins.load.paths. - La découverte accepte les plugins OpenClaw natifs ainsi que les bundles Codex compatibles et les bundles Claude, y compris les bundles Claude sans manifeste avec disposition par défaut.
- Les changements de configuration nécessitent un redémarrage de la passerelle.
allow: liste d’autorisations facultative (seuls les plugins listés sont chargés).denyl’emporte.plugins.entries.<id>.apiKey: champ pratique de clé API au niveau plugin (lorsqu’il est pris en charge par le plugin).plugins.entries.<id>.env: map de variables d’environnement à portée plugin.plugins.entries.<id>.hooks.allowPromptInjection: lorsquefalse, le cœur bloquebefore_prompt_buildet ignore les champs hérités modifiant le prompt depuisbefore_agent_start, tout en préservant les anciensmodelOverrideetproviderOverride. S’applique aux hooks de plugins natifs et aux répertoires de hooks fournis par bundle pris en charge.plugins.entries.<id>.subagent.allowModelOverride: fait explicitement confiance à ce plugin pour demander des remplacementsprovideretmodelpar exécution pour les exécutions de sous-agents en arrière-plan.plugins.entries.<id>.subagent.allowedModels: liste d’autorisations facultative des cibles canoniquesprovider/modelpour les remplacements de sous-agents approuvés. Utilisez"*"uniquement lorsque vous voulez délibérément autoriser n’importe quel modèle.plugins.entries.<id>.config: objet de configuration défini par le plugin (validé par le schéma du plugin OpenClaw natif lorsqu’il est disponible).plugins.entries.firecrawl.config.webFetch: paramètres du provider de récupération web Firecrawl.apiKey: clé API Firecrawl (accepte SecretRef). Utilise comme solution de repliplugins.entries.firecrawl.config.webSearch.apiKey, l’ancientools.web.fetch.firecrawl.apiKey, ou la variable d’environnementFIRECRAWL_API_KEY.baseUrl: URL de base de l’API Firecrawl (par défaut :https://api.firecrawl.dev).onlyMainContent: extrait uniquement le contenu principal des pages (par défaut :true).maxAgeMs: âge maximal du cache en millisecondes (par défaut :172800000/ 2 jours).timeoutSeconds: délai d’expiration de la requête de scraping en secondes (par défaut :60).
plugins.entries.xai.config.xSearch: paramètres xAI X Search (recherche web Grok).enabled: active le provider X Search.model: modèle Grok à utiliser pour la recherche (par exemple"grok-4-1-fast").
plugins.entries.memory-core.config.dreaming: paramètres de rêverie de la mémoire (expérimental). Consultez Rêverie pour les phases et les seuils.enabled: commutateur maître de rêverie (par défautfalse).frequency: cadence cron pour chaque balayage complet de rêverie ("0 3 * * *"par défaut).- la politique de phase et les seuils sont des détails d’implémentation (pas des clés de configuration destinées aux utilisateurs).
- La configuration complète de la mémoire se trouve dans Référence de configuration de la mémoire :
agents.defaults.memorySearch.*memory.backendmemory.citationsmemory.qmd.*plugins.entries.memory-core.config.dreaming
- Les plugins bundle Claude activés peuvent également contribuer des valeurs par défaut Pi intégrées depuis
settings.json; OpenClaw les applique comme paramètres d’agent assainis, et non comme patchs de configuration OpenClaw bruts. plugins.slots.memory: choisissez l’ID du plugin mémoire actif, ou"none"pour désactiver les plugins mémoire.plugins.slots.contextEngine: choisissez l’ID du plugin moteur de contexte actif ; vaut par défaut"legacy"sauf si vous installez et sélectionnez un autre moteur.plugins.installs: métadonnées d’installation gérées par la CLI utilisées paropenclaw plugins update.- Inclut
source,spec,sourcePath,installPath,version,resolvedName,resolvedVersion,resolvedSpec,integrity,shasum,resolvedAt,installedAt. - Traitez
plugins.installs.*comme un état géré ; préférez les commandes CLI aux modifications manuelles.
- Inclut
Browser
evaluateEnabled: falsedésactiveact:evaluateetwait --fn.ssrfPolicy.dangerouslyAllowPrivateNetworkvaut par défauttruelorsqu’il n’est pas défini (modèle réseau de confiance).- Définissez
ssrfPolicy.dangerouslyAllowPrivateNetwork: falsepour une navigation navigateur strictement publique. - En mode strict, les points de terminaison distants du profil CDP (
profiles.*.cdpUrl) sont soumis au même blocage de réseau privé lors des vérifications d’accessibilité/découverte. ssrfPolicy.allowPrivateNetworkreste pris en charge comme ancien alias.- En mode strict, utilisez
ssrfPolicy.hostnameAllowlistetssrfPolicy.allowedHostnamespour des exceptions explicites. - Les profils distants sont en mode attachement uniquement (démarrage/arrêt/réinitialisation désactivés).
profiles.*.cdpUrlacceptehttp://,https://,ws://etwss://. Utilisez HTTP(S) lorsque vous voulez qu’OpenClaw découvre/json/version; utilisez WS(S) lorsque votre provider vous donne une URL WebSocket DevTools directe.- Les profils
existing-sessionsont propres à l’hôte et utilisent Chrome MCP au lieu de CDP. - Les profils
existing-sessionpeuvent définiruserDataDirpour cibler un profil de navigateur basé sur Chromium spécifique comme Brave ou Edge. - Les profils
existing-sessionconservent les limites actuelles du routage Chrome MCP : actions basées sur snapshot/référence au lieu d’un ciblage par sélecteur CSS, hooks d’upload d’un seul fichier, pas de remplacements de délai d’expiration de boîte de dialogue, pas dewait --load networkidle, niresponsebody, export PDF, interception de téléchargement ou actions par lot. - Les profils locaux gérés
openclawattribuent automatiquementcdpPortetcdpUrl; ne définissezcdpUrlexplicitement que pour un CDP distant. - Ordre d’auto-détection : navigateur par défaut s’il est basé sur Chromium → Chrome → Brave → Edge → Chromium → Chrome Canary.
- Service de contrôle : loopback uniquement (port dérivé de
gateway.port, par défaut18791). extraArgsajoute des drapeaux de lancement supplémentaires au démarrage local de Chromium (par exemple--disable-gpu, dimensionnement de fenêtre ou drapeaux de débogage).
UI
seamColor: couleur d’accentuation pour le chrome UI des applications natives (teinte de bulle du mode Talk, etc.).assistant: remplacement d’identité de l’interface Control UI. Utilise comme solution de repli l’identité de l’agent actif.
Gateway
Détails des champs de Gateway
Détails des champs de Gateway
mode:local(exécuter la passerelle) ouremote(se connecter à une passerelle distante). La passerelle refuse de démarrer sauf silocal.port: port multiplexé unique pour WS + HTTP. Priorité :--port>OPENCLAW_GATEWAY_PORT>gateway.port>18789.bind:auto,loopback(par défaut),lan(0.0.0.0),tailnet(IP Tailscale uniquement) oucustom.- Anciens alias de bind : utilisez les valeurs de mode bind dans
gateway.bind(auto,loopback,lan,tailnet,custom), pas les alias d’hôte (0.0.0.0,127.0.0.1,localhost,::,::1). - Remarque Docker : la valeur par défaut
loopbackécoute sur127.0.0.1dans le conteneur. Avec le réseau bridge Docker (-p 18789:18789), le trafic arrive sureth0, donc la passerelle est inaccessible. Utilisez--network host, ou définissezbind: "lan"(oubind: "custom"aveccustomBindHost: "0.0.0.0") pour écouter sur toutes les interfaces. - Auth : requise par défaut. Les liaisons non loopback exigent l’authentification de la passerelle. En pratique, cela signifie un jeton/mot de passe partagé ou un proxy inverse sensible à l’identité avec
gateway.auth.mode: "trusted-proxy". L’assistant d’intégration génère un jeton par défaut. - Si
gateway.auth.tokenetgateway.auth.passwordsont tous deux configurés (y compris via SecretRef), définissez explicitementgateway.auth.modesurtokenoupassword. Les flux de démarrage et d’installation/réparation du service échouent lorsque les deux sont configurés et que le mode n’est pas défini. gateway.auth.mode: "none": mode explicite sans authentification. À utiliser uniquement pour des configurations loopback local loopback de confiance ; cette option n’est volontairement pas proposée par les invites d’intégration.gateway.auth.mode: "trusted-proxy": délègue l’authentification à un proxy inverse sensible à l’identité et fait confiance aux en-têtes d’identité provenant degateway.trustedProxies(voir Auth Trusted Proxy). Ce mode attend une source de proxy non loopback ; les proxies inverses loopback sur le même hôte ne satisfont pas l’authentification trusted-proxy.gateway.auth.allowTailscale: lorsquetrue, les en-têtes d’identité Tailscale Serve peuvent satisfaire l’authentification de Control UI/WebSocket (vérifiée viatailscale whois). Les points de terminaison API HTTP n’utilisent pas cette authentification par en-tête Tailscale ; ils suivent à la place le mode d’authentification HTTP normal de la passerelle. Ce flux sans jeton suppose que l’hôte de la passerelle est de confiance. Vaut par défauttruelorsquetailscale.mode = "serve".gateway.auth.rateLimit: limite facultative des échecs d’authentification. S’applique par IP client et par portée d’authentification (secret partagé et jeton d’appareil sont suivis indépendamment). Les tentatives bloquées renvoient429+Retry-After.- Sur le chemin asynchrone Tailscale Serve de Control UI, les tentatives échouées pour le même
{scope, clientIp}sont sérialisées avant l’écriture de l’échec. Des tentatives concurrentes invalides du même client peuvent donc déclencher la limite dès la deuxième requête au lieu que les deux passent en course comme de simples échecs de correspondance. gateway.auth.rateLimit.exemptLoopbackvaut par défauttrue; définissezfalselorsque vous voulez délibérément limiter aussi le trafic localhost (pour des configurations de test ou des déploiements proxy stricts).
- Sur le chemin asynchrone Tailscale Serve de Control UI, les tentatives échouées pour le même
- Les tentatives d’authentification WS d’origine navigateur sont toujours limitées avec exemption loopback désactivée (défense en profondeur contre les attaques par force brute localhost depuis le navigateur).
- En loopback, ces verrouillages d’origine navigateur sont isolés par valeur
Originnormalisée, afin que des échecs répétés depuis une origine localhost n’entraînent pas automatiquement le verrouillage d’une origine différente. tailscale.mode:serve(tailnet uniquement, liaison loopback) oufunnel(public, nécessite une authentification).controlUi.allowedOrigins: liste d’autorisations explicite des origines navigateur pour les connexions WebSocket Gateway. Requise lorsque des clients navigateur sont attendus depuis des origines non loopback.controlUi.dangerouslyAllowHostHeaderOriginFallback: mode dangereux qui active le repli d’origine via en-tête Host pour les déploiements qui s’appuient volontairement sur cette politique d’origine.remote.transport:ssh(par défaut) oudirect(ws/wss). Pourdirect,remote.urldoit êtrews://ouwss://.OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1: remplacement de dernier recours côté client qui autorisews://en clair vers des IP de réseau privé de confiance ; par défaut, le texte en clair reste limité au loopback.gateway.remote.token/.passwordsont des champs d’identifiants du client distant. Ils ne configurent pas à eux seuls l’authentification de la passerelle.gateway.push.apns.relay.baseUrl: URL HTTPS de base du relais APNs externe utilisé par les builds iOS officiels/TestFlight après publication des enregistrements reposant sur le relais vers la passerelle. Cette URL doit correspondre à l’URL du relais compilée dans le build iOS.gateway.push.apns.relay.timeoutMs: délai d’expiration en millisecondes pour les envois passerelle-vers-relais. Par défaut :10000.- Les enregistrements basés sur le relais sont délégués à une identité de passerelle spécifique. L’app iOS appairée récupère
gateway.identity.get, inclut cette identité dans l’enregistrement du relais, et transmet à la passerelle une autorisation d’envoi limitée à cet enregistrement. Une autre passerelle ne peut pas réutiliser cet enregistrement stocké. OPENCLAW_APNS_RELAY_BASE_URL/OPENCLAW_APNS_RELAY_TIMEOUT_MS: remplacements temporaires via l’environnement pour la configuration du relais ci-dessus.OPENCLAW_APNS_RELAY_ALLOW_HTTP=true: échappatoire réservée au développement pour les URL de relais HTTP loopback. Les URL de relais de production doivent rester en HTTPS.gateway.channelHealthCheckMinutes: intervalle du moniteur de santé des canaux, en minutes. Définissez0pour désactiver globalement les redémarrages du moniteur de santé. Par défaut :5.gateway.channelStaleEventThresholdMinutes: seuil de socket obsolète en minutes. Conservez cette valeur supérieure ou égale àgateway.channelHealthCheckMinutes. Par défaut :30.gateway.channelMaxRestartsPerHour: nombre maximal de redémarrages du moniteur de santé par canal/compte sur une heure glissante. Par défaut :10.channels.<provider>.healthMonitor.enabled: désactivation facultative par canal des redémarrages du moniteur de santé tout en gardant le moniteur global activé.channels.<provider>.accounts.<accountId>.healthMonitor.enabled: remplacement par compte pour les canaux multi-comptes. Lorsqu’il est défini, il a priorité sur le remplacement au niveau du canal.- Les chemins d’appel de passerelle locale peuvent utiliser
gateway.remote.*comme solution de repli uniquement lorsquegateway.auth.*n’est pas défini. - Si
gateway.auth.token/gateway.auth.passwordest explicitement configuré via SecretRef et non résolu, la résolution échoue de manière sécurisée (aucune solution de repli distante ne masque cela). trustedProxies: IP de proxy inverse qui terminent TLS ou injectent des en-têtes de client transféré. Listez uniquement des proxies que vous contrôlez. Les entrées loopback restent valides pour les configurations de détection locale/proxy sur le même hôte (par exemple Tailscale Serve ou un proxy inverse local), mais elles ne rendent pas les requêtes loopback admissibles àgateway.auth.mode: "trusted-proxy".allowRealIpFallback: lorsquetrue, la passerelle accepteX-Real-IPsiX-Forwarded-Forest absent. Par défautfalsepour un comportement d’échec sécurisé.gateway.tools.deny: noms d’outils supplémentaires bloqués pour HTTPPOST /tools/invoke(étend la liste d’interdiction par défaut).gateway.tools.allow: supprime des noms d’outils de la liste d’interdiction HTTP par défaut.
Points de terminaison compatibles OpenAI
- Chat Completions : désactivé par défaut. Activez-le avec
gateway.http.endpoints.chatCompletions.enabled: true. - API Responses :
gateway.http.endpoints.responses.enabled. - Renforcement des entrées URL pour Responses :
gateway.http.endpoints.responses.maxUrlPartsgateway.http.endpoints.responses.files.urlAllowlistgateway.http.endpoints.responses.images.urlAllowlistLes listes d’autorisations vides sont traitées comme non définies ; utilisezgateway.http.endpoints.responses.files.allowUrl=falseet/ougateway.http.endpoints.responses.images.allowUrl=falsepour désactiver la récupération d’URL.
- En-tête facultatif de renforcement des réponses :
gateway.http.securityHeaders.strictTransportSecurity(à définir uniquement pour des origines HTTPS que vous contrôlez ; voir Auth Trusted Proxy)
Isolation multi-instance
Exécutez plusieurs passerelles sur un même hôte avec des ports et répertoires d’état uniques :--dev (utilise ~/.openclaw-dev + port 19001), --profile <name> (utilise ~/.openclaw-<name>).
Consultez Passerelles multiples.
gateway.tls
enabled: active la terminaison TLS au niveau de l’écouteur de la passerelle (HTTPS/WSS) (par défaut :false).autoGenerate: génère automatiquement une paire locale certificat/clé auto-signée lorsque des fichiers explicites ne sont pas configurés ; usage local/dev uniquement.certPath: chemin du système de fichiers vers le fichier certificat TLS.keyPath: chemin du système de fichiers vers le fichier clé privée TLS ; conservez des permissions restreintes.caPath: chemin facultatif du bundle CA pour la vérification client ou des chaînes de confiance personnalisées.
gateway.reload
mode: contrôle la manière dont les modifications de configuration sont appliquées à l’exécution."off": ignore les modifications en direct ; les changements nécessitent un redémarrage explicite."restart": redémarre toujours le processus de passerelle lors d’un changement de configuration."hot": applique les changements dans le processus sans redémarrage."hybrid"(par défaut) : essaie d’abord le rechargement à chaud ; revient à un redémarrage si nécessaire.
debounceMs: fenêtre d’anti-rebond en ms avant l’application des changements de configuration (entier non négatif).deferralTimeoutMs: temps maximal en ms pour attendre la fin des opérations en cours avant de forcer un redémarrage (par défaut :300000= 5 minutes).
Hooks
Authorization: Bearer <token> ou x-openclaw-token: <token>.
Les jetons de hook dans la chaîne de requête sont rejetés.
Remarques de validation et de sécurité :
hooks.enabled=truenécessite unhooks.tokennon vide.hooks.tokendoit être distinct degateway.auth.token; réutiliser le jeton Gateway est rejeté.hooks.pathne peut pas être/; utilisez un sous-chemin dédié tel que/hooks.- Si
hooks.allowRequestSessionKey=true, contraignezhooks.allowedSessionKeyPrefixes(par exemple["hook:"]).
POST /hooks/wake→{ text, mode?: "now"|"next-heartbeat" }POST /hooks/agent→{ message, name?, agentId?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }sessionKeydepuis la charge utile de la requête n’est accepté que lorsquehooks.allowRequestSessionKey=true(par défaut :false).
POST /hooks/<name>→ résolu viahooks.mappings
Détails des mappings
Détails des mappings
match.pathcorrespond au sous-chemin après/hooks(par ex./hooks/gmail→gmail).match.sourcecorrespond à un champ de la charge utile pour les chemins génériques.- Les modèles comme
{{messages[0].subject}}lisent depuis la charge utile. transformpeut pointer vers un module JS/TS renvoyant une action de hook.transform.moduledoit être un chemin relatif et rester danshooks.transformsDir(les chemins absolus et la traversée sont rejetés).
agentIdroute vers un agent spécifique ; les ID inconnus se replient sur l’agent par défaut.allowedAgentIds: restreint le routage explicite (*ou omis = tout autoriser,[]= tout refuser).defaultSessionKey: clé de session fixe facultative pour les exécutions d’agent hook sanssessionKeyexplicite.allowRequestSessionKey: autorise les appelants/hooks/agentà définirsessionKey(par défaut :false).allowedSessionKeyPrefixes: liste d’autorisations facultative de préfixes pour les valeurs explicites desessionKey(requête + mapping), par ex.["hook:"].deliver: trueenvoie la réponse finale à un canal ;channelvaut par défautlast.modelremplace le LLM pour cette exécution de hook (doit être autorisé si un catalogue de modèles est défini).
Intégration Gmail
- La Gateway démarre automatiquement
gog gmail watch serveau démarrage lorsqu’il est configuré. DéfinissezOPENCLAW_SKIP_GMAIL_WATCHER=1pour le désactiver. - N’exécutez pas un
gog gmail watch serveséparé en parallèle de la Gateway.
Hôte Canvas
- Sert le HTML/CSS/JS modifiable par l’agent et A2UI sur HTTP sous le port Gateway :
http://<gateway-host>:<gateway.port>/__openclaw__/canvas/http://<gateway-host>:<gateway.port>/__openclaw__/a2ui/
- Local uniquement : conservez
gateway.bind: "loopback"(par défaut). - Liaisons non loopback : les routes canvas nécessitent l’authentification Gateway (token/password/trusted-proxy), comme les autres surfaces HTTP Gateway.
- Les WebViews Node n’envoient généralement pas d’en-têtes d’authentification ; après qu’un nœud est appairé et connecté, la Gateway annonce des URL de capacité limitées au nœud pour l’accès canvas/A2UI.
- Les URL de capacité sont liées à la session WS active du nœud et expirent rapidement. Aucun repli basé sur IP n’est utilisé.
- Injecte un client de rechargement à chaud dans le HTML servi.
- Crée automatiquement un
index.htmlde démarrage lorsqu’il est vide. - Sert également A2UI à
/__openclaw__/a2ui/. - Les changements nécessitent un redémarrage de la passerelle.
- Désactivez le rechargement à chaud pour les grands répertoires ou les erreurs
EMFILE.
Découverte
mDNS (Bonjour)
minimal(par défaut) : ometcliPath+sshPortdes enregistrements TXT.full: inclutcliPath+sshPort.- Le nom d’hôte vaut par défaut
openclaw. Remplacez-le avecOPENCLAW_MDNS_HOSTNAME.
Wide-area (DNS-SD)
~/.openclaw/dns/. Pour la découverte inter-réseaux, associez-la à un serveur DNS (CoreDNS recommandé) + le split DNS Tailscale.
Installation : openclaw dns setup --apply.
Environnement
env (variables d’environnement en ligne)
- Les variables d’environnement en ligne ne sont appliquées que si l’environnement du processus ne contient pas déjà la clé.
- Fichiers
.env:.envdu répertoire courant +~/.openclaw/.env(aucun des deux ne remplace les variables existantes). shellEnv: importe les clés attendues manquantes depuis le profil de votre shell de connexion.- Consultez Environnement pour l’ordre de priorité complet.
Substitution de variables d’environnement
Référencez des variables d’environnement dans n’importe quelle chaîne de configuration avec${VAR_NAME} :
- Seuls les noms en majuscules sont pris en charge :
[A-Z_][A-Z0-9_]*. - Les variables manquantes/vides déclenchent une erreur au chargement de la configuration.
- Échappez avec
$${VAR}pour obtenir un littéral${VAR}. - Fonctionne avec
$include.
Secrets
Les références de secret sont additives : les valeurs en texte brut continuent de fonctionner.SecretRef
Utilisez une seule forme d’objet :
- motif
provider:^[a-z][a-z0-9_-]{0,63}$ - motif
source: "env"pourid:^[A-Z][A-Z0-9_]{0,127}$ source: "file"id: pointeur JSON absolu (par exemple"/providers/openai/apiKey")- motif
source: "exec"pourid:^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$ - les
idsource: "exec"ne doivent pas contenir de segments de chemin.ou..séparés par/(par exemplea/../best rejeté)
Surface d’identifiants prise en charge
- Matrice canonique : Surface d’identifiants SecretRef
secrets applycible les chemins d’identifiants pris en charge dansopenclaw.json.- Les références
auth-profiles.jsonsont incluses dans la résolution à l’exécution et dans la couverture d’audit.
Configuration des providers de secrets
- Le provider
fileprend en chargemode: "json"etmode: "singleValue"(iddoit être"value"en mode singleValue). - Le provider
execexige un chemincommandabsolu et utilise des charges utiles de protocole sur stdin/stdout. - Par défaut, les chemins de commande symlink sont rejetés. Définissez
allowSymlinkCommand: truepour autoriser les chemins symlink tout en validant le chemin cible résolu. - Si
trustedDirsest configuré, la vérification de répertoire de confiance s’applique au chemin cible résolu. - L’environnement enfant de
execest minimal par défaut ; transmettez explicitement les variables nécessaires avecpassEnv. - Les références de secret sont résolues au moment de l’activation dans un instantané en mémoire, puis les chemins de requête lisent uniquement cet instantané.
- Le filtrage de surface active s’applique pendant l’activation : les références non résolues sur des surfaces activées font échouer le démarrage/rechargement, tandis que les surfaces inactives sont ignorées avec des diagnostics.
Stockage de l’authentification
- Les profils par agent sont stockés dans
<agentDir>/auth-profiles.json. auth-profiles.jsonprend en charge les références au niveau valeur (keyRefpourapi_key,tokenRefpourtoken) pour les modes d’identifiants statiques.- Les profils en mode OAuth (
auth.profiles.<id>.mode = "oauth") ne prennent pas en charge les identifiants de profil d’authentification basés sur SecretRef. - Les identifiants statiques d’exécution proviennent d’instantanés résolus en mémoire ; les anciennes entrées statiques
auth.jsonsont nettoyées lorsqu’elles sont détectées. - Les anciennes importations OAuth proviennent de
~/.openclaw/credentials/oauth.json. - Consultez OAuth.
- Comportement de l’exécution des secrets et outils
audit/configure/apply: Gestion des secrets.
auth.cooldowns
billingBackoffHours: temporisation de base en heures lorsqu’un profil échoue en raison de véritables erreurs de facturation/crédit insuffisant (par défaut :5). Un texte explicite lié à la facturation peut toujours arriver ici même sur des réponses401/403, mais les moteurs de correspondance de texte spécifiques au provider restent limités au provider qui les possède (par exemple OpenRouterKey limit exceeded). Les messages HTTP402de fenêtre d’utilisation ou de limite de dépense organisation/espace de travail pouvant être réessayés restent dans le cheminrate_limit.billingBackoffHoursByProvider: remplacements facultatifs par provider pour les heures de temporisation liées à la facturation.billingMaxHours: plafond en heures pour la croissance exponentielle de la temporisation liée à la facturation (par défaut :24).authPermanentBackoffMinutes: temporisation de base en minutes pour les échecsauth_permanentà forte confiance (par défaut :10).authPermanentMaxMinutes: plafond en minutes pour la croissance de la temporisationauth_permanent(par défaut :60).failureWindowHours: fenêtre glissante en heures utilisée pour les compteurs de temporisation (par défaut :24).overloadedProfileRotations: nombre maximal de rotations de profil d’authentification chez le même provider pour les erreurs de surcharge avant de passer au modèle de repli (par défaut :1). Les formes de provider occupé telles queModelNotReadyExceptionarrivent ici.overloadedBackoffMs: délai fixe avant de réessayer une rotation de provider/profil surchargé (par défaut :0).rateLimitedProfileRotations: nombre maximal de rotations de profil d’authentification chez le même provider pour les erreurs de limitation de débit avant de passer au modèle de repli (par défaut :1). Cette catégorie de limitation de débit inclut des textes de provider tels queToo many concurrent requests,ThrottlingException,concurrency limit reached,workers_ai ... quota limit exceededetresource exhausted.
Journalisation
- Fichier journal par défaut :
/tmp/openclaw/openclaw-YYYY-MM-DD.log. - Définissez
logging.filepour un chemin stable. consoleLevelpasse àdebugavec--verbose.maxFileBytes: taille maximale du fichier journal en octets avant suppression des écritures (entier positif ; par défaut :524288000= 500 Mo). Utilisez une rotation externe des journaux pour les déploiements de production.
Diagnostics
enabled: commutateur maître de la sortie d’instrumentation (par défaut :true).flags: tableau de chaînes de drapeaux activant une sortie de journal ciblée (prend en charge des jokers comme"telegram.*"ou"*").stuckSessionWarnMs: seuil d’ancienneté en ms pour émettre des avertissements de session bloquée tant qu’une session reste à l’état de traitement.otel.enabled: active le pipeline d’export OpenTelemetry (par défaut :false).otel.endpoint: URL du collecteur pour l’export OTel.otel.protocol:"http/protobuf"(par défaut) ou"grpc".otel.headers: en-têtes de métadonnées HTTP/gRPC supplémentaires envoyés avec les requêtes d’export OTel.otel.serviceName: nom du service pour les attributs de ressource.otel.traces/otel.metrics/otel.logs: active l’export des traces, des métriques ou des journaux.otel.sampleRate: taux d’échantillonnage des traces0–1.otel.flushIntervalMs: intervalle périodique de vidage de télémétrie en ms.cacheTrace.enabled: journalise les instantanés de trace du cache pour les exécutions intégrées (par défaut :false).cacheTrace.filePath: chemin de sortie pour le JSONL de trace du cache (par défaut :$OPENCLAW_STATE_DIR/logs/cache-trace.jsonl).cacheTrace.includeMessages/includePrompt/includeSystem: contrôle ce qui est inclus dans la sortie de trace du cache (tous àtruepar défaut).
Mise à jour
channel: canal de publication pour les installations npm/git —"stable","beta"ou"dev".checkOnStart: vérifie les mises à jour npm au démarrage de la passerelle (par défaut :true).auto.enabled: active la mise à jour automatique en arrière-plan pour les installations de paquets (par défaut :false).auto.stableDelayHours: délai minimal en heures avant application automatique sur le canal stable (par défaut :6; max :168).auto.stableJitterHours: fenêtre supplémentaire d’étalement du déploiement du canal stable en heures (par défaut :12; max :168).auto.betaCheckIntervalHours: fréquence d’exécution des vérifications du canal bêta en heures (par défaut :1; max :24).
ACP
enabled: garde-fou global de fonctionnalité ACP (par défaut :false).dispatch.enabled: garde-fou indépendant pour la distribution des tours de session ACP (par défaut :true). Définissezfalsepour garder les commandes ACP disponibles tout en bloquant l’exécution.backend: ID du backend d’exécution ACP par défaut (doit correspondre à un plugin d’exécution ACP enregistré).defaultAgent: ID d’agent ACP de repli lorsque les lancements ne spécifient pas de cible explicite.allowedAgents: liste d’autorisations des ID d’agent autorisés pour les sessions d’exécution ACP ; vide signifie aucune restriction supplémentaire.maxConcurrentSessions: nombre maximal de sessions ACP actives simultanément.stream.coalesceIdleMs: fenêtre de vidage en veille en ms pour le texte diffusé.stream.maxChunkChars: taille maximale d’un bloc avant division de la projection du bloc diffusé.stream.repeatSuppression: supprime les lignes répétées d’état/d’outil par tour (par défaut :true).stream.deliveryMode:"live"diffuse progressivement ;"final_only"met en tampon jusqu’aux événements terminaux du tour.stream.hiddenBoundarySeparator: séparateur avant le texte visible après des événements d’outil masqués (par défaut :"paragraph").stream.maxOutputChars: nombre maximal de caractères de sortie assistant projetés par tour ACP.stream.maxSessionUpdateChars: nombre maximal de caractères pour les lignes d’état/mise à jour ACP projetées.stream.tagVisibility: enregistrement des noms de balises avec remplacements booléens de visibilité pour les événements diffusés.runtime.ttlMinutes: TTL d’inactivité en minutes pour les workers de session ACP avant éligibilité au nettoyage.runtime.installCommand: commande d’installation facultative à exécuter lors de l’amorçage d’un environnement d’exécution ACP.
CLI
cli.banner.taglineModecontrôle le style de slogan de la bannière :"random"(par défaut) : slogans rotatifs humoristiques/de saison."default": slogan neutre fixe (All your chats, one OpenClaw.)."off": aucun texte de slogan (le titre/version de la bannière est toujours affiché).
- Pour masquer toute la bannière (pas seulement les slogans), définissez la variable d’environnement
OPENCLAW_HIDE_BANNER=1.
Assistant
Métadonnées écrites par les flux guidés d’installation de la CLI (onboard, configure, doctor) :
Identité
Consultez les champs d’identité deagents.list sous Valeurs par défaut des agents.
Bridge (hérité, supprimé)
Les builds actuels n’incluent plus le bridge TCP. Les nœuds se connectent via le WebSocket Gateway. Les clésbridge.* ne font plus partie du schéma de configuration (la validation échoue tant qu’elles ne sont pas supprimées ; openclaw doctor --fix peut retirer les clés inconnues).
Configuration bridge héritée (référence historique)
Configuration bridge héritée (référence historique)
Cron
sessionRetention: durée de conservation des sessions d’exécution cron isolées terminées avant élagage depuissessions.json. Contrôle également le nettoyage des transcriptions cron supprimées archivées. Par défaut :24h; définissezfalsepour désactiver.runLog.maxBytes: taille maximale par fichier journal d’exécution (cron/runs/<jobId>.jsonl) avant élagage. Par défaut :2_000_000octets.runLog.keepLines: lignes les plus récentes conservées lorsque l’élagage du journal d’exécution est déclenché. Par défaut :2000.webhookToken: jeton bearer utilisé pour la livraison POST webhook cron (delivery.mode = "webhook"), si omis aucun en-tête d’authentification n’est envoyé.webhook: URL webhook héritée obsolète de repli (http/https), utilisée uniquement pour les tâches stockées qui ont encorenotify: true.
cron.retry
maxAttempts: nombre maximal de nouvelles tentatives pour les tâches ponctuelles sur erreurs transitoires (par défaut :3; plage :0–10).backoffMs: tableau de délais de temporisation en ms pour chaque tentative de reprise (par défaut :[30000, 60000, 300000]; 1 à 10 entrées).retryOn: types d’erreurs qui déclenchent des nouvelles tentatives —"rate_limit","overloaded","network","timeout","server_error". Omettez-le pour réessayer tous les types transitoires.
cron.failureAlert
enabled: active les alertes d’échec pour les tâches cron (par défaut :false).after: nombre d’échecs consécutifs avant déclenchement d’une alerte (entier positif, min :1).cooldownMs: nombre minimal de millisecondes entre des alertes répétées pour une même tâche (entier non négatif).mode: mode de livraison —"announce"envoie via un message de canal ;"webhook"publie vers le webhook configuré.accountId: ID facultatif de compte ou de canal pour limiter la livraison des alertes.
cron.failureDestination
- Destination par défaut des notifications d’échec cron pour l’ensemble des tâches.
mode:"announce"ou"webhook"; vaut par défaut"announce"lorsqu’il y a suffisamment de données cibles.channel: remplacement de canal pour la livraison announce."last"réutilise le dernier canal de livraison connu.to: cible announce explicite ou URL webhook. Requis pour le mode webhook.accountId: remplacement facultatif de compte pour la livraison.delivery.failureDestinationpar tâche remplace cette valeur globale par défaut.- Lorsqu’aucune destination d’échec globale ou par tâche n’est définie, les tâches qui livrent déjà via
announcereviennent à cette cible announce principale en cas d’échec. delivery.failureDestinationn’est pris en charge que pour les tâchessessionTarget="isolated"sauf si ledelivery.modeprincipal de la tâche vaut"webhook".
Variables de modèle média
Espaces réservés de modèle développés danstools.media.models[].args :
| Variable | Description |
|---|---|
{{Body}} | Corps complet du message entrant |
{{RawBody}} | Corps brut (sans historique/enveloppes d’expéditeur) |
{{BodyStripped}} | Corps avec les mentions de groupe retirées |
{{From}} | Identifiant de l’expéditeur |
{{To}} | Identifiant de destination |
{{MessageSid}} | ID du message du canal |
{{SessionId}} | UUID de la session actuelle |
{{IsNewSession}} | "true" lorsqu’une nouvelle session est créée |
{{MediaUrl}} | pseudo-URL du média entrant |
{{MediaPath}} | chemin local du média |
{{MediaType}} | type de média (image/audio/document/…) |
{{Transcript}} | transcription audio |
{{Prompt}} | prompt média résolu pour les entrées CLI |
{{MaxChars}} | nombre maximal de caractères de sortie résolu pour les entrées CLI |
{{ChatType}} | "direct" ou "group" |
{{GroupSubject}} | sujet du groupe (au mieux) |
{{GroupMembers}} | aperçu des membres du groupe (au mieux) |
{{SenderName}} | nom d’affichage de l’expéditeur (au mieux) |
{{SenderE164}} | numéro de téléphone de l’expéditeur (au mieux) |
{{Provider}} | indice de provider (whatsapp, telegram, discord, etc.) |
Inclusions de configuration ($include)
Divisez la configuration en plusieurs fichiers :
- Fichier unique : remplace l’objet contenant.
- Tableau de fichiers : fusion profonde dans l’ordre (les derniers remplacent les précédents).
- Clés sœurs : fusionnées après les inclusions (remplacent les valeurs incluses).
- Inclusions imbriquées : jusqu’à 10 niveaux de profondeur.
- Chemins : résolus relativement au fichier incluant, mais doivent rester dans le répertoire de configuration de niveau supérieur (
dirnamedeopenclaw.json). Les formes absolues/../sont autorisées uniquement si elles se résolvent toujours à l’intérieur de cette limite. - Erreurs : messages clairs pour les fichiers manquants, erreurs d’analyse et inclusions circulaires.
Related: Configuration · Configuration Examples · Doctor