Skip to content

Référence complète de configuration

Clawdbot lit un fichier de configuration JSON5 optionnel (supporte les commentaires et les virgules finales) : ~/.clawdbot/clawdbot.json

Si le fichier de configuration est manquant, Clawdbot utilise des valeurs par défaut sécurisées (agent Pi intégré + session par expéditeur + espace de travail ~/clawd). En général, vous n'avez besoin de configurer que pour :

  • Restreindre qui peut déclencher le bot (channels.whatsapp.allowFrom, channels.telegram.allowFrom, etc.)
  • Contrôler la liste blanche des groupes + le comportement de mention (channels.whatsapp.groups, channels.telegram.groups, channels.discord.guilds)
  • Personnaliser les préfixes de messages (messages)
  • Définir l'espace de travail du proxy (agents.defaults.workspace ou agents.list[].workspace)
  • Ajuster les valeurs par défaut de l'agent intégré (agents.defaults) et le comportement de session (session)
  • Définir l'identité de chaque agent (agents.list[].identity)

Débutant ?

Si c'est votre première configuration, nous vous recommandons de lire d'abord les tutoriels de Démarrage rapide et de Assistant de configuration.

Mécanisme de validation de la configuration

Clawdbot n'accepte que les configurations qui correspondent entièrement au Schema. Les clés inconnues, les types incorrects ou les valeurs invalides feront en sorte que le Gateway refusera de démarrer pour garantir la sécurité.

Lorsque la validation échoue :

  • Le Gateway ne démarrera pas
  • Seuls les commandes de diagnostic sont autorisées (par exemple : clawdbot doctor, clawdbot logs, clawdbot health, clawdbot status, clawdbot service, clawdbot help)
  • Exécutez clawdbot doctor pour voir le problème exact
  • Exécutez clawdbot doctor --fix (ou --yes) pour appliquer les migrations/réparations

Avertissement

Doctor n'écrira aucun changement à moins que vous ne sélectionniez explicitement --fix/--yes.

Structure du fichier de configuration

Le fichier de configuration de Clawdbot est un objet hiérarchique contenant les sections de configuration principales suivantes :

json5
{
  // Configuration centrale
  meta: {},
  env: {},
  wizard: {},
  diagnostics: {},
  logging: {},
  update: {},
  
  // Configuration des fonctionnalités
  browser: {},
  ui: {},
  auth: {},
  models: {},
  nodeHost: {},
  agents: {},
  tools: {},
  bindings: {},
  broadcast: {},
  audio: {},
  media: {},
  messages: {},
  commands: {},
  approvals: {},
  session: {},
  cron: {},
  hooks: {},
  web: {},
  channels: {},
  discovery: {},
  canvasHost: {},
  talk: {},
  gateway: {},
  skills: {},
  plugins: {}
}

Configuration centrale

meta

Métadonnées du fichier de configuration (écrit automatiquement par l'assistant CLI).

json5
{
  meta: {
    lastTouchedVersion: "2026.1.24",
    lastTouchedAt: "2026-01-27T00:00:00.000Z"
  }
}
ChampTypeObligatoirePar défautDescription
lastTouchedVersionstring-Version de Clawdbot qui a modifié cette configuration pour la dernière fois
lastTouchedAtstring-Heure de la dernière modification de cette configuration (ISO 8601)

env

Configuration des variables d'environnement et importation de l'environnement du shell.

json5
{
  env: {
    shellEnv: {
      enabled: true,
      timeoutMs: 15000
    },
    vars: {
      OPENAI_API_KEY: "sk-...",
      ANTHROPIC_API_KEY: "sk-ant-..."
    },
    // Paires clé-valeur arbitraires
    CUSTOM_VAR: "value"
  }
}
ChampTypeObligatoirePar défautDescription
shellEnv.enabledbooleanfalseImporter les variables d'environnement depuis le shell de connexion (n'importe que les clés manquantes)
shellEnv.timeoutMsnumber15000Délai d'attente d'importation de l'environnement du shell (millisecondes)
varsobject-Variables d'environnement en ligne (paires clé-valeur)

Remarque : vars ne s'applique que lorsque la clé correspondante est manquante dans les variables d'environnement du processus. Cela n'écrase jamais les variables d'environnement existantes.

Priorité des variables d'environnement

Variables d'environnement du processus > fichier .env > ~/.clawdbot/.env > env.vars dans le fichier de configuration

wizard

Métadonnées écrites par l'assistant CLI (onboard, configure, doctor).

json5
{
  wizard: {
    lastRunAt: "2026-01-01T00:00:00.000Z",
    lastRunVersion: "2026.1.4",
    lastRunCommit: "abc1234",
    lastRunCommand: "configure",
    lastRunMode: "local"
  }
}
ChampTypeObligatoirePar défautDescription
lastRunAtstring-Heure de la dernière exécution de l'assistant
lastRunVersionstring-Version de Clawdbot lors de la dernière exécution de l'assistant
lastRunCommitstring-Hash du commit Git lors de la dernière exécution de l'assistant
lastRunCommandstring-Dernière commande d'assistant exécutée
lastRunModestring-Mode d'exécution de l'assistant (local | remote)

diagnostics

Configuration de la télémétrie de diagnostic et d'OpenTelemetry.

json5
{
  diagnostics: {
    enabled: true,
    flags: ["debug-mode", "verbose-tool-calls"],
    otel: {
      enabled: false,
      endpoint: "https://otel.example.com",
      protocol: "http/protobuf",
      headers: {
        "X-Custom-Header": "value"
      },
      serviceName: "clawdbot",
      traces: true,
      metrics: true,
      logs: false,
      sampleRate: 0.1,
      flushIntervalMs: 5000
    },
    cacheTrace: {
      enabled: false,
      filePath: "/tmp/clawdbot/trace-cache.json",
      includeMessages: true,
      includePrompt: true,
      includeSystem: false
    }
  }
}
ChampTypeObligatoirePar défautDescription
enabledbooleanfalseActiver les fonctionnalités de diagnostic
flagsstring[]-Liste des indicateurs de diagnostic
otel.enabledbooleanfalseActiver la télémétrie OpenTelemetry
otel.endpointstring-Point de terminaison du collecteur OTEL
otel.protocolstring-Protocole OTEL (http/protobuf | grpc)
otel.headersobject-En-têtes de requête OTEL
otel.serviceNamestring-Nom du service OTEL
otel.tracesboolean-Collecter les données de trace
otel.metricsboolean-Collecter les données de métriques
otel.logsboolean-Collecter les données de journal
otel.sampleRatenumber-Taux d'échantillonnage (0-1)
otel.flushIntervalMsnumber-Intervalle de vidage (millisecondes)
cacheTrace.enabledbooleanfalseActiver le cache de trace
cacheTrace.filePathstring-Chemin du fichier de cache de trace
cacheTrace.includeMessagesboolean-Inclure les messages dans le cache
cacheTrace.includePromptboolean-Inclure les invites dans le cache
cacheTrace.includeSystemboolean-Inclure les invites système dans le cache

