Naar hoofdinhoud gaan

Documentation Index

Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt

Use this file to discover all available pages before exploring further.

Configuratiesleutels binnen het bereik van agents onder agents.*, multiAgent.*, session.*, messages.* en talk.*. Zie voor kanalen, tools, Gateway-runtime en andere top-level sleutels de Configuratiereferentie.

Standaardwaarden voor agents

agents.defaults.workspace

Standaard: ~/.openclaw/workspace.
{
  agents: { defaults: { workspace: "~/.openclaw/workspace" } },
}

agents.defaults.repoRoot

Optionele repositoryroot die wordt getoond in de Runtime-regel van de systeemprompt. Als deze niet is ingesteld, detecteert OpenClaw deze automatisch door vanaf de werkruimte omhoog te lopen.
{
  agents: { defaults: { repoRoot: "~/Projects/openclaw" } },
}

agents.defaults.skills

Optionele standaard-toestaanlijst voor Skills voor agents die agents.list[].skills niet instellen.
{
  agents: {
    defaults: { skills: ["github", "weather"] },
    list: [
      { id: "writer" }, // inherits github, weather
      { id: "docs", skills: ["docs-search"] }, // replaces defaults
      { id: "locked-down", skills: [] }, // no skills
    ],
  },
}
  • Laat agents.defaults.skills weg voor standaard onbeperkte Skills.
  • Laat agents.list[].skills weg om de standaardwaarden te erven.
  • Stel agents.list[].skills: [] in voor geen Skills.
  • Een niet-lege lijst agents.list[].skills is de definitieve set voor die agent; deze wordt niet samengevoegd met standaardwaarden.

agents.defaults.skipBootstrap

Schakelt automatische aanmaak van werkruimte-bootstrapbestanden uit (AGENTS.md, SOUL.md, TOOLS.md, IDENTITY.md, USER.md, HEARTBEAT.md, BOOTSTRAP.md).
{
  agents: { defaults: { skipBootstrap: true } },
}

agents.defaults.skipOptionalBootstrapFiles

Slaat de aanmaak van geselecteerde optionele werkruimtebestanden over terwijl vereiste bootstrapbestanden nog steeds worden geschreven. Geldige waarden: SOUL.md, USER.md, HEARTBEAT.md en IDENTITY.md.
{
  agents: {
    defaults: {
      skipOptionalBootstrapFiles: ["SOUL.md", "USER.md"],
    },
  },
}

agents.defaults.contextInjection

Bepaalt wanneer werkruimte-bootstrapbestanden in de systeemprompt worden geïnjecteerd. Standaard: "always".
  • "continuation-skip": veilige vervolgbeurten (na een voltooide assistentrespons) slaan herinjectie van werkruimte-bootstrap over, waardoor de promptgrootte afneemt. Heartbeat-runs en nieuwe pogingen na Compaction bouwen de context nog steeds opnieuw op.
  • "never": schakel injectie van werkruimte-bootstrap en contextbestanden bij elke beurt uit. Gebruik dit alleen voor agents die hun promptlevenscyclus volledig zelf beheren (aangepaste context-engines, native runtimes die hun eigen context bouwen, of gespecialiseerde workflows zonder bootstrap). Heartbeat- en Compaction-herstelbeurten slaan injectie ook over.
{
  agents: { defaults: { contextInjection: "continuation-skip" } },
}

agents.defaults.bootstrapMaxChars

Maximaal aantal tekens per werkruimte-bootstrapbestand vóór afkapping. Standaard: 12000.
{
  agents: { defaults: { bootstrapMaxChars: 12000 } },
}

agents.defaults.bootstrapTotalMaxChars

Maximaal totaal aantal tekens dat over alle werkruimte-bootstrapbestanden wordt geïnjecteerd. Standaard: 60000.
{
  agents: { defaults: { bootstrapTotalMaxChars: 60000 } },
}

agents.defaults.bootstrapPromptTruncationWarning

Bepaalt de voor de agent zichtbare systeempromptmelding wanneer bootstrapcontext wordt afgekapt. Standaard: "once".
  • "off": injecteer nooit tekst voor een afkappingsmelding in de systeemprompt.
  • "once": injecteer eenmaal per unieke afkappingssignatuur een beknopte melding (aanbevolen).
  • "always": injecteer bij elke run een beknopte melding wanneer er afkapping bestaat.
Gedetailleerde ruwe/geïnjecteerde aantallen en configuratievelden voor afstemming blijven in diagnoses zoals context-/statusrapporten en logs; routinematige WebChat-gebruikers-/runtimecontext krijgt alleen de beknopte herstelmelding.
{
  agents: { defaults: { bootstrapPromptTruncationWarning: "once" } }, // off | once | always
}

Eigendomsoverzicht van contextbudgetten

