Managing OpenClaw Configuration via CLI
Managing configuration files manually is often a recipe for syntax errors and broken deployments. We have all been there—one missing comma in a JSON file and the whole system refuses to start.
The OpenClaw config command provides a suite of helpers for non-interactive edits in your openclaw.json file. Whether you need to get, set, or validate values by path, this CLI tool ensures your OpenClaw configuration remains consistent and error-free.
Root options:
--section <section>: repeatable guided-setup section filter when you runopenclaw configwithout a subcommand
Supported guided sections:
workspacemodelwebgatewaydaemonchannelspluginsskillshealth
Use OpenClaw config for quick edits
Section titled “Use OpenClaw config for quick edits”You can perform a wide range of tasks from printing the schema to setting complex nested values. Here are the most common ways to use the command.
openclaw config fileopenclaw config --section modelopenclaw config --section gateway --section daemonopenclaw config schemaopenclaw config get browser.executablePathopenclaw config set browser.executablePath "/usr/bin/google-chrome"openclaw config set agents.defaults.heartbeat.every "2h"openclaw config set agents.list[0].tools.exec.node "node-id-or-name"openclaw config set channels.discord.token --ref-provider default --ref-source env --ref-id DISCORD_BOT_TOKENopenclaw config set secrets.providers.vaultfile --provider-source file --provider-path /etc/openclaw/secrets.json --provider-mode jsonopenclaw config unset plugins.entries.brave.config.webSearch.apiKeyopenclaw config set channels.discord.token --ref-provider default --ref-source env --ref-id DISCORD_BOT_TOKEN --dry-runopenclaw config validateopenclaw config validate --jsonconfig schema
Section titled “config schema”Print the generated JSON schema for openclaw.json to stdout as JSON.
What it includes:
- The current root config schema, plus a root
$schemastring field for editor tooling - Field
titleanddescriptiondocs metadata used by the Control UI - Nested object, wildcard (
*), and array-item ([]) nodes inherit the sametitle/descriptionmetadata when matching field documentation exists anyOf/oneOf/allOfbranches inherit the same docs metadata too when matching field documentation exists- Best-effort live plugin + channel schema metadata when runtime manifests can be loaded
- A clean fallback schema even when the current config is invalid
Related runtime RPC:
config.schema.lookupreturns one normalized config path with a shallow schema node (title,description,type,enum,const, common bounds), matched UI hint metadata, and immediate child summaries. Use it for path-scoped drill-down in Control UI or custom clients.
openclaw config schemaPipe it into a file when you want to inspect or validate it with other tools:
openclaw config schema > openclaw.schema.jsonPaths use dot or bracket notation:
openclaw config get agents.defaults.workspaceopenclaw config get agents.list[0].idUse the agent list index to target a specific agent:
openclaw config get agents.listopenclaw config set agents.list[1].tools.exec.node "node-id-or-name"Handle JSON and string values
Section titled “Handle JSON and string values”The tool intelligently parses your inputs to ensure they match the expected format. It uses JSON5 parsing by default to give you more flexibility with your configuration data.
Values are parsed as JSON5 when possible; otherwise they are treated as strings.
Use --strict-json to require JSON5 parsing. --json remains supported as a legacy alias.
openclaw config set agents.defaults.heartbeat.every "0m"openclaw config set gateway.port 19001 --strict-jsonopenclaw config set channels.whatsapp.groups '["*"]' --strict-jsonconfig get <path> --json prints the raw value as JSON instead of terminal-formatted text.
Choose your config set assignment style
Section titled “Choose your config set assignment style”There are four distinct ways to assign values depending on whether you are dealing with simple strings or complex secret providers. This flexibility allows you to automate setup across different environments easily.
- Value mode:
openclaw config set <path> <value> - SecretRef builder mode:
openclaw config set channels.discord.token \ --ref-provider default \ --ref-source env \ --ref-id DISCORD_BOT_TOKEN- Provider builder mode (
secrets.providers.<alias>path only):
openclaw config set secrets.providers.vault \ --provider-source exec \ --provider-command /usr/local/bin/openclaw-vault \ --provider-arg read \ --provider-arg openai/api-key \ --provider-timeout-ms 5000- Batch mode (
--batch-jsonor--batch-file):
openclaw config set --batch-json '[ { "path": "secrets.providers.default", "provider": { "source": "env" } }, { "path": "channels.discord.token", "ref": { "source": "env", "provider": "default", "id": "DISCORD_BOT_TOKEN" } }]'openclaw config set --batch-file ./config-set.batch.json --dry-runPolicy note:
- SecretRef assignments are rejected on unsupported runtime-mutable surfaces (for example
hooks.token,commands.ownerDisplaySecret, Discord thread-binding webhook tokens, and WhatsApp creds JSON). See SecretRef Credential Surface.
Batch parsing always uses the batch payload (--batch-json/--batch-file) as the source of truth.
--strict-json / --json do not change batch parsing behavior.
JSON path/value mode remains supported for both SecretRefs and providers:
openclaw config set channels.discord.token \ '{"source":"env","provider":"default","id":"DISCORD_BOT_TOKEN"}' \ --strict-json
openclaw config set secrets.providers.vaultfile \ '{"source":"file","path":"/etc/openclaw/secrets.json","mode":"json"}' \ --strict-jsonConfigure secret providers with flags
Section titled “Configure secret providers with flags”When you need to set up a secret provider, specific flags help you define the source and behavior. These targets must always use the secrets.providers.<alias> path to function correctly.
Common flags:
--provider-source <env|file|exec>--provider-timeout-ms <ms>(file,exec)
Env provider (--provider-source env):
--provider-allowlist <ENV_VAR>(repeatable)
File provider (--provider-source file):
--provider-path <path>(required)--provider-mode <singleValue|json>--provider-max-bytes <bytes>
Exec provider (--provider-source exec):
--provider-command <path>(required)--provider-arg <arg>(repeatable)--provider-no-output-timeout-ms <ms>--provider-max-output-bytes <bytes>--provider-json-only--provider-env <KEY=VALUE>(repeatable)--provider-pass-env <ENV_VAR>(repeatable)--provider-trusted-dir <path>(repeatable)--provider-allow-insecure-path--provider-allow-symlink-command
Hardened exec provider example:
openclaw config set secrets.providers.vault \ --provider-source exec \ --provider-command /usr/local/bin/openclaw-vault \ --provider-arg read \ --provider-arg openai/api-key \ --provider-json-only \ --provider-pass-env VAULT_TOKEN \ --provider-trusted-dir /usr/local/bin \ --provider-timeout-ms 5000Test changes with Dry run
Section titled “Test changes with Dry run”Before committing any changes to your production openclaw.json, you should verify them using the --dry-run flag. This process checks for schema validity and ensures your secret references are actually resolvable.
openclaw config set channels.discord.token \ --ref-provider default \ --ref-source env \ --ref-id DISCORD_BOT_TOKEN \ --dry-run
openclaw config set channels.discord.token \ --ref-provider default \ --ref-source env \ --ref-id DISCORD_BOT_TOKEN \ --dry-run \ --json
openclaw config set channels.discord.token \ --ref-provider vault \ --ref-source exec \ --ref-id discord/token \ --dry-run \ --allow-execDry-run behavior:
- Builder mode: runs SecretRef resolvability checks for changed refs/providers.
- JSON mode (
--strict-json,--json, or batch mode): runs schema validation plus SecretRef resolvability checks. - Policy validation also runs for known unsupported SecretRef target surfaces.
- Policy checks evaluate the full post-change config, so parent-object writes (for example setting
hooksas an object) cannot bypass unsupported-surface validation. - Exec SecretRef checks are skipped by default during dry-run to avoid command side effects.
- Use
--allow-execwith--dry-runto opt in to exec SecretRef checks (this may execute provider commands). --allow-execis dry-run only and errors if used without--dry-run.
--dry-run --json prints a machine-readable report:
ok: whether dry-run passedoperations: number of assignments evaluatedchecks: whether schema/resolvability checks ranchecks.resolvabilityComplete: whether resolvability checks ran to completion (false when exec refs are skipped)refsChecked: number of refs actually resolved during dry-runskippedExecRefs: number of exec refs skipped because--allow-execwas not seterrors: structured schema/resolvability failures whenok=false
JSON Output Shape
Section titled “JSON Output Shape”{ ok: boolean, operations: number, configPath: string, inputModes: ["value" | "json" | "builder", ...], checks: { schema: boolean, resolvability: boolean, resolvabilityComplete: boolean, }, refsChecked: number, skippedExecRefs: number, errors?: [ { kind: "schema" | "resolvability", message: string, ref?: string, // present for resolvability errors }, ],}Success example:
{ "ok": true, "operations": 1, "configPath": "~/.openclaw/openclaw.json", "inputModes": ["builder"], "checks": { "schema": false, "resolvability": true, "resolvabilityComplete": true }, "refsChecked": 1, "skippedExecRefs": 0}Failure example:
{ "ok": false, "operations": 1, "configPath": "~/.openclaw/openclaw.json", "inputModes": ["builder"], "checks": { "schema": false, "resolvability": true, "resolvabilityComplete": true }, "refsChecked": 1, "skippedExecRefs": 0, "errors": [ { "kind": "resolvability", "message": "Error: Environment variable \"MISSING_TEST_SECRET\" is not set.", "ref": "env:default:MISSING_TEST_SECRET" } ]}If dry-run fails:
config schema validation failed: your post-change config shape is invalid; fix path/value or provider/ref object shape.Config policy validation failed: unsupported SecretRef usage: move that credential back to plaintext/string input and keep SecretRefs on supported surfaces only.SecretRef assignment(s) could not be resolved: referenced provider/ref currently cannot resolve (missing env var, invalid file pointer, exec provider failure, or provider/source mismatch).Dry run note: skipped <n> exec SecretRef resolvability check(s): dry-run skipped exec refs; rerun with--allow-execif you need exec resolvability validation.- For batch mode, fix failing entries and rerun
--dry-runbefore writing.
Ensure Write safety for your configuration
Section titled “Ensure Write safety for your configuration”OpenClaw protects your setup by validating the entire configuration before writing it to the disk. If a change is deemed unsafe or invalid, the tool preserves your original file and saves the rejected version separately.
Prefer CLI writes for small edits:
openclaw config set gateway.reload.mode hybrid --dry-runopenclaw config set gateway.reload.mode hybridopenclaw config validateIf a write is rejected, inspect the saved payload and fix the full config shape:
CONFIG="$(openclaw config file)"ls -lt "$CONFIG".rejected.* 2>/dev/null | headopenclaw config validateDirect editor writes are still allowed, but the running Gateway treats them as untrusted until they validate. Invalid direct edits can be restored from the last-known-good backup during startup or hot reload. See Gateway troubleshooting.
Explore OpenClaw config subcommands
Section titled “Explore OpenClaw config subcommands”Beyond setting values, there are utility subcommands to help you locate your active configuration. Remember to restart your Gateway after making any manual or CLI edits to apply the changes.
config file: Print the active config file path (resolved fromOPENCLAW_CONFIG_PATHor default location).
Restart the Gateway after edits.
Run OpenClaw config validate
Section titled “Run OpenClaw config validate”It is a good habit to check your current configuration against the active schema. This command lets you catch errors early without needing to start the full Gateway service.
openclaw config validateopenclaw config validate --jsonNeed more help? Chat with our AI Setup Assistant.
Next Steps
Section titled “Next Steps”OpenClaw Expert
Still stuck?
If this page didn't answer your case, ask OpenClaw Expert for step-by-step guidance.