logging

Configuration de la journalisation.

json5
{
  logging: {
    level: "info",
    file: "/tmp/clawdbot/clawdbot.log",
    consoleLevel: "info",
    consoleStyle: "pretty",
    redactSensitive: "tools",
    redactPatterns: [
      "\\bTOKEN\\b\\s*[=:]\\s*([\"']?)([^\\s\"']+)\\1",
      "/\\bsk-[A-Za-z0-9_-]{8,}\\b/gi"
    ]
  }
}
ChampTypeObligatoirePar défautDescription
levelstringinfoNiveau de journal (silent | fatal | error | warn | info | debug | trace)
filestring-Chemin du fichier de journal (par défaut : /tmp/clawdbot/clawdbot-YYYY-MM-DD.log)
consoleLevelstringinfoNiveau de journal de console (même que l'option level)
consoleStylestringprettyStyle de sortie de console (pretty | compact | json)
redactSensitivestringtoolsMode de rédaction d'informations sensibles (off | tools)
redactPatternsstring[]-Modèles de rédaction regex personnalisés (remplace les valeurs par défaut)

Chemin du fichier de journal

Si vous souhaitez un chemin de fichier de journal stable, définissez logging.file sur /tmp/clawdbot/clawdbot.log (au lieu du chemin de rotation quotidienne par défaut).

update

Configuration du canal de mise à jour et de la vérification automatique.

json5
{
  update: {
    channel: "stable",
    checkOnStart: true
  }
}
ChampTypeObligatoirePar défautDescription
channelstringstableCanal de mise à jour (stable | beta | dev)
checkOnStartboolean-Vérifier les mises à jour au démarrage

browser

Configuration de l'automatisation du navigateur (basée sur Playwright).

json5
{
  browser: {
    enabled: true,
    controlUrl: "ws://localhost:9222",
    controlToken: "secret-token",
    cdpUrl: "http://localhost:9222",
    remoteCdpTimeoutMs: 10000,
    remoteCdpHandshakeTimeoutMs: 5000,
    color: "#3b82f6",
    executablePath: "/usr/bin/google-chrome",
    headless: true,
    noSandbox: false,
    attachOnly: false,
    defaultProfile: "default",
    snapshotDefaults: {
      mode: "efficient"
    },
    profiles: {
      "profile-1": {
        cdpPort: 9222,
        cdpUrl: "http://localhost:9222",
        driver: "clawd",
        color: "#ff0000"
      }
    }
  }
}
ChampTypeObligatoirePar défautDescription
enabledboolean-Activer l'outil du navigateur
controlUrlstring-URL WebSocket de contrôle du navigateur
controlTokenstring-Jeton d'authentification de contrôle du navigateur
cdpUrlstring-URL du protocole Chrome DevTools
remoteCdpTimeoutMsnumber-Délai d'attente CDP distant (millisecondes)
remoteCdpHandshakeTimeoutMsnumber-Délai d'attente de handshake CDP distant (millisecondes)
colorstring-Couleur hexadécimale affichée dans l'interface utilisateur
executablePathstring-Chemin du fichier exécutable du navigateur
headlessboolean-Mode sans tête
noSandboxboolean-Désactiver le bac à sable (nécessaire sous Linux)
attachOnlyboolean-S'attacher uniquement à l'instance de navigateur existante
defaultProfilestring-ID de profil par défaut
snapshotDefaults.modestring-Mode d'instantané (efficient)
profilesobject-Mappage des profils (clé : nom du profil, valeur : configuration)

Configuration du profil :

  • cdpPort : Port CDP (1-65535)
  • cdpUrl : URL CDP
  • driver : Type de pilote (clawd | extension)
  • color : Couleur hexadécimale du profil

Nommage du profil du navigateur

Les noms de profil ne doivent contenir que des lettres minuscules, des chiffres et des tirets : ^[a-z0-9-]+$

ui

Configuration de personnalisation de l'interface utilisateur (Contrôle UI, WebChat).

json5
{
  ui: {
    seamColor: "#3b82f6",
    assistant: {
      name: "Clawdbot",
      avatar: "avatars/clawdbot.png"
    }
  }
}
ChampTypeObligatoirePar défautDescription
seamColorstring-Valeur hexadécimale de la couleur Seam
assistant.namestring-Nom d'affichage de l'assistant (maximum 50 caractères)
assistant.avatarstring-Chemin ou URL de l'avatar de l'assistant (maximum 200 caractères)

Prise en charge des avatars :

  • Chemin relatif à l'espace de travail (doit être dans l'espace de travail de l'agent)
  • URL http(s)
  • URI data:

Configuration de l'authentification

auth

Métadonnées du profil d'authentification (ne stocke pas de clés, mappe uniquement les profils aux fournisseurs et modes).

json5
{
  auth: {
    profiles: {
      "anthropic:[email protected]": {
        provider: "anthropic",
        mode: "oauth",
        email: "[email protected]"
      },
      "anthropic:work": {
        provider: "anthropic",
        mode: "api_key"
      },
      "openai:default": {
        provider: "openai",
        mode: "api_key"
      }
    },
    order: {
      anthropic: ["anthropic:[email protected]", "anthropic:work"],
      openai: ["openai:default"]
    },
    cooldowns: {
      billingBackoffHours: 24,
      billingBackoffHoursByProvider: {
        anthropic: 48
      },
      billingMaxHours: 168,
      failureWindowHours: 1
    }
  }
}
ChampTypeObligatoirePar défautDescription
profilesobject-Mappage des profils (clé : ID de profil, valeur : configuration)
profiles.<profileId>.providerstring-Nom du fournisseur
profiles.<profileId>.modestring-Mode d'authentification (api_key | oauth | token)
profiles.<profileId>.emailstring-Courriel OAuth (optionnel)
orderobject-Ordre de basculement du fournisseur
cooldowns.billingBackoffHoursnumber-Durée de temporisation des problèmes de facturation (heures)
cooldowns.billingBackoffHoursByProviderobject-Durée de temporisation de facturation par fournisseur
cooldowns.billingMaxHoursnumber-Durée maximale de temporisation de facturation (heures)
cooldowns.failureWindowHoursnumber-Durée de la fenêtre d'échec (heures)

Synchronisation automatique de Claude Code CLI

Clawdbot synchronise automatiquement les jetons OAuth depuis Claude Code CLI vers auth-profiles.json (lorsqu'il existe sur l'hôte du Gateway) :

  • macOS : Élément du trousseau "Claude Code-credentials" (sélectionnez "Toujours autoriser" pour éviter les invites launchd)
  • Linux/Windows : ~/.claude/.credentials.json

Emplacements de stockage de l'authentification :

  • <agentDir>/auth-profiles.json (par défaut : ~/.clawdbot/agents/<agentId>/agent/auth-profiles.json)
  • Importation héritée : ~/.clawdbot/credentials/oauth.json

Cache d'exécution de l'agent intégré :

  • <agentDir>/auth.json (géré automatiquement ; ne pas modifier manuellement)

Configuration des modèles

models

Fournisseurs de modèles d'IA et configuration.

json5
{
  models: {
    mode: "merge",
    providers: {
      "openai": {
        baseUrl: "https://api.openai.com/v1",
        apiKey: "${OPENAI_API_KEY}",
        auth: "api_key",
        api: "openai-completions",
        headers: {
          "X-Custom-Header": "value"
        },
        models: [
          {
            id: "gpt-4",
            name: "GPT-4",
            api: "openai-completions",
            reasoning: false,
            input: ["text"],
            cost: {
              input: 0.000005,
              output: 0.000015,
              cacheRead: 0.000001,
              cacheWrite: 0.000005
            },
            contextWindow: 128000,
            maxTokens: 4096,
            compat: {
              supportsStore: true,
              supportsDeveloperRole: true,
              supportsReasoningEffort: true,
              maxTokensField: "max_tokens"
            }
          }
        ]
      },
      "anthropic": {
        apiKey: "${ANTHROPIC_API_KEY}",
        auth: "oauth",
        api: "anthropic-messages",
        models: [
          {
            id: "claude-opus-4-5",
            name: "Claude Opus 4.5",
            api: "anthropic-messages",
            reasoning: true,
            input: ["text", "image"],
            contextWindow: 200000,
            maxTokens: 8192
          }
        ]
      },
      "ollama": {
        baseUrl: "http://localhost:11434",
        apiKey: "ollama"
      },
      "vercel-gateway": {
        apiKey: "${VERCEL_GATEWAY_API_KEY}"
      }
    },
    bedrockDiscovery: {
      enabled: false,
      region: "us-east-1",
      providerFilter: ["anthropic"],
      refreshInterval: 3600000,
      defaultContextWindow: 200000,
      defaultMaxTokens: 4096
    }
  }
}
ChampTypeObligatoirePar défautDescription
modestring-Mode de fusion des modèles (merge | replace)
providersobject-Mappage des fournisseurs (clé : ID du fournisseur, valeur : configuration du fournisseur)
providers.<providerId>.baseUrlstring-URL de base de l'API
providers.<providerId>.apiKeystring-Clé d'API (prend en charge le remplacement des variables d'environnement)
providers.<providerId>.authstring-Type d'authentification (api_key | aws-sdk | oauth | token)
providers.<providerId>.apistring-Type d'API (openai-completions | openai-responses | anthropic-messages | google-generative-ai | github-copilot | bedrock-converse-stream)
providers.<providerId>.authHeaderboolean-Utiliser l'en-tête d'authentification
providers.<providerId>.headersobject-En-têtes HTTP personnalisés
providers.<providerId>.modelsarray-Liste des définitions de modèles
bedrockDiscovery.enabledbooleanfalseActiver la découverte de modèles AWS Bedrock
bedrockDiscovery.regionstring-Région AWS
bedrockDiscovery.providerFilterstring[]-Filtre des fournisseurs Bedrock
bedrockDiscovery.refreshIntervalnumber-Intervalle d'actualisation (millisecondes)
bedrockDiscovery.defaultContextWindownumber-Fenêtre de contexte par défaut
bedrockDiscovery.defaultMaxTokensnumber-Nombre maximal de tokens par défaut