OpenClaw heeft meerdere prompt-/contextbudgetten met hoog volume, en deze zijn bewust per subsysteem opgesplitst in plaats van allemaal via één generieke knop te lopen.
  • agents.defaults.bootstrapMaxChars / agents.defaults.bootstrapTotalMaxChars: normale injectie van werkruimte-bootstrap.
  • agents.defaults.startupContext.*: eenmalige prelude voor reset-/opstartmodelruns, inclusief recente dagelijkse memory/*.md-bestanden. Kale chatopdrachten /new en /reset worden bevestigd zonder het model aan te roepen.
  • skills.limits.*: de compacte Skills-lijst die in de systeemprompt wordt geïnjecteerd.
  • agents.defaults.contextLimits.*: begrensde runtime-uittreksels en geïnjecteerde blokken die eigendom zijn van de runtime.
  • memory.qmd.limits.*: snippet voor geïndexeerd zoeken in geheugen en injectiegrootte.
Gebruik de bijpassende override per agent alleen wanneer één agent een ander budget nodig heeft:
  • agents.list[].skillsLimits.maxSkillsPromptChars
  • agents.list[].contextLimits.*

agents.defaults.startupContext

Bepaalt de opstartprelude voor de eerste beurt die bij reset-/opstartmodelruns wordt geïnjecteerd. Kale chatopdrachten /new en /reset bevestigen de reset zonder het model aan te roepen, dus zij laden deze prelude niet.
{
  agents: {
    defaults: {
      startupContext: {
        enabled: true,
        applyOn: ["new", "reset"],
        dailyMemoryDays: 2,
        maxFileBytes: 16384,
        maxFileChars: 1200,
        maxTotalChars: 2800,
      },
    },
  },
}

agents.defaults.contextLimits

Gedeelde standaardwaarden voor begrensde runtimecontextoppervlakken.
{
  agents: {
    defaults: {
      contextLimits: {
        memoryGetMaxChars: 12000,
        memoryGetDefaultLines: 120,
        toolResultMaxChars: 16000,
        postCompactionMaxChars: 1800,
      },
    },
  },
}
  • memoryGetMaxChars: standaardlimiet voor memory_get-uittreksels voordat afkappingsmetadata en vervolgmelding worden toegevoegd.
  • memoryGetDefaultLines: standaardregelvenster voor memory_get wanneer lines wordt weggelaten.
  • toolResultMaxChars: limiet voor live toolresultaten die wordt gebruikt voor persistente resultaten en overloopherstel.
  • postCompactionMaxChars: limiet voor AGENTS.md-uittreksels die wordt gebruikt tijdens vernieuwingsinjectie na Compaction.

agents.list[].contextLimits

Override per agent voor de gedeelde contextLimits-knoppen. Weggelaten velden erven van agents.defaults.contextLimits.
{
  agents: {
    defaults: {
      contextLimits: {
        memoryGetMaxChars: 12000,
        toolResultMaxChars: 16000,
      },
    },
    list: [
      {
        id: "tiny-local",
        contextLimits: {
          memoryGetMaxChars: 6000,
          toolResultMaxChars: 8000,
        },
      },
    ],
  },
}

skills.limits.maxSkillsPromptChars

Globale limiet voor de compacte Skills-lijst die in de systeemprompt wordt geïnjecteerd. Dit heeft geen invloed op het op aanvraag lezen van SKILL.md-bestanden.
{
  skills: {
    limits: {
      maxSkillsPromptChars: 18000,
    },
  },
}

agents.list[].skillsLimits.maxSkillsPromptChars

Override per agent voor het Skills-promptbudget.
{
  agents: {
    list: [
      {
        id: "tiny-local",
        skillsLimits: {
          maxSkillsPromptChars: 6000,
        },
      },
    ],
  },
}

agents.defaults.imageMaxDimensionPx

Maximale pixelgrootte voor de langste zijde van een afbeelding in transcript-/toolafbeeldingsblokken vóór provideraanroepen. Standaard: 1200. Lagere waarden verminderen meestal het gebruik van vision-tokens en de grootte van aanvraagpayloads bij runs met veel screenshots. Hogere waarden behouden meer visueel detail.
{
  agents: { defaults: { imageMaxDimensionPx: 1200 } },
}

agents.defaults.userTimezone

Tijdzone voor systeempromptcontext (niet voor berichttijdstempels). Valt terug op de tijdzone van de host.
{
  agents: { defaults: { userTimezone: "America/Chicago" } },
}

agents.defaults.timeFormat

Tijdnotatie in de systeemprompt. Standaard: auto (OS-voorkeur).
{
  agents: { defaults: { timeFormat: "auto" } }, // auto | 12 | 24
}

agents.defaults.model

{
  agents: {
    defaults: {
      models: {
        "anthropic/claude-opus-4-6": { alias: "opus" },
        "minimax/MiniMax-M2.7": { alias: "minimax" },
      },
      model: {
        primary: "anthropic/claude-opus-4-6",
        fallbacks: ["minimax/MiniMax-M2.7"],
      },
      imageModel: {
        primary: "openrouter/qwen/qwen-2.5-vl-72b-instruct:free",
        fallbacks: ["openrouter/google/gemini-2.0-flash-vision:free"],
      },
      imageGenerationModel: {
        primary: "openai/gpt-image-2",
        fallbacks: ["google/gemini-3.1-flash-image-preview"],
      },
      videoGenerationModel: {
        primary: "qwen/wan2.6-t2v",
        fallbacks: ["qwen/wan2.6-i2v"],
      },
      pdfModel: {
        primary: "anthropic/claude-opus-4-6",
        fallbacks: ["openai/gpt-5.4-mini"],
      },
      params: { cacheRetention: "long" }, // global default provider params
      pdfMaxBytesMb: 10,
      pdfMaxPages: 20,
      thinkingDefault: "low",
      verboseDefault: "off",
      toolProgressDetail: "explain",
      reasoningDefault: "off",
      elevatedDefault: "on",
      timeoutSeconds: 600,
      mediaMaxMb: 5,
      contextTokens: 200000,
      maxConcurrent: 3,
    },
  },
}
  • model: accepteert een string ("provider/model") of een object ({ primary, fallbacks }).
    • Stringvorm stelt alleen het primaire model in.
    • Objectvorm stelt het primaire model plus geordende failovermodellen in.
  • imageModel: accepteert een string ("provider/model") of een object ({ primary, fallbacks }).
    • Gebruikt door het toolpad image als configuratie voor het vision-model.
    • Wordt ook gebruikt als fallback-routering wanneer het geselecteerde/standaardmodel geen afbeeldingsinvoer kan accepteren.
    • Geef de voorkeur aan expliciete provider/model-refs. Kale ID’s worden voor compatibiliteit geaccepteerd; als een kale ID uniek overeenkomt met een geconfigureerde image-capable entry in models.providers.*.models, kwalificeert OpenClaw deze voor die provider. Ambigue geconfigureerde overeenkomsten vereisen een expliciet providerprefix.
  • imageGenerationModel: accepteert een string ("provider/model") of een object ({ primary, fallbacks }).
    • Gebruikt door de gedeelde mogelijkheid voor afbeeldingsgeneratie en elk toekomstig tool-/plugin-oppervlak dat afbeeldingen genereert.
    • Typische waarden: google/gemini-3.1-flash-image-preview voor native Gemini-afbeeldingsgeneratie, fal/fal-ai/flux/dev voor fal, openai/gpt-image-2 voor OpenAI Images, of openai/gpt-image-1.5 voor OpenAI PNG-/WebP-uitvoer met transparante achtergrond.
    • Als je rechtstreeks een provider/model selecteert, configureer dan ook de bijbehorende provider-authenticatie (bijvoorbeeld GEMINI_API_KEY of GOOGLE_API_KEY voor google/*, OPENAI_API_KEY of OpenAI Codex OAuth voor openai/gpt-image-2 / openai/gpt-image-1.5, FAL_KEY voor fal/*).
    • Als dit wordt weggelaten, kan image_generate nog steeds een door authenticatie ondersteunde providerstandaard afleiden. Het probeert eerst de huidige standaardprovider en daarna de resterende geregistreerde providers voor afbeeldingsgeneratie in volgorde van provider-id.
  • musicGenerationModel: accepteert een string ("provider/model") of een object ({ primary, fallbacks }).
    • Gebruikt door de gedeelde mogelijkheid voor muziekgeneratie en de ingebouwde tool music_generate.
    • Typische waarden: google/lyria-3-clip-preview, google/lyria-3-pro-preview, of minimax/music-2.6.
    • Als dit wordt weggelaten, kan music_generate nog steeds een door authenticatie ondersteunde providerstandaard afleiden. Het probeert eerst de huidige standaardprovider en daarna de resterende geregistreerde providers voor muziekgeneratie in volgorde van provider-id.
    • Als je rechtstreeks een provider/model selecteert, configureer dan ook de bijbehorende provider-authenticatie/API-sleutel.
  • videoGenerationModel: accepteert een string ("provider/model") of een object ({ primary, fallbacks }).
    • Gebruikt door de gedeelde mogelijkheid voor videogeneratie en de ingebouwde tool video_generate.
    • Typische waarden: qwen/wan2.6-t2v, qwen/wan2.6-i2v, qwen/wan2.6-r2v, qwen/wan2.6-r2v-flash, of qwen/wan2.7-r2v.
    • Als dit wordt weggelaten, kan video_generate nog steeds een door authenticatie ondersteunde providerstandaard afleiden. Het probeert eerst de huidige standaardprovider en daarna de resterende geregistreerde providers voor videogeneratie in volgorde van provider-id.
    • Als je rechtstreeks een provider/model selecteert, configureer dan ook de bijbehorende provider-authenticatie/API-sleutel.
    • De gebundelde Qwen-provider voor videogeneratie ondersteunt maximaal 1 uitvoervideo, 1 invoerafbeelding, 4 invoervideo’s, 10 seconden duur, en provider-level opties size, aspectRatio, resolution, audio en watermark.
  • pdfModel: accepteert een string ("provider/model") of een object ({ primary, fallbacks }).
    • Gebruikt door de tool pdf voor modelroutering.
    • Als dit wordt weggelaten, valt de PDF-tool terug op imageModel en daarna op het opgeloste sessie-/standaardmodel.
  • pdfMaxBytesMb: standaardlimiet voor PDF-grootte voor de tool pdf wanneer maxBytesMb niet tijdens de aanroep wordt doorgegeven.
  • pdfMaxPages: standaard maximumaantal pagina’s dat wordt meegenomen door de extraction fallback mode in de tool pdf.
  • verboseDefault: standaard verbose-niveau voor agenten. Waarden: "off", "on", "full". Standaard: "off".
  • toolProgressDetail: detailmodus voor /verbose-toolsamenvattingen en progress-draft tool-regels. Waarden: "explain" (standaard, compacte menselijke labels) of "raw" (voeg raw command/detail toe wanneer beschikbaar). Per-agent agents.list[].toolProgressDetail overschrijft deze standaard.
  • reasoningDefault: standaard zichtbaarheid van redenering voor agenten. Waarden: "off", "on", "stream". Per-agent agents.list[].reasoningDefault overschrijft deze standaard. Geconfigureerde reasoning-standaarden worden alleen toegepast voor eigenaren, geautoriseerde afzenders of operator-admin Gateway-contexten wanneer er geen reasoning-override per bericht of sessie is ingesteld.
  • elevatedDefault: standaardniveau voor verhoogde uitvoer voor agenten. Waarden: "off", "on", "ask", "full". Standaard: "on".
  • model.primary: formaat provider/model (bijv. openai/gpt-5.5 voor OpenAI API-sleutel- of Codex OAuth-toegang). Als je de provider weglaat, probeert OpenClaw eerst een alias, daarna een unieke overeenkomst met een geconfigureerde provider voor precies dat model-id, en valt pas daarna terug op de geconfigureerde standaardprovider (verouderd compatibiliteitsgedrag, dus geef de voorkeur aan expliciete provider/model). Als die provider het geconfigureerde standaardmodel niet meer aanbiedt, valt OpenClaw terug op de eerste geconfigureerde provider/model in plaats van een verouderde standaard van een verwijderde provider te tonen.
  • models: de geconfigureerde modelcatalogus en allowlist voor /model. Elke entry kan alias (snelkoppeling) en params bevatten (providerspecifiek, bijvoorbeeld temperature, maxTokens, cacheRetention, context1m, responsesServerCompaction, responsesCompactThreshold, chat_template_kwargs, extra_body/extraBody).
    • Gebruik entries met providerbereik zoals "openai-codex/*": {} of "vllm/*": {} om alle ontdekte modellen voor geselecteerde providers te tonen zonder elk model-id handmatig te vermelden.
    • Veilige bewerkingen: gebruik openclaw config set agents.defaults.models '<json>' --strict-json --merge om entries toe te voegen. config set weigert vervangingen die bestaande allowlist-entries zouden verwijderen, tenzij je --replace doorgeeft.
    • Provider-scoped configure-/onboarding-flows voegen geselecteerde providermodellen samen in deze map en behouden niet-gerelateerde providers die al zijn geconfigureerd.
    • Voor directe OpenAI Responses-modellen wordt serverside Compaction automatisch ingeschakeld. Gebruik params.responsesServerCompaction: false om het injecteren van context_management te stoppen, of params.responsesCompactThreshold om de drempel te overschrijven. Zie OpenAI serverside Compaction.
  • params: globale standaardproviderparameters die op alle modellen worden toegepast. Ingesteld op agents.defaults.params (bijv. { cacheRetention: "long" }).
  • Mergeprioriteit van params (configuratie): agents.defaults.params (globale basis) wordt overschreven door agents.defaults.models["provider/model"].params (per model), daarna overschrijft agents.list[].params (overeenkomend agent-id) per sleutel. Zie Promptcaching voor details.
  • params.extra_body/params.extraBody: geavanceerde pass-through JSON die wordt samengevoegd in api: "openai-completions"-request bodies voor OpenAI-compatibele proxies. Als dit botst met gegenereerde requestsleutels, wint de extra body; niet-native completions-routes verwijderen daarna nog steeds OpenAI-only store.
  • params.chat_template_kwargs: vLLM/OpenAI-compatibele chat-template-argumenten die worden samengevoegd in top-level api: "openai-completions"-request bodies. Voor vllm/nemotron-3-* met denken uit verzendt de gebundelde vLLM-plugin automatisch enable_thinking: false en force_nonempty_content: true; expliciete chat_template_kwargs overschrijven gegenereerde standaarden, en extra_body.chat_template_kwargs heeft nog steeds de laatste prioriteit. Stel voor Qwen thinking-controls params.qwenThinkingFormat in op "chat-template" of "top-level" op die model-entry.
  • compat.thinkingFormat: OpenAI-compatibele thinking-payloadstijl. Gebruik "qwen" voor Qwen-style top-level enable_thinking, of "qwen-chat-template" voor chat_template_kwargs.enable_thinking op Qwen-family backends die request-level chat-template kwargs ondersteunen, zoals vLLM. OpenClaw mappt uitgeschakeld denken naar false en ingeschakeld denken naar true.
  • compat.supportedReasoningEfforts: OpenAI-compatibele lijst met reasoning-efforts per model. Neem "xhigh" op voor custom endpoints die dit echt accepteren; OpenClaw toont dan /think xhigh in commandomenu’s, Gateway-sessierijen, session patch-validatie, agent-CLI-validatie en llm-task-validatie voor die geconfigureerde provider/model. Gebruik compat.reasoningEffortMap wanneer de backend een providerspecifieke waarde voor een canoniek niveau verwacht.
  • params.preserveThinking: Z.AI-only opt-in voor behouden denken. Wanneer dit is ingeschakeld en denken aan staat, verzendt OpenClaw thinking.clear_thinking: false en speelt eerdere reasoning_content opnieuw af; zie Z.AI-denken en behouden denken.
  • localService: optionele processmanager op providerniveau voor lokale/self-hosted modelservers. Wanneer het geselecteerde model bij die provider hoort, controleert OpenClaw healthUrl (of baseUrl + "/models"), start command met args als het endpoint niet beschikbaar is, wacht maximaal readyTimeoutMs en verzendt daarna de modelrequest. command moet een absoluut pad zijn. idleStopMs: 0 houdt het proces actief totdat OpenClaw afsluit; een positieve waarde stopt het door OpenClaw gestarte proces na dat aantal inactieve milliseconden. Zie Lokale modelservices.
  • Runtimebeleid hoort bij providers of modellen, niet bij agents.defaults. Gebruik models.providers.<provider>.agentRuntime voor providerbrede regels of agents.defaults.models["provider/model"].agentRuntime / agents.list[].models["provider/model"].agentRuntime voor modelspecifieke regels. OpenAI-agentmodellen op de officiële OpenAI-provider selecteren standaard Codex.
  • Config-writers die deze velden wijzigen (bijvoorbeeld /models set, /models set-image en fallback-add/remove-commando’s) slaan de canonieke objectvorm op en behouden bestaande fallbacklijsten waar mogelijk.
  • maxConcurrent: maximaal aantal parallelle agentruns over sessies heen (elke sessie blijft geserialiseerd). Standaard: 4.

Runtimebeleid

{
  models: {
    providers: {
      openai: {
        agentRuntime: { id: "codex" },
      },
    },
  },
  agents: {
    defaults: {
      model: "openai/gpt-5.5",
      models: {
        "anthropic/claude-opus-4-7": {
          agentRuntime: { id: "claude-cli" },
        },
      },
    },
  },
}
  • id: "auto", "pi", een geregistreerde plugin harness-id, of een ondersteunde CLI-backendalias. De gebundelde Codex-plugin registreert codex; de gebundelde Anthropic-plugin biedt de CLI-backend claude-cli.
  • id: "auto" laat geregistreerde plugin harnesses ondersteunde turns claimen en gebruikt PI wanneer geen harness overeenkomt. Een expliciete plugin-runtime zoals id: "codex" vereist die harness en faalt gesloten als deze niet beschikbaar is of faalt.
  • Whole-agent runtime-sleutels zijn legacy. agents.defaults.agentRuntime, agents.list[].agentRuntime, sessie-runtimepins en OPENCLAW_AGENT_RUNTIME worden genegeerd door runtime-selectie. Voer openclaw doctor --fix uit om verouderde waarden te verwijderen.
  • OpenAI-agentmodellen gebruiken standaard de Codex-harness; provider/model agentRuntime.id: "codex" blijft geldig wanneer je dit expliciet wilt maken.
  • Voor Claude CLI-deployments geef je de voorkeur aan model: "anthropic/claude-opus-4-7" plus model-scoped agentRuntime.id: "claude-cli". Legacy claude-cli/claude-opus-4-7-modelrefs blijven werken voor compatibiliteit, maar nieuwe configuratie moet provider/model-selectie canoniek houden en de execution-backend in provider/model-runtimebeleid plaatsen.
  • Dit regelt alleen de uitvoering van tekst-agent-turns. Mediageneratie, vision, PDF, muziek, video en TTS blijven hun provider/model-instellingen gebruiken.
Ingebouwde alias-snelkoppelingen (alleen van toepassing wanneer het model in agents.defaults.models staat):
AliasModel
opusanthropic/claude-opus-4-6
sonnetanthropic/claude-sonnet-4-6
gptopenai/gpt-5.5
gpt-miniopenai/gpt-5.4-mini
gpt-nanoopenai/gpt-5.4-nano
geminigoogle/gemini-3.1-pro-preview
gemini-flashgoogle/gemini-3-flash-preview
gemini-flash-litegoogle/gemini-3.1-flash-lite-preview
Je geconfigureerde aliassen hebben altijd voorrang op standaardwaarden. Z.AI GLM-4.x-modellen schakelen automatisch de denkmodus in, tenzij je --thinking off instelt of zelf agents.defaults.models["zai/<model>"].params.thinking definieert. Z.AI-modellen schakelen standaard tool_stream in voor het streamen van tool-calls. Stel agents.defaults.models["zai/<model>"].params.tool_stream in op false om dit uit te schakelen. Anthropic Claude 4.6-modellen gebruiken standaard adaptive denken wanneer geen expliciet denkniveau is ingesteld.

agents.defaults.cliBackends

Optionele CLI-backends voor tekst-only fallback-runs (geen tool-calls). Handig als back-up wanneer API-providers falen.
{
  agents: {
    defaults: {
      cliBackends: {
        "codex-cli": {
          command: "/opt/homebrew/bin/codex",
        },
        "my-cli": {
          command: "my-cli",
          args: ["--json"],
          output: "json",
          modelArg: "--model",
          sessionArg: "--session",
          sessionMode: "existing",
          systemPromptArg: "--system",
          // Or use systemPromptFileArg when the CLI accepts a prompt file flag.
          systemPromptWhen: "first",
          imageArg: "--image",
          imageMode: "repeat",
        },
      },
    },
  },
}
  • CLI-backends zijn tekstgericht; tools zijn altijd uitgeschakeld.
  • Sessies worden ondersteund wanneer sessionArg is ingesteld.
  • Doorvoer van afbeeldingen wordt ondersteund wanneer imageArg bestandspaden accepteert.
  • reseedFromRawTranscriptWhenUncompacted: true laat een backend veilig ongeldig gemaakte sessies herstellen vanuit een begrensde ruwe OpenClaw-transcriptstaart voordat de eerste Compaction-samenvatting bestaat. Wijzigingen in auth-profiel of credential-epoch worden nog steeds nooit opnieuw met raw-reseed gevuld.

agents.defaults.systemPromptOverride

Vervang de volledige door OpenClaw samengestelde systeemprompt door een vaste string. Stel dit in op standaardniveau (agents.defaults.systemPromptOverride) of per agent (agents.list[].systemPromptOverride). Waarden per agent hebben voorrang; een lege waarde of een waarde met alleen witruimte wordt genegeerd. Handig voor gecontroleerde prompt-experimenten.
{
  agents: {
    defaults: {
      systemPromptOverride: "You are a helpful assistant.",
    },
  },
}

agents.defaults.promptOverlays

Provider-onafhankelijke prompt-overlays toegepast per modelfamilie. Model-id’s uit de GPT-5-familie ontvangen het gedeelde gedragscontract over providers heen; personality regelt alleen de vriendelijke interactiestijllaag.
{
  agents: {
    defaults: {
      promptOverlays: {
        gpt5: {
          personality: "friendly", // friendly | on | off
        },
      },
    },
  },
}
  • "friendly" (standaard) en "on" schakelen de vriendelijke interactiestijllaag in.
  • "off" schakelt alleen de vriendelijke laag uit; het getagde GPT-5-gedragscontract blijft ingeschakeld.
  • Verouderde plugins.entries.openai.config.personality wordt nog steeds gelezen wanneer deze gedeelde instelling niet is ingesteld.

agents.defaults.heartbeat

Periodieke Heartbeat-runs.
{
  agents: {
    defaults: {
      heartbeat: {
        every: "30m", // 0m disables
        model: "openai/gpt-5.4-mini",
        includeReasoning: false,
        includeSystemPromptSection: true, // default: true; false omits the Heartbeat section from the system prompt
        lightContext: false, // default: false; true keeps only HEARTBEAT.md from workspace bootstrap files
        isolatedSession: false, // default: false; true runs each heartbeat in a fresh session (no conversation history)
        skipWhenBusy: false, // default: false; true also waits for subagent/nested lanes
        session: "main",
        to: "+15555550123",
        directPolicy: "allow", // allow (default) | block
        target: "none", // default: none | options: last | whatsapp | telegram | discord | ...
        prompt: "Read HEARTBEAT.md if it exists...",
        ackMaxChars: 300,
        suppressToolErrorWarnings: false,
        timeoutSeconds: 45,
      },
    },
  },
}
  • every: duurstring (ms/s/m/h). Standaard: 30m (API-key-auth) of 1h (OAuth-auth). Stel in op 0m om uit te schakelen.
  • includeSystemPromptSection: wanneer false, laat de Heartbeat-sectie weg uit de systeemprompt en slaat injectie van HEARTBEAT.md in de bootstrapcontext over. Standaard: true.
  • suppressToolErrorWarnings: wanneer true, onderdrukt tool-foutwaarschuwingspayloads tijdens Heartbeat-runs.
  • timeoutSeconds: maximale tijd in seconden die is toegestaan voor een Heartbeat-agentbeurt voordat die wordt afgebroken. Laat niet ingesteld om agents.defaults.timeoutSeconds te gebruiken.
  • directPolicy: beleid voor directe/DM-bezorging. allow (standaard) staat bezorging naar een direct doel toe. block onderdrukt bezorging naar een direct doel en geeft reason=dm-blocked uit.
  • lightContext: wanneer true, gebruiken Heartbeat-runs lichte bootstrapcontext en behouden ze alleen HEARTBEAT.md uit workspace-bootstrapbestanden.
  • isolatedSession: wanneer true, draait elke Heartbeat in een nieuwe sessie zonder eerdere gespreksgeschiedenis. Hetzelfde isolatiepatroon als cron sessionTarget: "isolated". Verlaagt de tokenkosten per Heartbeat van ~100K naar ~2-5K tokens.
  • skipWhenBusy: wanneer true, stellen Heartbeat-runs uit bij extra bezette lanes: subagent- of genest commandowerk. Cron-lanes stellen Heartbeats altijd uit, zelfs zonder deze flag.
  • Per agent: stel agents.list[].heartbeat in. Wanneer een agent heartbeat definieert, draaien alleen die agents Heartbeats.
  • Heartbeats draaien volledige agentbeurten — kortere intervallen verbruiken meer tokens.

agents.defaults.compaction

{
  agents: {
    defaults: {
      compaction: {
        mode: "safeguard", // default | safeguard
        provider: "my-provider", // id of a registered compaction provider plugin (optional)
        timeoutSeconds: 900,
        reserveTokensFloor: 24000,
        keepRecentTokens: 50000,
        identifierPolicy: "strict", // strict | off | custom
        identifierInstructions: "Preserve deployment IDs, ticket IDs, and host:port pairs exactly.", // used when identifierPolicy=custom
        qualityGuard: { enabled: true, maxRetries: 1 },
        midTurnPrecheck: { enabled: false }, // optional Pi tool-loop pressure check
        postCompactionSections: ["Session Startup", "Red Lines"], // [] disables reinjection
        model: "openrouter/anthropic/claude-sonnet-4-6", // optional compaction-only model override
        truncateAfterCompaction: true, // rotate to a smaller successor JSONL after compaction
        maxActiveTranscriptBytes: "20mb", // optional preflight local compaction trigger
        notifyUser: true, // send brief notices when compaction starts and completes (default: false)
        memoryFlush: {
          enabled: true,
          model: "ollama/qwen3:8b", // optional memory-flush-only model override
          softThresholdTokens: 6000,
          systemPrompt: "Session nearing compaction. Store durable memories now.",
          prompt: "Write any lasting notes to memory/YYYY-MM-DD.md; reply with the exact silent token NO_REPLY if nothing to store.",
        },
      },
    },
  },
}
  • mode: default of safeguard (gechunkte samenvatting voor lange geschiedenissen). Zie Compaction.
  • provider: id van een geregistreerde Compaction-provider-plugin. Wanneer ingesteld, wordt de summarize() van de provider aangeroepen in plaats van ingebouwde LLM-samenvatting. Valt terug op ingebouwd bij een fout. Het instellen van een provider forceert mode: "safeguard". Zie Compaction.
  • timeoutSeconds: maximum aantal seconden dat is toegestaan voor één Compaction-bewerking voordat OpenClaw deze afbreekt. Standaard: 900.
  • keepRecentTokens: Pi-cutpointbudget om de meest recente transcriptstaart letterlijk te behouden. Handmatige /compact respecteert dit wanneer het expliciet is ingesteld; anders is handmatige Compaction een hard checkpoint.
  • identifierPolicy: strict (standaard), off of custom. strict voegt ingebouwde richtlijnen voor behoud van ondoorzichtige identifiers toe tijdens Compaction-samenvatting.
  • identifierInstructions: optionele aangepaste tekst voor behoud van identifiers, gebruikt wanneer identifierPolicy=custom.
  • qualityGuard: controles voor opnieuw proberen bij malformed output voor safeguard-samenvattingen. Standaard ingeschakeld in safeguard-modus; stel enabled: false in om de audit over te slaan.
  • midTurnPrecheck: optionele Pi tool-loop-drukcontrole. Wanneer enabled: true, controleert OpenClaw contextdruk nadat tool-resultaten zijn toegevoegd en vóór de volgende modelaanroep. Als de context niet meer past, breekt het de huidige poging af voordat de prompt wordt ingediend en hergebruikt het het bestaande precheck-herstelpad om tool-resultaten af te kappen of te compacten en opnieuw te proberen. Werkt met zowel default- als safeguard-Compaction-modi. Standaard: uitgeschakeld.
  • postCompactionSections: optionele AGENTS.md H2/H3-sectienamen om na Compaction opnieuw te injecteren. Standaard ["Session Startup", "Red Lines"]; stel [] in om herinjectie uit te schakelen. Wanneer niet ingesteld of expliciet ingesteld op dat standaardpaar, worden oudere koppen Every Session/Safety ook geaccepteerd als legacy fallback.
  • model: optionele provider/model-id-override alleen voor Compaction-samenvatting. Gebruik dit wanneer de hoofdsessie één model moet behouden, maar Compaction-samenvattingen op een ander model moeten draaien; wanneer niet ingesteld, gebruikt Compaction het primaire model van de sessie.
  • maxActiveTranscriptBytes: optionele byte-drempel (number of strings zoals "20mb") die normale lokale Compaction activeert vóór een run wanneer de actieve JSONL boven de drempel groeit. Vereist truncateAfterCompaction zodat geslaagde Compaction kan roteren naar een kleiner opvolgend transcript. Uitgeschakeld wanneer niet ingesteld of 0.
  • notifyUser: wanneer true, stuurt korte meldingen naar de gebruiker wanneer Compaction start en wanneer deze voltooid is (bijvoorbeeld “Compacting context…” en “Compaction complete”). Standaard uitgeschakeld om Compaction stil te houden.
  • memoryFlush: stille agentic beurt vóór automatische Compaction om duurzame herinneringen op te slaan. Stel model in op een exacte provider/model zoals ollama/qwen3:8b wanneer deze housekeepingbeurt op een lokaal model moet blijven; de override erft de fallback-keten van de actieve sessie niet. Overgeslagen wanneer de workspace alleen-lezen is.

agents.defaults.contextPruning

Snoeit oude tool-resultaten uit in-memory context voordat naar de LLM wordt verzonden. Wijzigt de sessiegeschiedenis op schijf niet.
{
  agents: {
    defaults: {
      contextPruning: {
        mode: "cache-ttl", // off | cache-ttl
        ttl: "1h", // duration (ms/s/m/h), default unit: minutes
        keepLastAssistants: 3,
        softTrimRatio: 0.3,
        hardClearRatio: 0.5,
        minPrunableToolChars: 50000,
        softTrim: { maxChars: 4000, headChars: 1500, tailChars: 1500 },
        hardClear: { enabled: true, placeholder: "[Old tool result content cleared]" },
        tools: { deny: ["browser", "canvas"] },
      },
    },
  },
}
  • mode: "cache-ttl" schakelt snoeipasses in.
  • ttl regelt hoe vaak snoeien opnieuw kan draaien (na de laatste cache-aanraking).
  • Snoeien trimt eerst te grote tool-resultaten zacht en wist daarna oudere tool-resultaten hard indien nodig.
Zacht trimmen behoudt begin + einde en voegt ... in het midden in.Hard wissen vervangt het volledige tool-resultaat door de placeholder.Opmerkingen:
  • Afbeeldingsblokken worden nooit getrimd/gewist.
  • Ratio’s zijn gebaseerd op tekens (bij benadering), niet op exacte tokentellingen.
  • Als er minder dan keepLastAssistants assistant-berichten bestaan, wordt snoeien overgeslagen.
Zie Sessie snoeien voor gedragsdetails.

Blokstreaming

{
  agents: {
    defaults: {
      blockStreamingDefault: "off", // on | off
      blockStreamingBreak: "text_end", // text_end | message_end
      blockStreamingChunk: { minChars: 800, maxChars: 1200 },
      blockStreamingCoalesce: { idleMs: 1000 },
      humanDelay: { mode: "natural" }, // off | natural | custom (use minMs/maxMs)
    },
  },
}
  • Niet-Telegram-kanalen vereisen expliciet *.blockStreaming: true om blokantwoorden in te schakelen.
  • Kanaaloverrides: channels.<channel>.blockStreamingCoalesce (en varianten per account). Signal/Slack/Discord/Google Chat gebruiken standaard minChars: 1500.
  • humanDelay: willekeurige pauze tussen blokantwoorden. natural = 800-2500 ms. Override per agent: agents.list[].humanDelay.
Zie Streaming voor gedrag en details over fragmentering.

Typindicatoren

{
  agents: {
    defaults: {
      typingMode: "instant", // never | instant | thinking | message
      typingIntervalSeconds: 6,
    },
  },
}
  • Standaardwaarden: instant voor directe chats/vermeldingen, message voor niet-vermelde groepschats.
  • Overrides per sessie: session.typingMode, session.typingIntervalSeconds.
Zie Typindicatoren.

agents.defaults.sandbox

Optionele sandboxing voor de ingesloten agent. Zie Sandboxing voor de volledige handleiding.
{
  agents: {
    defaults: {
      sandbox: {
        mode: "non-main", // off | non-main | all
        backend: "docker", // docker | ssh | openshell
        scope: "agent", // session | agent | shared
        workspaceAccess: "none", // none | ro | rw
        workspaceRoot: "~/.openclaw/sandboxes",
        docker: {
          image: "openclaw-sandbox:bookworm-slim",
          containerPrefix: "openclaw-sbx-",
          workdir: "/workspace",
          readOnlyRoot: true,
          tmpfs: ["/tmp", "/var/tmp", "/run"],
          network: "none",
          user: "1000:1000",
          capDrop: ["ALL"],
          env: { LANG: "C.UTF-8" },
          setupCommand: "apt-get update && apt-get install -y git curl jq",
          pidsLimit: 256,
          memory: "1g",
          memorySwap: "2g",
          cpus: 1,
          ulimits: {
            nofile: { soft: 1024, hard: 2048 },
            nproc: 256,
          },
          seccompProfile: "/path/to/seccomp.json",
          apparmorProfile: "openclaw-sandbox",
          dns: ["1.1.1.1", "8.8.8.8"],
          extraHosts: ["internal.service:10.0.0.5"],
          binds: ["/home/user/source:/source:rw"],
        },
        ssh: {
          target: "user@gateway-host:22",
          command: "ssh",
          workspaceRoot: "/tmp/openclaw-sandboxes",
          strictHostKeyChecking: true,
          updateHostKeys: true,
          identityFile: "~/.ssh/id_ed25519",
          certificateFile: "~/.ssh/id_ed25519-cert.pub",
          knownHostsFile: "~/.ssh/known_hosts",
          // SecretRefs / inline contents also supported:
          // identityData: { source: "env", provider: "default", id: "SSH_IDENTITY" },
          // certificateData: { source: "env", provider: "default", id: "SSH_CERTIFICATE" },
          // knownHostsData: { source: "env", provider: "default", id: "SSH_KNOWN_HOSTS" },
        },
        browser: {
          enabled: false,
          image: "openclaw-sandbox-browser:bookworm-slim",
          network: "openclaw-sandbox-browser",
          cdpPort: 9222,
          cdpSourceRange: "172.21.0.1/32",
          vncPort: 5900,
          noVncPort: 6080,
          headless: false,
          enableNoVnc: true,
          allowHostControl: false,
          autoStart: true,
          autoStartTimeoutMs: 12000,
        },
        prune: {
          idleHours: 24,
          maxAgeDays: 7,
        },
      },
    },
  },
  tools: {
    sandbox: {
      tools: {
        allow: [
          "exec",
          "process",
          "read",
          "write",
          "edit",
          "apply_patch",
          "sessions_list",
          "sessions_history",
          "sessions_send",
          "sessions_spawn",
          "session_status",
        ],
        deny: ["browser", "canvas", "nodes", "cron", "discord", "gateway"],
      },
    },
  },
}
Backend:
  • docker: lokale Docker-runtime (standaard)
  • ssh: generieke externe runtime met SSH
  • openshell: OpenShell-runtime
Wanneer backend: "openshell" is geselecteerd, verplaatsen runtime-specifieke instellingen naar plugins.entries.openshell.config.Configuratie van SSH-backend:
  • target: SSH-doel in de vorm user@host[:port]
  • command: SSH-clientopdracht (standaard: ssh)
  • workspaceRoot: absolute externe hoofdmap die wordt gebruikt voor workspaces per scope
  • identityFile / certificateFile / knownHostsFile: bestaande lokale bestanden die aan OpenSSH worden doorgegeven
  • identityData / certificateData / knownHostsData: inline-inhoud of SecretRefs die OpenClaw tijdens runtime in tijdelijke bestanden materialiseert
  • strictHostKeyChecking / updateHostKeys: beleidsknoppen voor OpenSSH-hostsleutels
Voorrang bij SSH-authenticatie:
  • identityData gaat voor identityFile
  • certificateData gaat voor certificateFile
  • knownHostsData gaat voor knownHostsFile
  • Door SecretRef ondersteunde *Data-waarden worden opgelost vanuit de actieve secrets-runtime-snapshot voordat de sandboxsessie start
Gedrag van SSH-backend:
  • vult de externe workspace eenmalig na aanmaken of opnieuw aanmaken
  • houdt daarna de externe SSH-workspace canoniek
  • routeert exec, bestandstools en mediapaden via SSH
  • synchroniseert externe wijzigingen niet automatisch terug naar de host
  • ondersteunt geen browsercontainers voor sandboxing
Werkruimtetoegang:
  • none: sandboxwerkruimte per scope onder ~/.openclaw/sandboxes
  • ro: sandboxwerkruimte op /workspace, agentwerkruimte read-only gemount op /agent
  • rw: agentwerkruimte read/write gemount op /workspace
Bereik:
  • session: container + werkruimte per sessie
  • agent: één container + werkruimte per agent (standaard)
  • shared: gedeelde container en werkruimte (geen isolatie tussen sessies)
OpenShell Pluginconfiguratie:
{
  plugins: {
    entries: {
      openshell: {
        enabled: true,
        config: {
          mode: "mirror", // mirror | remote
          from: "openclaw",
          remoteWorkspaceDir: "/sandbox",
          remoteAgentWorkspaceDir: "/agent",
          gateway: "lab", // optional
          gatewayEndpoint: "https://lab.example", // optional
          policy: "strict", // optional OpenShell policy id
          providers: ["openai"], // optional
          autoProviders: true,
          timeoutSeconds: 120,
        },
      },
    },
  },
}
OpenShell-modus:
  • mirror: seed remote vanuit lokaal vóór exec, synchroniseer terug na exec; de lokale werkruimte blijft canoniek
  • remote: seed remote één keer wanneer de sandbox wordt gemaakt, houd daarna de remote werkruimte canoniek
In de modus remote worden host-lokale bewerkingen die buiten OpenClaw zijn gemaakt niet automatisch naar de sandbox gesynchroniseerd na de seedstap. Transport is SSH naar de OpenShell-sandbox, maar de Plugin beheert de levenscyclus van de sandbox en optionele mirrorsynchronisatie.setupCommand wordt één keer uitgevoerd na het aanmaken van de container (via sh -lc). Vereist netwerk-egress, beschrijfbare root, rootgebruiker.Containers gebruiken standaard network: "none" — stel dit in op "bridge" (of een aangepast bridge-netwerk) als de agent uitgaande toegang nodig heeft. "host" is geblokkeerd. "container:<id>" is standaard geblokkeerd tenzij je expliciet sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true instelt (noodoptie).Inkomende bijlagen worden klaargezet in media/inbound/* in de actieve werkruimte.docker.binds mount aanvullende hostmappen; globale en per-agent binds worden samengevoegd.Browser in sandbox (sandbox.browser.enabled): Chromium + CDP in een container. noVNC-URL geïnjecteerd in systeemprompt. Vereist geen browser.enabled in openclaw.json. noVNC-observertoegang gebruikt standaard VNC-authenticatie en OpenClaw geeft een kortlevende token-URL uit (in plaats van het wachtwoord in de gedeelde URL bloot te stellen).
  • allowHostControl: false (standaard) blokkeert sandboxsessies zodat ze niet op de hostbrowser kunnen richten.
  • network staat standaard op openclaw-sandbox-browser (toegewezen bridge-netwerk). Stel dit alleen in op bridge wanneer je expliciet globale bridge-connectiviteit wilt.
  • cdpSourceRange beperkt optioneel CDP-ingress aan de containerrand tot een CIDR-bereik (bijvoorbeeld 172.21.0.1/32).
  • sandbox.browser.binds mount aanvullende hostmappen alleen in de sandboxbrowsercontainer. Wanneer ingesteld (inclusief []), vervangt dit docker.binds voor de browsercontainer.
  • Startstandaarden zijn gedefinieerd in scripts/sandbox-browser-entrypoint.sh en afgestemd op containerhosts:
    • --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 (standaard ingeschakeld)
    • --disable-3d-apis, --disable-software-rasterizer en --disable-gpu zijn standaard ingeschakeld en kunnen worden uitgeschakeld met OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0 als WebGL/3D-gebruik dit vereist.
    • OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0 schakelt extensies opnieuw in als je workflow ervan afhankelijk is.
    • --renderer-process-limit=2 kan worden gewijzigd met OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>; stel 0 in om de standaardproceslimiet van Chromium te gebruiken.
    • plus --no-sandbox wanneer noSandbox is ingeschakeld.
    • Standaarden zijn de baseline van de containerimage; gebruik een aangepaste browserimage met een aangepast entrypoint om containerstandaarden te wijzigen.
Browsersandboxing en sandbox.docker.binds zijn alleen voor Docker. Bouw images (vanuit een source-checkout):
scripts/sandbox-setup.sh           # main sandbox image
scripts/sandbox-browser-setup.sh   # optional browser image
Voor npm-installaties zonder source-checkout, zie Sandboxing § Images and setup voor inline docker build-commando’s.

agents.list (per-agent overrides)

Gebruik agents.list[].tts om een agent een eigen TTS-provider, stem, model, stijl of auto-TTS-modus te geven. Het agentblok deep-merget over globale messages.tts, zodat gedeelde credentials op één plek kunnen blijven terwijl individuele agents alleen de stem- of providervelden overriden die ze nodig hebben. De override van de actieve agent is van toepassing op automatische gesproken antwoorden, /tts audio, /tts status en de agenttool tts. Zie Text-to-speech voor providervoorbeelden en prioriteit.
{
  agents: {
    list: [
      {
        id: "main",
        default: true,
        name: "Main Agent",
        workspace: "~/.openclaw/workspace",
        agentDir: "~/.openclaw/agents/main/agent",
        model: "anthropic/claude-opus-4-6", // or { primary, fallbacks }
        thinkingDefault: "high", // per-agent thinking level override
        reasoningDefault: "on", // per-agent reasoning visibility override
        fastModeDefault: false, // per-agent fast mode override
        params: { cacheRetention: "none" }, // overrides matching defaults.models params by key
        tts: {
          providers: {
            elevenlabs: { voiceId: "EXAVITQu4vr4xnSDxMaL" },
          },
        },
        skills: ["docs-search"], // replaces agents.defaults.skills when set
        identity: {
          name: "Samantha",
          theme: "helpful sloth",
          emoji: "🦥",
          avatar: "avatars/samantha.png",
        },
        groupChat: { mentionPatterns: ["@openclaw"] },
        sandbox: { mode: "off" },
        runtime: {
          type: "acp",
          acp: {
            agent: "codex",
            backend: "acpx",
            mode: "persistent",
            cwd: "/workspace/openclaw",
          },
        },
        subagents: { allowAgents: ["*"] },
        tools: {
          profile: "coding",
          allow: ["browser"],
          deny: ["canvas"],
          elevated: { enabled: true },
        },
      },
    ],
  },
}
  • id: stabiele agent-id (vereist).
  • default: wanneer er meerdere zijn ingesteld, wint de eerste (waarschuwing wordt gelogd). Als er geen is ingesteld, is het eerste item in de lijst de standaard.
  • model: de tekenreeksvorm stelt een strikte primaire instelling per agent in zonder model-fallback; de objectvorm { primary } is ook strikt, tenzij je fallbacks toevoegt. Gebruik { primary, fallbacks: [...] } om fallback voor die agent in te schakelen, of { primary, fallbacks: [] } om strikt gedrag expliciet te maken. Cron-taken die alleen primary overschrijven, erven nog steeds standaardfallbacks, tenzij je fallbacks: [] instelt.
  • params: streamparameters per agent die worden samengevoegd over de geselecteerde modelvermelding in agents.defaults.models. Gebruik dit voor agentspecifieke overschrijvingen zoals cacheRetention, temperature of maxTokens zonder de volledige modelcatalogus te dupliceren.
  • tts: optionele tekst-naar-spraak-overschrijvingen per agent. Het blok wordt diep samengevoegd over messages.tts, dus bewaar gedeelde providerreferenties en fallbackbeleid in messages.tts en stel hier alleen personaspecifieke waarden in, zoals provider, stem, model, stijl of automatische modus.
  • skills: optionele allowlist voor Skills per agent. Als dit wordt weggelaten, erft de agent agents.defaults.skills wanneer dat is ingesteld; een expliciete lijst vervangt standaardwaarden in plaats van samen te voegen, en [] betekent geen Skills.
  • thinkingDefault: optioneel standaard denkniveau per agent (off | minimal | low | medium | high | xhigh | adaptive | max). Overschrijft agents.defaults.thinkingDefault voor deze agent wanneer er geen overschrijving per bericht of sessie is ingesteld. Het geselecteerde provider-/modelprofiel bepaalt welke waarden geldig zijn; voor Google Gemini behoudt adaptive dynamisch denken dat eigendom is van de provider (thinkingLevel weggelaten op Gemini 3/3.1, thinkingBudget: -1 op Gemini 2.5).
  • reasoningDefault: optionele standaardzichtbaarheid voor redenering per agent (on | off | stream). Overschrijft agents.defaults.reasoningDefault voor deze agent wanneer er geen redeneringsoverschrijving per bericht of sessie is ingesteld.
  • fastModeDefault: optionele standaard per agent voor snelle modus (true | false). Wordt toegepast wanneer er geen overschrijving per bericht of sessie voor snelle modus is ingesteld.
  • models: optionele modelcatalogus-/runtime-overschrijvingen per agent, geïndexeerd op volledige provider/model-id’s. Gebruik models["provider/model"].agentRuntime voor runtime-uitzonderingen per agent.
  • runtime: optionele runtimebeschrijving per agent. Gebruik type: "acp" met runtime.acp-standaardwaarden (agent, backend, mode, cwd) wanneer de agent standaard ACP-harness-sessies moet gebruiken.
  • identity.avatar: werkruimterelatief pad, http(s)-URL of data:-URI.
  • identity leidt standaardwaarden af: ackReaction uit emoji, mentionPatterns uit name/emoji.
  • subagents.allowAgents: allowlist van agent-id’s voor expliciete sessions_spawn.agentId-doelen (["*"] = elk; standaard: alleen dezelfde agent). Neem de requester-id op wanneer zelfgerichte agentId-aanroepen toegestaan moeten zijn.
  • Sandbox-overervingsbeveiliging: als de requestersessie in een sandbox draait, wijst sessions_spawn doelen af die zonder sandbox zouden draaien.
  • subagents.requireAgentId: wanneer true, blokkeer sessions_spawn-aanroepen die agentId weglaten (dwingt expliciete profielselectie af; standaard: false).

Routering met meerdere agents

Voer meerdere geïsoleerde agents uit binnen één Gateway. Zie Multi-Agent.
{
  agents: {
    list: [
      { id: "home", default: true, workspace: "~/.openclaw/workspace-home" },
      { id: "work", workspace: "~/.openclaw/workspace-work" },
    ],
  },
  bindings: [
    { agentId: "home", match: { channel: "whatsapp", accountId: "personal" } },
    { agentId: "work", match: { channel: "whatsapp", accountId: "biz" } },
  ],
}

Binding-matchvelden

  • type (optioneel): route voor normale routering (ontbrekend type gebruikt standaard route), acp voor persistente ACP-gespreksbindings.
  • match.channel (vereist)
  • match.accountId (optioneel; * = elk account; weggelaten = standaardaccount)
  • match.peer (optioneel; { kind: direct|group|channel, id })
  • match.guildId / match.teamId (optioneel; kanaalspecifiek)
  • acp (optioneel; alleen voor type: "acp"): { mode, label, cwd, backend }
Deterministische matchvolgorde:
  1. match.peer
  2. match.guildId
  3. match.teamId
  4. match.accountId (exact, geen peer/guild/team)
  5. match.accountId: "*" (kanaalbreed)
  6. Standaardagent
Binnen elke laag wint de eerste overeenkomende bindings-vermelding. Voor type: "acp"-vermeldingen lost OpenClaw dit op via exacte gespreksidentiteit (match.channel + account + match.peer.id) en gebruikt het de routebinding-laagvolgorde hierboven niet.

Toegangsprofielen per agent

{
  agents: {
    list: [
      {
        id: "personal",
        workspace: "~/.openclaw/workspace-personal",
        sandbox: { mode: "off" },
      },
    ],
  },
}
{
  agents: {
    list: [
      {
        id: "family",
        workspace: "~/.openclaw/workspace-family",
        sandbox: { mode: "all", scope: "agent", workspaceAccess: "ro" },
        tools: {
          allow: [
            "read",
            "sessions_list",
            "sessions_history",
            "sessions_send",
            "sessions_spawn",
            "session_status",
          ],
          deny: ["write", "edit", "apply_patch", "exec", "process", "browser"],
        },
      },
    ],
  },
}
{
  agents: {
    list: [
      {
        id: "public",
        workspace: "~/.openclaw/workspace-public",
        sandbox: { mode: "all", scope: "agent", workspaceAccess: "none" },
        tools: {
          allow: [
            "sessions_list",
            "sessions_history",
            "sessions_send",
            "sessions_spawn",
            "session_status",
            "whatsapp",
            "telegram",
            "slack",
            "discord",
            "gateway",
          ],
          deny: [
            "read",
            "write",
            "edit",
            "apply_patch",
            "exec",
            "process",
            "browser",
            "canvas",
            "nodes",
            "cron",
            "gateway",
            "image",
          ],
        },
      },
    ],
  },
}
Zie Multi-Agent-sandbox en tools voor details over voorrang.

Sessie

{
  session: {
    scope: "per-sender",
    dmScope: "main", // main | per-peer | per-channel-peer | per-account-channel-peer
    identityLinks: {
      alice: ["telegram:123456789", "discord:987654321012345678"],
    },
    reset: {
      mode: "daily", // daily | idle
      atHour: 4,
      idleMinutes: 60,
    },
    resetByType: {
      thread: { mode: "daily", atHour: 4 },
      direct: { mode: "idle", idleMinutes: 240 },
      group: { mode: "idle", idleMinutes: 120 },
    },
    resetTriggers: ["/new", "/reset"],
    store: "~/.openclaw/agents/{agentId}/sessions/sessions.json",
    maintenance: {
      mode: "warn", // warn | enforce
      pruneAfter: "30d",
      maxEntries: 500,
      resetArchiveRetention: "30d", // duration or false
      maxDiskBytes: "500mb", // optional hard budget
      highWaterBytes: "400mb", // optional cleanup target
    },
    threadBindings: {
      enabled: true,
      idleHours: 24, // default inactivity auto-unfocus in hours (`0` disables)
      maxAgeHours: 0, // default hard max age in hours (`0` disables)
    },
    mainKey: "main", // legacy (runtime always uses "main")
    agentToAgent: { maxPingPongTurns: 5 },
    sendPolicy: {
      rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }],
      default: "allow",
    },
  },
}
  • scope: basisstrategie voor sessiegroepering voor groepschatcontexten.
    • per-sender (standaard): elke afzender krijgt een geïsoleerde sessie binnen een kanaalcontext.
    • global: alle deelnemers in een kanaalcontext delen één sessie (alleen gebruiken wanneer gedeelde context bedoeld is).
  • dmScope: hoe DM’s worden gegroepeerd.
    • main: alle DM’s delen de hoofdsessie.
    • per-peer: isoleren op afzender-id over kanalen heen.
    • per-channel-peer: isoleren per kanaal + afzender (aanbevolen voor inboxen met meerdere gebruikers).
    • per-account-channel-peer: isoleren per account + kanaal + afzender (aanbevolen voor meerdere accounts).
  • identityLinks: koppel canonieke id’s aan peers met provider-prefix voor sessiedeling over kanalen heen. Dock-opdrachten zoals /dock_discord gebruiken dezelfde map om de antwoordroute van de actieve sessie om te schakelen naar een andere gekoppelde kanaal-peer; zie Kanaaldocking.
  • reset: primair resetbeleid. daily reset op lokale tijd atHour; idle reset na idleMinutes. Wanneer beide zijn geconfigureerd, wint degene die het eerst verloopt. Versheid voor dagelijkse resets gebruikt sessionStartedAt van de sessierij; versheid voor inactiviteitsresets gebruikt lastInteractionAt. Achtergrond-/systeemgebeurtenis-writes zoals Heartbeat, Cron-wakeups, exec-meldingen en Gateway-boekhouding kunnen updatedAt bijwerken, maar ze houden dagelijkse/inactieve sessies niet vers.
  • resetByType: overschrijvingen per type (direct, group, thread). Verouderde dm wordt geaccepteerd als alias voor direct.
  • mainKey: verouderd veld. Runtime gebruikt altijd "main" voor de hoofd-bucket voor directe chats.
  • agentToAgent.maxPingPongTurns: maximaal aantal heen-en-weer-antwoordbeurten tussen agents tijdens agent-naar-agent-uitwisselingen (integer, bereik: 05). 0 schakelt pingpong-chaining uit.
  • sendPolicy: match op channel, chatType (direct|group|channel, met verouderde dm-alias), keyPrefix of rawKeyPrefix. Eerste deny wint.
  • maintenance: opschoning van sessieopslag + retentie-instellingen.
    • mode: warn geeft alleen waarschuwingen; enforce past opschoning toe.
    • pruneAfter: leeftijdsgrens voor verouderde vermeldingen (standaard 30d).
    • maxEntries: maximaal aantal vermeldingen in sessions.json (standaard 500). Runtime schrijft batchopschoning met een kleine high-water-buffer voor caps op productiegrootte; openclaw sessions cleanup --enforce past de cap onmiddellijk toe.
    • rotateBytes: verouderd en genegeerd; openclaw doctor --fix verwijdert dit uit oudere configuraties.
    • resetArchiveRetention: retentie voor transcriptarchieven met *.reset.<timestamp>. Standaard ingesteld op pruneAfter; stel in op false om uit te schakelen.
    • maxDiskBytes: optioneel schijfbudget voor de sessiemap. In warn-modus logt dit waarschuwingen; in enforce-modus verwijdert dit eerst de oudste artefacten/sessies.
    • highWaterBytes: optioneel doel na budgetopschoning. Standaard 80% van maxDiskBytes.
  • threadBindings: globale standaardwaarden voor thread-gebonden sessiefuncties.
    • enabled: standaard hoofdschakelaar (providers kunnen overschrijven; Discord gebruikt channels.discord.threadBindings.enabled)
    • idleHours: standaard automatische ontfocus bij inactiviteit in uren (0 schakelt uit; providers kunnen overschrijven)
    • maxAgeHours: standaard harde maximale leeftijd in uren (0 schakelt uit; providers kunnen overschrijven)
    • spawnSessions: standaard gate voor het maken van thread-gebonden werksessies vanuit sessions_spawn en ACP-threadspawns. Standaard true wanneer threadbindings zijn ingeschakeld; providers/accounts kunnen overschrijven.
    • defaultSpawnContext: standaard native subagentcontext voor thread-gebonden spawns ("fork" of "isolated"). Standaard "fork".

Berichten

{
  messages: {
    responsePrefix: "🦞", // or "auto"
    ackReaction: "👀",
    ackReactionScope: "group-mentions", // group-mentions | group-all | direct | all
    removeAckAfterReply: false,
    queue: {
      mode: "steer", // steer | queue (legacy one-at-a-time) | followup | collect | steer-backlog | steer+backlog | interrupt
      debounceMs: 500,
      cap: 20,
      drop: "summarize", // old | new | summarize
      byChannel: {
        whatsapp: "steer",
        telegram: "steer",
      },
    },
    inbound: {
      debounceMs: 2000, // 0 disables
      byChannel: {
        whatsapp: 5000,
        slack: 1500,
      },
    },
  },
}

Antwoordprefix

Overschrijvingen per kanaal/account: channels.<channel>.responsePrefix, channels.<channel>.accounts.<id>.responsePrefix. Resolutie (meest specifiek wint): account → kanaal → globaal. "" schakelt uit en stopt cascade. "auto" leidt [{identity.name}] af. Sjabloonvariabelen:
VariabeleBeschrijvingVoorbeeld
{model}Korte modelnaamclaude-opus-4-6
{modelFull}Volledige model-idanthropic/claude-opus-4-6
{provider}Providernaamanthropic
{thinkingLevel}Huidig denkniveauhigh, low, off
{identity.name}Naam van agentidentiteit(hetzelfde als "auto")
Variabelen zijn hoofdletterongevoelig. {think} is een alias voor {thinkingLevel}.

Ack-reactie

  • Standaard ingesteld op identity.emoji van de actieve agent, anders "👀". Stel "" in om uit te schakelen.
  • Overschrijvingen per kanaal: channels.<channel>.ackReaction, channels.<channel>.accounts.<id>.ackReaction.
  • Resolutievolgorde: account → kanaal → messages.ackReaction → identity-fallback.
  • Bereik: group-mentions (standaard), group-all, direct, all.
  • removeAckAfterReply: verwijdert ack na antwoord op kanalen met reactieondersteuning, zoals Slack, Discord, Telegram, WhatsApp en iMessage.
  • messages.statusReactions.enabled: schakelt lifecycle-statusreacties in op Slack, Discord en Telegram. Op Slack en Discord blijven statusreacties ingeschakeld wanneer ack-reacties actief zijn als dit niet is ingesteld. Op Telegram moet je dit expliciet op true instellen om lifecycle-statusreacties in te schakelen.

Inkomende debounce

Bundelt snelle tekst-only berichten van dezelfde afzender tot één agentbeurt. Media/bijlagen flushen onmiddellijk. Besturingsopdrachten omzeilen debouncing.

TTS (tekst-naar-spraak)

{
  messages: {
    tts: {
      auto: "always", // off | always | inbound | tagged
      mode: "final", // final | all
      provider: "elevenlabs",
      summaryModel: "openai/gpt-4.1-mini",
      modelOverrides: { enabled: true },
      maxTextLength: 4000,
      timeoutMs: 30000,
      prefsPath: "~/.openclaw/settings/tts.json",
      providers: {
        elevenlabs: {
          apiKey: "elevenlabs_api_key",
          baseUrl: "https://api.elevenlabs.io",
          voiceId: "voice_id",
          modelId: "eleven_multilingual_v2",
          seed: 42,
          applyTextNormalization: "auto",
          languageCode: "en",
          voiceSettings: {
            stability: 0.5,
            similarityBoost: 0.75,
            style: 0.0,
            useSpeakerBoost: true,
            speed: 1.0,
          },
        },
        microsoft: {
          voice: "en-US-AvaMultilingualNeural",
          lang: "en-US",
          outputFormat: "audio-24khz-48kbitrate-mono-mp3",
        },
        openai: {
          apiKey: "openai_api_key",
          baseUrl: "https://api.openai.com/v1",
          model: "gpt-4o-mini-tts",
          voice: "alloy",
        },
      },
    },
  },
}
  • auto bepaalt de standaard auto-TTS-modus: off, always, inbound of tagged. /tts on|off kan lokale voorkeuren overschrijven, en /tts status toont de effectieve status.
  • summaryModel overschrijft agents.defaults.model.primary voor automatische samenvatting.
  • modelOverrides is standaard ingeschakeld; modelOverrides.allowProvider is standaard false (opt-in).
  • API-sleutels vallen terug op ELEVENLABS_API_KEY/XI_API_KEY en OPENAI_API_KEY.
  • Meegeleverde spraakproviders zijn eigendom van Plugins. Als plugins.allow is ingesteld, neem dan elke TTS-provider-Plugin op die je wilt gebruiken, bijvoorbeeld microsoft voor Edge TTS. De verouderde provider-id edge wordt geaccepteerd als alias voor microsoft.
  • providers.openai.baseUrl overschrijft het OpenAI TTS-eindpunt. Resolutievolgorde is configuratie, daarna OPENAI_TTS_BASE_URL, daarna https://api.openai.com/v1.
  • Wanneer providers.openai.baseUrl naar een niet-OpenAI-eindpunt verwijst, behandelt OpenClaw dit als een OpenAI-compatibele TTS-server en versoepelt model-/stemvalidatie.

Talk

Standaardwaarden voor Talk-modus (macOS/iOS/Android).
{
  talk: {
    provider: "elevenlabs",
    providers: {
      elevenlabs: {
        voiceId: "elevenlabs_voice_id",
        voiceAliases: {
          Clawd: "EXAVITQu4vr4xnSDxMaL",
          Roger: "CwhRBWXzGAHq8TQ4Fs17",
        },
        modelId: "eleven_v3",
        outputFormat: "mp3_44100_128",
        apiKey: "elevenlabs_api_key",
      },
      mlx: {
        modelId: "mlx-community/Soprano-80M-bf16",
      },
      system: {},
    },
    consultThinkingLevel: "low",
    consultFastMode: true,
    speechLocale: "ru-RU",
    silenceTimeoutMs: 1500,
    interruptOnSpeech: true,
    realtime: {
      provider: "openai",
      providers: {
        openai: {
          model: "gpt-realtime-2",
          voice: "cedar",
        },
      },
      instructions: "Speak warmly and keep answers brief.",
      mode: "realtime",
      transport: "webrtc",
      brain: "agent-consult",
    },
  },
}
  • talk.provider moet overeenkomen met een sleutel in talk.providers wanneer meerdere Talk-providers zijn geconfigureerd.
  • Verouderde platte Talk-sleutels (talk.voiceId, talk.voiceAliases, talk.modelId, talk.outputFormat, talk.apiKey) zijn alleen voor compatibiliteit. Voer openclaw doctor --fix uit om opgeslagen configuratie te herschrijven naar talk.providers.<provider>.
  • Stem-id’s vallen terug op ELEVENLABS_VOICE_ID of SAG_VOICE_ID.
  • providers.*.apiKey accepteert platte-tekststrings of SecretRef-objecten.
  • De fallback ELEVENLABS_API_KEY is alleen van toepassing wanneer er geen Talk-API-sleutel is geconfigureerd.
  • providers.*.voiceAliases laat Talk-directives vriendelijke namen gebruiken.
  • providers.mlx.modelId selecteert de Hugging Face-repo die wordt gebruikt door de lokale macOS MLX-helper. Als dit wordt weggelaten, gebruikt macOS mlx-community/Soprano-80M-bf16.
  • macOS MLX-weergave loopt via de meegeleverde openclaw-mlx-tts-helper wanneer aanwezig, of via een uitvoerbaar bestand op PATH; OPENCLAW_MLX_TTS_BIN overschrijft het helperpad voor ontwikkeling.
  • consultThinkingLevel bepaalt het denkniveau voor de volledige OpenClaw-agentrun achter Control UI Talk realtime openclaw_agent_consult-aanroepen. Laat dit niet ingesteld om normaal sessie-/modelgedrag te behouden.
  • consultFastMode stelt een eenmalige fast-mode-overschrijving in voor Control UI Talk realtime consults zonder de normale fast-mode-instelling van de sessie te wijzigen.
  • speechLocale stelt de BCP 47-locale-id in die wordt gebruikt door iOS/macOS Talk-spraakherkenning. Laat dit niet ingesteld om de apparaatstandaard te gebruiken.
  • silenceTimeoutMs bepaalt hoe lang Talk-modus wacht na stilte van de gebruiker voordat het transcript wordt verzonden. Niet ingesteld behoudt het standaard pauzevenster van het platform (700 ms op macOS en Android, 900 ms op iOS).
  • realtime.instructions voegt provider-gerichte systeeminstructies toe aan de ingebouwde realtime-prompt van OpenClaw, zodat stemstijl kan worden geconfigureerd zonder standaard openclaw_agent_consult-begeleiding te verliezen.

Gerelateerd