





















@@ -72,26 +72,12 @@ See the [full reference](/gateway/configuration-reference) for every available f
7272OpenClaw only accepts configurations that fully match the schema. Unknown keys, malformed types, or invalid values cause the Gateway to **refuse to start**. The only root-level exception is `$schema` (string), so editors can attach JSON Schema metadata.
7373</Warning>
747475-Schema tooling notes:
76-77-- `openclaw config schema` prints the same JSON Schema family used by Control UI
78- and config validation.
79-- Treat that schema output as the canonical machine-readable contract for
80-`openclaw.json`; this overview and the configuration reference summarize it.
81-- Field `title` and `description` values are carried into the schema output for
82- editor and form tooling.
83-- Nested object, wildcard (`*`), and array-item (`[]`) entries inherit the same
84- docs metadata where matching field documentation exists.
85-- `anyOf` / `oneOf` / `allOf` composition branches inherit the same docs
86- metadata too, so union/intersection variants keep the same field help.
87-- `config.schema.lookup` returns one normalized config path with a shallow
88- schema node (`title`, `description`, `type`, `enum`, `const`, common bounds,
89- and similar validation fields), matched UI hint metadata, and immediate child
90- summaries for drill-down tooling.
91-- Runtime plugin/channel schemas are merged in when the gateway can load the
92- current manifest registry.
93-- `pnpm config:docs:check` detects drift between docs-facing config baseline
94- artifacts and the current schema surface.
75+`openclaw config schema` prints the canonical JSON Schema used by Control UI
76+and validation. `config.schema.lookup` fetches a single path-scoped node plus
77+child summaries for drill-down tooling. Field `title`/`description` docs metadata
78+carries through nested objects, wildcard (`*`), array-item (`[]`), and `anyOf`/
79+`oneOf`/`allOf` branches. Runtime plugin and channel schemas merge in when the
80+manifest registry is loaded.
95819682When validation fails:
9783@@ -100,23 +86,13 @@ When validation fails:
10086- Run `openclaw doctor` to see exact issues
10187- Run `openclaw doctor --fix` (or `--yes`) to apply repairs
10288103-The Gateway also keeps a trusted last-known-good copy after a successful startup. If
104-`openclaw.json` is later changed outside OpenClaw and no longer validates, startup
105-and hot reload preserve the broken file as a timestamped `.clobbered.*` snapshot,
106-restore the last-known-good copy, and log a loud warning with the recovery reason.
107-Startup read recovery also treats sharp size drops, missing config metadata, and a
108-missing `gateway.mode` as critical clobber signatures when the last-known-good
109-copy had those fields.
110-If a status/log line is accidentally prepended before an otherwise valid JSON
111-config, gateway startup and `openclaw doctor --fix` can strip the prefix,
112-preserve the polluted file as `.clobbered.*`, and continue with the recovered
113-JSON.
114-The next main-agent turn also receives a system-event warning telling it that the
115-config was restored and must not be blindly rewritten. Last-known-good promotion
116-is updated after validated startup and after accepted hot reloads, including
117-OpenClaw-owned config writes whose persisted file hash still matches the accepted
118-write. Promotion is skipped when the candidate contains redacted secret
119-placeholders such as `***` or shortened token values.
89+The Gateway keeps a trusted last-known-good copy after each successful startup.
90+If `openclaw.json` later fails validation (or drops `gateway.mode`, shrinks
91+sharply, or has a stray log line prepended), OpenClaw preserves the broken file
92+as `.clobbered.*`, restores the last-known-good copy, and logs the recovery
93+reason. The next agent turn also receives a system-event warning so the main
94+agent does not blindly rewrite the restored config. Promotion to last-known-good
95+is skipped when a candidate contains redacted secret placeholders such as `***`.
1209612197## Common tasks
12298@@ -583,75 +559,35 @@ source layout is ambiguous.
583559584560## Config RPC (programmatic updates)
585561586-<Note>
587-Control-plane write RPCs (`config.apply`, `config.patch`, `update.run`) are rate-limited to **3 requests per 60 seconds** per `deviceId+clientIp`. When limited, the RPC returns `UNAVAILABLE` with `retryAfterMs`.
588-</Note>
589-590-Safe/default flow:
591-592-- `config.schema.lookup`: inspect one path-scoped config subtree with a shallow
593- schema node, matched hint metadata, and immediate child summaries
594-- `config.get`: fetch the current snapshot + hash
595-- `config.patch`: preferred partial update path
596-- `config.apply`: full-config replacement only
597-- `update.run`: explicit self-update + restart
598-599-When you are not replacing the entire config, prefer `config.schema.lookup`
600-then `config.patch`.
601-602-<AccordionGroup>
603-<Accordion title="config.apply (full replace)">
604-Validates + writes the full config and restarts the Gateway in one step.
562+For tooling that writes config over the gateway API, prefer this flow:
605563606-<Warning>
607-`config.apply` replaces the **entire config**. Use `config.patch` for partial updates, or `openclaw config set` for single keys.
608-</Warning>
609-610-Params:
611-612-- `raw` (string) — JSON5 payload for the entire config
613-- `baseHash` (optional) — config hash from `config.get` (required when config exists)
614-- `sessionKey` (optional) — session key for the post-restart wake-up ping
615-- `note` (optional) — note for the restart sentinel
616-- `restartDelayMs` (optional) — delay before restart (default 2000)
617-618-Restart requests are coalesced while one is already pending/in-flight, and a 30-second cooldown applies between restart cycles.
619-620-```bash
621-openclaw gateway call config.get --params '{}' # capture payload.hash
622-openclaw gateway call config.apply --params '{
623- "raw": "{ agents: { defaults: { workspace: \"~/.openclaw/workspace\" } } }",
624- "baseHash": "<hash>",
625- "sessionKey": "agent:main:whatsapp:direct:+15555550123"
626-}'
627-```
564+- `config.schema.lookup` to inspect one subtree (shallow schema node + child
565+ summaries)
566+- `config.get` to fetch the current snapshot plus `hash`
567+- `config.patch` for partial updates (JSON merge patch: objects merge, `null`
568+ deletes, arrays replace)
569+- `config.apply` only when you intend to replace the entire config
570+- `update.run` for explicit self-update plus restart
628571629-</Accordion>
630-631-<Accordion title="config.patch (partial update)">
632-Merges a partial update into the existing config (JSON merge patch semantics):
633-634-- Objects merge recursively
635-- `null` deletes a key
636-- Arrays replace
637-638-Params:
639-640-- `raw` (string) — JSON5 with just the keys to change
641-- `baseHash` (required) — config hash from `config.get`
642-- `sessionKey`, `note`, `restartDelayMs` — same as `config.apply`
572+<Note>
573+Control-plane writes (`config.apply`, `config.patch`, `update.run`) are
574+rate-limited to 3 requests per 60 seconds per `deviceId+clientIp`. Restart
575+requests coalesce and then enforce a 30-second cooldown between restart cycles.
576+</Note>
643577644- Restart behavior matches `config.apply`: coalesced pending restarts plus a 30-second cooldown between restart cycles.
578+Example partial patch:
645579646-```bash
647-openclaw gateway call config.patch --params '{
648- "raw": "{ channels: { telegram: { groups: { \"*\": { requireMention: false } } } } }",
649- "baseHash": "<hash>"
650-}'
651-```
580+```bash
581+openclaw gateway call config.get --params '{}' # capture payload.hash
582+openclaw gateway call config.patch --params '{
583+ "raw": "{ channels: { telegram: { groups: { \"*\": { requireMention: false } } } } }",
584+ "baseHash": "<hash>"
585+}'
586+```
652587653-</Accordion>
654-</AccordionGroup>
588+Both `config.apply` and `config.patch` accept `raw`, `baseHash`, `sessionKey`,
589+`note`, and `restartDelayMs`. `baseHash` is required for `config.patch` and
590+recommended for `config.apply` when a config already exists.
655591656592## Environment variables
657593此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。