Champs de définition du modèle :

  • id : ID du modèle (obligatoire)
  • name : Nom d'affichage du modèle (obligatoire)
  • api : Type d'API
  • reasoning : Si c'est un modèle de raisonnement
  • input : Types d'entrée pris en charge (text | image)
  • cost.input : Coût d'entrée
  • cost.output : Coût de sortie
  • cost.cacheRead : Coût de lecture du cache
  • cost.cacheWrite : Coût d'écriture du cache
  • contextWindow : Taille de la fenêtre de contexte
  • maxTokens : Nombre maximal de tokens
  • compat : Indicateurs de compatibilité

Configuration des agents

agents

Liste des agents et configuration par défaut.

json5
{
  agents: {
    defaults: {
      workspace: "~/clawd",
      repoRoot: "~/Projects/clawdbot",
      skipBootstrap: false,
      bootstrapMaxChars: 20000,
      userTimezone: "America/Chicago",
      timeFormat: "auto",
      model: {
        primary: "anthropic/claude-opus-4-5",
        fallbacks: [
          "openai/gpt-4",
          "vercel-gateway/gpt-4"
        ]
      },
      identity: {
        name: "Clawdbot",
        theme: "helpful sloth",
        emoji: "🦞",
        avatar: "avatars/clawdbot.png"
      },
      groupChat: {
        mentionPatterns: ["@clawd", "clawdbot"]
      },
      sandbox: {
        mode: "off",
        scope: "session",
        workspaceAccess: "rw",
        workspaceRoot: "/tmp/clawdbot-sandbox",
        docker: {
          image: "clawdbot/agent:latest",
          network: "bridge",
          env: {
            "CUSTOM_VAR": "value"
          },
          setupCommand: "npm install",
          limits: {
            memory: "512m",
            cpu: "0.5"
          }
        },
        browser: {
          enabled: true
        },
        prune: {
          enabled: true,
          keepLastN: 3
        }
      },
      subagents: {
        allowAgents: ["*"]
      },
      tools: {
        profile: "full-access",
        allow: ["read", "write", "edit", "browser"],
        deny: ["exec"]
      },
      concurrency: {
        maxConcurrentSessions: 5,
        maxConcurrentToolCalls: 10
      },
      cli: {
        backend: {
          command: "clawdbot agent",
          args: ["--thinking", "high"],
          output: "json",
          resumeOutput: "json",
          input: "stdin",
          maxPromptArgChars: 10000,
          env: {},
          clearEnv: ["NODE_ENV"],
          modelArg: "--model",
          modelAliases: {
            "opus": "anthropic/claude-opus-4-5"
          },
          sessionArg: "--session",
          sessionArgs: ["--verbose"],
          resumeArgs: [],
          sessionMode: "existing",
          sessionIdFields: ["agent", "channel", "accountId", "peer"],
          systemPromptArg: "--system-prompt",
          systemPromptMode: "append",
          systemPromptWhen: "always",
          imageArg: "--image",
          imageMode: "repeat",
          serialize: false
        }
      }
    },
    list: [
      {
        id: "main",
        default: true,
        name: "Main Assistant",
        workspace: "~/clawd-main",
        agentDir: "~/.clawdbot/agents/main/agent",
        model: "anthropic/claude-opus-4-5",
        identity: {
          name: "Samantha",
          theme: "helpful sloth",
          emoji: "🦥",
          avatar: "avatars/samantha.png"
        },
        groupChat: {
          mentionPatterns: ["@samantha", "sam", "assistant"]
        },
        sandbox: {
          mode: "non-main"
        },
        subagents: {
          allowAgents: ["research", "writer"]
        },
        tools: {
          allow: ["read", "write", "browser"],
          deny: []
        }
      },
      {
        id: "work",
        workspace: "~/clawd-work",
        model: {
          primary: "openai/gpt-4",
          fallbacks: []
        }
      }
    ]
  }
}

