Gateway
Configuration
OpenClaw lit une configuration <Tooltip tip="JSON5 prend en charge les commentaires et les virgules finales">JSON5</Tooltip> facultative depuis ~/.openclaw/openclaw.json.
Le chemin de configuration actif doit être un fichier ordinaire. Les dispositions openclaw.json
fondées sur des liens symboliques ne sont pas prises en charge pour les écritures détenues par OpenClaw ; une écriture atomique peut remplacer
le chemin au lieu de préserver le lien symbolique. Si vous conservez la configuration en dehors du
répertoire d’état par défaut, pointez OPENCLAW_CONFIG_PATH directement vers le fichier réel.
Si le fichier est absent, OpenClaw utilise des valeurs par défaut sûres. Raisons fréquentes d’ajouter une configuration :
- Connecter des canaux et contrôler qui peut envoyer des messages au bot
- Définir les modèles, outils, le sandboxing ou l’automatisation (cron, hooks)
- Ajuster les sessions, les médias, le réseau ou l’UI
Consultez la référence complète pour tous les champs disponibles.
Les agents et l’automatisation doivent utiliser config.schema.lookup pour obtenir la documentation
exacte au niveau des champs avant de modifier la configuration. Utilisez cette page pour des conseils orientés tâches et la
Référence de configuration pour la carte plus générale
des champs et des valeurs par défaut.
Configuration minimale
// ~/.openclaw/openclaw.json
{
agents: { defaults: { workspace: "~/.openclaw/workspace" } },
channels: { whatsapp: { allowFrom: ["+15555550123"] } },
}
Modifier la configuration
Assistant interactif
openclaw onboard # full onboarding flow
openclaw configure # config wizard
CLI (lignes uniques)
openclaw config get agents.defaults.workspace
openclaw config set agents.defaults.heartbeat.every "2h"
openclaw config unset plugins.entries.brave.config.webSearch.apiKey
UI de contrôle
Ouvrez http://127.0.0.1:18789 et utilisez l’onglet Config.
L’UI de contrôle affiche un formulaire à partir du schéma de configuration actif, y compris les métadonnées de documentation
title / description des champs ainsi que les schémas de plugin et de canal lorsqu’ils sont
disponibles, avec un éditeur Raw JSON comme échappatoire. Pour les UI d’exploration
et les autres outils, le gateway expose également config.schema.lookup pour
récupérer un nœud de schéma limité à un chemin ainsi que les résumés de ses enfants immédiats.
Modification directe
Modifiez directement ~/.openclaw/openclaw.json. Le Gateway surveille le fichier et applique automatiquement les changements (voir rechargement à chaud).
Validation stricte
openclaw config schema affiche le JSON Schema canonique utilisé par l’UI de contrôle
et la validation. config.schema.lookup récupère un seul nœud limité à un chemin ainsi que
des résumés d’enfants pour les outils d’exploration. Les métadonnées de documentation des champs title/description
sont transmises aux objets imbriqués, aux branches joker (*), élément de tableau ([]) et anyOf/
oneOf/allOf. Les schémas de plugin et de canal d’exécution sont fusionnés lorsque le
registre de manifestes est chargé.
Lorsque la validation échoue :
- Le Gateway ne démarre pas
- Seules les commandes de diagnostic fonctionnent (
openclaw doctor,openclaw logs,openclaw health,openclaw status) - Exécutez
openclaw doctorpour voir les problèmes exacts - Exécutez
openclaw doctor --fix(ou--yes) pour appliquer les réparations
Le Gateway conserve une copie fiable du dernier état valide après chaque démarrage réussi,
mais le démarrage et le rechargement à chaud ne la restaurent pas automatiquement. Si openclaw.json
échoue à la validation (y compris la validation locale au plugin), le démarrage du Gateway échoue ou
le rechargement est ignoré et l’exécution actuelle conserve la dernière configuration acceptée.
Exécutez openclaw doctor --fix (ou --yes) pour réparer une configuration préfixée/écrasée ou
restaurer la copie du dernier état valide. La promotion en dernier état valide est ignorée lorsqu’un
candidat contient des espaces réservés de secrets masqués comme ***.
Tâches courantes
Configurer un canal (WhatsApp, Telegram, Discord, etc.)
Chaque canal dispose de sa propre section de configuration sous channels.<provider>. Consultez la page dédiée au canal pour les étapes de configuration :
- WhatsApp -
channels.whatsapp - Telegram -
channels.telegram - Discord -
channels.discord - Feishu -
channels.feishu - Google Chat -
channels.googlechat - Microsoft Teams -
channels.msteams - Slack -
channels.slack - Signal -
channels.signal - iMessage -
channels.imessage - Mattermost -
channels.mattermost
Tous les canaux partagent le même modèle de stratégie DM :
{
channels: {
telegram: {
enabled: true,
botToken: "123:abc",
dmPolicy: "pairing", // pairing | allowlist | open | disabled
allowFrom: ["tg:123"], // only for allowlist/open
},
},
}
Choisir et configurer les modèles
Définissez le modèle principal et les solutions de repli facultatives :
{
agents: {
defaults: {
model: {
primary: "anthropic/claude-sonnet-4-6",
fallbacks: ["openai/gpt-5.4"],
},
models: {
"anthropic/claude-sonnet-4-6": { alias: "Sonnet" },
"openai/gpt-5.4": { alias: "GPT" },
},
},
},
}
agents.defaults.modelsdéfinit le catalogue de modèles et sert de liste d’autorisation pour/model.- Utilisez
openclaw config set agents.defaults.models '<json>' --strict-json --mergepour ajouter des entrées à la liste d’autorisation sans supprimer les modèles existants. Les remplacements simples qui supprimeraient des entrées sont rejetés sauf si vous passez--replace. - Les références de modèles utilisent le format
provider/model(par exempleanthropic/claude-opus-4-6). agents.defaults.imageMaxDimensionPxcontrôle le redimensionnement des images de transcript/outils (valeur par défaut1200) ; des valeurs plus basses réduisent généralement l’utilisation des tokens de vision dans les exécutions avec beaucoup de captures d’écran.- Consultez CLI des modèles pour changer de modèle dans le chat et Basculement de modèle pour la rotation d’authentification et le comportement de repli.
- Pour les fournisseurs personnalisés/auto-hébergés, consultez Fournisseurs personnalisés dans la référence.
Contrôler qui peut envoyer des messages au bot
L’accès DM est contrôlé par canal via dmPolicy :
"pairing"(par défaut) : les expéditeurs inconnus reçoivent un code d’association à usage unique à approuver"allowlist": uniquement les expéditeurs dansallowFrom(ou dans le magasin d’autorisation appairé)"open": autoriser tous les DM entrants (nécessiteallowFrom: ["*"])"disabled": ignorer tous les DM
Pour les groupes, utilisez groupPolicy + groupAllowFrom ou des listes d’autorisation propres au canal.
Consultez la référence complète pour les détails par canal.
Configurer le filtrage des mentions en discussion de groupe
Les messages de groupe exigent par défaut une mention obligatoire. Configurez les motifs de déclenchement par agent, et conservez les réponses visibles dans les salons sur le chemin par défaut de l’outil de message, sauf si vous voulez volontairement les réponses finales automatiques héritées :
{
messages: {
visibleReplies: "automatic", // set "message_tool" to require message-tool sends everywhere
groupChat: {
visibleReplies: "message_tool", // default; use "automatic" for legacy room replies
},
},
agents: {
list: [
{
id: "main",
groupChat: {
mentionPatterns: ["@openclaw", "openclaw"],
},
},
],
},
channels: {
whatsapp: {
groups: { "*": { requireMention: true } },
},
},
}
- Mentions de métadonnées : @-mentions natives (mention par appui WhatsApp, @bot Telegram, etc.)
- Motifs de texte : motifs regex sûrs dans
mentionPatterns - Réponses visibles :
messages.visibleRepliespeut exiger des envois par outil de message globalement ;messages.groupChat.visibleRepliesremplace ce comportement pour les groupes/canaux. - Consultez la référence complète pour les modes de réponse visible, les remplacements par canal et le mode self-chat.
Restreindre les Skills par agent
Utilisez agents.defaults.skills pour une base partagée, puis remplacez des
agents spécifiques avec agents.list[].skills :
{
agents: {
defaults: {
skills: ["github", "weather"],
},
list: [
{ id: "writer" }, // inherits github, weather
{ id: "docs", skills: ["docs-search"] }, // replaces defaults
{ id: "locked-down", skills: [] }, // no 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. - Consultez Skills, Configuration des Skills et la Référence de configuration.
Ajuster la surveillance de santé des canaux du gateway
Contrôlez avec quelle agressivité le gateway redémarre les canaux qui semblent obsolètes :
{
gateway: {
channelHealthCheckMinutes: 5,
channelStaleEventThresholdMinutes: 30,
channelMaxRestartsPerHour: 10,
},
channels: {
telegram: {
healthMonitor: { enabled: false },
accounts: {
alerts: {
healthMonitor: { enabled: true },
},
},
},
},
}
- Définissez
gateway.channelHealthCheckMinutes: 0pour désactiver globalement les redémarrages par surveillance de santé. channelStaleEventThresholdMinutesdoit être supérieur ou égal à l’intervalle de vérification.- Utilisez
channels.<provider>.healthMonitor.enabledouchannels.<provider>.accounts.<id>.healthMonitor.enabledpour désactiver les redémarrages automatiques d’un canal ou d’un compte sans désactiver la surveillance globale. - Consultez Contrôles de santé pour le débogage opérationnel et la référence complète pour tous les champs.
Ajuster le délai d’expiration de la poignée de main WebSocket du gateway
Donnez aux clients locaux plus de temps pour terminer la poignée de main WebSocket pré-authentification sur des hôtes chargés ou peu puissants :
{
gateway: {
handshakeTimeoutMs: 30000,
},
}
- La valeur par défaut est
15000millisecondes. OPENCLAW_HANDSHAKE_TIMEOUT_MSreste prioritaire pour les remplacements ponctuels de service ou de shell.- Préférez corriger d’abord les blocages du démarrage ou de la boucle d’événements ; ce réglage est destiné aux hôtes qui sont sains mais lents pendant le préchauffage.
Configurer les sessions et les réinitialisations
Les sessions contrôlent la continuité et l’isolation des conversations :
{
session: {
dmScope: "per-channel-peer", // recommended for multi-user
threadBindings: {
enabled: true,
idleHours: 24,
maxAgeHours: 0,
},
reset: {
mode: "daily",
atHour: 4,
idleMinutes: 120,
},
},
}
dmScope:main(partagé) |per-peer|per-channel-peer|per-account-channel-peerthreadBindings: valeurs par défaut globales pour le routage des sessions liées aux fils (Discord prend en charge/focus,/unfocus,/agents,/session idleet/session max-age).- Consultez Gestion des sessions pour la portée, les liens d’identité et la stratégie d’envoi.
- Consultez la référence complète pour tous les champs.
Activer le sandboxing
Exécutez les sessions d’agent dans des runtimes sandbox isolés :
{
agents: {
defaults: {
sandbox: {
mode: "non-main", // off | non-main | all
scope: "agent", // session | agent | shared
},
},
},
}
Construisez d’abord l’image - depuis un checkout source, exécutez scripts/sandbox-setup.sh, ou depuis une installation npm, consultez la commande docker build intégrée dans Sandboxing § Images et configuration.
Consultez Sandboxing pour le guide complet et la référence complète pour toutes les options.
Activer les notifications push adossées à un relais pour les builds iOS officiels
Les notifications push adossées à un relais sont configurées dans openclaw.json.
Définissez ceci dans la configuration du Gateway :
{
gateway: {
push: {
apns: {
relay: {
baseUrl: "https://relay.example.com",
// Optional. Default: 10000
timeoutMs: 10000,
},
},
},
},
}
Équivalent CLI :
openclaw config set gateway.push.apns.relay.baseUrl https://relay.example.com
Ce que cela fait :
- Permet au Gateway d’envoyer
push.test, les rappels de réveil et les réveils de reconnexion via le relais externe. - Utilise une autorisation d’envoi limitée à l’inscription, transférée par l’app iOS jumelée. Le Gateway n’a pas besoin d’un jeton de relais couvrant tout le déploiement.
- Lie chaque inscription adossée au relais à l’identité du Gateway avec lequel l’app iOS a été jumelée, afin qu’un autre Gateway ne puisse pas réutiliser l’inscription stockée.
- Maintient les builds iOS locaux/manuels sur des APNs directs. Les envois adossés au relais s’appliquent uniquement aux builds distribués officiels enregistrés via le relais.
- Doit correspondre à l’URL de base du relais intégrée dans le build iOS officiel/TestFlight, afin que le trafic d’inscription et d’envoi atteigne le même déploiement de relais.
Flux de bout en bout :
- Installez un build iOS officiel/TestFlight compilé avec la même URL de base de relais.
- Configurez
gateway.push.apns.relay.baseUrlsur le Gateway. - Jumelez l’app iOS au Gateway et laissez les sessions de nœud et d’opérateur se connecter.
- L’app iOS récupère l’identité du Gateway, s’inscrit auprès du relais avec App Attest et le reçu de l’app, puis publie la charge utile
push.apns.registeradossée au relais vers le Gateway jumelé. - Le Gateway stocke le handle de relais et l’autorisation d’envoi, puis les utilise pour
push.test, les rappels de réveil et les réveils de reconnexion.
Notes opérationnelles :
- Si vous basculez l’app iOS vers un autre Gateway, reconnectez l’app afin qu’elle puisse publier une nouvelle inscription au relais liée à ce Gateway.
- Si vous livrez un nouveau build iOS pointant vers un autre déploiement de relais, l’app actualise son inscription au relais mise en cache au lieu de réutiliser l’ancienne origine de relais.
Note de compatibilité :
OPENCLAW_APNS_RELAY_BASE_URLetOPENCLAW_APNS_RELAY_TIMEOUT_MSfonctionnent toujours comme remplacements temporaires par variables d’environnement.OPENCLAW_APNS_RELAY_ALLOW_HTTP=truereste une échappatoire de développement limitée au local loopback ; ne persistez pas d’URL de relais HTTP dans la configuration.
Consultez App iOS pour le flux de bout en bout et Flux d’authentification et de confiance pour le modèle de sécurité du relais.
Configurer Heartbeat (vérifications périodiques)
{
agents: {
defaults: {
heartbeat: {
every: "30m",
target: "last",
},
},
},
}
every: chaîne de durée (30m,2h). Définissez0mpour désactiver.target:last|none|<channel-id>(par exemplediscord,matrix,telegramouwhatsapp)directPolicy:allow(par défaut) oublockpour les cibles Heartbeat de type MP- Consultez Heartbeat pour le guide complet.
Configurer les tâches Cron
{
cron: {
enabled: true,
maxConcurrentRuns: 2, // cron dispatch + isolated cron agent-turn execution
sessionRetention: "24h",
runLog: {
maxBytes: "2mb",
keepLines: 2000,
},
},
}
sessionRetention: élague les sessions d’exécution isolées terminées desessions.json(par défaut24h; définissezfalsepour désactiver).runLog: élaguecron/runs/<jobId>.jsonlpar taille et nombre de lignes conservées.- Consultez Tâches Cron pour l’aperçu de la fonctionnalité et des exemples CLI.
Configurer les Webhooks (hooks)
Activez les points de terminaison Webhook HTTP sur le Gateway :
{
hooks: {
enabled: true,
token: "shared-secret",
path: "/hooks",
defaultSessionKey: "hook:ingress",
allowRequestSessionKey: false,
allowedSessionKeyPrefixes: ["hook:"],
mappings: [
{
match: { path: "gmail" },
action: "agent",
agentId: "main",
deliver: true,
},
],
},
}
Note de sécurité :
- Traitez tout le contenu des charges utiles hook/Webhook comme une entrée non fiable.
- Utilisez un
hooks.tokendédié ; ne réutilisez pas le jeton Gateway partagé. - L’authentification des hooks se fait uniquement par en-tête (
Authorization: Bearer ...oux-openclaw-token) ; les jetons dans la chaîne de requête sont rejetés. hooks.pathne peut pas être/; gardez l’entrée Webhook sur un sous-chemin dédié comme/hooks.- Gardez les indicateurs de contournement de contenu non sûr désactivés (
hooks.gmail.allowUnsafeExternalContent,hooks.mappings[].allowUnsafeExternalContent), sauf pour un débogage strictement limité. - Si vous activez
hooks.allowRequestSessionKey, définissez aussihooks.allowedSessionKeyPrefixesafin de borner les clés de session choisies par l’appelant. - Pour les agents pilotés par hook, privilégiez des niveaux de modèles modernes et robustes ainsi qu’une politique d’outils stricte (par exemple uniquement la messagerie, plus le sandboxing lorsque possible).
Consultez la référence complète pour toutes les options de mappage et l’intégration Gmail.
Configurer le routage multi-agent
Exécutez plusieurs agents isolés avec des espaces de travail et des sessions distincts :
{
agents: {
list: [
{ id: "home", default: true, workspace: "~/.openclaw/workspace-home" },
{ id: "work", workspace: "~/.openclaw/workspace-work" },
],
},
bindings: [
{ agentId: "home", match: { channel: "whatsapp", accountId: "personal" } },
{ agentId: "work", match: { channel: "whatsapp", accountId: "biz" } },
],
}
Consultez Multi-Agent et la référence complète pour les règles de liaison et les profils d’accès par agent.
Diviser la configuration en plusieurs fichiers ($include)
Utilisez $include pour organiser les configurations volumineuses :
// ~/.openclaw/openclaw.json
{
gateway: { port: 18789 },
agents: { $include: "./agents.json5" },
broadcast: {
$include: ["./clients/a.json5", "./clients/b.json5"],
},
}
- Fichier unique : remplace l’objet conteneur
- Tableau de fichiers : fusion profonde dans l’ordre (le dernier l’emporte)
- Clés sœurs : fusionnées après les inclusions (remplacent les valeurs incluses)
- Inclusions imbriquées : prises en charge jusqu’à 10 niveaux de profondeur
- Chemins relatifs : résolus par rapport au fichier qui inclut
- Écritures appartenant à OpenClaw : lorsqu’une écriture ne modifie qu’une seule section de premier niveau
adossée à une inclusion de fichier unique comme
plugins: { $include: "./plugins.json5" }, OpenClaw met à jour ce fichier inclus et laisseopenclaw.jsonintact - Écriture traversante non prise en charge : les inclusions racine, les tableaux d’inclusions et les inclusions avec remplacements par clés sœurs échouent fermement pour les écritures appartenant à OpenClaw au lieu d’aplatir la configuration
- Confinement : les chemins
$includedoivent se résoudre sous le répertoire contenantopenclaw.json. Pour partager une arborescence entre des machines ou des utilisateurs, définissezOPENCLAW_INCLUDE_ROOTSsur une liste de chemins (:sur POSIX,;sur Windows) de répertoires supplémentaires que les inclusions peuvent référencer. Les liens symboliques sont résolus et revérifiés ; un chemin qui se trouve lexicalement dans un répertoire de configuration, mais dont la vraie cible s’échappe de chaque racine autorisée, est donc toujours rejeté. - Gestion des erreurs : erreurs claires pour les fichiers manquants, les erreurs d’analyse et les inclusions circulaires
Rechargement à chaud de la configuration
Le Gateway surveille ~/.openclaw/openclaw.json et applique les changements automatiquement - aucun redémarrage manuel n’est nécessaire pour la plupart des paramètres.
Les modifications directes de fichier sont traitées comme non fiables jusqu’à validation. Le surveillant attend
que les écritures temporaires/renommages de l’éditeur se stabilisent, lit le fichier final et rejette
les modifications externes invalides sans réécrire openclaw.json. Les écritures de configuration
appartenant à OpenClaw utilisent la même barrière de schéma avant l’écriture ; les écrasements destructeurs comme
la suppression de gateway.mode ou la réduction du fichier de plus de moitié sont rejetés et
enregistrés sous .rejected.* pour inspection.
Si vous voyez config reload skipped (invalid config) ou si le démarrage signale Invalid config, inspectez la configuration, exécutez openclaw config validate, puis exécutez openclaw doctor --fix pour réparation. Consultez Dépannage du Gateway
pour la checklist.
Modes de rechargement
| Mode | Comportement |
|---|---|
hybrid (par défaut) |
Applique instantanément à chaud les changements sûrs. Redémarre automatiquement pour les changements critiques. |
hot |
Applique uniquement à chaud les changements sûrs. Journalise un avertissement lorsqu’un redémarrage est nécessaire - à vous de le gérer. |
restart |
Redémarre le Gateway à chaque changement de configuration, sûr ou non. |
off |
Désactive la surveillance de fichier. Les changements prennent effet au prochain redémarrage manuel. |
{
gateway: {
reload: { mode: "hybrid", debounceMs: 300 },
},
}
Ce qui s’applique à chaud ou nécessite un redémarrage
La plupart des champs s’appliquent à chaud sans interruption. En mode hybrid, les changements nécessitant un redémarrage sont gérés automatiquement.
| Catégorie | Champs | Redémarrage nécessaire ? |
|---|---|---|
| Canaux | channels.*, web (WhatsApp) - tous les canaux intégrés et Plugin |
Non |
| Agent et modèles | agent, agents, models, routing |
Non |
| Automatisation | hooks, cron, agent.heartbeat |
Non |
| Sessions et messages | session, messages |
Non |
| Outils et médias | tools, browser, skills, mcp, audio, talk |
Non |
| UI et divers | ui, logging, identity, bindings |
Non |
| Serveur Gateway | gateway.* (port, liaison, auth, tailscale, TLS, HTTP) |
Oui |
| Infrastructure | discovery, plugins |
Oui |
Planification du rechargement
Lorsque vous modifiez un fichier source référencé via $include, OpenClaw planifie
le rechargement à partir de la disposition rédigée dans la source, et non de la vue
aplatie en mémoire. Cela garde les décisions de rechargement à chaud (application
à chaud ou redémarrage) prévisibles même lorsqu’une seule section de premier niveau
réside dans son propre fichier inclus, comme
plugins: { $include: "./plugins.json5" }. La planification du rechargement échoue
de manière fermée si la disposition source est ambiguë.
RPC de configuration (mises à jour programmatiques)
Pour les outils qui écrivent la configuration via l’API Gateway, préférez ce flux :
config.schema.lookuppour inspecter un sous-arbre (nœud de schéma superficiel + résumés des enfants)config.getpour récupérer l’instantané actuel ainsi que lehashconfig.patchpour les mises à jour partielles (patch de fusion JSON : les objets fusionnent,nullsupprime, les tableaux remplacent)config.applyuniquement lorsque vous avez l’intention de remplacer toute la configurationupdate.runpour une auto-mise à jour explicite suivie d’un redémarrage ; incluezcontinuationMessagelorsque la session après redémarrage doit exécuter un tour de suiviupdate.statuspour inspecter la dernière sentinelle de redémarrage de mise à jour et vérifier la version en cours d’exécution après un redémarrage
Les agents doivent considérer config.schema.lookup comme le premier point d’entrée pour la documentation et les contraintes exactes au niveau des champs. Utilisez Référence de configuration
lorsqu’ils ont besoin de la carte de configuration plus large, des valeurs par défaut ou de liens vers des références dédiées
aux sous-systèmes.
Exemple de patch partiel :
openclaw gateway call config.get --params '{}' # capture payload.hash
openclaw gateway call config.patch --params '{
"raw": "{ channels: { telegram: { groups: { \"*\": { requireMention: false } } } } }",
"baseHash": "<hash>"
}'
config.apply et config.patch acceptent tous deux raw, baseHash, sessionKey,
note et restartDelayMs. baseHash est requis pour les deux méthodes lorsqu’une
configuration existe déjà.
Variables d’environnement
OpenClaw lit les variables d’environnement depuis le processus parent, ainsi que :
.envdepuis le répertoire de travail actuel (si présent)~/.openclaw/.env(solution de repli globale)
Aucun des deux fichiers ne remplace les variables d’environnement existantes. Vous pouvez aussi définir des variables d’environnement en ligne dans la configuration :
{
env: {
OPENROUTER_API_KEY: "sk-or-...",
vars: { GROQ_API_KEY: "gsk-..." },
},
}
Importation de l’environnement shell (facultatif)
Si cette option est activée et que les clés attendues ne sont pas définies, OpenClaw exécute votre shell de connexion et importe uniquement les clés manquantes :
{
env: {
shellEnv: { enabled: true, timeoutMs: 15000 },
},
}
Équivalent en variable d’environnement : OPENCLAW_LOAD_SHELL_ENV=1
Substitution de variables d’environnement dans les valeurs de configuration
Référencez des variables d’environnement dans n’importe quelle valeur de chaîne de configuration avec ${VAR_NAME} :
{
gateway: { auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" } },
models: { providers: { custom: { apiKey: "${CUSTOM_API_KEY}" } } },
}
Règles :
- Seuls les noms en majuscules correspondent :
[A-Z_][A-Z0-9_]* - Les variables manquantes/vides génèrent une erreur au moment du chargement
- Échappez avec
$${VAR}pour une sortie littérale - Fonctionne dans les fichiers
$include - Substitution en ligne :
"${BASE}/v1"→"https://api.example.com/v1"
Références de secrets (env, file, exec)
Pour les champs qui prennent en charge les objets SecretRef, vous pouvez utiliser :
{
models: {
providers: {
openai: { apiKey: { source: "env", provider: "default", id: "OPENAI_API_KEY" } },
},
},
skills: {
entries: {
"image-lab": {
apiKey: {
source: "file",
provider: "filemain",
id: "/skills/entries/image-lab/apiKey",
},
},
},
},
channels: {
googlechat: {
serviceAccountRef: {
source: "exec",
provider: "vault",
id: "channels/googlechat/serviceAccount",
},
},
},
}
Les détails SecretRef (y compris secrets.providers pour env/file/exec) se trouvent dans Gestion des secrets.
Les chemins d’identifiants pris en charge sont répertoriés dans Surface d’identifiants SecretRef.
Consultez Environnement pour la précédence complète et les sources.
Référence complète
Pour la référence complète champ par champ, consultez Référence de configuration.
Associé : Exemples de configuration · Référence de configuration · Doctor