Install
openclaw skills install openclaw-configEdit and validate OpenClaw Gateway config (openclaw.json / JSON5). Use when adding/changing config keys (gateway.*, agents.*, models.*, channels.*, tools.*, skills.*, plugins.*, $include) or diagnosing openclaw doctor/config validation errors, to avoid schema mismatches that prevent the Gateway from starting or weaken security policies.
openclaw skills install openclaw-configSafely edit ~/.openclaw/openclaw.json (or the path set by OPENCLAW_CONFIG_PATH) using a schema-first workflow. Validate before and after changes to avoid invalid keys/types that can break startup or change security behavior.
OPENCLAW_CONFIG_PATH > OPENCLAW_STATE_DIR/openclaw.json > ~/.openclaw/openclaw.jsonopenclaw gateway call config.schema --params '{}' to fetch a JSON Schema matching the running version.openclaw/openclaw source-of-truth, primarily:
src/config/zod-schema.ts (OpenClawSchema root keys like gateway/skills/plugins)src/config/zod-schema.*.ts (submodules: channels/providers/models/agents/tools)docs/gateway/configuration.md (repo docs + examples)openclaw config get|set|unset (dot path or bracket notation).config.patch (merge patch) or config.apply (replaces the entire config; use carefully).$include (see below).openclaw doctor, then fix issues using the reported path + message.openclaw doctor --fix/--yes without explicit user consent (it writes to config/state files)..strict()): unknown keys usually fail validation and the Gateway will refuse to start.channels is .passthrough(): extension channels (matrix/zalo/nostr, etc.) can add custom keys, but most provider configs remain strict.env is .catchall(z.string()): you can put string env vars directly under env, and you can also use env.vars.openclaw.json.$include is resolved before schema validation and lets you split config across JSON5 files:
"$include": "./base.json5" or "$include": ["./a.json5", "./b.json5"]$include, sibling keys override included values.openclaw config set agents.defaults.workspace '"~/.openclaw/workspace"' --json
openclaw doctor
openclaw config set gateway.port 18789 --json
openclaw doctor
// ~/.openclaw/openclaw.json
{
"$include": ["./gateway.json5", "./channels/telegram.json5"],
}
Schema constraint: when
dmPolicy="open",allowFrommust include"*".
openclaw config set channels.telegram.dmPolicy '"open"' --json
openclaw config set channels.telegram.allowFrom '["*"]' --json
openclaw doctor
# Option A: write to config
openclaw config set channels.discord.token '"YOUR_DISCORD_BOT_TOKEN"' --json
# Option B: env var fallback (still recommend a channels.discord section exists)
# export DISCORD_BOT_TOKEN="..."
openclaw doctor
openclaw config set tools.web.search.enabled true --json
openclaw config set tools.web.search.provider '"brave"' --json
# Recommended: provide the key via env var (or write tools.web.search.apiKey)
# export BRAVE_API_KEY="..."
openclaw doctor
Load these when you need a field index or source locations:
references/openclaw-config-fields.md (root key index + key field lists with sources)references/schema-sources.md (how to locate schema + constraints in openclaw repo)scripts/openclaw-config-check.sh (print config path + run doctor)