Configuration par défaut (agents.defaults) :

ChampTypeObligatoirePar défautDescription
workspacestring~/clawdRépertoire de l'espace de travail de l'agent
repoRootstring-Répertoire racine du dépôt Git (pour l'invite système)
skipBootstrapbooleanfalseIgnorer la création de fichiers d'amorçage de l'espace de travail
bootstrapMaxCharsnumber20000Nombre maximal de caractères par fichier d'amorçage
userTimezonestring-Fuseau horaire de l'utilisateur (contexte d'invite système)
timeFormatstringautoFormat de l'heure (auto | 12 | 24)
model.primarystring-Modèle principal (sous forme de chaîne : provider/model)
model.fallbacksstring[]-Liste des modèles de basculement
identity.namestring-Nom de l'agent
identity.themestring-Thème de l'agent
identity.emojistring-Emoji de l'agent
identity.avatarstring-Chemin ou URL de l'avatar de l'agent
groupChat.mentionPatternsstring[]-Modèles de mention de groupe (regex)
groupChat.historyLimitnumber-Limite d'historique de groupe
sandbox.modestring-Mode de bac à sable (off | non-main | all)
sandbox.scopestring-Portée du bac à sable (session | agent | shared)
sandbox.workspaceAccessstring-Autorisation d'accès à l'espace de travail (none | ro | rw)
sandbox.workspaceRootstring-Répertoire racine de l'espace de travail de bac à sable personnalisé
subagents.allowAgentsstring[]-IDs de sous-agents autorisés (["*"] = tous)
tools.profilestring-Profil d'outils (appliqué avant allow/deny)
tools.allowstring[]-Liste des outils autorisés
tools.denystring[]-Liste des outils refusés (deny a priorité)
concurrency.maxConcurrentSessionsnumber-Nombre maximal de sessions simultanées
concurrency.maxConcurrentToolCallsnumber-Nombre maximal d'appels d'outils simultanés

Liste des agents (agents.list) :

ChampTypeObligatoirePar défautDescription
idstringObligatoireID de l'agent (identifiant stable)
defaultbooleanfalseSi c'est l'agent par défaut (le premier gagne s'il y en a plusieurs)
namestring-Nom d'affichage de l'agent
workspacestring~/clawd-<agentId>Espace de travail de l'agent (remplace la valeur par défaut)
agentDirstring~/.clawdbot/agents/<agentId>/agentRépertoire de l'agent
modelstring/object-Configuration du modèle par agent
identityobject-Configuration d'identité par agent
groupChatobject-Configuration de chat de groupe par agent
sandboxobject-Configuration de bac à sable par agent
subagentsobject-Configuration de sous-agents par agent
toolsobject-Restrictions d'outils par agent

Formulaire de configuration du modèle

Le champ model d'un agent peut adopter deux formes :

  • Forme de chaîne : "provider/model" (ne remplace que primary)
  • Forme d'objet : { primary, fallbacks } (remplace primary et fallbacks ; [] désactive le basculement global pour cet agent)

Configuration des liaisons

bindings

Achemine les messages entrants vers des agents spécifiques.

json5
{
  bindings: [
    {
      agentId: "main",
      match: {
        channel: "whatsapp",
        accountId: "personal",
        peer: {
          kind: "dm",
          id: "+15555550123"
        },
        guildId: "123456789012345678",
        teamId: "T12345"
      }
    },
    {
      agentId: "work",
      match: {
        channel: "whatsapp",
        accountId: "biz"
      }
    },
    {
      agentId: "main",
      match: {
        channel: "telegram"
      }
    }
  ]
}
ChampTypeObligatoirePar défautDescription
agentIdstringObligatoireID de l'agent cible (doit être dans agents.list)
match.channelstringObligatoireCanal correspondant
match.accountIdstring-ID de compte correspondant (* = n'importe quel compte ; omis = compte par défaut)
match.peerobject-Pair correspondant (pair)
match.peer.kindstring-Type de pair (dm | group | channel)
match.peer.idstring-ID du pair
match.guildIdstring-ID du serveur Discord
match.teamIdstring-ID de l'équipe Slack/Microsoft Teams

Ordre de correspondance déterministe :

  1. match.peer (le plus spécifique)
  2. match.guildId
  3. match.teamId
  4. match.accountId (exact, sans pair/guild/team)
  5. match.accountId: "*" (portée du canal, sans pair/guild/team)
  6. Agent par défaut (agents.list[].default, sinon premier élément de la liste, sinon "main")

Dans chaque couche de correspondance, le premier élément correspondant dans bindings gagne.

Configuration des outils

tools

Exécution d'outils et politiques de sécurité.

json5
{
  tools: {
    exec: {
      elevated: {
        enabled: false,
        allowFrom: {
          whatsapp: ["+15555550123"],
          telegram: ["tg:123456789"]
        }
      }
    },
    browser: {
      enabled: true
    },
    agentToAgent: {
      enabled: false,
      allow: ["main", "work"]
    }
  }
}
ChampTypeObligatoirePar défautDescription
exec.elevated.enabledbooleanfalseActiver bash élevé (! <cmd>)
exec.elevated.allowFromobject-Liste des autorisations élevées par canal
browser.enabledboolean-Activer l'outil du navigateur
agentToAgent.enabledboolean-Activer la messagerie d'agent à agent
agentToAgent.allowstring[]-Liste des IDs d'agents autorisés

Configuration de diffusion

broadcast

Envoie des messages à plusieurs canaux/agents.

json5
{
  broadcast: {
    strategy: "parallel",
    "+15555550123": ["main", "work"],
    "[email protected]": ["transcribe"],
    "strategy": "sequential"
  }
}
ChampTypeObligatoirePar défautDescription
strategystring-Stratégie de diffusion (parallel | sequential)
<peerId>string[]-Envoyer des messages à ces agents (clé dynamique)

Clés de diffusion

  • Format de clé : <peerId> (par exemple : +15555550123 ou "[email protected]")
  • Valeur : tableau d'IDs d'agents
  • Clé spéciale "strategy" : contrôle l'exécution parallèle vs séquentielle

Configuration de l'audio

audio

Configuration de l'audio et de la transcription.

json5
{
  audio: {
    transcription: {
      enabled: true,
      provider: "whisper",
      model: "base"
    }
  }
}

Détails des champs

Pour les champs de configuration de transcription complète, consultez TranscribeAudioSchema dans zod-schema.core.ts.

Configuration des messages

messages

Préfixes de messages, accusés de réception et comportement de la file d'attente.

json5
{
  messages: {
    responsePrefix: "🦞",
    ackReaction: "👀",
    ackReactionScope: "group-mentions",
    removeAckAfterReply: false,
    queue: {
      mode: "collect",
      debounceMs: 1000,
      cap: 20,
      drop: "summarize",
      byChannel: {
        whatsapp: "collect",
        telegram: "collect",
        discord: "collect",
        imessage: "collect",
        webchat: "collect"
      }
    },
    inbound: {
      debounceMs: 2000,
      byChannel: {
        whatsapp: 5000,
        slack: 1500,
        discord: 1500
      }
    },
    groupChat: {
      historyLimit: 50
    }
  }
}
ChampTypeObligatoirePar défautDescription
responsePrefixstring-Préfixe pour toutes les réponses sortantes (prend en charge les variables de modèle)
ackReactionstring-Emoji pour confirmer les messages entrants
ackReactionScopestring-Quand envoyer la confirmation (group-mentions | group-all | direct | all)
removeAckAfterReplybooleanfalseSupprimer la confirmation après l'envoi de la réponse
queue.modestring-Mode de file d'attente (steer | followup | collect | steer-backlog | queue | interrupt)
queue.debounceMsnumber-Anti-rebond de file d'attente (millisecondes)
queue.capnumber-Limite supérieure de la file d'attente
queue.dropstring-Stratégie de suppression (old | new | summarize)
queue.byChannelobject-Mode de file d'attente par canal
inbound.debounceMsnumber-Anti-rebond de messages entrants (millisecondes ; 0 désactive)
inbound.byChannelobject-Durée d'anti-rebond par canal
groupChat.historyLimitnumber-Limite de contexte d'historique de groupe (0 désactive)

Variables de modèle (pour responsePrefix) :

VariableDescriptionExemple
{model}Nom court du modèleclaude-opus-4-5, gpt-4
{modelFull}Identifiant complet du modèleanthropic/claude-opus-4-5
{provider}Nom du fournisseuranthropic, openai
{thinkingLevel}Niveau de raisonnement actuelhigh, low, off
{identity.name}Nom d'identité de l'agent(identique au mode "auto")

Chat personnel de WhatsApp

Les réponses de chat personnel utilisent [{identity.name}] par défaut, sinon [clawdbot], pour que les conversations du même nombre restent lisibles.

Configuration des commandes

commands

Configuration du traitement des commandes de chat.

json5
{
  commands: {
    native: "auto",
    text: true,
    bash: false,
    bashForegroundMs: 2000,
    config: false,
    debug: false,
    restart: false,
    useAccessGroups: true
  }
}
ChampTypeObligatoirePar défautDescription
nativestringautoCommandes natives (auto | true | false)
textbooleantrueAnalyser les commandes de barre oblique dans les messages de chat
bashbooleanfalseAutoriser ! (alias pour /bash)
bashForegroundMsnumber2000Fenêtre de premier plan de bash (millisecondes)
configbooleanfalseAutoriser /config (écrit sur le disque)
debugbooleanfalseAutoriser /debug (remplacements d'exécution uniquement)
restartbooleanfalseAutoriser /restart + outil de redémarrage du Gateway
useAccessGroupsbooleantrueAppliquer la liste d'autorisation/stratégies de groupes d'accès pour les commandes

commande bash

commands.bash: true active ! <cmd> pour exécuter des commandes shell de l'hôte (/bash <cmd> fonctionne également comme alias). Nécessite tools.elevated.enabled et l'expéditeur dans la liste d'autorisation.

Configuration de session

session

Persistance et comportement de la session.

json5
{
  session: {
    activation: {
      defaultMode: "auto",
      defaultDurationMs: 900000,
      keepAlive: true
    },
    compaction: {
      auto: true,
      threshold: 0.8,
      strategy: "summary"
    }
  }
}
ChampTypeObligatoirePar défautDescription
activation.defaultModestringautoMode d'activation par défaut (auto | always | manual)
activation.defaultDurationMsnumber-Durée d'activation par défaut (millisecondes)
activation.keepAliveboolean-Garder en vie
compaction.autobooleantrueCompactage automatique
compaction.thresholdnumber-Seuil de compactage (0-1)
compaction.strategystring-Stratégie de compactage

Compactage de session

Se compacte automatiquement lorsque le contexte déborde, puis échoue. Consultez CHANGELOG.md:122.

Configuration de Cron

cron

Planification des tâches programmées.

json5
{
  cron: {
    enabled: true,
    store: "~/.clawdbot/cron.json",
    maxConcurrentRuns: 5
  }
}
ChampTypeObligatoirePar défautDescription
enabledboolean-Activer le moteur Cron
storestring-Chemin du fichier de stockage Cron
maxConcurrentRunsnumber-Nombre maximal d'exécutions simultanées

Configuration des Hooks

hooks

Webhooks et transfert d'événements.

json5
{
  hooks: {
    enabled: true,
    path: "~/.clawdbot/hooks",
    token: "webhook-secret-token",
    maxBodyBytes: 1048576,
    presets: ["slack-alerts", "discord-notifications"],
    transformsDir: "~/.clawdbot/hook-transforms",
    mappings: [
      {
        pattern: "^agent:.*$",
        target: "https://hooks.example.com/agent-events",
        headers: {
          "Authorization": "Bearer ${WEBHOOK_AUTH}"
        }
      }
    ],
    gmail: {
      enabled: false,
      credentialsPath: "~/.clawdbot/gmail-credentials.json",
      subscriptionIds: ["subscription-1", "subscription-2"]
    },
    internal: {
      onMessage: "log-message",
      onToolCall: "log-tool-call",
      onError: "log-error"
    }
  }
}
ChampTypeObligatoirePar défautDescription
enabledboolean-Activer les Hooks
pathstring-Chemin du répertoire des Hooks
tokenstring-Jeton d'authentification Webhook
maxBodyBytesnumber-Taille maximale du corps de la requête (octets)
presetsstring[]-Liste des Hooks prédéfinis
transformsDirstring-Répertoire des scripts de transformation des Hooks
mappingsarray-Mappages de Hooks personnalisés
gmail.enabledboolean-Activer Gmail Pub/Sub
gmail.credentialsPathstring-Chemin des identifiants Gmail
gmail.subscriptionIdsstring[]-Liste des IDs d'abonnement Gmail
internal.onMessagestring-Hook interne de message
internal.onToolCallstring-Hook interne d'appel d'outil
internal.onErrorstring-Hook interne d'erreur

Configuration des canaux

channels

Configuration d'intégration de messages multicanal.

json5
{
  channels: {
    whatsapp: {
      enabled: true,
      botToken: "123456:ABC...",
      dmPolicy: "pairing",
      allowFrom: ["+15555550123"],
      groups: {
        "*": { requireMention: true },
        "-1001234567890": {
          allowFrom: ["@admin"],
          systemPrompt: "Keep answers brief.",
          topics: {
            "99": {
              requireMention: false,
              skills: ["search"],
              systemPrompt: "Stay on topic."
            }
          }
        }
      },
      sendReadReceipts: true,
      textChunkLimit: 4000,
      chunkMode: "length",
      mediaMaxMb: 50,
      historyLimit: 50,
      replyToMode: "first",
      accounts: {
        default: {},
        personal: {},
        biz: {
          authDir: "~/.clawdbot/credentials/whatsapp/biz"
        }
      }
    },
    telegram: {
      enabled: true,
      botToken: "123456:ABC...",
      dmPolicy: "pairing",
      allowFrom: ["tg:123456789"],
      groups: {
        "*": { requireMention: true }
      },
      customCommands: [
        { command: "backup", description: "Git backup" },
        { command: "generate", description: "Create an image" }
      ],
      historyLimit: 50,
      replyToMode: "first",
      linkPreview: true,
      streamMode: "partial",
      draftChunk: {
        minChars: 200,
        maxChars: 800,
        breakPreference: "paragraph"
      }
    },
    discord: {
      enabled: true,
      token: "your-bot-token",
      mediaMaxMb: 8,
      allowBots: false,
      actions: {
        reactions: true,
        messages: true,
        threads: true,
        pins: true
      },
      guilds: {
        "123456789012345678": {
          requireMention: false,
          users: ["987654321098765432"],
          channels: {
            general: { allow: true },
            help: {
              allow: true,
              requireMention: true,
              users: ["987654321098765432"]
            }
          }
        }
      },
      historyLimit: 20,
      dm: {
        enabled: true,
        policy: "pairing",
        allowFrom: ["1234567890", "username"],
        groupEnabled: false,
        groupChannels: ["clawd-dm"]
      }
    },
    slack: {
      enabled: true,
      botToken: "xoxb-...",
      appToken: "xapp-...",
      channels: {
        "#general": { allow: true, requireMention: true }
      },
      historyLimit: 50,
      allowBots: false,
      reactionNotifications: "own",
      slashCommand: {
        enabled: true,
        name: "clawd",
        sessionPrefix: "slack:slash",
        ephemeral: true
      }
    },
    signal: {
      reactionNotifications: "own",
      reactionAllowlist: ["+15551234567"],
      historyLimit: 50
    },
    imessage: {
      enabled: true,
      cliPath: "imsg",
      dbPath: "~/Library/Messages/chat.db",
      dmPolicy: "pairing",
      allowFrom: ["+15555550123"],
      historyLimit: 50,
      includeAttachments: false,
      mediaMaxMb: 16
    }
  }
}

Documentation spécifique au canal

Chaque canal a des options de configuration détaillées. Consultez :

Champs communs du canal :

  • enabled : Activer le canal
  • dmPolicy : Stratégie DM (pairing | allowlist | open | disabled)
  • allowFrom : Liste d'autorisation DM (les expéditeurs inconnus reçoivent un code de jumelage en mode pairing)
  • groupPolicy : Stratégie de groupe (open | disabled | allowlist)
  • historyLimit : Limite de contexte d'historique (0 désactive)

Configuration du Gateway

gateway

Serveur WebSocket du Gateway et authentification.

json5
{
  gateway: {
    port: 18789,
    mode: "local",
    bind: "loopback",
    controlUi: {
      enabled: true,
      basePath: "/",
      allowInsecureAuth: false,
      dangerouslyDisableDeviceAuth: false
    },
    auth: {
      mode: "token",
      token: "secret-gateway-token",
      password: "gateway-password",
      allowTailscale: false
    },
    trustedProxies: ["127.0.0.1", "10.0.0.0/8"],
    tailscale: {
      mode: "off",
      resetOnExit: false
    },
    remote: {
      url: "ws://gateway.example.com:18789",
      transport: "ssh",
      token: "remote-token",
      password: "remote-password",
      tlsFingerprint: "SHA256:...",
      sshTarget: "user@gateway-host",
      sshIdentity: "~/.ssh/id_ed25519"
    },
    reload: {
      mode: "hot",
      debounceMs: 1000
    },
    tls: {
      enabled: false,
      autoGenerate: true,
      certPath: "/path/to/cert.pem",
      keyPath: "/path/to/key.pem",
      caPath: "/path/to/ca.pem"
    },
    http: {
      endpoints: {
        chatCompletions: {
          enabled: true
        },
        responses: {
          enabled: true,
          maxBodyBytes: 10485760,
          files: {
            allowUrl: true,
            allowedMimes: ["text/*", "application/pdf"],
            maxBytes: 10485760,
            maxChars: 100000,
            maxRedirects: 10,
            timeoutMs: 30000,
            pdf: {
              maxPages: 50,
              maxPixels: 67108864,
              minTextChars: 0
            }
          },
          images: {
            allowUrl: true,
            allowedMimes: ["image/*"],
            maxBytes: 10485760,
            maxRedirects: 5,
            timeoutMs: 30000
          }
        }
      }
    },
    nodes: {
      browser: {
        mode: "auto",
        node: "macos-1"
      },
      allowCommands: [],
      denyCommands: ["rm -rf", ":(){ :|:& };:"]
    }
  }
}
ChampTypeObligatoirePar défautDescription
portnumber18789Port WebSocket du Gateway
modestringlocalMode du Gateway (local | remote)
bindstring-Adresse de liaison (auto | lan | loopback | custom | tailnet)
controlUi.enabledboolean-Activer l'interface utilisateur de contrôle
controlUi.basePathstring-Chemin de base de l'interface utilisateur
controlUi.allowInsecureAuthboolean-Autoriser l'authentification non sécurisée
auth.modestring-Mode d'authentification (token | password)
auth.tokenstring-Jeton d'authentification
auth.passwordstring-Mot de passe d'authentification
auth.allowTailscaleboolean-Autoriser l'authentification Tailscale
tailscale.modestringoffMode Tailscale (off | serve | funnel)
tailscale.resetOnExitboolean-Réinitialiser Serve/Funnel à la sortie
remote.urlstring-URL du Gateway distant
remote.transportstring-Transport distant (ssh | direct)
remote.tokenstring-Jeton distant
remote.passwordstring-Mot de passe distant
remote.tlsFingerprintstring-Empreinte TLS distante
remote.sshTargetstring-Cible SSH
remote.sshIdentitystring-Chemin du fichier d'identité SSH
reload.modestring-Mode de rechargement (off | restart | hot | hybrid)
reload.debounceMsnumber-Anti-rebond de rechargement (millisecondes)
tls.enabledboolean-Activer TLS
tls.autoGenerateboolean-Générer automatiquement les certificats
nodes.browser.modestring-Mode du nœud du navigateur (auto | manual | off)
nodes.allowCommandsstring[]-Commandes de nœud autorisées
nodes.denyCommandsstring[]-Commandes de nœud refusées

Restriction de liaison Tailscale

Lors de l'activation de Serve/Funnel, gateway.bind doit rester loopback (Clawdbot applique cette règle).

Configuration des compétences

skills

Plateforme de compétences et installation.

json5
{
  skills: {
    allowBundled: ["bird", "sherpa-onnx-tts"],
    load: {
      extraDirs: ["~/custom-skills"],
      watch: true,
      watchDebounceMs: 500
    },
    install: {
      preferBrew: false,
      nodeManager: "pnpm"
    },
    entries: {
      "search": {
        enabled: true,
        apiKey: "${SEARCH_API_KEY}",
        env: {
          "SEARCH_ENGINE": "google"
        },
        config: {
          "maxResults": 10
        }
      }
    }
  }
}
ChampTypeObligatoirePar défautDescription
allowBundledstring[]-Liste des compétences intégrées autorisées
load.extraDirsstring[]-Répertoires de compétences supplémentaires
load.watchboolean-Surveiller les changements de fichiers de compétences
load.watchDebounceMsnumber-Anti-rebond de surveillance (millisecondes)
install.preferBrewboolean-Préférer l'installation Homebrew
install.nodeManagerstring-Gestionnaire de nœuds (npm | pnpm | yarn | bun)
entries.<skillId>.enabledboolean-Activer la compétence
entries.<skillId>.apiKeystring-Clé API de la compétence
entries.<skillId>.envobject-Variables d'environnement de la compétence
entries.<skillId>.configobject-Configuration de la compétence

Configuration des plugins

plugins

Configuration du système de plugins.

json5
{
  plugins: {
    enabled: true,
    allow: ["whatsapp", "telegram", "discord"],
    deny: [],
    load: {
      paths: ["~/.clawdbot/plugins", "./custom-plugins"]
    },
    slots: {
      memory: "custom-memory-provider"
    }
  }
}
ChampTypeObligatoirePar défautDescription
enabledboolean-Activer le système de plugins
allowstring[]-Liste des plugins autorisés
denystring[]-Liste des plugins refusés
load.pathsstring[]-Chemins de chargement des plugins
slots.memorystring-Fournisseur de mémoire personnalisé

Inclusions de configuration ($include)

Utilisez la directive $include pour diviser la configuration en plusieurs fichiers.

json5
// ~/.clawdbot/clawdbot.json
{
  gateway: { port: 18789 },
  
  // Inclure un seul fichier (remplace la valeur de la clé d'inclusion)
  agents: { "$include": "./agents.json5" },
  
  // Inclure plusieurs fichiers (fusion profonde dans l'ordre)
  broadcast: { 
    "$include": [
      "./clients/mueller.json5",
      "./clients/schmidt.json5"
    ]
  }
}
json5
// ~/.clawdbot/agents.json5
{
  defaults: { sandbox: { mode: "all", scope: "session" } },
  list: [
    { id: "main", workspace: "~/clawd" }
  ]
}

Comportement de fusion :

  • Fichier unique : Remplace l'objet contenant $include
  • Tableau de fichiers : Fusionne profondément les fichiers dans l'ordre (les fichiers ultérieurs écrasent les précédents)
  • Clés sœurs : Fusionne les clés sœurs après inclusion (écrase les valeurs incluses)
  • Clés sœurs + tableau/type de base : Non pris en charge (le contenu inclus doit être un objet)

Résolution des chemins :

  • Chemins relatifs : Résolus par rapport au fichier inclus
  • Chemins absolus : Utilisés tels quels
  • Répertoire parent : Les références ../ fonctionnent comme prévu

Inclusions imbriquées : Les fichiers inclus peuvent contenir des directives $include (jusqu'à 10 niveaux de profondeur).

Remplacement des variables d'environnement

Vous pouvez faire référence directement aux variables d'environnement dans n'importe quelle valeur de chaîne de configuration en utilisant la syntaxe ${VAR_NAME}. Les variables sont remplacées lors du chargement de la configuration, avant la validation.

json5
{
  models: {
    providers: {
      "vercel-gateway": {
        apiKey: "${VERCEL_GATEWAY_API_KEY}"
      }
    }
  },
  gateway: {
    auth: {
      token: "${CLAWDBOT_GATEWAY_TOKEN}"
    }
  }
}

Règles :

  • Ne correspond qu'aux noms de variables d'environnement en majuscules : [A-Z_][A-Z0-9_]*
  • Les variables d'environnement manquantes ou vides lancent une erreur lors du chargement de la configuration
  • Utilisez $${VAR} pour échapper et produire le littéral ${VAR}
  • S'applique à $include (les fichiers inclus obtiennent également le remplacement)

Variables manquantes

Les variables d'environnement manquantes ou vides lanceront une erreur lors du chargement de la configuration.

Validation et diagnostic de la configuration

Lorsque la validation de la configuration échoue, utilisez clawdbot doctor pour voir le problème exact.

bash
## Diagnostiquer la configuration
clawdbot doctor

## Réparer automatiquement les problèmes (nécessite une confirmation manuelle)
clawdbot doctor --fix

## Réparer automatiquement (ignorer la confirmation)
clawdbot doctor --yes

Fonctions de diagnostic :

  • Détecter les clés de configuration inconnues
  • Valider les types de données
  • Détecter les champs obligatoires manquants
  • Appliquer les migrations de configuration
  • Détecter les stratégies DM non sécurisées
  • Valider la configuration des canaux

Chemins des fichiers de configuration

FichierCheminDescription
Configuration principale~/.clawdbot/clawdbot.jsonFichier de configuration principal
Variables d'environnement~/.clawdbot/.envVariables d'environnement globales
Environnement de l'espace de travail~/clawd/.envVariables d'environnement de l'espace de travail
Profils d'authentification<agentDir>/auth-profiles.jsonProfils d'authentification
Cache d'exécution<agentDir>/auth.jsonCache d'exécution de l'agent intégré
OAuth hérité~/.clawdbot/credentials/oauth.jsonImportation OAuth héritée
Stockage Cron~/.clawdbot/cron.jsonStockage des tâches Cron
Chemins des Hooks~/.clawdbot/hooksRépertoire des Hooks

Résumé de cette leçon

Ce tutoriel explique en détail le système complet de configuration de Clawdbot :

  • ✅ Structure du fichier de configuration et mécanisme de validation
  • ✅ Toutes les sections de configuration principales (authentification, agents, canaux, sessions, outils, Cron, Hooks, etc.)
  • ✅ Remplacement des variables d'environnement et priorité de configuration
  • ✅ Exemples courants de configuration et meilleures pratiques
  • ✅ Chemins des fichiers de configuration et emplacements de stockage

Aperçu de la prochaine leçon

Dans la prochaine leçon, nous apprendrons sur le Protocole d'API WebSocket du Gateway.

Vous apprendrez :

  • Handshake de connexion WebSocket et authentification
  • Format des trames de message (requête, réponse, événement)
  • Référence des méthodes principales et exemples d'appels
  • Système de permissions et gestion des rôles
  • Gestion des erreurs et stratégies de nouvelle tentative

Annexe : Référence du code source

Cliquez pour voir les emplacements du code source

Date de mise à jour : 2026-01-27

Section de configurationChemin du fichierNuméro de ligne
Schema principalsrc/config/zod-schema.ts1-556
Schema centralsrc/config/zod-schema.core.ts1-300
Schema des agentssrc/config/zod-schema.agents.ts1-54
Schema des canauxsrc/config/zod-schema.channels.ts1-11
Schema de sessionsrc/config/zod-schema.session.ts-
Schema des outilssrc/config/zod-schema.agent-runtime.ts-
Schema des Hookssrc/config/zod-schema.hooks.ts-
Schema des fournisseurssrc/config/zod-schema.providers.ts-
Documentation de configurationdocs/gateway/configuration.md-

Constantes clés :

  • Port par défaut : 18789 (gateway.server-startup-log.ts)
  • Espace de travail par défaut : ~/clawd
  • Liaison par défaut du Gateway : loopback (127.0.0.1)

Fonctions clés :

  • ClawdbotSchema : Définition du Schema de configuration principal
  • normalizeAllowFrom() : Normalise les valeurs de la liste d'autorisation
  • requireOpenAllowFrom() : Valide la liste d'autorisation en mode ouvert